Browse code

major refactoring, improved file watching, changed site to public to support rack via pow (http://pow.cx) also implemented the basics of a 320 and up design refresh on the classic theme. This should make it great for mobile reading

Brandon Mathis authored on 15/05/2011 at 22:33:00
Showing 94 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+--ignore-dir=public
... ...
@@ -4,5 +4,7 @@ site
4 4
 .sass-cache
5 5
 test
6 6
 source/_stash
7
+source/stylesheets
8
+vendor/ruby
7 9
 vendor/ruby
8 10
 vendor/ruby
... ...
@@ -1,13 +1,13 @@
1 1
 source :rubygems
2 2
 
3
+gem 'rake'
3 4
 gem 'jekyll'
4 5
 gem 'rdiscount'
5 6
 gem 'RedCloth'
6
-gem "haml", "3.1.0.alpha.147"
7
-gem 'compass', '0.11.beta.5'
7
+gem 'haml', '>= 3.1'
8
+gem 'compass', '>= 0.11'
8 9
 gem 'rubypants'
9 10
 gem 'rb-fsevent'
10 11
 gem 'guard-shell'
11 12
 gem 'guard-livereload'
12 13
 gem 'serve'
13
-gem 'rake'
... ...
@@ -1,53 +1,48 @@
1 1
 GEM
2 2
   remote: http://rubygems.org/
3 3
   specs:
4
-    RedCloth (4.2.3)
5
-    activesupport (3.0.5)
6
-    addressable (2.2.4)
7
-    chunky_png (1.1.0)
4
+    RedCloth (4.2.7)
5
+    activesupport (3.0.7)
6
+    addressable (2.2.5)
7
+    chunky_png (1.2.0)
8 8
     classifier (1.3.3)
9 9
       fast-stemmer (>= 1.0.0)
10
-    compass (0.11.beta.5)
11
-      chunky_png (~> 1.1.0)
12
-      sass (>= 3.1.0.alpha.249)
13
-    configuration (1.2.0)
14
-    directory_watcher (1.3.2)
10
+    compass (0.11.1)
11
+      chunky_png (~> 1.1)
12
+      fssm (>= 0.2.7)
13
+      sass (~> 3.1)
14
+    directory_watcher (1.4.0)
15 15
     em-websocket (0.2.1)
16 16
       addressable (>= 2.1.1)
17 17
       eventmachine (>= 0.12.9)
18 18
     eventmachine (0.12.10)
19 19
     fast-stemmer (1.0.0)
20
-    guard (0.3.0)
21
-      open_gem (~> 1.4.2)
20
+    fssm (0.2.7)
21
+    guard (0.3.4)
22 22
       thor (~> 0.14.6)
23
-    guard-livereload (0.1.9)
23
+    guard-livereload (0.1.11)
24 24
       em-websocket (~> 0.2.0)
25 25
       guard (>= 0.2.2)
26
-      json (~> 1.4.6)
26
+      json (~> 1.5.1)
27 27
     guard-shell (0.1.1)
28 28
       guard (>= 0.2.0)
29
-    haml (3.1.0.alpha.147)
29
+    haml (3.1.1)
30 30
     i18n (0.4.2)
31 31
     jekyll (0.10.0)
32 32
       classifier (>= 1.3.1)
33 33
       directory_watcher (>= 1.1.1)
34 34
       liquid (>= 1.9.0)
35 35
       maruku (>= 0.5.9)
36
-    json (1.4.6)
37
-    launchy (0.3.7)
38
-      configuration (>= 0.0.5)
39
-      rake (>= 0.8.1)
36
+    json (1.5.1)
40 37
     liquid (2.2.2)
41 38
     maruku (0.6.0)
42 39
       syntax (>= 1.0.0)
43
-    open_gem (1.4.2)
44
-      launchy (~> 0.3.5)
45
-    rack (1.2.1)
40
+    rack (1.2.2)
46 41
     rake (0.8.7)
47 42
     rb-fsevent (0.4.0)
48 43
     rdiscount (1.6.8)
49 44
     rubypants (0.2.0)
50
-    sass (3.1.0.alpha.252)
45
+    sass (3.1.1)
51 46
     serve (1.0.0)
52 47
       activesupport (~> 3.0.1)
53 48
       i18n (~> 0.4.1)
... ...
@@ -55,17 +50,17 @@ GEM
55 55
       tzinfo (~> 0.3.23)
56 56
     syntax (1.0.0)
57 57
     thor (0.14.6)
58
-    tzinfo (0.3.24)
58
+    tzinfo (0.3.27)
59 59
 
60 60
 PLATFORMS
61 61
   ruby
62 62
 
63 63
 DEPENDENCIES
64 64
   RedCloth
65
-  compass (= 0.11.beta.5)
65
+  compass (>= 0.11)
66 66
   guard-livereload
67 67
   guard-shell
68
-  haml (= 3.1.0.alpha.147)
68
+  haml (>= 3.1)
69 69
   jekyll
70 70
   rake
71 71
   rb-fsevent
... ...
@@ -1,9 +1,4 @@
1
-guard 'shell' do
2
-  watch(/source\/sass\/(.*)\.s[ac]ss/) {|m| `compass compile` }
3
-  watch(%r{public/.+\.(js|html)}) {|m| `compass compile` }
4
-end
5
-
6 1
 guard 'livereload', :api_version => '1.6' do
7
-  watch(%r{public/.+\.(css)})
8
-  watch(%r{public/.+\.(js|html)})
2
+  watch(/public\/stylesheets\/(.*)\.css/);
3
+  watch(/public\/(.*)\.(js|html|png|jpg|gif|jpeg|ttf|otf|woff|svg)/i);
9 4
 end
... ...
@@ -104,7 +104,7 @@ end
104 104
 
105 105
 desc "Watch the site and regenerate when it changes"
106 106
 task :watch do
107
-  system "trap 'kill $jekyllPid $guardPid' Exit; guard & guardPid=$!; jekyll --auto & jekyllPid=$!; wait"
107
+  system "trap 'kill $jekyllPid $guardPid $compassPid' Exit; jekyll --auto & jekyllPid=$!; sleep 0.5; compass watch & compassPid=$!; guard & guardPid=$!; wait"
108 108
 end
109 109
 
110 110
 desc "generate and deploy website via rsync"
... ...
@@ -1,14 +1,14 @@
1 1
 source: source
2 2
 destination: public
3
-exclude: sass, *.scss
4 3
 markdown: rdiscount
5
-pygments: true
4
+pygments: false
6 5
 permalink: pretty
7 6
 
8 7
 url: http://yoursite.com
9 8
 title: My Octopress Blog
10 9
 author: Your Name
11 10
 email: you@domain.com #Add your email (optional) for the atom feed
11
+simple_search: http://google.com/search
12 12
 
13 13
 recent_posts: 10
14 14
 
... ...
@@ -19,10 +19,9 @@ show_replies: false
19 19
 delicious_user:
20 20
 delicious_count: 3
21 21
 
22
-pinboard_user: imathis
22
+pinboard_user: designenthusiast
23 23
 pinboard_count: 3
24 24
 
25
-disqus_short_name:
25
+disqus_short_name: imathis
26 26
 
27
-google_custom_search_id:
28 27
 google_analytics_tracking_id:
... ...
@@ -15,6 +15,11 @@ module OctopressFilters
15 15
       $1+url+$3
16 16
     end
17 17
   end
18
+  def search_url(input)
19
+    input.gsub /(http:\/\/)(\S+)/ do
20
+      $2
21
+    end
22
+  end
18 23
   def smart_quotes(input)
19 24
     require 'rubypants'
20 25
     RubyPants.new(input).to_html
... ...
@@ -23,10 +28,14 @@ module OctopressFilters
23 23
     require 'titlecase'
24 24
     input.titlecase
25 25
   end
26
-  def ordinalize(date)
26
+  def datetime(date)
27 27
     if date.class == String
28 28
       date = Time.parse(date)
29 29
     end
30
+    date
31
+  end
32
+  def ordinalize(date)
33
+    date = datetime(date)
30 34
     "#{date.strftime('%B')} #{ordinal(date.strftime('%e').to_i)}, #{date.strftime('%Y')}"
31 35
   end
32 36
   def ordinal(number)
... ...
@@ -44,7 +44,6 @@ module Jekyll
44 44
     priority :low
45 45
 
46 46
     # Domain that you are generating the sitemap for - update this to match your site.
47
-    BASE_URL = 'http://recursive-design.com'
48 47
 
49 48
     # Generates the sitemap.xml file.
50 49
     #
... ...
@@ -82,6 +81,8 @@ module Jekyll
82 82
     def generate_content(site)
83 83
       result   = ''
84 84
 
85
+      base_url = site.config['url']
86
+
85 87
       # First, try to find any stand-alone pages.
86 88
       site.pages.each{ |page|
87 89
         path     = page.subfolder + '/' + page.name
... ...
@@ -93,14 +94,14 @@ module Jekyll
93 93
   		  end
94 94
 
95 95
         unless path =~/error/
96
-          result += entry(path, mod_date)
96
+          result += entry(base_url, path, mod_date)
97 97
         end
98 98
       }
99 99
 
100 100
       # Next, find all the posts.
101 101
       posts = site.site_payload['site']['posts']
102 102
       for post in posts do
103
-        result += entry(post.id, post.date)
103
+        result += entry(base_url, post.id, post.date)
104 104
       end
105 105
 
106 106
     	result
... ...
@@ -115,12 +116,12 @@ module Jekyll
115 115
     #
116 116
     #  +path+ is the URL path to the page.
117 117
     #  +date+ is the date the file was modified (in the case of regular pages), or published (for blog posts).
118
-    def entry(path, date)
118
+    def entry(base_url, path, date)
119 119
         # Force extensions to .html from markdown, textile.
120 120
         path = path.gsub(/\.(markdown|textile)$/i, '.html')
121 121
       "
122 122
   <url>
123
-      <loc>#{BASE_URL}#{path}</loc>
123
+      <loc>#{base_url}#{path}</loc>
124 124
       <lastmod>#{date.strftime("%Y-%m-%d")}</lastmod>
125 125
   </url>"
126 126
     end
127 127
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+system "sleep 0.5; compass compile --css-dir source/stylesheets"
... ...
@@ -3,7 +3,7 @@ project_type = :stand_alone
3 3
 # Set this to the root of your project when deployed:
4 4
 http_path = "/"
5 5
 css_dir = "public/stylesheets"
6
-sass_dir = "source/sass"
6
+sass_dir = "sass"
7 7
 images_dir = "source/images"
8 8
 http_images_dir = "images"
9 9
 fonts_dir = "source/fonts"
... ...
@@ -1,49 +1,62 @@
1 1
 <!DOCTYPE html>
2
-<html>
2
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
+<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
3 7
 <head>
8
+  <meta charset="utf-8">
9
+
4 10
   <title>Hello World! I'm Octopress! - My Octopress Blog</title>
5
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
11
+  <meta name="author" content="Your Name">
6 12
   
13
+
14
+  <!-- http://t.co/dKP3o1e -->
15
+  <meta name="HandheldFriendly" content="True">
16
+  <meta name="MobileOptimized" content="320">
17
+  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
+
7 19
   
20
+
8 21
   <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
9
-  <script src="/javascripts/mootools-yui-compressed.js" type="text/javascript"></script>
10
-  <script src="/javascripts/mootools-more-1.3.1.1.js" type="text/javascript"></script>
11
-  <script src="/javascripts/octopress.js" type="text/javascript"></script>
12
-  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
-  <meta name="viewport" content="initial-scale=1.0 width=device-width">
14
-  
15
-    <script>
16
-      var twitter_user = "imathis";
17
-      var show_replies = false;
18
-      var tweet_count = 3;
19
-    </script>
20
-    <script src="/javascripts/twitter.js" type="text/javascript"></script>
21
-  
22
+  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
+  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
+  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
22 25
   
23 26
   <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
24 27
 </head>
25 28
 
26
-<body id="">
29
+<body  >
27 30
   <header><div><h1><a href="/">My Octopress Blog</a></h1>
28
-
29 31
 </div></header>
30
-  <nav id="nav"><div><ul>
32
+  <nav><div><div>
33
+  <a href="/atom.xml">Subscribe</a>
34
+  <form action="http://google.com/search" method="get">
35
+    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
+    <input type="hidden" name="q" value="site:yoursite.com" />
37
+  </form>
38
+</div>
39
+<ul>
31 40
   <li><a href="/">Blog</a></li>
32 41
   <li><a href="/about/">About</a></li>
33
-  <li class="subscribe"><a href="/atom.xml">Subscribe</a></li>
34 42
 </ul>
35 43
 </div></nav>
36
-  <div id="page">
44
+  <div>
37 45
     <div>
38
-      <div id="main"><article><article>
46
+      <div id="articles"><article>
39 47
   <header>
48
+  <h1><a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a></h1>
40 49
   <p>
41
-    <time>November 13<span>th</span>, 2009</time>
42 50
     
43
-      <span class="byline"><em>by</em> <span class="author">Your Name</span></span>
51
+      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
+    
53
+    
54
+      <time datetime="2009-11-13 00:00:00 -0500" pubdate>November 13<span>th</span>, 2009</time>
55
+    
56
+    
57
+      <time class="updated" datetime="2010-03-10 00:00:00 -0500" pubdate>Updated March 10<span>th</span>, 2010</time>
44 58
     
45 59
   </p>
46
-  <h1><a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a></h1>
47 60
 </header>
48 61
 
49 62
 <div class="entry"><p><strong>Octopress is a blogging framework designed for hackers</strong>, based on <a href="http://github.com/mojombo/jekyll">Jekyll</a> the blog aware static site generator powering <a href="http://pages.github.com/">Github pages</a>.
... ...
@@ -59,16 +72,26 @@ If you don&#8217;t know what Jekyll is, <a href="http://metajack.im/2009/01/23/b
59 59
 </div>
60 60
 
61 61
 
62
-<p class="updated"><em>updated</em> <time>March 10<span>th</span>, 2010</time></p>
63
-
62
+  
63
+    <div id="disqus_thread"><script type="text/javascript">
64
+  var disqus_url = "http://yoursite.com/2009/11/13/hello-world/";
65
+</script>
66
+<noscript>
67
+  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
68
+</noscript>
69
+<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
70
+</div>
64 71
   
65 72
 </article>
66
-</article></div>
67
-      <aside><h4>About Me</h4>
68
-<p> Yo everybody! </p>
73
+</div>
74
+      
75
+        <aside><section>
76
+  <h1>About Me</h1>
77
+  <p>Hi, I'm Octopress!</p>
78
+</section>
69 79
 
70 80
 <section>
71
-  <h4>Recent Posts</h4>
81
+  <h1>Recent Posts</h1>
72 82
   <ul id="recent_posts">
73 83
     
74 84
       <li class="post">
... ...
@@ -90,21 +113,30 @@ If you don&#8217;t know what Jekyll is, <a href="http://metajack.im/2009/01/23/b
90 90
   </section>
91 91
 
92 92
 
93
-  <section><h4>On Twitter</h4>
93
+  <section><h1>Latest Tweets</h1>
94 94
 <ul id="tweets">
95 95
   Status updating...
96 96
 </ul>
97
-<p>Follow <a href="http://twitter.com/#{page.twitter_user}">@imathis</a></p>
97
+<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
98
+
99
+  <script>
100
+    var twitter_user = "imathis";
101
+    var show_replies = false;
102
+    var tweet_count = 3;
103
+  </script>
104
+  <script src="/javascripts/twitter.js" type="text/javascript"></script>
105
+
98 106
 </section>
99 107
 
100 108
 
101 109
 
102
-  <section><h4>My Pinboard</h4>
110
+  <section><h1>My Pinboard</h1>
103 111
 <ul id="pinboard_linkroll">Fetching linkroll...</ul>
104
-<p><a href="http://pinboard.in/u:imathis">My Pinboard Bookmarks &raquo;</a></p>
112
+<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
105 113
 </section>
106 114
 
107 115
 </aside>
116
+      
108 117
     </div>
109 118
   </div>
110 119
   <footer><div><p>
... ...
@@ -113,11 +145,16 @@ If you don&#8217;t know what Jekyll is, <a href="http://metajack.im/2009/01/23/b
113 113
 </p>
114 114
 
115 115
   <script language="javascript">
116
-    var pinboard_user = "imathis";
116
+    var pinboard_user = "designenthusiast";
117 117
     var pinboard_count = "3";
118 118
   </script>
119 119
   <script language="javascript" src="/javascripts/pinboard.js"></script>
120 120
 
121 121
 </div></footer>
122
+  <!--[if (lt IE 9) & (!IEMobile)]>
123
+  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
124
+  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
125
+  <script src="javascripts/libs/respond.min.js"></script>
126
+  <![endif]-->
122 127
 </body>
123 128
 </html>
... ...
@@ -1,65 +1,86 @@
1 1
 <!DOCTYPE html>
2
-<html>
2
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
+<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
3 7
 <head>
8
+  <meta charset="utf-8">
9
+
4 10
   <title>Test Post - My Octopress Blog</title>
5
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
11
+  <meta name="author" content="Your Name">
6 12
   
13
+
14
+  <!-- http://t.co/dKP3o1e -->
15
+  <meta name="HandheldFriendly" content="True">
16
+  <meta name="MobileOptimized" content="320">
17
+  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
+
7 19
   
20
+
8 21
   <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
9
-  <script src="/javascripts/mootools-yui-compressed.js" type="text/javascript"></script>
10
-  <script src="/javascripts/mootools-more-1.3.1.1.js" type="text/javascript"></script>
11
-  <script src="/javascripts/octopress.js" type="text/javascript"></script>
12
-  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
-  <meta name="viewport" content="initial-scale=1.0 width=device-width">
14
-  
15
-    <script>
16
-      var twitter_user = "imathis";
17
-      var show_replies = false;
18
-      var tweet_count = 3;
19
-    </script>
20
-    <script src="/javascripts/twitter.js" type="text/javascript"></script>
21
-  
22
+  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
+  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
+  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
22 25
   
23 26
   <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
24 27
 </head>
25 28
 
26
-<body id="">
29
+<body  >
27 30
   <header><div><h1><a href="/">My Octopress Blog</a></h1>
28
-
29 31
 </div></header>
30
-  <nav id="nav"><div><ul>
32
+  <nav><div><div>
33
+  <a href="/atom.xml">Subscribe</a>
34
+  <form action="http://google.com/search" method="get">
35
+    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
+    <input type="hidden" name="q" value="site:yoursite.com" />
37
+  </form>
38
+</div>
39
+<ul>
31 40
   <li><a href="/">Blog</a></li>
32 41
   <li><a href="/about/">About</a></li>
33
-  <li class="subscribe"><a href="/atom.xml">Subscribe</a></li>
34 42
 </ul>
35 43
 </div></nav>
36
-  <div id="page">
44
+  <div>
37 45
     <div>
38
-      <div id="main"><article><article>
46
+      <div id="articles"><article>
39 47
   <header>
48
+  <h1><a href="/2011/03/14/test-post/">Test Post</a></h1>
40 49
   <p>
41
-    <time>March 14<span>th</span>, 2011</time>
42 50
     
43
-      <span class="byline"><em>by</em> <span class="author">Your Name</span></span>
51
+      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
+    
53
+    
54
+      <time datetime="2011-03-14 00:00:00 -0400" pubdate>March 14<span>th</span>, 2011</time>
55
+    
44 56
     
45 57
   </p>
46
-  <h1><a href="/2011/03/14/test-post/">Test Post</a></h1>
47 58
 </header>
48 59
 
49 60
 <div class="entry"><p>This is a test!</p>
50 61
 </div>
51 62
 
52 63
 
53
-
54
-
64
+  
65
+    <div id="disqus_thread"><script type="text/javascript">
66
+  var disqus_url = "http://yoursite.com/2011/03/14/test-post/";
67
+</script>
68
+<noscript>
69
+  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
70
+</noscript>
71
+<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
72
+</div>
55 73
   
56 74
 </article>
57
-</article></div>
58
-      <aside><h4>About Me</h4>
59
-<p> Yo everybody! </p>
75
+</div>
76
+      
77
+        <aside><section>
78
+  <h1>About Me</h1>
79
+  <p>Hi, I'm Octopress!</p>
80
+</section>
60 81
 
61 82
 <section>
62
-  <h4>Recent Posts</h4>
83
+  <h1>Recent Posts</h1>
63 84
   <ul id="recent_posts">
64 85
     
65 86
       <li class="post">
... ...
@@ -81,21 +102,30 @@
81 81
   </section>
82 82
 
83 83
 
84
-  <section><h4>On Twitter</h4>
84
+  <section><h1>Latest Tweets</h1>
85 85
 <ul id="tweets">
86 86
   Status updating...
87 87
 </ul>
88
-<p>Follow <a href="http://twitter.com/#{page.twitter_user}">@imathis</a></p>
88
+<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
89
+
90
+  <script>
91
+    var twitter_user = "imathis";
92
+    var show_replies = false;
93
+    var tweet_count = 3;
94
+  </script>
95
+  <script src="/javascripts/twitter.js" type="text/javascript"></script>
96
+
89 97
 </section>
90 98
 
91 99
 
92 100
 
93
-  <section><h4>My Pinboard</h4>
101
+  <section><h1>My Pinboard</h1>
94 102
 <ul id="pinboard_linkroll">Fetching linkroll...</ul>
95
-<p><a href="http://pinboard.in/u:imathis">My Pinboard Bookmarks &raquo;</a></p>
103
+<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
96 104
 </section>
97 105
 
98 106
 </aside>
107
+      
99 108
     </div>
100 109
   </div>
101 110
   <footer><div><p>
... ...
@@ -104,11 +134,16 @@
104 104
 </p>
105 105
 
106 106
   <script language="javascript">
107
-    var pinboard_user = "imathis";
107
+    var pinboard_user = "designenthusiast";
108 108
     var pinboard_count = "3";
109 109
   </script>
110 110
   <script language="javascript" src="/javascripts/pinboard.js"></script>
111 111
 
112 112
 </div></footer>
113
+  <!--[if (lt IE 9) & (!IEMobile)]>
114
+  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
115
+  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
116
+  <script src="javascripts/libs/respond.min.js"></script>
117
+  <![endif]-->
113 118
 </body>
114 119
 </html>
... ...
@@ -1,49 +1,60 @@
1 1
 <!DOCTYPE html>
2
-<html>
2
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
+<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
3 7
 <head>
8
+  <meta charset="utf-8">
9
+
4 10
   <title>Test of Typography - My Octopress Blog</title>
5
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
11
+  <meta name="author" content="Your Name">
6 12
   
13
+
14
+  <!-- http://t.co/dKP3o1e -->
15
+  <meta name="HandheldFriendly" content="True">
16
+  <meta name="MobileOptimized" content="320">
17
+  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
+
7 19
   
20
+
8 21
   <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
9
-  <script src="/javascripts/mootools-yui-compressed.js" type="text/javascript"></script>
10
-  <script src="/javascripts/mootools-more-1.3.1.1.js" type="text/javascript"></script>
11
-  <script src="/javascripts/octopress.js" type="text/javascript"></script>
12
-  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
-  <meta name="viewport" content="initial-scale=1.0 width=device-width">
14
-  
15
-    <script>
16
-      var twitter_user = "imathis";
17
-      var show_replies = false;
18
-      var tweet_count = 3;
19
-    </script>
20
-    <script src="/javascripts/twitter.js" type="text/javascript"></script>
21
-  
22
+  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
+  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
+  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
22 25
   
23 26
   <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
24 27
 </head>
25 28
 
26
-<body id="">
29
+<body  >
27 30
   <header><div><h1><a href="/">My Octopress Blog</a></h1>
28
-
29 31
 </div></header>
30
-  <nav id="nav"><div><ul>
32
+  <nav><div><div>
33
+  <a href="/atom.xml">Subscribe</a>
34
+  <form action="http://google.com/search" method="get">
35
+    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
+    <input type="hidden" name="q" value="site:yoursite.com" />
37
+  </form>
38
+</div>
39
+<ul>
31 40
   <li><a href="/">Blog</a></li>
32 41
   <li><a href="/about/">About</a></li>
33
-  <li class="subscribe"><a href="/atom.xml">Subscribe</a></li>
34 42
 </ul>
35 43
 </div></nav>
36
-  <div id="page">
44
+  <div>
37 45
     <div>
38
-      <div id="main"><article><article>
46
+      <div id="articles"><article>
39 47
   <header>
48
+  <h1><a href="/2011/04/07/test-of-typography/">Test of Typography</a></h1>
40 49
   <p>
41
-    <time>April 7<span>th</span>, 2011</time>
42 50
     
43
-      <span class="byline"><em>by</em> <span class="author">Your Name</span></span>
51
+      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
+    
53
+    
54
+      <time datetime="2011-04-07 19:17:00 -0400" pubdate>April 7<span>th</span>, 2011</time>
55
+    
44 56
     
45 57
   </p>
46
-  <h1><a href="/2011/04/07/test-of-typography/">Test of Typography</a></h1>
47 58
 </header>
48 59
 
49 60
 <div class="entry"><p>In the past I&#8217;ve always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten <em>professionally</em> printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design.</p>
... ...
@@ -100,16 +111,26 @@ people I work for I&#8217;ve never met in-person.</p>
100 100
 </div>
101 101
 
102 102
 
103
-
104
-
103
+  
104
+    <div id="disqus_thread"><script type="text/javascript">
105
+  var disqus_url = "http://yoursite.com/2011/04/07/test-of-typography/";
106
+</script>
107
+<noscript>
108
+  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
109
+</noscript>
110
+<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
111
+</div>
105 112
   
106 113
 </article>
107
-</article></div>
108
-      <aside><h4>About Me</h4>
109
-<p> Yo everybody! </p>
114
+</div>
115
+      
116
+        <aside><section>
117
+  <h1>About Me</h1>
118
+  <p>Hi, I'm Octopress!</p>
119
+</section>
110 120
 
111 121
 <section>
112
-  <h4>Recent Posts</h4>
122
+  <h1>Recent Posts</h1>
113 123
   <ul id="recent_posts">
114 124
     
115 125
       <li class="post">
... ...
@@ -131,21 +152,30 @@ people I work for I&#8217;ve never met in-person.</p>
131 131
   </section>
132 132
 
133 133
 
134
-  <section><h4>On Twitter</h4>
134
+  <section><h1>Latest Tweets</h1>
135 135
 <ul id="tweets">
136 136
   Status updating...
137 137
 </ul>
138
-<p>Follow <a href="http://twitter.com/#{page.twitter_user}">@imathis</a></p>
138
+<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
139
+
140
+  <script>
141
+    var twitter_user = "imathis";
142
+    var show_replies = false;
143
+    var tweet_count = 3;
144
+  </script>
145
+  <script src="/javascripts/twitter.js" type="text/javascript"></script>
146
+
139 147
 </section>
140 148
 
141 149
 
142 150
 
143
-  <section><h4>My Pinboard</h4>
151
+  <section><h1>My Pinboard</h1>
144 152
 <ul id="pinboard_linkroll">Fetching linkroll...</ul>
145
-<p><a href="http://pinboard.in/u:imathis">My Pinboard Bookmarks &raquo;</a></p>
153
+<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
146 154
 </section>
147 155
 
148 156
 </aside>
157
+      
149 158
     </div>
150 159
   </div>
151 160
   <footer><div><p>
... ...
@@ -154,11 +184,16 @@ people I work for I&#8217;ve never met in-person.</p>
154 154
 </p>
155 155
 
156 156
   <script language="javascript">
157
-    var pinboard_user = "imathis";
157
+    var pinboard_user = "designenthusiast";
158 158
     var pinboard_count = "3";
159 159
   </script>
160 160
   <script language="javascript" src="/javascripts/pinboard.js"></script>
161 161
 
162 162
 </div></footer>
163
+  <!--[if (lt IE 9) & (!IEMobile)]>
164
+  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
165
+  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
166
+  <script src="javascripts/libs/respond.min.js"></script>
167
+  <![endif]-->
163 168
 </body>
164 169
 </html>
... ...
@@ -1,54 +1,91 @@
1 1
 <!DOCTYPE html>
2
-<html>
2
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
+<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
3 7
 <head>
8
+  <meta charset="utf-8">
9
+
4 10
   <title>About Me - My Octopress Blog</title>
5
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
11
+  <meta name="author" content="Your Name">
6 12
   
13
+
14
+  <!-- http://t.co/dKP3o1e -->
15
+  <meta name="HandheldFriendly" content="True">
16
+  <meta name="MobileOptimized" content="320">
17
+  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
+
7 19
   
20
+
8 21
   <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
9
-  <script src="/javascripts/mootools-yui-compressed.js" type="text/javascript"></script>
10
-  <script src="/javascripts/mootools-more-1.3.1.1.js" type="text/javascript"></script>
11
-  <script src="/javascripts/octopress.js" type="text/javascript"></script>
12
-  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
-  <meta name="viewport" content="initial-scale=1.0 width=device-width">
14
-  
15
-    <script>
16
-      var twitter_user = "imathis";
17
-      var show_replies = false;
18
-      var tweet_count = 3;
19
-    </script>
20
-    <script src="/javascripts/twitter.js" type="text/javascript"></script>
21
-  
22
+  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
+  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
+  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
22 25
   
23 26
   <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
24 27
 </head>
25 28
 
26
-<body id="">
29
+<body  >
27 30
   <header><div><h1><a href="/">My Octopress Blog</a></h1>
28
-
29 31
 </div></header>
30
-  <nav id="nav"><div><ul>
32
+  <nav><div><div>
33
+  <a href="/atom.xml">Subscribe</a>
34
+  <form action="http://google.com/search" method="get">
35
+    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
+    <input type="hidden" name="q" value="site:yoursite.com" />
37
+  </form>
38
+</div>
39
+<ul>
31 40
   <li><a href="/">Blog</a></li>
32 41
   <li><a href="/about/">About</a></li>
33
-  <li class="subscribe"><a href="/atom.xml">Subscribe</a></li>
34 42
 </ul>
35 43
 </div></nav>
36
-  <div id="page">
44
+  <div>
37 45
     <div>
38
-      <div id="main"><article><!-- use the :mardown filter if you want to write pages with Markdown -->
39
-<h1>About Me</h1>
46
+      <div id="articles"><article>
47
+  <header>
48
+  <h1><a href="/about/">About Me</a></h1>
49
+  <p>
50
+    
51
+      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
52
+    
53
+    
54
+      <time datetime="2011-05-14 00:00:00 -0400" pubdate>May 14<span>th</span>, 2011</time>
55
+    
56
+    
57
+  </p>
58
+</header>
40 59
 
60
+<div class="entry"><!-- use the :mardown filter if you want to write pages with Markdown -->
41 61
 <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum.</p>
42 62
 
43 63
 <p>Ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.</p>
44 64
 
45 65
 <p>Dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent.</p>
46
-</article></div>
47
-      <aside><h4>About Me</h4>
48
-<p> Yo everybody! </p>
66
+</div>
67
+
68
+
69
+  
70
+    <div id="disqus_thread"><script type="text/javascript">
71
+  var disqus_url = "http://yoursite.com/about/";
72
+</script>
73
+<noscript>
74
+  <a href="http://imathis.disqus.com/?url=ref">View the discussion thread</a>
75
+</noscript>
76
+<script type="text/javascript" src="http://disqus.com/forums/imathis/embed.js"></script>
77
+</div>
78
+  
79
+</article>
80
+</div>
81
+      
82
+        <aside><section>
83
+  <h1>About Me</h1>
84
+  <p>Hi, I'm Octopress!</p>
85
+</section>
49 86
 
50 87
 <section>
51
-  <h4>Recent Posts</h4>
88
+  <h1>Recent Posts</h1>
52 89
   <ul id="recent_posts">
53 90
     
54 91
       <li class="post">
... ...
@@ -70,21 +107,30 @@
70 70
   </section>
71 71
 
72 72
 
73
-  <section><h4>On Twitter</h4>
73
+  <section><h1>Latest Tweets</h1>
74 74
 <ul id="tweets">
75 75
   Status updating...
76 76
 </ul>
77
-<p>Follow <a href="http://twitter.com/#{page.twitter_user}">@imathis</a></p>
77
+<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
78
+
79
+  <script>
80
+    var twitter_user = "imathis";
81
+    var show_replies = false;
82
+    var tweet_count = 3;
83
+  </script>
84
+  <script src="/javascripts/twitter.js" type="text/javascript"></script>
85
+
78 86
 </section>
79 87
 
80 88
 
81 89
 
82
-  <section><h4>My Pinboard</h4>
90
+  <section><h1>My Pinboard</h1>
83 91
 <ul id="pinboard_linkroll">Fetching linkroll...</ul>
84
-<p><a href="http://pinboard.in/u:imathis">My Pinboard Bookmarks &raquo;</a></p>
92
+<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
85 93
 </section>
86 94
 
87 95
 </aside>
96
+      
88 97
     </div>
89 98
   </div>
90 99
   <footer><div><p>
... ...
@@ -93,11 +139,16 @@
93 93
 </p>
94 94
 
95 95
   <script language="javascript">
96
-    var pinboard_user = "imathis";
96
+    var pinboard_user = "designenthusiast";
97 97
     var pinboard_count = "3";
98 98
   </script>
99 99
   <script language="javascript" src="/javascripts/pinboard.js"></script>
100 100
 
101 101
 </div></footer>
102
+  <!--[if (lt IE 9) & (!IEMobile)]>
103
+  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
104
+  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
105
+  <script src="javascripts/libs/respond.min.js"></script>
106
+  <![endif]-->
102 107
 </body>
103 108
 </html>
... ...
@@ -4,7 +4,7 @@
4 4
   <title></title>
5 5
   <link href="http://yoursite.com/atom.xml" rel="self"/>
6 6
   <link href="http://yoursite.com/"/>
7
-  <updated>2011-04-11T16:23:20-05:00</updated>
7
+  <updated>2011-05-15T18:13:17-04:00</updated>
8 8
   <id>http://yoursite.com/</id>
9 9
   <author>
10 10
     <name>Your Name</name>
... ...
@@ -17,7 +17,7 @@
17 17
   <entry>
18 18
     <title>Test of Typography</title>
19 19
     <link href="http://yoursite.com/2011/04/07/test-of-typography/"/>
20
-    <updated>2011-04-07T19:17:00-05:00</updated>
20
+    <updated>2011-04-07T19:17:00-04:00</updated>
21 21
     <id>http://yoursite.com/2011/04/07/test-of-typography</id>
22 22
     <content type="html">&lt;p&gt;In the past I've always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten &lt;em&gt;professionally&lt;/em&gt; printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design.&lt;/p&gt;
23 23
 
... ...
@@ -76,7 +76,7 @@ people I work for I've never met in-person.&lt;/p&gt;
76 76
   <entry>
77 77
     <title>Test Post</title>
78 78
     <link href="http://yoursite.com/2011/03/14/test-post/"/>
79
-    <updated>2011-03-14T00:00:00-05:00</updated>
79
+    <updated>2011-03-14T00:00:00-04:00</updated>
80 80
     <id>http://yoursite.com/2011/03/14/test-post</id>
81 81
     <content type="html">&lt;p&gt;This is a test!&lt;/p&gt;
82 82
 </content>
... ...
@@ -85,7 +85,7 @@ people I work for I've never met in-person.&lt;/p&gt;
85 85
   <entry>
86 86
     <title>Hello World! I'm Octopress!</title>
87 87
     <link href="http://yoursite.com/2009/11/13/hello-world/"/>
88
-    <updated>2009-11-13T00:00:00-06:00</updated>
88
+    <updated>2009-11-13T00:00:00-05:00</updated>
89 89
     <id>http://yoursite.com/2009/11/13/hello-world</id>
90 90
     <content type="html">&lt;p&gt;&lt;strong&gt;Octopress is a blogging framework designed for hackers&lt;/strong&gt;, based on &lt;a href=&quot;http://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt; the blog aware static site generator powering &lt;a href=&quot;http://pages.github.com/&quot;&gt;Github pages&lt;/a&gt;.
91 91
 If you don't know what Jekyll is, &lt;a href=&quot;http://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/&quot;&gt;Jack Moffitt&lt;/a&gt; wrote a good summary:&lt;/p&gt;
92 92
Binary files a/public/images/rss.png and b/public/images/rss.png differ
93 93
new file mode 100644
94 94
Binary files /dev/null and b/public/images/search.png differ
95 95
deleted file mode 100644
96 96
Binary files a/public/images/search_bg.png and /dev/null differ
... ...
@@ -1,52 +1,63 @@
1 1
 <!DOCTYPE html>
2
-<html>
2
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
+<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
3 7
 <head>
8
+  <meta charset="utf-8">
9
+
4 10
   <title>Octopress - My Octopress Blog</title>
5
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
11
+  <meta name="author" content="Your Name">
6 12
   
13
+
14
+  <!-- http://t.co/dKP3o1e -->
15
+  <meta name="HandheldFriendly" content="True">
16
+  <meta name="MobileOptimized" content="320">
17
+  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
18
+
7 19
   
20
+
8 21
   <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
9
-  <script src="/javascripts/mootools-yui-compressed.js" type="text/javascript"></script>
10
-  <script src="/javascripts/mootools-more-1.3.1.1.js" type="text/javascript"></script>
11
-  <script src="/javascripts/octopress.js" type="text/javascript"></script>
12
-  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
-  <meta name="viewport" content="initial-scale=1.0 width=device-width">
14
-  
15
-    <script>
16
-      var twitter_user = "imathis";
17
-      var show_replies = false;
18
-      var tweet_count = 3;
19
-    </script>
20
-    <script src="/javascripts/twitter.js" type="text/javascript"></script>
21
-  
22
+  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
23
+  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
24
+  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
22 25
   
23 26
   <link href="/atom.xml" rel="alternate" title="My Octopress Blog" type="application/atom+xml"/>
24 27
 </head>
25 28
 
26
-<body id="">
29
+<body  >
27 30
   <header><div><h1><a href="/">My Octopress Blog</a></h1>
28
-
29 31
 </div></header>
30
-  <nav id="nav"><div><ul>
32
+  <nav><div><div>
33
+  <a href="/atom.xml">Subscribe</a>
34
+  <form action="http://google.com/search" method="get">
35
+    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
36
+    <input type="hidden" name="q" value="site:yoursite.com" />
37
+  </form>
38
+</div>
39
+<ul>
31 40
   <li><a href="/">Blog</a></li>
32 41
   <li><a href="/about/">About</a></li>
33
-  <li class="subscribe"><a href="/atom.xml">Subscribe</a></li>
34 42
 </ul>
35 43
 </div></nav>
36
-  <div id="page">
44
+  <div>
37 45
     <div>
38
-      <div id="main"><article>
46
+      <div id="articles">
39 47
 
40 48
 
41 49
   <article>
42 50
     <header>
51
+  <h1><a href="/2011/04/07/test-of-typography/">Test of Typography</a></h1>
43 52
   <p>
44
-    <time>April 7<span>th</span>, 2011</time>
45 53
     
46
-      <span class="byline"><em>by</em> <span class="author">Your Name</span></span>
54
+      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
55
+    
56
+    
57
+      <time datetime="2011-04-07 19:17:00 -0400" pubdate>April 7<span>th</span>, 2011</time>
58
+    
47 59
     
48 60
   </p>
49
-  <h1><a href="/2011/04/07/test-of-typography/">Test of Typography</a></h1>
50 61
 </header>
51 62
 
52 63
 <div class="entry"><p>In the past I&#8217;ve always designed my own business cards, printed them on expensive card stock, and hand-cut them with an X-Acto knife. My cards were way nicer than those my clients had gotten <em>professionally</em> printed with bubbly ink, no-bleed designs, and cheap paper. Though I put tremendous care into my cards, I never was happy with the design.</p>
... ...
@@ -61,42 +72,46 @@ people I work for I&#8217;ve never met in-person.</p>
61 61
 <p><a href='/2011/04/07/test-of-typography/'>Continue reading &raquo;</a></p></div>
62 62
 
63 63
 
64
-
65
-
66 64
   </article>
67 65
 
68 66
 
69 67
 
70 68
   <article>
71 69
     <header>
70
+  <h1><a href="/2011/03/14/test-post/">Test Post</a></h1>
72 71
   <p>
73
-    <time>March 14<span>th</span>, 2011</time>
74 72
     
75
-      <span class="byline"><em>by</em> <span class="author">Your Name</span></span>
73
+      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
74
+    
75
+    
76
+      <time datetime="2011-03-14 00:00:00 -0400" pubdate>March 14<span>th</span>, 2011</time>
77
+    
76 78
     
77 79
   </p>
78
-  <h1><a href="/2011/03/14/test-post/">Test Post</a></h1>
79 80
 </header>
80 81
 
81 82
 <div class="entry"><p>This is a test!</p>
82 83
 </div>
83 84
 
84 85
 
85
-
86
-
87 86
   </article>
88 87
 
89 88
 
90 89
 
91 90
   <article>
92 91
     <header>
92
+  <h1><a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a></h1>
93 93
   <p>
94
-    <time>November 13<span>th</span>, 2009</time>
95 94
     
96
-      <span class="byline"><em>by</em> <span class="author">Your Name</span></span>
95
+      <span class="byline author vcard">By <span class="fn">Your Name</span></span>
96
+    
97
+    
98
+      <time datetime="2009-11-13 00:00:00 -0500" pubdate>November 13<span>th</span>, 2009</time>
99
+    
100
+    
101
+      <time class="updated" datetime="2010-03-10 00:00:00 -0500" pubdate>Updated March 10<span>th</span>, 2010</time>
97 102
     
98 103
   </p>
99
-  <h1><a href="/2009/11/13/hello-world/">Hello World! I'm Octopress!</a></h1>
100 104
 </header>
101 105
 
102 106
 <div class="entry"><p><strong>Octopress is a blogging framework designed for hackers</strong>, based on <a href="http://github.com/mojombo/jekyll">Jekyll</a> the blog aware static site generator powering <a href="http://pages.github.com/">Github pages</a>.
... ...
@@ -112,17 +127,18 @@ If you don&#8217;t know what Jekyll is, <a href="http://metajack.im/2009/01/23/b
112 112
 </div>
113 113
 
114 114
 
115
-<p class="updated"><em>updated</em> <time>March 10<span>th</span>, 2010</time></p>
116
-
117 115
   </article>
118 116
 
119 117
 
120
-</article></div>
121
-      <aside><h4>About Me</h4>
122
-<p> Yo everybody! </p>
118
+</div>
119
+      
120
+        <aside><section>
121
+  <h1>About Me</h1>
122
+  <p>Hi, I'm Octopress!</p>
123
+</section>
123 124
 
124 125
 <section>
125
-  <h4>Recent Posts</h4>
126
+  <h1>Recent Posts</h1>
126 127
   <ul id="recent_posts">
127 128
     
128 129
       <li class="post">
... ...
@@ -144,21 +160,30 @@ If you don&#8217;t know what Jekyll is, <a href="http://metajack.im/2009/01/23/b
144 144
   </section>
145 145
 
146 146
 
147
-  <section><h4>On Twitter</h4>
147
+  <section><h1>Latest Tweets</h1>
148 148
 <ul id="tweets">
149 149
   Status updating...
150 150
 </ul>
151
-<p>Follow <a href="http://twitter.com/#{page.twitter_user}">@imathis</a></p>
151
+<p>Follow <a href="http://twitter.com/imathis">@imathis</a></p>
152
+
153
+  <script>
154
+    var twitter_user = "imathis";
155
+    var show_replies = false;
156
+    var tweet_count = 3;
157
+  </script>
158
+  <script src="/javascripts/twitter.js" type="text/javascript"></script>
159
+
152 160
 </section>
153 161
 
154 162
 
155 163
 
156
-  <section><h4>My Pinboard</h4>
164
+  <section><h1>My Pinboard</h1>
157 165
 <ul id="pinboard_linkroll">Fetching linkroll...</ul>
158
-<p><a href="http://pinboard.in/u:imathis">My Pinboard Bookmarks &raquo;</a></p>
166
+<p><a href="http://pinboard.in/u:designenthusiast">My Pinboard Bookmarks &raquo;</a></p>
159 167
 </section>
160 168
 
161 169
 </aside>
170
+      
162 171
     </div>
163 172
   </div>
164 173
   <footer><div><p>
... ...
@@ -167,11 +192,16 @@ If you don&#8217;t know what Jekyll is, <a href="http://metajack.im/2009/01/23/b
167 167
 </p>
168 168
 
169 169
   <script language="javascript">
170
-    var pinboard_user = "imathis";
170
+    var pinboard_user = "designenthusiast";
171 171
     var pinboard_count = "3";
172 172
   </script>
173 173
   <script language="javascript" src="/javascripts/pinboard.js"></script>
174 174
 
175 175
 </div></footer>
176
+  <!--[if (lt IE 9) & (!IEMobile)]>
177
+  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
178
+  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
179
+  <script src="javascripts/libs/respond.min.js"></script>
180
+  <![endif]-->
176 181
 </body>
177 182
 </html>
178 183
new file mode 100644
... ...
@@ -0,0 +1,4 @@
0
+// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8
1
+var DOMAssistant=function(){var j=function(){},o=window,g=o.$,k=o.$$,d=/*@cc_on!@*/false,i=d&&parseFloat(navigator.appVersion)<6,h,c={},q={},a=true,n=Array.prototype.slice,p={accesskey:"accessKey","class":"className",colspan:"colSpan","for":"htmlFor",maxlength:"maxLength",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",valign:"vAlign",cellspacing:"cellSpacing",cellpadding:"cellPadding"},m={rules:/\s*,\s*/g,selector:/^(\w+|\*)?(#[\w\u00C0-\uFFFF\-=$]+)?((\.[\w\u00C0-\uFFFF\-]+)*)?((\[\w+\s*([~^$*|])?(=\s*([-\w\u00C0-\uFFFF\s.]+|"[^"]*"|'[^']*'))?\]+)*)?((:\w[-\w]*(\((odd|even|\-?\d*n?([-+]\d+)?|[:#]?[-\w\u00C0-\uFFFF.]+|"[^"]*"|'[^']*'|((\w*\.[-\w\u00C0-\uFFFF]+)*)?|(\[#?\w+([~^$*|])?=?[-\w\u00C0-\uFFFF\s.'"]+\]+)|(:\w[-\w]*\(.+\)))\))?)*)?([+>~])?/,selectorSplit:/(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g,id:/^#([-\w\u00C0-\uFFFF=$]+)$/,tag:/^\w+/,relation:/^[+>~]$/,pseudo:/^:(\w[-\w]*)(\((.+)\))?$/,pseudos:/:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g,attribs:/\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g,classes:/\.([-\w\u00C0-\uFFFF]+)/g,quoted:/^["'](.*)["']$/,nth:/^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/,special:/(:check|:enabl|\bselect)ed\b/},f=function(t,u,r){var s=t.tagName;while((t=t[u+"Sibling"])&&(t.nodeType!==1||(r?t.tagName!==s:t.tagName==="!"))){}return t},b=function(r){return typeof r!=="undefined"},l=function(r){return(l=r[0].compareDocumentPosition?function(s){return s.sort(function(u,t){return 3-(u.compareDocumentPosition(t)&6)})}:d?function(s){return s.sort(function(u,t){return u.sourceIndex-t.sourceIndex})}:function(s){return s.sort(function(w,u){var v=document.createRange(),t=document.createRange();v.setStart(w,0);v.setEnd(w,0);t.setStart(u,0);t.setEnd(u,0);return v.compareBoundaryPoints(Range.START_TO_END,t)})})(r)};var e=function(s,r){s.push.apply(s,n.apply(r));return s};if(d){e=function(t,s){if(s.slice){return t.concat(s)}var r=0,u;while((u=s[r++])){t[t.length]=u}return t}}return{isIE:d,camel:p,def:b,allMethods:[],publicMethods:["prev","next","hasChild","cssSelect","elmsByClass","elmsByAttribute","elmsByTag"],harmonize:function(){o.$=g;o.$$=k;return this},initCore:function(){this.applyMethod.call(o,"$",this.$);this.applyMethod.call(o,"$$",this.$$);o.DOMAssistant=this;if(d){j=Array}j.prototype=[];(function(r){r.each=function(v,u){for(var t=0,s=this.length;t<s;t++){if(v.call(u||this[t],this[t],t,this)===false){break}}return this};r.first=function(){return b(this[0])?DOMAssistant.addMethodsToElm(this[0]):null};r.end=function(){return this.previousSet};r.indexOf=r.indexOf||function(u){for(var t=0,s=this.length;t<s;t++){if(t in this&&this[t]===u){return t}}return -1};r.map=function(w,v){var u=[];for(var t=0,s=this.length;t<s;t++){if(t in this){u[t]=w.call(v||this[t],this[t],t,this)}}return u};r.filter=function(w,v){var u=new j();u.previousSet=this;for(var t=0,s=this.length;t<s;t++){if(t in this&&w.call(v||this[t],this[t],t,this)){u.push(this[t])}}return u};r.every=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&!v.call(u||this[t],this[t],t,this)){return false}}return true};r.some=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&v.call(u||this[t],this[t],t,this)){return true}}return false}})(j.prototype);this.attach(this)},addMethods:function(r,s){if(!b(this.allMethods[r])){this.allMethods[r]=s;this.addHTMLArrayPrototype(r,s)}},addMethodsToElm:function(s){for(var r in this.allMethods){if(b(this.allMethods[r])){this.applyMethod.call(s,r,this.allMethods[r])}}return s},applyMethod:function(s,r){if(typeof this[s]!=="function"){this[s]=r}},attach:function(t){var r=t.publicMethods;if(!b(r)){for(var v in t){if(v!=="init"&&b(t[v])){this.addMethods(v,t[v])}}}else{if(r.constructor===Array){for(var s=0,u;(u=r[s]);s++){this.addMethods(u,t[u])}}}if(typeof t.init==="function"){t.init()}},addHTMLArrayPrototype:function(r,s){j.prototype[r]=function(){var v=new j();v.previousSet=this;for(var u=0,t=this.length;u<t;u++){v.push(s.apply(DOMAssistant.$$(this[u]),arguments))}return v}},cleanUp:function(u){var s=u.all||u.getElementsByTagName("*");for(var r=0,t;(t=s[r++]);){if(t.hasData&&t.hasData()){if(t.removeEvent){t.removeEvent()}t.unstore()}}u.innerHTML=""},setCache:function(r){a=r},$:function(){var u=arguments[0];if(arguments.length===1&&(typeof u==="object"||(typeof u==="function"&&!!u.nodeName))){return DOMAssistant.$$(u)}var w=!!u?new j():null;for(var s=0,r,v;(r=arguments[s]);s++){if(typeof r==="string"){r=r.replace(/^[^#\(]*(#)/,"$1");if(m.id.test(r)){if((v=DOMAssistant.$$(r.substr(1),false))){w.push(v)}}else{var t=(document.all||document.getElementsByTagName("*")).length;w=(!document.querySelectorAll&&a&&q.rule&&q.rule===r&&q.doc===t)?q.elms:e(w,DOMAssistant.cssSelection.call(document,r));q={rule:r,elms:w,doc:t}}}}return w},$$:function(x,u){var w=(typeof x==="object"||typeof x==="function"&&!!x.nodeName)?x:document.getElementById(x),v=b(u)?u:true,t=function(z){var y=z.id;return typeof y!=="object"?y:z.attributes.id.nodeValue};if(typeof x==="string"&&w&&t(w)!==x){w=null;for(var r=0,s;(s=document.all[r]);r++){if(t(s)===x){w=s;break}}}if(w&&v&&!w.next){DOMAssistant.addMethodsToElm(w)}return w},prev:function(){return DOMAssistant.$$(f(this,"previous"))},next:function(){return DOMAssistant.$$(f(this,"next"))},hasChild:function(r){return this===document||this!==r&&(this.contains?this.contains(r):!!(this.compareDocumentPosition(r)&16))},getSequence:function(v){var w,u=2,s=-1,r=-1,t=m.nth.exec(v.replace(/^0n\+/,"").replace(/^2n$/,"even").replace(/^2n+1$/,"odd"));if(!t){return null}if(t[2]){w=(t[2]==="odd")?1:2;r=(w===1)?1:0}else{if(t[3]){w=s=parseInt(t[3],10);u=0}else{if(t[4]){u=t[6]?parseInt(t[6],10):1;w=t[7]?parseInt(t[7],10):0;while(w<1){w+=u}r=(w>=u)?(w-u)%u:w}else{if(t[8]){u=t[10]?parseInt(t[10],10):1;w=s=parseInt(t[11],10);while(w>u){w-=u}r=(s>=u)?(s-u)%u:s}}}}return{start:w,add:u,max:s,modVal:r}},cssByDOM:function(v){var aU,I,D,N,av,x,ah,A,K,w,aq,aN,y,aI,at,aB=new j(),aR=aB.indexOf,ap=[],aG=[],aK=v.replace(m.rules,",").split(","),aF={};function aQ(s){s=s||ap;for(var r=s.length;r--;){s[r].added=null;s[r].removeAttribute("added")}}function C(){for(var r=aU.length;r--;){aU[r].childElms=null}}function am(t,r){for(var u=0,aX;(aX=t[u]);u++){var aW=false;for(var s=0,aV;(aV=r[s]);s++){if(aV===aX){aW=true;r.splice(s,1);break}}if(aW){t.splice(u--,1)}}return t}function E(s,r){return(d||m.special.test(r))?s[p[r.toLowerCase()]||r]:s.getAttribute(r,2)}function P(r,s){r=r?r.replace(m.quoted,"$1").replace(/(\.|\[|\])/g,"\\$1"):null;return{"^":"^"+r,"$":r+"$","*":r,"|":"^"+r+"(\\-\\w+)*$","~":"\\b"+r+"\\b"}[s]||(r!==null?"^"+r+"$":r)}function W(r){return(r||this).tagName!=="!"}function S(r,s){return i?(r==="*"?s.all:s.all.tags(r)):s.getElementsByTagName(r)}function aL(r,s){r=r||"*";s=s||document;return(s===document||s.lastModified)?c[r]||(c[r]=S(r,document)):S(r,s)}function ar(aX,bf,u){aU=[];var aV=bf.split("-"),a0=[],a5=0,be=/\-of\-type$/.test(bf),a4,aZ={first:function(bg){return !f(bg,"previous",be)},last:function(bg){return !f(bg,"next",be)},empty:function(bg){return !bg.firstChild},enabled:function(bg){return !bg.disabled&&bg.type!=="hidden"},disabled:function(bg){return bg.disabled},checked:function(bg){return bg.checked},contains:function(bg){return(bg.innerText||bg.textContent||"").indexOf(u.replace(m.quoted,"$1"))>-1},other:function(bg){return E(bg,bf)===u}};function t(bg){while((A=aX[a5++])){if(W(A)&&aZ[bg](A)){a0[a0.length]=A}}return a0}var bb=aV[0]||null;if(bb&&aZ[bb]){return t(bb)}switch(bb){case"only":var a1,aW;while((A=aX[a5++])){K=A.parentNode;var a6=A.nodeName;if(K!==a1||a6!==aW){if(aZ.first(A)&&aZ.last(A)){a0[a0.length]=A}a1=K;aW=a6}}break;case"nth":if(u==="n"){a0=aX}else{var bd=(aV[1]==="last")?["lastChild","previousSibling"]:["firstChild","nextSibling"];aI=DOMAssistant.getSequence(u);if(aI){while((A=aX[a5++])){K=A.parentNode;K.childElms=K.childElms||{};var a7=A.nodeName;if(!K.childElms[a7]){var ba=0;aN=aI.start;y=K[bd[0]];while(y&&(aI.max<0||aN<=aI.max)){var bc=y.nodeName;if((be&&bc===a7)||(!be&&y.nodeType===1&&bc!=="!")){if(++ba===aN){if(bc===a7){a0[a0.length]=y}aN+=aI.add}}y=y[bd[1]]}if(at){h++}K.childElms[a7]=true;aU[aU.length]=K}}C()}}break;case"target":var s=document.location.hash.slice(1);if(s){while((A=aX[a5++])){if(E(A,"name")===s||E(A,"id")===s){a0[a0.length]=A;break}}}break;case"not":if((a4=m.pseudo.exec(u))){a0=am(aX,ar(aX,a4[1]?a4[1].toLowerCase():null,a4[3]||null))}else{for(var a8 in m){if(m[a8].lastIndex){m[a8].lastIndex=0}}u=u.replace(m.id,"[id=$1]");var a3=m.tag.exec(u);var aY=m.classes.exec(u);var a2=m.attribs.exec(u);var r=new RegExp(a2?P(a2[4],a2[2]):"(^|\\s)"+(a3?a3[0]:aY?aY[1]:"")+"(\\s|$)","i");while((w=aX[a5++])){aq=null;if(a3&&!r.test(w.nodeName)||aY&&!r.test(w.className)){aq=w}else{if(a2){var a9=E(w,a2[1]);if(!b(a9)||a9===false||typeof a9==="string"&&!r.test(a9)){aq=w}}}if(aq&&!aq.added){aq.added=true;a0[a0.length]=aq}}}break;default:return t("other")}return a0}function Z(aV,t){var r=0,u=aV,aW;while((aW=t[r++])){if(!u.length||u.indexOf(aW)<0){aV.push(aW)}}return aV}h=-1;for(var ak=0,aJ=[];(I=aK[ak]);ak++){if(!(D=I.match(m.selectorSplit))||ak&&aR.call(aK.slice(0,ak),I)>-1){continue}ap=[this];for(var ai=0,G;(G=D[ai]);ai++){aG=[];if((N=m.relation.exec(G))){var an=null,aS=D[ai+1];if((av=m.tag.exec(aS))){av=av[0];x=new RegExp("(^|\\s)"+av+"(\\s|$)","i")}else{if(m.id.test(aS)){an=DOMAssistant.$(aS)||null}}for(var ag=0,M;(M=ap[ag]);ag++){switch(N[0]){case">":var aD=an||aL(av,M);for(var ae=0,ay;(ay=aD[ae]);ae++){if(ay.parentNode===M){aG[aG.length]=ay}}break;case"+":if((M=f(M,"next"))){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){aG[aG.length]=M}}break;case"~":while((M=M.nextSibling)&&!M.added){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){M.added=true;aG[aG.length]=M}}break}}ap=aG;aQ();G=D[++ai];if(/^\w+$/.test(G)||m.id.test(G)){continue}ap.skipTag=true}var au=m.selector.exec(G);aF={tag:au[1]?au[1]:"*",id:au[2],allClasses:au[3],allAttr:au[5],allPseudos:au[10]};at=(aF.tag==="*");if(aF.id){var O=0,al=document.getElementById(aF.id.slice(1));if(al){while(ap[O]&&!DOMAssistant.hasChild.call(ap[O],al)){O++}aG=(O<ap.length&&(at||aF.tag===al.tagName.toLowerCase()))?[al]:[]}ap=aG}else{if(aF.tag&&!ap.skipTag){if(ai===0&&!aG.length&&ap.length===1){ap=aG=e([],aL(aF.tag,ap[0]))}else{for(var ad=0,aO=ap.length,az,aw;ad<aO;ad++){az=aL(aF.tag,ap[ad]);for(var aa=0;(aw=az[aa]);aa++){if(!aw.added){aw.added=true;aG[aG.length]=aw}}}ap=aG;aQ()}}}if(!aG.length){break}ap.skipTag=false;if(aF.allClasses){var Y=0,ab=[],J=aF.allClasses.split(".").slice(1);while((ah=ap[Y++])){var af=true,ax=ah.className;if(ax&&ax.length){ax=ax.split(" ");for(var X=J.length;X--;){if(ax.indexOf(J[X])<0){af=false;break}}if(af){ab[ab.length]=ah}}}ap=aG=ab}if(aF.allAttr){var B,T=0,aC=[],ac=[],aH=aF.allAttr.match(m.attribs);for(var H=/^\[(selected|readonly)(\s*=.+)?\]$/,V=0,z=aH.length,U,aP;V<z;V++){m.attribs.lastIndex=0;U=m.attribs.exec(aH[V].replace(H,"[$1]"));aP=P(U[4],U[2]||null);aC[V]=[(aP?new RegExp(aP):null),U[1]]}while((ah=aG[T++])){for(var R=0,aE=aC.length;R<aE;R++){var aA=aC[R][0],aj=E(ah,aC[R][1]);B=true;if(!aA&&aj===true){continue}if((!aA&&(!aj||typeof aj!=="string"||!aj.length))||(!!aA&&!aA.test(aj))){B=false;break}}if(B){ac[ac.length]=ah}}ap=aG=ac}if(aF.allPseudos){var F=aF.allPseudos.match(m.pseudos);for(var Q=0,ao=F.length;Q<ao;Q++){m.pseudos.lastIndex=0;var aT=m.pseudos.exec(F[Q]);var L=aT[1]?aT[1].toLowerCase():null;var aM=aT[3]||null;aG=ar(aG,L,aM);aQ(aG)}ap=aG}}aB=((aJ.length&&(at||aR.call(aJ,aF.tag)>=0||aR.call(aJ,"*")>=0))?Z:e)(aB,ap);aJ.push(aF.tag);if(d&&at){aB=aB.filter(W)}}return((aB.length>1&&aK.length>1)||h>0)?l(aB):aB},cssByXpath:function(s){var t={xhtml:"http://www.w3.org/1999/xhtml"},u=(document.documentElement.namespaceURI===t.xhtml)?"xhtml:":"",r=function v(w){return t[w]||null};DOMAssistant.cssByXpath=function(N){var R,T,J,z,A,E,B=new j(),C=N.replace(m.rules,",").split(",");function M(W){var X=W?"[":"",V=W?"]":"";return function(Y,ac,ab,aa,Z){Z=(Z||"").replace(m.quoted,"$1");if(ac===Z&&ac==="readonly"){aa=null}return X+({"^":"starts-with(@"+ac+', "'+Z+'")',"$":"substring(@"+ac+", (string-length(@"+ac+") - "+(Z.length-1)+"), "+Z.length+') = "'+Z+'"',"*":'contains(concat(" ", @'+ac+', " "), "'+Z+'")',"|":"@"+ac+'="'+Z+'" or starts-with(@'+ac+', "'+Z+'-")',"~":'contains(concat(" ", @'+ac+', " "), " '+Z+' ")'}[ab]||("@"+ac+(aa?'="'+Z+'"':"")))+V}}function P(W,Y,X){W=/\-child$/.test(Y)?"*":W;var aa=Y.split("-"),V=((aa[1]==="last")?"(count(following-sibling::":"(count(preceding-sibling::")+W+") + 1)",Z,ab;switch(aa[0]){case"nth":return(X!=="n"&&(E=DOMAssistant.getSequence(X)))?((E.start===E.max)?V+" = "+E.start:V+" mod "+E.add+" = "+E.modVal+((E.start>1)?" and "+V+" >= "+E.start:"")+((E.max>0)?" and "+V+" <= "+E.max:"")):"";case"not":return"not("+((Z=m.pseudo.exec(X))?P(W,Z[1]?Z[1].toLowerCase():null,Z[3]||null):X.replace(m.id,"[id=$1]").replace(m.tag,"self::$0").replace(m.classes,'contains(concat(" ", @class, " "), " $1 ")').replace(m.attribs,M()))+")";case"first":return"not(preceding-sibling::"+W+")";case"last":return"not(following-sibling::"+W+")";case"only":return"not(preceding-sibling::"+W+" or following-sibling::"+W+")";case"empty":return"not(child::*) and not(text())";case"contains":return'contains(., "'+X.replace(m.quoted,"$1")+'")';case"enabled":return'not(@disabled) and not(@type="hidden")';case"disabled":return"@disabled";case"target":return'@name="'+(ab=document.location.hash.slice(1))+'" or @id="'+ab+'"';default:return"@"+Y+'="'+X+'"'}}for(var O=0;(R=C[O]);O++){if(!(T=R.match(m.selectorSplit))||O&&B.indexOf.call(C.slice(0,O),R)>-1){continue}J=J?J+" | .":".";for(var L=0,Q=T.length;L<Q;L++){z=m.selector.exec(T[L]);A={tag:u+(z[1]?z[1]:"*"),id:z[2],allClasses:z[3],allAttr:z[5],allPseudos:z[10],tagRelation:z[20]};J+=(A.tagRelation?({">":"/","+":"/following-sibling::*[1]/self::","~":"/following-sibling::"}[A.tagRelation]||""):((L>0&&m.relation.test(T[L-1]))?A.tag:("//"+A.tag)))+(A.id||"").replace(m.id,'[@id = "$1"]')+(A.allClasses||"").replace(m.classes,'[contains(concat(" ", @class, " "), " $1 ")]')+(A.allAttr||"").replace(m.attribs,M(true));if(A.allPseudos){var D=A.allPseudos.match(m.pseudos);for(var K=0,x=D.length;K<x;K++){m.pseudos.lastIndex=0;var y=m.pseudos.exec(D[K]),U=y[1]?y[1].toLowerCase():null,w=y[3]||null,G=P(A.tag,U,w);if(G.length){J+="["+G+"]"}}}}}try{var I=document.evaluate(J,this,r,7,null),H,F=0;while((H=I.snapshotItem(F++))){B.push(H)}}catch(S){}return B};return DOMAssistant.cssByXpath.call(this,s)},cssSelection:function(s){if(!s){return null}var r=m.special.test(s);try{if(document.querySelectorAll&&!r){return e(new j(),this.querySelectorAll(s))}}catch(t){}return((document.evaluate&&!r&&!/-of-type/.test(s))?DOMAssistant.cssByXpath:DOMAssistant.cssByDOM).call(this,s)},cssSelect:function(r){return DOMAssistant.cssSelection.call(this,r)},elmsByClass:function(t,r){var s=(r||"")+"."+t;return DOMAssistant.cssSelection.call(this,s)},elmsByAttribute:function(s,t,r,v){var u=(r||"")+"["+s+((t&&t!=="*")?((v||"")+"="+t+"]"):"]");return DOMAssistant.cssSelection.call(this,u)},elmsByTag:function(r){return DOMAssistant.cssSelection.call(this,r)}}}();DOMAssistant.initCore();DOMAssistant.Storage=function(){var c=1,a=[],b="_da"+ +new Date();return{hasData:function(){var d=this[b];return !!d&&!!a[d]},retrieve:function(d){if(!DOMAssistant.def(d)){return this[b]||(this[b]=c++)}if(!this[b]||!a[this[b]]){return}return a[this[b]][d]},store:function(f,g){var e=this[b]||(this[b]=c++);a[e]=a[e]||{};if(typeof f==="object"){for(var d in f){if(typeof d==="string"){a[e][d]=f[d]}}}else{a[e][f]=g}return this},unstore:function(e){var d=this[b]||(this[b]=c++);if(a[d]){if(DOMAssistant.def(e)){delete a[d][e]}else{a[d]=null}}return this}}}();DOMAssistant.attach(DOMAssistant.Storage);DOMAssistant.AJAX=function(){var globalXMLHttp=null,readyState=0,status=-1,statusText="",requestPool=[],createAjaxObj=function(url,method,callback,addToContent){var params=null;if(/POST/i.test(method)){url=url.split("?");params=url[1];url=url[0]}return{url:url,method:method,callback:callback,params:params,headers:{},responseType:"text",addToContent:addToContent||false}};return{publicMethods:["ajax","get","post","load"],initRequest:function(){var XMLHttp=null;if(!!window.XMLHttpRequest&&!DOMAssistant.isIE){XMLHttp=new XMLHttpRequest();DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new XMLHttpRequest()}}else{if(!!window.ActiveXObject){var XMLHttpMS=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0;i<XMLHttpMS.length;i++){try{XMLHttp=new window.ActiveXObject(XMLHttpMS[i]);DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new window.ActiveXObject(XMLHttpMS[i])};break}catch(e){XMLHttp=null}}}}return XMLHttp},ajax:function(ajaxObj){if(!ajaxObj.noParse&&ajaxObj.url&&/\?/.test(ajaxObj.url)&&ajaxObj.method&&/POST/i.test(ajaxObj.method)){var url=ajaxObj.url.split("?");ajaxObj.url=url[0];ajaxObj.params=url[1]+((url[1].length>0&&ajaxObj.params)?("&"+ajaxObj.params):"")}return DOMAssistant.AJAX.makeCall.call(this,ajaxObj)},get:function(url,callback,addToContent){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"GET",callback,addToContent))},post:function(url,callback){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"POST",callback))},load:function(url,addToContent){this.get(url,DOMAssistant.AJAX.replaceWithAJAXContent,addToContent)},makeCall:function(ajaxObj){var XMLHttp=DOMAssistant.AJAX.initRequest();if(XMLHttp){globalXMLHttp=XMLHttp;(function(elm){var url=ajaxObj.url,method=ajaxObj.method||"GET",callback=ajaxObj.callback,params=ajaxObj.params,headers=ajaxObj.headers,responseType=ajaxObj.responseType||"text",addToContent=ajaxObj.addToContent,timeout=ajaxObj.timeout||null,ex=ajaxObj.exception,timeoutId=null,done=false;XMLHttp.open(method,url,true);XMLHttp.setRequestHeader("AJAX","true");XMLHttp.setRequestHeader("X-Requested-With","XMLHttpRequest");if(method==="POST"){XMLHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");XMLHttp.setRequestHeader("Content-length",params?params.length:0);if(XMLHttp.overrideMimeType){XMLHttp.setRequestHeader("Connection","close")}}if(responseType==="json"){XMLHttp.setRequestHeader("Accept","application/json, text/javascript, */*")}for(var i in headers){if(typeof i==="string"){XMLHttp.setRequestHeader(i,headers[i])}}if(typeof callback==="function"){XMLHttp.onreadystatechange=function(){try{if(XMLHttp.readyState===4&&!done){window.clearTimeout(timeoutId);done=true;status=XMLHttp.status;statusText=XMLHttp.statusText;readyState=4;if((status||location.protocol!=="file:")&&(status<200||status>=300)){throw new Error(statusText)}var response=/xml/i.test(responseType)?XMLHttp.responseXML:XMLHttp.responseText;if(/json/i.test(responseType)&&!!response){response=(typeof JSON==="object"&&typeof JSON.parse==="function")?JSON.parse(response):eval("("+response+")")}globalXMLHttp=null;XMLHttp.onreadystatechange=function(){};requestPool.push(XMLHttp);callback.call(elm,response,addToContent)}}catch(e){globalXMLHttp=XMLHttp=null;if(typeof ex==="function"){ex.call(elm,e);ex=null}}}}XMLHttp.send(params);if(timeout){timeoutId=window.setTimeout(function(){if(!done){XMLHttp.abort();done=true;if(typeof ex==="function"){readyState=0;status=408;statusText="Request timeout";globalXMLHttp=XMLHttp=null;ex.call(elm,new Error(statusText));ex=null}}},timeout)}})(this)}return this},replaceWithAJAXContent:function(content,add){if(add){this.innerHTML+=content}else{DOMAssistant.cleanUp(this);this.innerHTML=content}},getReadyState:function(){return(globalXMLHttp&&DOMAssistant.def(globalXMLHttp.readyState))?globalXMLHttp.readyState:readyState},getStatus:function(){return status},getStatusText:function(){return statusText}}}();DOMAssistant.attach(DOMAssistant.AJAX);DOMAssistant.CSS=function(){var a=DOMAssistant.def,b={display:true};return{addClass:function(d){if(!this.hasClass(d)){var c=this.className;this.className=c+(c.length?" ":"")+d}return this},removeClass:function(c){return this.replaceClass(c)},replaceClass:function(d,e){var c=new RegExp(("(^|\\s)"+d+"(\\s|$)"),"i");this.className=this.className.replace(c,function(f,h,g){return e?(h+e+g):" "}).replace(/^\s+|\s+$/g,"");return this},hasClass:function(c){return(" "+this.className+" ").indexOf(" "+c+" ")>-1},setStyle:function(f,g){var e=this.style;if("filters" in this&&(typeof f==="string"?/opacity/i.test(f):a(f.opacity))){e.zoom=1;e.filter=(e.filter||"").replace(/alpha\([^)]*\)/,"")+"alpha(opacity="+(a(f.opacity)?f.opacity:g)*100+")"}if(a(e.cssText)){var c=e.cssText;if(typeof f==="object"){for(var d in f){if(typeof d==="string"){if(b[d]){e[d]=f[d]}c+=";"+d+":"+f[d]}}}else{if(b[f]){e[f]=g}c+=";"+f+":"+g}e.cssText=c}return this},getStyle:function(c){var e="",d;c=c.toLowerCase();if(document.defaultView&&document.defaultView.getComputedStyle){e=document.defaultView.getComputedStyle(this,"").getPropertyValue(c)}else{if(this.currentStyle){if("filters" in this&&c==="opacity"){e=(d=this.style.filter||this.currentStyle.filter)&&d.indexOf("opacity=")>=0?parseFloat(d.match(/opacity=([^)]*)/)[1])/100:1}else{c=c.replace(/^float$/,"styleFloat").replace(/\-(\w)/g,function(f,g){return g.toUpperCase()});e=this.currentStyle[c]}if(e==="auto"&&/^(width|height)$/.test(c)&&this.currentStyle.display!=="none"){e=this["offset"+c.charAt(0).toUpperCase()+c.substr(1)]+"px"}}}return e}}}();DOMAssistant.attach(DOMAssistant.CSS);DOMAssistant.Content=function(){var a=DOMAssistant.$$;return{init:function(){DOMAssistant.setCache(false)},create:function(d,c,b,e){var f=a(document.createElement(d));if(c){f=f.setAttributes(c)}if(DOMAssistant.def(e)){f.addContent(e)}if(b){this.appendChild(f)}return f},setAttributes:function(b){if(DOMAssistant.isIE){var c=function(g,e,f){var d=e.toLowerCase();switch(d){case"name":case"type":case"multiple":return a(document.createElement(g.outerHTML.replace(new RegExp(d+"(=[a-zA-Z]+)?")," ").replace(">"," "+d+"="+f+">")));case"style":g.style.cssText=f;return g;default:g[DOMAssistant.camel[d]||e]=f;return g}};DOMAssistant.Content.setAttributes=function(d){var h=this;var g=this.parentNode;for(var f in d){if(typeof d[f]==="string"||typeof d[f]==="number"){var e=c(h,f,d[f]);if(g&&/(name|type)/i.test(f)){if(h.innerHTML){e.innerHTML=h.innerHTML}g.replaceChild(e,h)}h=e}}return h}}else{DOMAssistant.Content.setAttributes=function(d){for(var e in d){if(/class/i.test(e)){this.className=d[e]}else{this.setAttribute(e,d[e])}}return this}}return DOMAssistant.Content.setAttributes.call(this,b)},addContent:function(f){var d=typeof f;if(d==="string"||d==="number"){if(!this.firstChild){this.innerHTML=f}else{var c=document.createElement("div");c.innerHTML=f;for(var b=c.childNodes.length-1,e=null;b>=0;b--){e=this.insertBefore(c.childNodes[b],e)}}}else{if(d==="object"||(d==="function"&&!!f.nodeName)){this.appendChild(f)}}return this},replaceContent:function(b){DOMAssistant.cleanUp(this);return this.addContent(b)},replace:function(g,b){var f=typeof g;if(f==="string"||f==="number"){var e=this.parentNode;var d=DOMAssistant.Content.create.call(e,"div",null,false,g);for(var c=d.childNodes.length;c--;){e.insertBefore(d.childNodes[c],this.nextSibling)}g=this.nextSibling;e.removeChild(this)}else{if(f==="object"||(f==="function"&&!!g.nodeName)){this.parentNode.replaceChild(g,this)}}return b?g:this},remove:function(){DOMAssistant.cleanUp(this);if(this.hasData()){if(this.removeEvent){this.removeEvent()}this.unstore()}this.parentNode.removeChild(this);return null}}}();DOMAssistant.attach(DOMAssistant.Content);DOMAssistant.Events=function(){var i,g="_events",c=!!document.addEventListener,a={focus:true,blur:true},b=DOMAssistant.isIE?{focus:"activate",blur:"deactivate",mouseenter:"mouseover",mouseleave:"mouseout"}:{mouseenter:"mouseover",mouseleave:"mouseout"},f={special:/^submit|reset|change|select$/i,mouseenterleave:/^mouse(enter|leave)$/i,dom:/^DOM/,on:/^on/i},e=function(j){return DOMAssistant.isIE&&f.special.test(j)},d=function(j){return b[j]||j},h=function(n,k,m){n=n||window.event||{};if(n.event){return n}var l={event:n,type:k||n.type,bubbles:n.bubbles||true,cancelable:n.cancelable||false,target:m||n.target||n.srcElement,clientX:n.clientX||0,clientY:n.clientY||0,altKey:n.altKey||false,ctrlKey:n.ctrlKey||false,shiftKey:n.shiftKey||false,button:n.button||null,timeStamp:+new Date(),preventDefault:function(){if(n.preventDefault){n.preventDefault()}this.returnValue=n.returnValue=false},stopPropagation:function(){if(n.stopPropagation){n.stopPropagation()}this.cancelBubble=n.cancelBubble=true}};if(l.target&&3===l.target.nodeType){l.target=l.target.parentNode}l.currentTarget=l.target;l.relatedTarget=n.relatedTarget||(n.fromElement===l.target?n.toElement:n.fromElement)||null;var o=document.documentElement,j=document.body;l.pageX=DOMAssistant.def(n.pageX)?n.pageX:(l.clientX+(o.scrollLeft||j.scrollLeft)-(o.clientLeft||0));l.pageY=DOMAssistant.def(n.pageY)?n.pageY:(l.clientY+(o.scrollTop||j.scrollTop)-(o.clientTop||0));if("number"===typeof n.which){l.keyCode=n.keyCode;l.charCode=l.which=n.which}else{if(n.keyCode){l.keyCode=l.charCode=n.keyCode}}return l};return{publicMethods:["triggerEvent","addEvent","removeEvent","relayEvent","unrelayEvent","preventDefault","cancelBubble"],init:function(){DOMAssistant.preventDefault=this.preventDefault;DOMAssistant.cancelBubble=this.cancelBubble;i=this.handleEvent},triggerEvent:function(r,o,q){var m=d(r),s=this.retrieve(g),j=q||h(q,m,o||this);j.currentTarget=this;if(s&&s[m]){for(var n=0,l=s[m].length;n<l;n++){if(s[m][n].call(this,j)===false){j.stopPropagation()}}}else{if(typeof this["on"+m]==="function"){this["on"+m].call(this,j)}}var k=DOMAssistant.$$(this.parentNode);if(!j.cancelBubble&&k&&k.nodeType===1){k.triggerEvent(m,o,j)}return this},addEvent:function(r,l,k,q,n){var j,m=d(r),p=m+this.retrieve(),o="on"+m;if(!(l.attachedElements&&l.attachedElements[p])){var s=this.retrieve(g)||{};if(!s[m]){s[m]=[];j=this[o];this[o]=null}if(typeof this.window==="object"){this.window[o]=i}else{if(!s[m].length){if(c){this.addEventListener(m,i,a[m])}else{this[o]=i}}}if(j){s[m].push(j)}if(m!==r){l.evt=r}l.relay=k;l.proxy=q;l.selector=n;l.attachedElements=l.attachedElements||{};l.attachedElements[p]=true;s[m].push(l);this.store(g,s)}return this},handleEvent:function(r){var q=(r&&f.dom.test(r.type)&&c)?r:h(r),o=d(q.type),p=q.target,l=q.relatedTarget,n=this.retrieve(g)[o].slice(0),t,j,s;if((t=n.length)){for(var m=0;m<t;m++){if(typeof n[m]==="function"){if((s=n[m].evt)&&s!==o){q.type=s;if(l&&f.mouseenterleave.test(s)){if(n[m].relay){var k=n[m].elms||(n[m].elms=this.cssSelect(n[m].selector));if(k.indexOf(p)<0||!DOMAssistant.hasChild.call(l,p)){continue}}else{if(this===l||this.hasChild(l)){continue}}}}j=n[m].call(this,q)}}if(j===false){q.stopPropagation()}return j}},removeEvent:function(w,l,k,s){var q=(w=d(w))+this.retrieve(),x=this.retrieve(g),p="on"+w;if(x&&!w){for(var v in x){if(x[v].length){this.removeEvent(v)}}var r=this.attributes;for(var t,m=r.length;m--;){t=r[m].nodeName.toLowerCase();if(f.on.test(t)&&typeof this[t]==="function"){this[t]=null}}}else{if(x&&x[w]){var o=x[w];for(var u,n=o.length;n--;){u=l||o[n];if(o[n]===u&&k===u.relay&&s===u.proxy){o.splice(n,1);if(!!s&&u.selector){this.cssSelect(u.selector).removeEvent(s)}if(u.attachedElements){u.attachedElements[q]=null}}}if(!x[w].length){if(c){this.removeEventListener(w,i,a[w])}else{this[p]=null}}}else{if(this[p]&&!l&&!k){this[p]=null}}}return this},relayEvent:function(k,j,m,l){if(e(k)){this.relayEvent("focus",j,function(){DOMAssistant.$$(this).removeEvent(k).addEvent(k,function(n){return m.call(this,h(n))})},k).relayEvent("blur",j,function(){DOMAssistant.$$(this).removeEvent(k)},k);return this}return this.addEvent(k,function(s){s=h(s);var r=s.target,n=arguments,o=0,t,p=this.cssSelect(j);while((t=p[o++])){if((t===r||DOMAssistant.hasChild.call(t,r))&&!t.disabled){s.currentTarget=t;var q=m.apply(t,n);if(!q){s.preventDefault()}return q}}},true,l,j)},unrelayEvent:function(j){if(e(j)){return this.removeEvent("focus",null,true,j).removeEvent("blur",null,true,j)}return this.removeEvent(j,null,true)},preventDefault:function(j){if(j.preventDefault){j.preventDefault()}j.returnValue=false},cancelBubble:function(j){if(j.stopPropagation){j.stopPropagation()}j.cancelBubble=true}}}();DOMAssistant.attach(DOMAssistant.Events);DOMAssistant.DOMLoad=function(){var g=false,a=null,f=[],b={},c=null,d=function(){for(var j=0,h=f.length;j<h;j++){try{f[j]()}catch(k){if(c&&typeof c==="function"){c(k)}}}f=[]},e=function(){if(g){return}g=true;d()};
2
+/*@cc_on @if(@_win32||@_win64)document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>");document.getElementById("ieScriptLoad").onreadystatechange=function(){if(this.readyState==="complete"){e()}}@end@*/
3
+if(document.addEventListener){document.addEventListener("DOMContentLoaded",e,false)}if(/KHTML|WebKit|iCab/i.test(navigator.userAgent)){a=setInterval(function(){if(/loaded|complete/i.test(document.readyState)){e();clearInterval(a)}},10)}window.onload=e;return{DOMReady:function(){for(var j=0,h=arguments.length,k;j<h;j++){k=arguments[j];if(!k.DOMReady&&!b[k]){if(typeof k==="string"){b[k]=true;k=new Function(k)}k.DOMReady=true;f.push(k)}}if(g){d()}},setErrorHandling:function(h){c=h}}}();DOMAssistant.DOMReady=DOMAssistant.DOMLoad.DOMReady;
0 4
\ No newline at end of file
1 5
new file mode 100644
... ...
@@ -0,0 +1,20 @@
0
+// https://gist.github.com/901295
1
+// By @mathias, @cheeaun and @jdalton
2
+
3
+(function(doc) {
4
+	var addEvent = 'addEventListener',
5
+	    type = 'gesturestart',
6
+	    qsa = 'querySelectorAll',
7
+	    scales = [1, 1],
8
+	    meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
9
+	function fix() {
10
+		meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
11
+		doc.removeEventListener(type, fix, true);
12
+	}
13
+	if ((meta = meta[meta.length - 1]) && addEvent in doc) {
14
+		fix();
15
+		scales = [.25, 1.6];
16
+		doc[addEvent](type, fix, true);
17
+	}
18
+}(document));
19
+
0 20
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+// Modernizr v1.7  www.modernizr.com
1
+window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document)
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+/*
1
+ * respond.js - A small and fast polyfill for min/max-width CSS3 Media Queries
2
+ * Copyright 2011, Scott Jehl, scottjehl.com
3
+ * Dual licensed under the MIT or GPL Version 2 licenses.
4
+ * Usage: Check out the readme file or github.com/scottjehl/respond
5
+*/
6
+(function(e,h){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=h;if(h){return}var u=e.document,r=u.documentElement,i=[],k=[],p=[],o={},g=30,f=u.getElementsByTagName("head")[0]||r,b=f.getElementsByTagName("link"),d=[],a=function(){var B=b,w=B.length;for(var z=0;z<w;z++){var y=B[z],x=y.href,A=y.media,v=y.rel&&y.rel.toLowerCase()==="stylesheet";if(!!x&&v&&!o[x]){if(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(x)||x.replace(RegExp.$1,"").split("/")[0]===e.location.host){d.push({href:x,media:A})}else{o[x]=true}}}t()},t=function(){if(d.length){var v=d.shift();n(v.href,function(w){m(w,v.href,v.media);o[v.href]=true;t()})}},m=function(G,v,x){var E=G.match(/@media ([^\{]+)\{((?!@media)[\s\S])*(?=\}[\s]*\/\*\/mediaquery\*\/)/gmi),H=E&&E.length||0,v=v.substring(0,v.lastIndexOf("/")),w=function(I){return I.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+v+"$2$3")},y=!H&&x;if(v.length){v+="/"}if(y){H=1}for(var B=0;B<H;B++){var C;if(y){C=x;k.push(w(G))}else{C=E[B].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1;k.push(RegExp.$2&&w(RegExp.$2))}var z=C.split(","),F=z.length;for(var A=0;A<F;A++){var D=z[A];i.push({media:D.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:k.length-1,minw:D.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:D.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}}j()},l,q,j=function(E){var v="clientWidth",x=r[v],D=u.compatMode==="CSS1Compat"&&x||u.body[v]||x,z={},C=u.createDocumentFragment(),B=b[b.length-1],w=(new Date()).getTime();if(E&&l&&w-l<g){clearTimeout(q);q=setTimeout(j,g);return}else{l=w}for(var y in i){var F=i[y];if(!F.minw&&!F.maxw||(!F.minw||F.minw&&D>=F.minw)&&(!F.maxw||F.maxw&&D<=F.maxw)){if(!z[F.media]){z[F.media]=[]}z[F.media].push(k[F.rules])}}for(var y in p){if(p[y]&&p[y].parentNode===f){f.removeChild(p[y])}}for(var y in z){var G=u.createElement("style"),A=z[y].join("\n");G.type="text/css";G.media=y;if(G.styleSheet){G.styleSheet.cssText=A}else{G.appendChild(u.createTextNode(A))}C.appendChild(G);p.push(G)}f.insertBefore(C,B.nextSibling)},n=function(v,x){var w=c();if(!w){return}w.open("GET",v,true);w.onreadystatechange=function(){if(w.readyState!=4||w.status!=200&&w.status!=304){return}x(w.responseText)};if(w.readyState==4){return}w.send()},c=(function(){var v=false,w=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new XMLHttpRequest()}],y=w.length;while(y--){try{v=w[y]()}catch(x){continue}break}return function(){return v}})();a();respond.update=a;function s(){j(true)}if(e.addEventListener){e.addEventListener("resize",s,false)}else{if(e.attachEvent){e.attachEvent("onresize",s)}}})(this,(function(f){if(f.matchMedia){return true}var e,i=document,c=i.documentElement,g=c.firstElementChild||c.firstChild,h=!i.body,d=i.body||i.createElement("body"),b=i.createElement("div"),a="only all";b.id="mq-test-1";b.style.cssText="position:absolute;top:-99em";d.appendChild(b);b.innerHTML='_<style media="'+a+'"> #mq-test-1 { width: 9px; }</style>';if(h){c.insertBefore(d,g)}b.removeChild(b.firstChild);e=b.offsetWidth==9;if(h){c.removeChild(d)}else{d.removeChild(b)}return e})(this));
7
+
0 8
new file mode 100644
... ...
@@ -0,0 +1,5 @@
0
+/*!
1
+ * selectivizr v1.0.2 - (c) Keith Clark, freely distributable under the terms of the MIT license.
2
+ * selectivizr.com
3
+ */
4
+(function(j){function A(a){return a.replace(B,h).replace(C,function(a,d,b){for(var a=b.split(","),b=0,e=a.length;b<e;b++){var s=D(a[b].replace(E,h).replace(F,h))+o,l=[];a[b]=s.replace(G,function(a,b,c,d,e){if(b){if(l.length>0){var a=l,f,e=s.substring(0,e).replace(H,i);if(e==i||e.charAt(e.length-1)==o)e+="*";try{f=t(e)}catch(k){}if(f){e=0;for(c=f.length;e<c;e++){for(var d=f[e],h=d.className,j=0,m=a.length;j<m;j++){var g=a[j];if(!RegExp("(^|\\s)"+g.className+"(\\s|$)").test(d.className)&&g.b&&(g.b===!0||g.b(d)===!0))h=u(h,g.className,!0)}d.className=h}}l=[]}return b}else{if(b=c?I(c):!v||v.test(d)?{className:w(d),b:!0}:null)return l.push(b),"."+b.className;return a}})}return d+a.join(",")})}function I(a){var c=!0,d=w(a.slice(1)),b=a.substring(0,5)==":not(",e,f;b&&(a=a.slice(5,-1));var l=a.indexOf("(");l>-1&&(a=a.substring(0,l));if(a.charAt(0)==":")switch(a.slice(1)){case "root":c=function(a){return b?a!=p:a==p};break;case "target":if(m==8){c=function(a){function c(){var d=location.hash,e=d.slice(1);return b?d==i||a.id!=e:d!=i&&a.id==e}k(j,"hashchange",function(){g(a,d,c())});return c()};break}return!1;case "checked":c=function(a){J.test(a.type)&&k(a,"propertychange",function(){event.propertyName=="checked"&&g(a,d,a.checked!==b)});return a.checked!==b};break;case "disabled":b=!b;case "enabled":c=function(c){if(K.test(c.tagName))return k(c,"propertychange",function(){event.propertyName=="$disabled"&&g(c,d,c.a===b)}),q.push(c),c.a=c.disabled,c.disabled===b;return a==":enabled"?b:!b};break;case "focus":e="focus",f="blur";case "hover":e||(e="mouseenter",f="mouseleave");c=function(a){k(a,b?f:e,function(){g(a,d,!0)});k(a,b?e:f,function(){g(a,d,!1)});return b};break;default:if(!L.test(a))return!1}return{className:d,b:c}}function w(a){return M+"-"+(m==6&&N?O++:a.replace(P,function(a){return a.charCodeAt(0)}))}function D(a){return a.replace(x,h).replace(Q,o)}function g(a,c,d){var b=a.className,c=u(b,c,d);if(c!=b)a.className=c,a.parentNode.className+=i}function u(a,c,d){var b=RegExp("(^|\\s)"+c+"(\\s|$)"),e=b.test(a);return d?e?a:a+o+c:e?a.replace(b,h).replace(x,h):a}function k(a,c,d){a.attachEvent("on"+c,d)}function r(a,c){if(/^https?:\/\//i.test(a))return c.substring(0,c.indexOf("/",8))==a.substring(0,a.indexOf("/",8))?a:null;if(a.charAt(0)=="/")return c.substring(0,c.indexOf("/",8))+a;var d=c.split(/[?#]/)[0];a.charAt(0)!="?"&&d.charAt(d.length-1)!="/"&&(d=d.substring(0,d.lastIndexOf("/")+1));return d+a}function y(a){if(a)return n.open("GET",a,!1),n.send(),(n.status==200?n.responseText:i).replace(R,i).replace(S,function(c,d,b,e,f){return y(r(b||f,a))}).replace(T,function(c,d,b){d=d||i;return" url("+d+r(b,a)+d+") "});return i}function U(){var a,c;a=f.getElementsByTagName("BASE");for(var d=a.length>0?a[0].href:f.location.href,b=0;b<f.styleSheets.length;b++)if(c=f.styleSheets[b],c.href!=i&&(a=r(c.href,d)))c.cssText=A(y(a));q.length>0&&setInterval(function(){for(var a=0,c=q.length;a<c;a++){var b=q[a];if(b.disabled!==b.a)b.disabled?(b.disabled=!1,b.a=!0,b.disabled=!0):b.a=b.disabled}},250)}if(!/*@cc_on!@*/true){var f=document,p=f.documentElement,n=function(){if(j.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return null}}(),m=/MSIE (\d+)/.exec(navigator.userAgent)[1];if(!(f.compatMode!="CSS1Compat"||m<6||m>8||!n)){var z={NW:"*.Dom.select",MooTools:"$$",DOMAssistant:"*.$",Prototype:"$$",YAHOO:"*.util.Selector.query",Sizzle:"*",jQuery:"*",dojo:"*.query"},t,q=[],O=0,N=!0,M="slvzr",R=/(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g,S=/@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g,T=/\burl\(\s*(["']?)(?!data:)([^"')]+)\1\s*\)/g,L=/^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/,B=/:(:first-(?:line|letter))/g,C=/(^|})\s*([^\{]*?[\[:][^{]+)/g,G=/([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g,H=/(:not\()?:(hover|enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g,P=/[^\w-]/g,K=/^(INPUT|SELECT|TEXTAREA|BUTTON)$/,J=/^(checkbox|radio)$/,v=m>6?/[\$\^*]=(['"])\1/:null,E=/([(\[+~])\s+/g,F=/\s+([)\]+~])/g,Q=/\s+/g,x=/^\s*((?:[\S\s]*\S)?)\s*$/,i="",o=" ",h="$1";(function(a,c){function d(){try{p.doScroll("left")}catch(a){setTimeout(d,50);return}b("poll")}function b(d){if(!(d.type=="readystatechange"&&f.readyState!="complete")&&((d.type=="load"?a:f).detachEvent("on"+d.type,b,!1),!e&&(e=!0)))c.call(a,d.type||d)}var e=!1,g=!0;if(f.readyState=="complete")c.call(a,i);else{if(f.createEventObject&&p.doScroll){try{g=!a.frameElement}catch(h){}g&&d()}k(f,"readystatechange",b);k(a,"load",b)}})(j,function(){for(var a in z){var c,d,b=j;if(j[a]){for(c=z[a].replace("*",a).split(".");(d=c.shift())&&(b=b[d]););if(typeof b=="function"){t=b;U();break}}}})}}})(this);
0 5
\ No newline at end of file
1 6
deleted file mode 100644
... ...
@@ -1,100 +0,0 @@
1
-//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.
2
-
3
-MooTools.More={version:"1.2.4.2",build:"bd5a93c0913cce25917c48cbdacde568e15e02ef"};(function(){var a={language:"en-US",languages:{"en-US":{}},cascades:["en-US"]};
4
-var b;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(c){if(!a.languages[c]){return this;}a.language=c;this.load();this.fireEvent("langChange",c);
5
-return this;},load:function(){var c=this.cascade(this.getCurrentLanguage());b={};$each(c,function(e,d){b[d]=this.lambda(e);},this);},getCurrentLanguage:function(){return a.language;
6
-},addLanguage:function(c){a.languages[c]=a.languages[c]||{};return this;},cascade:function(e){var c=(a.languages[e]||{}).cascades||[];c.combine(a.cascades);
7
-c.erase(e).push(e);var d=c.map(function(f){return a.languages[f];},this);return $merge.apply(this,d);},lambda:function(c){(c||{}).get=function(e,d){return $lambda(c[e]).apply(this,$splat(d));
8
-};return c;},get:function(e,d,c){if(b&&b[e]){return(d?b[e].get(d,c):b[e]);}},set:function(d,e,c){this.addLanguage(d);langData=a.languages[d];if(!langData[e]){langData[e]={};
9
-}$extend(langData[e],c);if(d==this.getCurrentLanguage()){this.load();this.fireEvent("langChange",d);}return this;},list:function(){return Hash.getKeys(a.languages);
10
-}});})();(function(){var i=this.Date;if(!i.now){i.now=$time;}i.Methods={ms:"Milliseconds",year:"FullYear",min:"Minutes",mo:"Month",sec:"Seconds",hr:"Hours"};
11
-["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds","Time","TimezoneOffset","Week","Timezone","GMTOffset","DayOfYear","LastMonth","LastDayOfMonth","UTCDate","UTCDay","UTCFullYear","AMPM","Ordinal","UTCHours","UTCMilliseconds","UTCMinutes","UTCMonth","UTCSeconds"].each(function(p){i.Methods[p.toLowerCase()]=p;
12
-});var d=function(q,p){return new Array(p-String(q).length+1).join("0")+q;};i.implement({set:function(t,r){switch($type(t)){case"object":for(var s in t){this.set(s,t[s]);
13
-}break;case"string":t=t.toLowerCase();var q=i.Methods;if(q[t]){this["set"+q[t]](r);}}return this;},get:function(q){q=q.toLowerCase();var p=i.Methods;if(p[q]){return this["get"+p[q]]();
14
-}return null;},clone:function(){return new i(this.get("time"));},increment:function(p,r){p=p||"day";r=$pick(r,1);switch(p){case"year":return this.increment("month",r*12);
15
-case"month":var q=this.get("date");this.set("date",1).set("mo",this.get("mo")+r);return this.set("date",q.min(this.get("lastdayofmonth")));case"week":return this.increment("day",r*7);
16
-case"day":return this.set("date",this.get("date")+r);}if(!i.units[p]){throw new Error(p+" is not a supported interval");}return this.set("time",this.get("time")+r*i.units[p]());
17
-},decrement:function(p,q){return this.increment(p,-1*$pick(q,1));},isLeapYear:function(){return i.isLeapYear(this.get("year"));},clearTime:function(){return this.set({hr:0,min:0,sec:0,ms:0});
18
-},diff:function(q,p){if($type(q)=="string"){q=i.parse(q);}return((q-this)/i.units[p||"day"](3,3)).toInt();},getLastDayOfMonth:function(){return i.daysInMonth(this.get("mo"),this.get("year"));
19
-},getDayOfYear:function(){return(i.UTC(this.get("year"),this.get("mo"),this.get("date")+1)-i.UTC(this.get("year"),0,1))/i.units.day();},getWeek:function(){return(this.get("dayofyear")/7).ceil();
20
-},getOrdinal:function(p){return i.getMsg("ordinal",p||this.get("date"));},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");
21
-},getGMTOffset:function(){var p=this.get("timezoneOffset");return((p>0)?"-":"+")+d((p.abs()/60).floor(),2)+d(p%60,2);},setAMPM:function(p){p=p.toUpperCase();
22
-var q=this.get("hr");if(q>11&&p=="AM"){return this.decrement("hour",12);}else{if(q<12&&p=="PM"){return this.increment("hour",12);}}return this;},getAMPM:function(){return(this.get("hr")<12)?"AM":"PM";
23
-},parse:function(p){this.set("time",i.parse(p));return this;},isValid:function(p){return !!(p||this).valueOf();},format:function(p){if(!this.isValid()){return"invalid date";
24
-}p=p||"%x %X";p=k[p.toLowerCase()]||p;var q=this;return p.replace(/%([a-z%])/gi,function(s,r){switch(r){case"a":return i.getMsg("days")[q.get("day")].substr(0,3);
25
-case"A":return i.getMsg("days")[q.get("day")];case"b":return i.getMsg("months")[q.get("month")].substr(0,3);case"B":return i.getMsg("months")[q.get("month")];
26
-case"c":return q.toString();case"d":return d(q.get("date"),2);case"H":return d(q.get("hr"),2);case"I":return((q.get("hr")%12)||12);case"j":return d(q.get("dayofyear"),3);
27
-case"m":return d((q.get("mo")+1),2);case"M":return d(q.get("min"),2);case"o":return q.get("ordinal");case"p":return i.getMsg(q.get("ampm"));case"S":return d(q.get("seconds"),2);
28
-case"U":return d(q.get("week"),2);case"w":return q.get("day");case"x":return q.format(i.getMsg("shortDate"));case"X":return q.format(i.getMsg("shortTime"));
29
-case"y":return q.get("year").toString().substr(2);case"Y":return q.get("year");case"T":return q.get("GMTOffset");case"Z":return q.get("Timezone");}return r;
30
-});},toISOString:function(){return this.format("iso8601");}});i.alias("toISOString","toJSON");i.alias("diff","compare");i.alias("format","strftime");var k={db:"%Y-%m-%d %H:%M:%S",compact:"%Y%m%dT%H%M%S",iso8601:"%Y-%m-%dT%H:%M:%S%T",rfc822:"%a, %d %b %Y %H:%M:%S %Z","short":"%d %b %H:%M","long":"%B %d, %Y %H:%M"};
31
-var g=[];var e=i.parse;var n=function(s,u,r){var q=-1;var t=i.getMsg(s+"s");switch($type(u)){case"object":q=t[u.get(s)];break;case"number":q=t[month-1];
32
-if(!q){throw new Error("Invalid "+s+" index: "+index);}break;case"string":var p=t.filter(function(v){return this.test(v);},new RegExp("^"+u,"i"));if(!p.length){throw new Error("Invalid "+s+" string");
33
-}if(p.length>1){throw new Error("Ambiguous "+s);}q=p[0];}return(r)?t.indexOf(q):q;};i.extend({getMsg:function(q,p){return MooTools.lang.get("Date",q,p);
34
-},units:{ms:$lambda(1),second:$lambda(1000),minute:$lambda(60000),hour:$lambda(3600000),day:$lambda(86400000),week:$lambda(608400000),month:function(q,p){var r=new i;
35
-return i.daysInMonth($pick(q,r.get("mo")),$pick(p,r.get("year")))*86400000;},year:function(p){p=p||new i().get("year");return i.isLeapYear(p)?31622400000:31536000000;
36
-}},daysInMonth:function(q,p){return[31,i.isLeapYear(p)?29:28,31,30,31,30,31,31,30,31,30,31][q];},isLeapYear:function(p){return((p%4===0)&&(p%100!==0))||(p%400===0);
37
-},parse:function(r){var q=$type(r);if(q=="number"){return new i(r);}if(q!="string"){return r;}r=r.clean();if(!r.length){return null;}var p;g.some(function(t){var s=t.re.exec(r);
38
-return(s)?(p=t.handler(s)):false;});return p||new i(e(r));},parseDay:function(p,q){return n("day",p,q);},parseMonth:function(q,p){return n("month",q,p);
39
-},parseUTC:function(q){var p=new i(q);var r=i.UTC(p.get("year"),p.get("mo"),p.get("date"),p.get("hr"),p.get("min"),p.get("sec"));return new i(r);},orderIndex:function(p){return i.getMsg("dateOrder").indexOf(p)+1;
40
-},defineFormat:function(p,q){k[p]=q;},defineFormats:function(p){for(var q in p){i.defineFormat(q,p[q]);}},parsePatterns:g,defineParser:function(p){g.push((p.re&&p.handler)?p:l(p));
41
-},defineParsers:function(){Array.flatten(arguments).each(i.defineParser);},define2DigitYearStart:function(p){h=p%100;m=p-h;}});var m=1900;var h=70;var j=function(p){return new RegExp("(?:"+i.getMsg(p).map(function(q){return q.substr(0,3);
42
-}).join("|")+")[a-z]*");};var a=function(p){switch(p){case"x":return((i.orderIndex("month")==1)?"%m[.-/]%d":"%d[.-/]%m")+"([.-/]%y)?";case"X":return"%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%T?";
43
-}return null;};var o={d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,o:/[a-z]*/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,T:/Z|[+-]\d{2}(?::?\d{2})?/};
44
-o.m=o.I;o.S=o.M;var c;var b=function(p){c=p;o.a=o.A=j("days");o.b=o.B=j("months");g.each(function(r,q){if(r.format){g[q]=l(r.format);}});};var l=function(r){if(!c){return{format:r};
45
-}var p=[];var q=(r.source||r).replace(/%([a-z])/gi,function(t,s){return a(s)||t;}).replace(/\((?!\?)/g,"(?:").replace(/ (?!\?|\*)/g,",? ").replace(/%([a-z%])/gi,function(t,s){var u=o[s];
46
-if(!u){return s;}p.push(s);return"("+u.source+")";}).replace(/\[a-z\]/gi,"[a-z\\u00c0-\\uffff]");return{format:r,re:new RegExp("^"+q+"$","i"),handler:function(u){u=u.slice(1).associate(p);
47
-var s=new i().clearTime();if("d" in u){f.call(s,"d",1);}if("m" in u){f.call(s,"m",1);}for(var t in u){f.call(s,t,u[t]);}return s;}};};var f=function(p,q){if(!q){return this;
48
-}switch(p){case"a":case"A":return this.set("day",i.parseDay(q,true));case"b":case"B":return this.set("mo",i.parseMonth(q,true));case"d":return this.set("date",q);
49
-case"H":case"I":return this.set("hr",q);case"m":return this.set("mo",q-1);case"M":return this.set("min",q);case"p":return this.set("ampm",q.replace(/\./g,""));
50
-case"S":return this.set("sec",q);case"s":return this.set("ms",("0."+q)*1000);case"w":return this.set("day",q);case"Y":return this.set("year",q);case"y":q=+q;
51
-if(q<100){q+=m+(q<h?100:0);}return this.set("year",q);case"T":if(q=="Z"){q="+00";}var r=q.match(/([+-])(\d{2}):?(\d{2})?/);r=(r[1]+"1")*(r[2]*60+(+r[3]||0))+this.getTimezoneOffset();
52
-return this.set("time",this-r*60000);}return this;};i.defineParsers("%Y([-./]%m([-./]%d((T| )%X)?)?)?","%Y%m%d(T%H(%M%S?)?)?","%x( %X)?","%d%o( %b( %Y)?)?( %X)?","%b( %d%o)?( %Y)?( %X)?","%Y %b( %d%o( %X)?)?","%o %b %d %X %T %Y");
53
-MooTools.lang.addEvent("langChange",function(p){if(MooTools.lang.get("Date")){b(p);}}).fireEvent("langChange",MooTools.lang.getCurrentLanguage());})();
54
-Date.implement({timeDiffInWords:function(a){return Date.distanceOfTimeInWords(this,a||new Date);},timeDiff:function(g,b){if(g==null){g=new Date;}var f=((g-this)/1000).toInt();
55
-if(!f){return"0s";}var a={s:60,m:60,h:24,d:365,y:0};var e,d=[];for(var c in a){if(!f){break;}if((e=a[c])){d.unshift((f%e)+c);f=(f/e).toInt();}else{d.unshift(f+c);
56
-}}return d.join(b||":");}});Date.alias("timeDiffInWords","timeAgoInWords");Date.extend({distanceOfTimeInWords:function(b,a){return Date.getTimePhrase(((a-b)/1000).toInt());
57
-},getTimePhrase:function(f){var d=(f<0)?"Until":"Ago";if(f<0){f*=-1;}var b={minute:60,hour:60,day:24,week:7,month:52/12,year:12,eon:Infinity};var e="lessThanMinute";
58
-for(var c in b){var a=b[c];if(f<1.5*a){if(f>0.75*a){e=c;}break;}f/=a;e=c+"s";}return Date.getMsg(e+d).substitute({delta:f.round()});}});Date.defineParsers({re:/^(?:tod|tom|yes)/i,handler:function(a){var b=new Date().clearTime();
59
-switch(a[0]){case"tom":return b.increment();case"yes":return b.decrement();default:return b;}}},{re:/^(next|last) ([a-z]+)$/i,handler:function(e){var f=new Date().clearTime();
60
-var b=f.getDay();var c=Date.parseDay(e[2],true);var a=c-b;if(c<=b){a+=7;}if(e[1]=="last"){a-=7;}return f.set("date",f.getDate()+a);}});Element.implement({measure:function(e){var g=function(h){return !!(!h||h.offsetHeight||h.offsetWidth);
61
-};if(g(this)){return e.apply(this);}var d=this.getParent(),f=[],b=[];while(!g(d)&&d!=document.body){b.push(d.expose());d=d.getParent();}var c=this.expose();
62
-var a=e.apply(this);c();b.each(function(h){h();});return a;},expose:function(){if(this.getStyle("display")!="none"){return $empty;}var a=this.style.cssText;
63
-this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=a;}.bind(this);},getDimensions:function(a){a=$merge({computeSize:false},a);
64
-var f={};var d=function(g,e){return(e.computeSize)?g.getComputedSize(e):g.getSize();};var b=this.getParent("body");if(b&&this.getStyle("display")=="none"){f=this.measure(function(){return d(this,a);
65
-});}else{if(b){try{f=d(this,a);}catch(c){}}else{f={x:0,y:0};}}return $chk(f.x)?$extend(f,{width:f.x,height:f.y}):$extend(f,{x:f.width,y:f.height});},getComputedSize:function(a){a=$merge({styles:["padding","border"],plains:{height:["top","bottom"],width:["left","right"]},mode:"both"},a);
66
-var c={width:0,height:0};switch(a.mode){case"vertical":delete c.width;delete a.plains.width;break;case"horizontal":delete c.height;delete a.plains.height;
67
-break;}var b=[];$each(a.plains,function(g,f){g.each(function(h){a.styles.each(function(i){b.push((i=="border")?i+"-"+h+"-width":i+"-"+h);});});});var e={};
68
-b.each(function(f){e[f]=this.getComputedStyle(f);},this);var d=[];$each(a.plains,function(g,f){var h=f.capitalize();c["total"+h]=c["computed"+h]=0;g.each(function(i){c["computed"+i.capitalize()]=0;
69
-b.each(function(k,j){if(k.test(i)){e[k]=e[k].toInt()||0;c["total"+h]=c["total"+h]+e[k];c["computed"+i.capitalize()]=c["computed"+i.capitalize()]+e[k];}if(k.test(i)&&f!=k&&(k.test("border")||k.test("padding"))&&!d.contains(k)){d.push(k);
70
-c["computed"+h]=c["computed"+h]-e[k];}});});});["Width","Height"].each(function(g){var f=g.toLowerCase();if(!$chk(c[f])){return;}c[f]=c[f]+this["offset"+g]+c["computed"+g];
71
-c["total"+g]=c[f]+c["total"+g];delete c["computed"+g];},this);return $extend(e,c);}});Element.implement({isDisplayed:function(){return this.getStyle("display")!="none";
72
-},isVisible:function(){var a=this.offsetWidth,b=this.offsetHeight;return(a==0&&b==0)?false:(a>0&&b>0)?true:this.isDisplayed();},toggle:function(){return this[this.isDisplayed()?"hide":"show"]();
73
-},hide:function(){var b;try{if((b=this.getStyle("display"))=="none"){b=null;}}catch(a){}return this.store("originalDisplay",b||"block").setStyle("display","none");
74
-},show:function(a){return this.setStyle("display",a||this.retrieve("originalDisplay")||"block");},swapClass:function(a,b){return this.removeClass(a).addClass(b);
75
-}});Fx.Reveal=new Class({Extends:Fx.Morph,options:{link:"cancel",styles:["padding","border","margin"],transitionOpacity:!Browser.Engine.trident4,mode:"vertical",display:"block",hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed":false},dissolve:function(){try{if(!this.hiding&&!this.showing){if(this.element.getStyle("display")!="none"){this.hiding=true;
76
-this.showing=false;this.hidden=true;this.cssText=this.element.style.cssText;var d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
77
-this.element.setStyle("display","block");if(this.options.transitionOpacity){d.opacity=1;}var b={};$each(d,function(f,e){b[e]=[f,0];},this);this.element.setStyle("overflow","hidden");
78
-var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;this.$chain.unshift(function(){if(this.hidden){this.hiding=false;$each(d,function(f,e){d[e]=f;
79
-},this);this.element.style.cssText=this.cssText;this.element.setStyle("display","none");if(a){a.setStyle("visibility","visible");}}this.fireEvent("hide",this.element);
80
-this.callChain();}.bind(this));if(a){a.setStyle("visibility","hidden");}this.start(b);}else{this.callChain.delay(10,this);this.fireEvent("complete",this.element);
81
-this.fireEvent("hide",this.element);}}else{if(this.options.link=="chain"){this.chain(this.dissolve.bind(this));}else{if(this.options.link=="cancel"&&!this.hiding){this.cancel();
82
-this.dissolve();}}}}catch(c){this.hiding=false;this.element.setStyle("display","none");this.callChain.delay(10,this);this.fireEvent("complete",this.element);
83
-this.fireEvent("hide",this.element);}return this;},reveal:function(){try{if(!this.showing&&!this.hiding){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.showing=true;
84
-this.hiding=this.hidden=false;var d;this.cssText=this.element.style.cssText;this.element.measure(function(){d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
85
-}.bind(this));$each(d,function(f,e){d[e]=f;});if($chk(this.options.heightOverride)){d.height=this.options.heightOverride.toInt();}if($chk(this.options.widthOverride)){d.width=this.options.widthOverride.toInt();
86
-}if(this.options.transitionOpacity){this.element.setStyle("opacity",0);d.opacity=1;}var b={height:0,display:this.options.display};$each(d,function(f,e){b[e]=0;
87
-});this.element.setStyles($merge(b,{overflow:"hidden"}));var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;if(a){a.setStyle("visibility","hidden");
88
-}this.start(d);this.$chain.unshift(function(){this.element.style.cssText=this.cssText;this.element.setStyle("display",this.options.display);if(!this.hidden){this.showing=false;
89
-}if(a){a.setStyle("visibility","visible");}this.callChain();this.fireEvent("show",this.element);}.bind(this));}else{this.callChain();this.fireEvent("complete",this.element);
90
-this.fireEvent("show",this.element);}}else{if(this.options.link=="chain"){this.chain(this.reveal.bind(this));}else{if(this.options.link=="cancel"&&!this.showing){this.cancel();
91
-this.reveal();}}}}catch(c){this.element.setStyles({display:this.options.display,visiblity:"visible",opacity:1});this.showing=false;this.callChain.delay(10,this);
92
-this.fireEvent("complete",this.element);this.fireEvent("show",this.element);}return this;},toggle:function(){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.reveal();
93
-}else{this.dissolve();}return this;},cancel:function(){this.parent.apply(this,arguments);this.element.style.cssText=this.cssText;this.hidding=false;this.showing=false;
94
-}});Element.Properties.reveal={set:function(a){var b=this.retrieve("reveal");if(b){b.cancel();}return this.eliminate("reveal").store("reveal:options",a);
95
-},get:function(a){if(a||!this.retrieve("reveal")){if(a||!this.retrieve("reveal:options")){this.set("reveal",a);}this.store("reveal",new Fx.Reveal(this,this.retrieve("reveal:options")));
96
-}return this.retrieve("reveal");}};Element.Properties.dissolve=Element.Properties.reveal;Element.implement({reveal:function(a){this.get("reveal",a).reveal();
97
-return this;},dissolve:function(a){this.get("reveal",a).dissolve();return this;},nix:function(){var a=Array.link(arguments,{destroy:Boolean.type,options:Object.type});
98
-this.get("reveal",a.options).dissolve().chain(function(){this[a.destroy?"destroy":"dispose"]();}.bind(this));return this;},wink:function(){var b=Array.link(arguments,{duration:Number.type,options:Object.type});
99
-var a=this.get("reveal",b.options);a.reveal().chain(function(){(function(){a.dissolve();}).delay(b.duration||2000);});}});MooTools.lang.set("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
100
-},lessThanMinuteAgo:"less than a minute ago",minuteAgo:"about a minute ago",minutesAgo:"{delta} minutes ago",hourAgo:"about an hour ago",hoursAgo:"about {delta} hours ago",dayAgo:"1 day ago",daysAgo:"{delta} days ago",weekAgo:"1 week ago",weeksAgo:"{delta} weeks ago",monthAgo:"1 month ago",monthsAgo:"{delta} months ago",yearAgo:"1 year ago",yearsAgo:"{delta} years ago",lessThanMinuteUntil:"less than a minute from now",minuteUntil:"about a minute from now",minutesUntil:"{delta} minutes from now",hourUntil:"about an hour from now",hoursUntil:"about {delta} hours from now",dayUntil:"1 day from now",daysUntil:"{delta} days from now",weekUntil:"1 week from now",weeksUntil:"{delta} weeks from now",monthUntil:"1 month from now",monthsUntil:"{delta} months from now",yearUntil:"1 year from now",yearsUntil:"{delta} years from now"});
101 1
deleted file mode 100644
... ...
@@ -1,1322 +0,0 @@
1
-// MooTools: the javascript framework.
2
-// Load this file's selection again by visiting: http://mootools.net/more/0a2b8625655481363709ef8d9ab1d0f4
3
-// Or build this file again with packager using: packager build More/Date More/Date.Extras More/Hash More/Request.JSONP
4
-/*
5
-
6
-script: More.js
7
-
8
-name: More
9
-
10
-description: MooTools More
11
-
12
-license: MIT-style license
13
-
14
-authors:
15
-  - Guillermo Rauch
16
-  - Thomas Aylott
17
-  - Scott Kyle
18
-  - Arian Stolwijk
19
-  - Tim Wienk
20
-  - Christoph Pojer
21
-  - Aaron Newton
22
-
23
-requires:
24
-  - Core/MooTools
25
-
26
-provides: [MooTools.More]
27
-
28
-...
29
-*/
30
-
31
-MooTools.More = {
32
-	'version': '1.3.1.1',
33
-	'build': '0292a3af1eea242b817fecf9daa127417d10d4ce'
34
-};
35
-
36
-
37
-/*
38
-
39
-script: Object.Extras.js
40
-
41
-name: Object.Extras
42
-
43
-description: Extra Object generics, like getFromPath which allows a path notation to child elements.
44
-
45
-license: MIT-style license
46
-
47
-authors:
48
-  - Aaron Newton
49
-
50
-requires:
51
-  - Core/Object
52
-  - /MooTools.More
53
-
54
-provides: [Object.Extras]
55
-
56
-...
57
-*/
58
-
59
-(function(){
60
-
61
-var defined = function(value){
62
-	return value != null;
63
-};
64
-
65
-var hasOwnProperty = Object.prototype.hasOwnProperty;
66
-
67
-Object.extend({
68
-
69
-	getFromPath: function(source, parts){
70
-		if (typeof parts == 'string') parts = parts.split('.');
71
-		for (var i = 0, l = parts.length; i < l; i++){
72
-			if (hasOwnProperty.call(source, parts[i])) source = source[parts[i]];
73
-			else return null;
74
-		}
75
-		return source;
76
-	},
77
-
78
-	cleanValues: function(object, method){
79
-		method = method || defined;
80
-		for (var key in object) if (!method(object[key])){
81
-			delete object[key];
82
-		}
83
-		return object;
84
-	},
85
-
86
-	erase: function(object, key){
87
-		if (hasOwnProperty.call(object, key)) delete object[key];
88
-		return object;
89
-	},
90
-
91
-	run: function(object){
92
-		var args = Array.slice(arguments, 1);
93
-		for (var key in object) if (object[key].apply){
94
-			object[key].apply(object, args);
95
-		}
96
-		return object;
97
-	}
98
-
99
-});
100
-
101
-}).call(this);
102
-
103
-
104
-/*
105
-
106
-script: Locale.js
107
-
108
-name: Locale
109
-
110
-description: Provides methods for localization.
111
-
112
-license: MIT-style license
113
-
114
-authors:
115
-  - Aaron Newton
116
-  - Arian Stolwijk
117
-
118
-requires:
119
-  - Core/Events
120
-  - /Object.Extras
121
-  - /MooTools.More
122
-
123
-provides: [Locale, Lang]
124
-
125
-...
126
-*/
127
-
128
-(function(){
129
-
130
-var current = null,
131
-	locales = {},
132
-	inherits = {};
133
-
134
-var getSet = function(set){
135
-	if (instanceOf(set, Locale.Set)) return set;
136
-	else return locales[set];
137
-};
138
-
139
-var Locale = this.Locale = {
140
-
141
-	define: function(locale, set, key, value){
142
-		var name;
143
-		if (instanceOf(locale, Locale.Set)){
144
-			name = locale.name;
145
-			if (name) locales[name] = locale;
146
-		} else {
147
-			name = locale;
148
-			if (!locales[name]) locales[name] = new Locale.Set(name);
149
-			locale = locales[name];
150
-		}
151
-
152
-		if (set) locale.define(set, key, value);
153
-
154
-
155
-
156
-		if (!current) current = locale;
157
-
158
-		return locale;
159
-	},
160
-
161
-	use: function(locale){
162
-		locale = getSet(locale);
163
-
164
-		if (locale){
165
-			current = locale;
166
-
167
-			this.fireEvent('change', locale);
168
-
169
-
170
-		}
171
-
172
-		return this;
173
-	},
174
-
175
-	getCurrent: function(){
176
-		return current;
177
-	},
178
-
179
-	get: function(key, args){
180
-		return (current) ? current.get(key, args) : '';
181
-	},
182
-
183
-	inherit: function(locale, inherits, set){
184
-		locale = getSet(locale);
185
-
186
-		if (locale) locale.inherit(inherits, set);
187
-		return this;
188
-	},
189
-
190
-	list: function(){
191
-		return Object.keys(locales);
192
-	}
193
-
194
-};
195
-
196
-Object.append(Locale, new Events);
197
-
198
-Locale.Set = new Class({
199
-
200
-	sets: {},
201
-
202
-	inherits: {
203
-		locales: [],
204
-		sets: {}
205
-	},
206
-
207
-	initialize: function(name){
208
-		this.name = name || '';
209
-	},
210
-
211
-	define: function(set, key, value){
212
-		var defineData = this.sets[set];
213
-		if (!defineData) defineData = {};
214
-
215
-		if (key){
216
-			if (typeOf(key) == 'object') defineData = Object.merge(defineData, key);
217
-			else defineData[key] = value;
218
-		}
219
-		this.sets[set] = defineData;
220
-
221
-		return this;
222
-	},
223
-
224
-	get: function(key, args, _base){
225
-		var value = Object.getFromPath(this.sets, key);
226
-		if (value != null){
227
-			var type = typeOf(value);
228
-			if (type == 'function') value = value.apply(null, Array.from(args));
229
-			else if (type == 'object') value = Object.clone(value);
230
-			return value;
231
-		}
232
-
233
-		// get value of inherited locales
234
-		var index = key.indexOf('.'),
235
-			set = index < 0 ? key : key.substr(0, index),
236
-			names = (this.inherits.sets[set] || []).combine(this.inherits.locales).include('en-US');
237
-		if (!_base) _base = [];
238
-
239
-		for (var i = 0, l = names.length; i < l; i++){
240
-			if (_base.contains(names[i])) continue;
241
-			_base.include(names[i]);
242
-
243
-			var locale = locales[names[i]];
244
-			if (!locale) continue;
245
-
246
-			value = locale.get(key, args, _base);
247
-			if (value != null) return value;
248
-		}
249
-
250
-		return '';
251
-	},
252
-
253
-	inherit: function(names, set){
254
-		names = Array.from(names);
255
-
256
-		if (set && !this.inherits.sets[set]) this.inherits.sets[set] = [];
257
-
258
-		var l = names.length;
259
-		while (l--) (set ? this.inherits.sets[set] : this.inherits.locales).unshift(names[l]);
260
-
261
-		return this;
262
-	}
263
-
264
-});
265
-
266
-
267
-
268
-}).call(this);
269
-
270
-
271
-/*
272
-
273
-name: Locale.en-US.Date
274
-
275
-description: Date messages for US English.
276
-
277
-license: MIT-style license
278
-
279
-authors:
280
-  - Aaron Newton
281
-
282
-requires:
283
-  - /Locale
284
-
285
-provides: [Locale.en-US.Date]
286
-
287
-...
288
-*/
289
-
290
-Locale.define('en-US', 'Date', {
291
-
292
-	months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
293
-	months_abbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
294
-	days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
295
-	days_abbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
296
-
297
-	// Culture's date order: MM/DD/YYYY
298
-	dateOrder: ['month', 'date', 'year'],
299
-	shortDate: '%m/%d/%Y',
300
-	shortTime: '%I:%M%p',
301
-	AM: 'AM',
302
-	PM: 'PM',
303
-	firstDayOfWeek: 0,
304
-
305
-	// Date.Extras
306
-	ordinal: function(dayOfMonth){
307
-		// 1st, 2nd, 3rd, etc.
308
-		return (dayOfMonth > 3 && dayOfMonth < 21) ? 'th' : ['th', 'st', 'nd', 'rd', 'th'][Math.min(dayOfMonth % 10, 4)];
309
-	},
310
-
311
-	lessThanMinuteAgo: 'less than a minute ago',
312
-	minuteAgo: 'about a minute ago',
313
-	minutesAgo: '{delta} minutes ago',
314
-	hourAgo: 'about an hour ago',
315
-	hoursAgo: 'about {delta} hours ago',
316
-	dayAgo: '1 day ago',
317
-	daysAgo: '{delta} days ago',
318
-	weekAgo: '1 week ago',
319
-	weeksAgo: '{delta} weeks ago',
320
-	monthAgo: '1 month ago',
321
-	monthsAgo: '{delta} months ago',
322
-	yearAgo: '1 year ago',
323
-	yearsAgo: '{delta} years ago',
324
-
325
-	lessThanMinuteUntil: 'less than a minute from now',
326
-	minuteUntil: 'about a minute from now',
327
-	minutesUntil: '{delta} minutes from now',
328
-	hourUntil: 'about an hour from now',
329
-	hoursUntil: 'about {delta} hours from now',
330
-	dayUntil: '1 day from now',
331
-	daysUntil: '{delta} days from now',
332
-	weekUntil: '1 week from now',
333
-	weeksUntil: '{delta} weeks from now',
334
-	monthUntil: '1 month from now',
335
-	monthsUntil: '{delta} months from now',
336
-	yearUntil: '1 year from now',
337
-	yearsUntil: '{delta} years from now'
338
-
339
-});
340
-
341
-
342
-/*
343
-
344
-script: Date.js
345
-
346
-name: Date
347
-
348
-description: Extends the Date native object to include methods useful in managing dates.
349
-
350
-license: MIT-style license
351
-
352
-authors:
353
-  - Aaron Newton
354
-  - Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/
355
-  - Harald Kirshner - mail [at] digitarald.de; http://digitarald.de
356
-  - Scott Kyle - scott [at] appden.com; http://appden.com
357
-
358
-requires:
359
-  - Core/Array
360
-  - Core/String
361
-  - Core/Number
362
-  - MooTools.More
363
-  - Locale
364
-  - Locale.en-US.Date
365
-
366
-provides: [Date]
367
-
368
-...
369
-*/
370
-
371
-(function(){
372
-
373
-var Date = this.Date;
374
-
375
-var DateMethods = Date.Methods = {
376
-	ms: 'Milliseconds',
377
-	year: 'FullYear',
378
-	min: 'Minutes',
379
-	mo: 'Month',
380
-	sec: 'Seconds',
381
-	hr: 'Hours'
382
-};
383
-
384
-['Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset',
385
-	'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear',
386
-	'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds', 'UTCMilliseconds'].each(function(method){
387
-	Date.Methods[method.toLowerCase()] = method;
388
-});
389
-
390
-var pad = function(n, digits, string){
391
-	if (digits == 1) return n;
392
-	return n < Math.pow(10, digits - 1) ? (string || '0') + pad(n, digits - 1, string) : n;
393
-};
394
-
395
-Date.implement({
396
-
397
-	set: function(prop, value){
398
-		prop = prop.toLowerCase();
399
-		var method = DateMethods[prop] && 'set' + DateMethods[prop];
400
-		if (method && this[method]) this[method](value);
401
-		return this;
402
-	}.overloadSetter(),
403
-
404
-	get: function(prop){
405
-		prop = prop.toLowerCase();
406
-		var method = DateMethods[prop] && 'get' + DateMethods[prop];
407
-		if (method && this[method]) return this[method]();
408
-		return null;
409
-	}.overloadGetter(),
410
-
411
-	clone: function(){
412
-		return new Date(this.get('time'));
413
-	},
414
-
415
-	increment: function(interval, times){
416
-		interval = interval || 'day';
417
-		times = times != null ? times : 1;
418
-
419
-		switch (interval){
420
-			case 'year':
421
-				return this.increment('month', times * 12);
422
-			case 'month':
423
-				var d = this.get('date');
424
-				this.set('date', 1).set('mo', this.get('mo') + times);
425
-				return this.set('date', d.min(this.get('lastdayofmonth')));
426
-			case 'week':
427
-				return this.increment('day', times * 7);
428
-			case 'day':
429
-				return this.set('date', this.get('date') + times);
430
-		}
431
-
432
-		if (!Date.units[interval]) throw new Error(interval + ' is not a supported interval');
433
-
434
-		return this.set('time', this.get('time') + times * Date.units[interval]());
435
-	},
436
-
437
-	decrement: function(interval, times){
438
-		return this.increment(interval, -1 * (times != null ? times : 1));
439
-	},
440
-
441
-	isLeapYear: function(){
442
-		return Date.isLeapYear(this.get('year'));
443
-	},
444
-
445
-	clearTime: function(){
446
-		return this.set({hr: 0, min: 0, sec: 0, ms: 0});
447
-	},
448
-
449
-	diff: function(date, resolution){
450
-		if (typeOf(date) == 'string') date = Date.parse(date);
451
-
452
-		return ((date - this) / Date.units[resolution || 'day'](3, 3)).round(); // non-leap year, 30-day month
453
-	},
454
-
455
-	getLastDayOfMonth: function(){
456
-		return Date.daysInMonth(this.get('mo'), this.get('year'));
457
-	},
458
-
459
-	getDayOfYear: function(){
460
-		return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1)
461
-			- Date.UTC(this.get('year'), 0, 1)) / Date.units.day();
462
-	},
463
-
464
-	setDay: function(day, firstDayOfWeek){
465
-		if (firstDayOfWeek == null){
466
-			firstDayOfWeek = Date.getMsg('firstDayOfWeek');
467
-			if (firstDayOfWeek === '') firstDayOfWeek = 1;
468
-		}
469
-
470
-		day = (7 + Date.parseDay(day, true) - firstDayOfWeek) % 7;
471
-		var currentDay = (7 + this.get('day') - firstDayOfWeek) % 7;
472
-
473
-		return this.increment('day', day - currentDay);
474
-	},
475
-
476
-	getWeek: function(firstDayOfWeek){
477
-		if (firstDayOfWeek == null){
478
-			firstDayOfWeek = Date.getMsg('firstDayOfWeek');
479
-			if (firstDayOfWeek === '') firstDayOfWeek = 1;
480
-		}
481
-
482
-		var date = this,
483
-			dayOfWeek = (7 + date.get('day') - firstDayOfWeek) % 7,
484
-			dividend = 0,
485
-			firstDayOfYear;
486
-
487
-		if (firstDayOfWeek == 1){
488
-			// ISO-8601, week belongs to year that has the most days of the week (i.e. has the thursday of the week)
489
-			var month = date.get('month'),
490
-				startOfWeek = date.get('date') - dayOfWeek;
491
-
492
-			if (month == 11 && startOfWeek > 28) return 1; // Week 1 of next year
493
-
494
-			if (month == 0 && startOfWeek < -2){
495
-				// Use a date from last year to determine the week
496
-				date = new Date(date).decrement('day', dayOfWeek);
497
-				dayOfWeek = 0;
498
-			}
499
-
500
-			firstDayOfYear = new Date(date.get('year'), 0, 1).get('day') || 7;
501
-			if (firstDayOfYear > 4) dividend = -7; // First week of the year is not week 1
502
-		} else {
503
-			// In other cultures the first week of the year is always week 1 and the last week always 53 or 54.
504
-			// Days in the same week can have a different weeknumber if the week spreads across two years.
505
-			firstDayOfYear = new Date(date.get('year'), 0, 1).get('day');
506
-		}
507
-
508
-		dividend += date.get('dayofyear');
509
-		dividend += 6 - dayOfWeek; // Add days so we calculate the current date's week as a full week
510
-		dividend += (7 + firstDayOfYear - firstDayOfWeek) % 7; // Make up for first week of the year not being a full week
511
-
512
-		return (dividend / 7);
513
-	},
514
-
515
-	getOrdinal: function(day){
516
-		return Date.getMsg('ordinal', day || this.get('date'));
517
-	},
518
-
519
-	getTimezone: function(){
520
-		return this.toString()
521
-			.replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/, '$1')
522
-			.replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, '$1$2$3');
523
-	},
524
-
525
-	getGMTOffset: function(){
526
-		var off = this.get('timezoneOffset');
527
-		return ((off > 0) ? '-' : '+') + pad((off.abs() / 60).floor(), 2) + pad(off % 60, 2);
528
-	},
529
-
530
-	setAMPM: function(ampm){
531
-		ampm = ampm.toUpperCase();
532
-		var hr = this.get('hr');
533
-		if (hr > 11 && ampm == 'AM') return this.decrement('hour', 12);
534
-		else if (hr < 12 && ampm == 'PM') return this.increment('hour', 12);
535
-		return this;
536
-	},
537
-
538
-	getAMPM: function(){
539
-		return (this.get('hr') < 12) ? 'AM' : 'PM';
540
-	},
541
-
542
-	parse: function(str){
543
-		this.set('time', Date.parse(str));
544
-		return this;
545
-	},
546
-
547
-	isValid: function(date){
548
-		return !isNaN((date || this).valueOf());
549
-	},
550
-
551
-	format: function(f){
552
-		if (!this.isValid()) return 'invalid date';
553
-		if (!f) f = '%x %X';
554
-
555
-		var formatLower = f.toLowerCase();
556
-		if (formatters[formatLower]) return formatters[formatLower](this); // it's a formatter!
557
-		f = formats[formatLower] || f; // replace short-hand with actual format
558
-
559
-		var d = this;
560
-		return f.replace(/%([a-z%])/gi,
561
-			function($0, $1){
562
-				switch ($1){
563
-					case 'a': return Date.getMsg('days_abbr')[d.get('day')];
564
-					case 'A': return Date.getMsg('days')[d.get('day')];
565
-					case 'b': return Date.getMsg('months_abbr')[d.get('month')];
566
-					case 'B': return Date.getMsg('months')[d.get('month')];
567
-					case 'c': return d.format('%a %b %d %H:%M:%S %Y');
568
-					case 'd': return pad(d.get('date'), 2);
569
-					case 'e': return pad(d.get('date'), 2, ' ');
570
-					case 'H': return pad(d.get('hr'), 2);
571
-					case 'I': return pad((d.get('hr') % 12) || 12, 2);
572
-					case 'j': return pad(d.get('dayofyear'), 3);
573
-					case 'k': return pad(d.get('hr'), 2, ' ');
574
-					case 'l': return pad((d.get('hr') % 12) || 12, 2, ' ');
575
-					case 'L': return pad(d.get('ms'), 3);
576
-					case 'm': return pad((d.get('mo') + 1), 2);
577
-					case 'M': return pad(d.get('min'), 2);
578
-					case 'o': return d.get('ordinal');
579
-					case 'p': return Date.getMsg(d.get('ampm'));
580
-					case 's': return Math.round(d / 1000);
581
-					case 'S': return pad(d.get('seconds'), 2);
582
-					case 'T': return d.format('%H:%M:%S');
583
-					case 'U': return pad(d.get('week'), 2);
584
-					case 'w': return d.get('day');
585
-					case 'x': return d.format(Date.getMsg('shortDate'));
586
-					case 'X': return d.format(Date.getMsg('shortTime'));
587
-					case 'y': return d.get('year').toString().substr(2);
588
-					case 'Y': return d.get('year');
589
-					case 'z': return d.get('GMTOffset');
590
-					case 'Z': return d.get('Timezone');
591
-				}
592
-				return $1;
593
-			}
594
-		);
595
-	},
596
-
597
-	toISOString: function(){
598
-		return this.format('iso8601');
599
-	}
600
-
601
-}).alias({
602
-	toJSON: 'toISOString',
603
-	compare: 'diff',
604
-	strftime: 'format'
605
-});
606
-
607
-var formats = {
608
-	db: '%Y-%m-%d %H:%M:%S',
609
-	compact: '%Y%m%dT%H%M%S',
610
-	'short': '%d %b %H:%M',
611
-	'long': '%B %d, %Y %H:%M'
612
-};
613
-
614
-// The day and month abbreviations are standardized, so we cannot use simply %a and %b because they will get localized
615
-var rfcDayAbbr = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
616
-	rfcMonthAbbr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
617
-
618
-var formatters = {
619
-	rfc822: function(date){
620
-		return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %Z');
621
-	},
622
-	rfc2822: function(date){
623
-		return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %z');
624
-	},
625
-	iso8601: function(date){
626
-		return (
627
-			date.getUTCFullYear() + '-' +
628
-			pad(date.getUTCMonth() + 1, 2) + '-' +
629
-			pad(date.getUTCDate(), 2) + 'T' +
630
-			pad(date.getUTCHours(), 2) + ':' +
631
-			pad(date.getUTCMinutes(), 2) + ':' +
632
-			pad(date.getUTCSeconds(), 2) + '.' +
633
-			pad(date.getUTCMilliseconds(), 3) + 'Z'
634
-		);
635
-	}
636
-};
637
-
638
-
639
-var parsePatterns = [],
640
-	nativeParse = Date.parse;
641
-
642
-var parseWord = function(type, word, num){
643
-	var ret = -1,
644
-		translated = Date.getMsg(type + 's');
645
-	switch (typeOf(word)){
646
-		case 'object':
647
-			ret = translated[word.get(type)];
648
-			break;
649
-		case 'number':
650
-			ret = translated[word];
651
-			if (!ret) throw new Error('Invalid ' + type + ' index: ' + word);
652
-			break;
653
-		case 'string':
654
-			var match = translated.filter(function(name){
655
-				return this.test(name);
656
-			}, new RegExp('^' + word, 'i'));
657
-			if (!match.length) throw new Error('Invalid ' + type + ' string');
658
-			if (match.length > 1) throw new Error('Ambiguous ' + type);
659
-			ret = match[0];
660
-	}
661
-
662
-	return (num) ? translated.indexOf(ret) : ret;
663
-};
664
-
665
-var startCentury = 1900,
666
-	startYear = 70;
667
-
668
-Date.extend({
669
-
670
-	getMsg: function(key, args){
671
-		return Locale.get('Date.' + key, args);
672
-	},
673
-
674
-	units: {
675
-		ms: Function.from(1),
676
-		second: Function.from(1000),
677
-		minute: Function.from(60000),
678
-		hour: Function.from(3600000),
679
-		day: Function.from(86400000),
680
-		week: Function.from(608400000),
681
-		month: function(month, year){
682
-			var d = new Date;
683
-			return Date.daysInMonth(month != null ? month : d.get('mo'), year != null ? year : d.get('year')) * 86400000;
684
-		},
685
-		year: function(year){
686
-			year = year || new Date().get('year');
687
-			return Date.isLeapYear(year) ? 31622400000 : 31536000000;
688
-		}
689
-	},
690
-
691
-	daysInMonth: function(month, year){
692
-		return [31, Date.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
693
-	},
694
-
695
-	isLeapYear: function(year){
696
-		return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
697
-	},
698
-
699
-	parse: function(from){
700
-		var t = typeOf(from);
701
-		if (t == 'number') return new Date(from);
702
-		if (t != 'string') return from;
703
-		from = from.clean();
704
-		if (!from.length) return null;
705
-
706
-		var parsed;
707
-		parsePatterns.some(function(pattern){
708
-			var bits = pattern.re.exec(from);
709
-			return (bits) ? (parsed = pattern.handler(bits)) : false;
710
-		});
711
-
712
-		if (!(parsed && parsed.isValid())){
713
-			parsed = new Date(nativeParse(from));
714
-			if (!(parsed && parsed.isValid())) parsed = new Date(from.toInt());
715
-		}
716
-		return parsed;
717
-	},
718
-
719
-	parseDay: function(day, num){
720
-		return parseWord('day', day, num);
721
-	},
722
-
723
-	parseMonth: function(month, num){
724
-		return parseWord('month', month, num);
725
-	},
726
-
727
-	parseUTC: function(value){
728
-		var localDate = new Date(value);
729
-		var utcSeconds = Date.UTC(
730
-			localDate.get('year'),
731
-			localDate.get('mo'),
732
-			localDate.get('date'),
733
-			localDate.get('hr'),
734
-			localDate.get('min'),
735
-			localDate.get('sec'),
736
-			localDate.get('ms')
737
-		);
738
-		return new Date(utcSeconds);
739
-	},
740
-
741
-	orderIndex: function(unit){
742
-		return Date.getMsg('dateOrder').indexOf(unit) + 1;
743
-	},
744
-
745
-	defineFormat: function(name, format){
746
-		formats[name] = format;
747
-		return this;
748
-	},
749
-
750
-	defineFormats: function(formats){
751
-		for (var name in formats) Date.defineFormat(name, formats[name]);
752
-		return this;
753
-	},
754
-
755
-
756
-
757
-	defineParser: function(pattern){
758
-		parsePatterns.push((pattern.re && pattern.handler) ? pattern : build(pattern));
759
-		return this;
760
-	},
761
-
762
-	defineParsers: function(){
763
-		Array.flatten(arguments).each(Date.defineParser);
764
-		return this;
765
-	},
766
-
767
-	define2DigitYearStart: function(year){
768
-		startYear = year % 100;
769
-		startCentury = year - startYear;
770
-		return this;
771
-	}
772
-
773
-});
774
-
775
-var regexOf = function(type){
776
-	return new RegExp('(?:' + Date.getMsg(type).map(function(name){
777
-		return name.substr(0, 3);
778
-	}).join('|') + ')[a-z]*');
779
-};
780
-
781
-var replacers = function(key){
782
-	switch (key){
783
-		case 'T':
784
-			return '%H:%M:%S';
785
-		case 'x': // iso8601 covers yyyy-mm-dd, so just check if month is first
786
-			return ((Date.orderIndex('month') == 1) ? '%m[-./]%d' : '%d[-./]%m') + '([-./]%y)?';
787
-		case 'X':
788
-			return '%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%z?';
789
-	}
790
-	return null;
791
-};
792
-
793
-var keys = {
794
-	d: /[0-2]?[0-9]|3[01]/,
795
-	H: /[01]?[0-9]|2[0-3]/,
796
-	I: /0?[1-9]|1[0-2]/,
797
-	M: /[0-5]?\d/,
798
-	s: /\d+/,
799
-	o: /[a-z]*/,
800
-	p: /[ap]\.?m\.?/,
801
-	y: /\d{2}|\d{4}/,
802
-	Y: /\d{4}/,
803
-	z: /Z|[+-]\d{2}(?::?\d{2})?/
804
-};
805
-
806
-keys.m = keys.I;
807
-keys.S = keys.M;
808
-
809
-var currentLanguage;
810
-
811
-var recompile = function(language){
812
-	currentLanguage = language;
813
-
814
-	keys.a = keys.A = regexOf('days');
815
-	keys.b = keys.B = regexOf('months');
816
-
817
-	parsePatterns.each(function(pattern, i){
818
-		if (pattern.format) parsePatterns[i] = build(pattern.format);
819
-	});
820
-};
821
-
822
-var build = function(format){
823
-	if (!currentLanguage) return {format: format};
824
-
825
-	var parsed = [];
826
-	var re = (format.source || format) // allow format to be regex
827
-	 .replace(/%([a-z])/gi,
828
-		function($0, $1){
829
-			return replacers($1) || $0;
830
-		}
831
-	).replace(/\((?!\?)/g, '(?:') // make all groups non-capturing
832
-	 .replace(/ (?!\?|\*)/g, ',? ') // be forgiving with spaces and commas
833
-	 .replace(/%([a-z%])/gi,
834
-		function($0, $1){
835
-			var p = keys[$1];
836
-			if (!p) return $1;
837
-			parsed.push($1);
838
-			return '(' + p.source + ')';
839
-		}
840
-	).replace(/\[a-z\]/gi, '[a-z\\u00c0-\\uffff;\&]'); // handle unicode words
841
-
842
-	return {
843
-		format: format,
844
-		re: new RegExp('^' + re + '$', 'i'),
845
-		handler: function(bits){
846
-			bits = bits.slice(1).associate(parsed);
847
-			var date = new Date().clearTime(),
848
-				year = bits.y || bits.Y;
849
-
850
-			if (year != null) handle.call(date, 'y', year); // need to start in the right year
851
-			if ('d' in bits) handle.call(date, 'd', 1);
852
-			if ('m' in bits || bits.b || bits.B) handle.call(date, 'm', 1);
853
-
854
-			for (var key in bits) handle.call(date, key, bits[key]);
855
-			return date;
856
-		}
857
-	};
858
-};
859
-
860
-var handle = function(key, value){
861
-	if (!value) return this;
862
-
863
-	switch (key){
864
-		case 'a': case 'A': return this.set('day', Date.parseDay(value, true));
865
-		case 'b': case 'B': return this.set('mo', Date.parseMonth(value, true));
866
-		case 'd': return this.set('date', value);
867
-		case 'H': case 'I': return this.set('hr', value);
868
-		case 'm': return this.set('mo', value - 1);
869
-		case 'M': return this.set('min', value);
870
-		case 'p': return this.set('ampm', value.replace(/\./g, ''));
871
-		case 'S': return this.set('sec', value);
872
-		case 's': return this.set('ms', ('0.' + value) * 1000);
873
-		case 'w': return this.set('day', value);
874
-		case 'Y': return this.set('year', value);
875
-		case 'y':
876
-			value = +value;
877
-			if (value < 100) value += startCentury + (value < startYear ? 100 : 0);
878
-			return this.set('year', value);
879
-		case 'z':
880
-			if (value == 'Z') value = '+00';
881
-			var offset = value.match(/([+-])(\d{2}):?(\d{2})?/);
882
-			offset = (offset[1] + '1') * (offset[2] * 60 + (+offset[3] || 0)) + this.getTimezoneOffset();
883
-			return this.set('time', this - offset * 60000);
884
-	}
885
-
886
-	return this;
887
-};
888
-
889
-Date.defineParsers(
890
-	'%Y([-./]%m([-./]%d((T| )%X)?)?)?', // "1999-12-31", "1999-12-31 11:59pm", "1999-12-31 23:59:59", ISO8601
891
-	'%Y%m%d(T%H(%M%S?)?)?', // "19991231", "19991231T1159", compact
892
-	'%x( %X)?', // "12/31", "12.31.99", "12-31-1999", "12/31/2008 11:59 PM"
893
-	'%d%o( %b( %Y)?)?( %X)?', // "31st", "31st December", "31 Dec 1999", "31 Dec 1999 11:59pm"
894
-	'%b( %d%o)?( %Y)?( %X)?', // Same as above with month and day switched
895
-	'%Y %b( %d%o( %X)?)?', // Same as above with year coming first
896
-	'%o %b %d %X %z %Y', // "Thu Oct 22 08:11:23 +0000 2009"
897
-	'%T', // %H:%M:%S
898
-	'%H:%M( ?%p)?' // "11:05pm", "11:05 am" and "11:05"
899
-);
900
-
901
-Locale.addEvent('change', function(language){
902
-	if (Locale.get('Date')) recompile(language);
903
-}).fireEvent('change', Locale.getCurrent());
904
-
905
-}).call(this);
906
-
907
-
908
-/*
909
-
910
-script: Date.Extras.js
911
-
912
-name: Date.Extras
913
-
914
-description: Extends the Date native object to include extra methods (on top of those in Date.js).
915
-
916
-license: MIT-style license
917
-
918
-authors:
919
-  - Aaron Newton
920
-  - Scott Kyle
921
-
922
-requires:
923
-  - /Date
924
-
925
-provides: [Date.Extras]
926
-
927
-...
928
-*/
929
-
930
-Date.implement({
931
-
932
-	timeDiffInWords: function(to){
933
-		return Date.distanceOfTimeInWords(this, to || new Date);
934
-	},
935
-
936
-	timeDiff: function(to, separator){
937
-		if (to == null) to = new Date;
938
-		var delta = ((to - this) / 1000).floor();
939
-
940
-		var vals = [],
941
-			durations = [60, 60, 24, 365, 0],
942
-			names = ['s', 'm', 'h', 'd', 'y'],
943
-			value, duration;
944
-
945
-		for (var item = 0; item < durations.length; item++){
946
-			if (item && !delta) break;
947
-			value = delta;
948
-			if ((duration = durations[item])){
949
-				value = (delta % duration);
950
-				delta = (delta / duration).floor();
951
-			}
952
-			vals.unshift(value + (names[item] || ''));
953
-		}
954
-
955
-		return vals.join(separator || ':');
956
-	}
957
-
958
-}).extend({
959
-
960
-	distanceOfTimeInWords: function(from, to){
961
-		return Date.getTimePhrase(((to - from) / 1000).toInt());
962
-	},
963
-
964
-	getTimePhrase: function(delta){
965
-		var suffix = (delta < 0) ? 'Until' : 'Ago';
966
-		if (delta < 0) delta *= -1;
967
-
968
-		var units = {
969
-			minute: 60,
970
-			hour: 60,
971
-			day: 24,
972
-			week: 7,
973
-			month: 52 / 12,
974
-			year: 12,
975
-			eon: Infinity
976
-		};
977
-
978
-		var msg = 'lessThanMinute';
979
-
980
-		for (var unit in units){
981
-			var interval = units[unit];
982
-			if (delta < 1.5 * interval){
983
-				if (delta > 0.75 * interval) msg = unit;
984
-				break;
985
-			}
986
-			delta /= interval;
987
-			msg = unit + 's';
988
-		}
989
-
990
-		delta = delta.round();
991
-		return Date.getMsg(msg + suffix, delta).substitute({delta: delta});
992
-	}
993
-
994
-}).defineParsers(
995
-
996
-	{
997
-		// "today", "tomorrow", "yesterday"
998
-		re: /^(?:tod|tom|yes)/i,
999
-		handler: function(bits){
1000
-			var d = new Date().clearTime();
1001
-			switch (bits[0]){
1002
-				case 'tom': return d.increment();
1003
-				case 'yes': return d.decrement();
1004
-				default: return d;
1005
-			}
1006
-		}
1007
-	},
1008
-
1009
-	{
1010
-		// "next Wednesday", "last Thursday"
1011
-		re: /^(next|last) ([a-z]+)$/i,
1012
-		handler: function(bits){
1013
-			var d = new Date().clearTime();
1014
-			var day = d.getDay();
1015
-			var newDay = Date.parseDay(bits[2], true);
1016
-			var addDays = newDay - day;
1017
-			if (newDay <= day) addDays += 7;
1018
-			if (bits[1] == 'last') addDays -= 7;
1019
-			return d.set('date', d.getDate() + addDays);
1020
-		}
1021
-	}
1022
-
1023
-).alias('timeAgoInWords', 'timeDiffInWords');
1024
-
1025
-
1026
-/*
1027
-
1028
-name: Hash
1029
-
1030
-description: Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects.
1031
-
1032
-license: MIT-style license.
1033
-
1034
-requires:
1035
-  - Core/Object
1036
-  - /MooTools.More
1037
-
1038
-provides: [Hash]
1039
-
1040
-...
1041
-*/
1042
-
1043
-(function(){
1044
-
1045
-if (this.Hash) return;
1046
-
1047
-var Hash = this.Hash = new Type('Hash', function(object){
1048
-	if (typeOf(object) == 'hash') object = Object.clone(object.getClean());
1049
-	for (var key in object) this[key] = object[key];
1050
-	return this;
1051
-});
1052
-
1053
-this.$H = function(object){
1054
-	return new Hash(object);
1055
-};
1056
-
1057
-Hash.implement({
1058
-
1059
-	forEach: function(fn, bind){
1060
-		Object.forEach(this, fn, bind);
1061
-	},
1062
-
1063
-	getClean: function(){
1064
-		var clean = {};
1065
-		for (var key in this){
1066
-			if (this.hasOwnProperty(key)) clean[key] = this[key];
1067
-		}
1068
-		return clean;
1069
-	},
1070
-
1071
-	getLength: function(){
1072
-		var length = 0;
1073
-		for (var key in this){
1074
-			if (this.hasOwnProperty(key)) length++;
1075
-		}
1076
-		return length;
1077
-	}
1078
-
1079
-});
1080
-
1081
-Hash.alias('each', 'forEach');
1082
-
1083
-Hash.implement({
1084
-
1085
-	has: Object.prototype.hasOwnProperty,
1086
-
1087
-	keyOf: function(value){
1088
-		return Object.keyOf(this, value);
1089
-	},
1090
-
1091
-	hasValue: function(value){
1092
-		return Object.contains(this, value);
1093
-	},
1094
-
1095
-	extend: function(properties){
1096
-		Hash.each(properties || {}, function(value, key){
1097
-			Hash.set(this, key, value);
1098
-		}, this);
1099
-		return this;
1100
-	},
1101
-
1102
-	combine: function(properties){
1103
-		Hash.each(properties || {}, function(value, key){
1104
-			Hash.include(this, key, value);
1105
-		}, this);
1106
-		return this;
1107
-	},
1108
-
1109
-	erase: function(key){
1110
-		if (this.hasOwnProperty(key)) delete this[key];
1111
-		return this;
1112
-	},
1113
-
1114
-	get: function(key){
1115
-		return (this.hasOwnProperty(key)) ? this[key] : null;
1116
-	},
1117
-
1118
-	set: function(key, value){
1119
-		if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
1120
-		return this;
1121
-	},
1122
-
1123
-	empty: function(){
1124
-		Hash.each(this, function(value, key){
1125
-			delete this[key];
1126
-		}, this);
1127
-		return this;
1128
-	},
1129
-
1130
-	include: function(key, value){
1131
-		if (this[key] == undefined) this[key] = value;
1132
-		return this;
1133
-	},
1134
-
1135
-	map: function(fn, bind){
1136
-		return new Hash(Object.map(this, fn, bind));
1137
-	},
1138
-
1139
-	filter: function(fn, bind){
1140
-		return new Hash(Object.filter(this, fn, bind));
1141
-	},
1142
-
1143
-	every: function(fn, bind){
1144
-		return Object.every(this, fn, bind);
1145
-	},
1146
-
1147
-	some: function(fn, bind){
1148
-		return Object.some(this, fn, bind);
1149
-	},
1150
-
1151
-	getKeys: function(){
1152
-		return Object.keys(this);
1153
-	},
1154
-
1155
-	getValues: function(){
1156
-		return Object.values(this);
1157
-	},
1158
-
1159
-	toQueryString: function(base){
1160
-		return Object.toQueryString(this, base);
1161
-	}
1162
-
1163
-});
1164
-
1165
-Hash.alias({indexOf: 'keyOf', contains: 'hasValue'});
1166
-
1167
-
1168
-}).call(this);
1169
-
1170
-
1171
-
1172
-/*
1173
-
1174
-script: Request.JSONP.js
1175
-
1176
-name: Request.JSONP
1177
-
1178
-description: Defines Request.JSONP, a class for cross domain javascript via script injection.
1179
-
1180
-license: MIT-style license
1181
-
1182
-authors:
1183
-  - Aaron Newton
1184
-  - Guillermo Rauch
1185
-  - Arian Stolwijk
1186
-
1187
-requires:
1188
-  - Core/Element
1189
-  - Core/Request
1190
-  - MooTools.More
1191
-
1192
-provides: [Request.JSONP]
1193
-
1194
-...
1195
-*/
1196
-
1197
-Request.JSONP = new Class({
1198
-
1199
-	Implements: [Chain, Events, Options],
1200
-
1201
-	options: {
1202
-	/*
1203
-		onRequest: function(src, scriptElement){},
1204
-		onComplete: function(data){},
1205
-		onSuccess: function(data){},
1206
-		onCancel: function(){},
1207
-		onTimeout: function(){},
1208
-		onError: function(){}, */
1209
-		onRequest: function(src){
1210
-			if (this.options.log && window.console && console.log){
1211
-				console.log('JSONP retrieving script with url:' + src);
1212
-			}
1213
-		},
1214
-		onError: function(src){
1215
-			if (this.options.log && window.console && console.warn){
1216
-				console.warn('JSONP '+ src +' will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs');
1217
-			}
1218
-		},
1219
-		url: '',
1220
-		callbackKey: 'callback',
1221
-		injectScript: document.head,
1222
-		data: '',
1223
-		link: 'ignore',
1224
-		timeout: 0,
1225
-		log: false
1226
-	},
1227
-
1228
-	initialize: function(options){
1229
-		this.setOptions(options);
1230
-	},
1231
-
1232
-	send: function(options){
1233
-		if (!Request.prototype.check.call(this, options)) return this;
1234
-		this.running = true;
1235
-
1236
-		var type = typeOf(options);
1237
-		if (type == 'string' || type == 'element') options = {data: options};
1238
-		options = Object.merge(this.options, options || {});
1239
-
1240
-		var data = options.data;
1241
-		switch (typeOf(data)){
1242
-			case 'element': data = document.id(data).toQueryString(); break;
1243
-			case 'object': case 'hash': data = Object.toQueryString(data);
1244
-		}
1245
-
1246
-		var index = this.index = Request.JSONP.counter++;
1247
-
1248
-		var src = options.url +
1249
-			(options.url.test('\\?') ? '&' :'?') +
1250
-			(options.callbackKey) +
1251
-			'=Request.JSONP.request_map.request_'+ index +
1252
-			(data ? '&' + data : '');
1253
-
1254
-		if (src.length > 2083) this.fireEvent('error', src);
1255
-
1256
-		Request.JSONP.request_map['request_' + index] = function(){
1257
-			this.success(arguments, index);
1258
-		}.bind(this);
1259
-
1260
-		var script = this.getScript(src).inject(options.injectScript);
1261
-		this.fireEvent('request', [src, script]);
1262
-
1263
-		if (options.timeout) this.timeout.delay(options.timeout, this);
1264
-
1265
-		return this;
1266
-	},
1267
-
1268
-	getScript: function(src){
1269
-		if (!this.script) this.script = new Element('script[type=text/javascript]', {
1270
-			async: true,
1271
-			src: src
1272
-		});
1273
-		return this.script;
1274
-	},
1275
-
1276
-	success: function(args, index){
1277
-		if (!this.running) return false;
1278
-		this.clear()
1279
-			.fireEvent('complete', args).fireEvent('success', args)
1280
-			.callChain();
1281
-	},
1282
-
1283
-	cancel: function(){
1284
-		if (this.running) this.clear().fireEvent('cancel');
1285
-		return this;
1286
-	},
1287
-
1288
-	isRunning: function(){
1289
-		return !!this.running;
1290
-	},
1291
-
1292
-	clear: function(){
1293
-		this.running = false;
1294
-		if (this.script){
1295
-			this.script.destroy();
1296
-			this.script = null;
1297
-		}
1298
-		return this;
1299
-	},
1300
-
1301
-	timeout: function(){
1302
-		if (this.running){
1303
-			this.running = false;
1304
-			this.fireEvent('timeout', [this.script.get('src'), this.script]).fireEvent('failure').cancel();
1305
-		}
1306
-		return this;
1307
-	}
1308
-
1309
-});
1310
-
1311
-Request.JSONP.counter = 0;
1312
-Request.JSONP.request_map = {};
1313
-
1314
-
1315 1
deleted file mode 100644
... ...
@@ -1,5492 +0,0 @@
1
-/*
2
-MooTools: the javascript framework
3
-
4
-web build:
5
- - http://mootools.net/core/7c56cfef9dddcf170a5d68e3fb61cfd7
6
-
7
-packager build:
8
- - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff
9
-
10
-/*
11
-
12
-name: Core
13
-
14
-description: The heart of MooTools.
15
-
16
-license: MIT-style license.
17
-
18
-copyright: Copyright (c) 2006-2010 [Valerio Proietti](http://mad4milk.net/).
19
-
20
-authors: The MooTools production team (http://mootools.net/developers/)
21
-
22
-inspiration:
23
-  - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
24
-  - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
25
-
26
-provides: [Core, MooTools, Type, typeOf, instanceOf, Native]
27
-
28
-...
29
-*/
30
-
31
-(function(){
32
-
33
-this.MooTools = {
34
-	version: '1.3.1',
35
-	build: 'af48c8d589f43f32212f9bb8ff68a127e6a3ba6c'
36
-};
37
-
38
-// typeOf, instanceOf
39
-
40
-var typeOf = this.typeOf = function(item){
41
-	if (item == null) return 'null';
42
-	if (item.$family) return item.$family();
43
-
44
-	if (item.nodeName){
45
-		if (item.nodeType == 1) return 'element';
46
-		if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace';
47
-	} else if (typeof item.length == 'number'){
48
-		if (item.callee) return 'arguments';
49
-		if ('item' in item) return 'collection';
50
-	}
51
-
52
-	return typeof item;
53
-};
54
-
55
-var instanceOf = this.instanceOf = function(item, object){
56
-	if (item == null) return false;
57
-	var constructor = item.$constructor || item.constructor;
58
-	while (constructor){
59
-		if (constructor === object) return true;
60
-		constructor = constructor.parent;
61
-	}
62
-	return item instanceof object;
63
-};
64
-
65
-// Function overloading
66
-
67
-var Function = this.Function;
68
-
69
-var enumerables = true;
70
-for (var i in {toString: 1}) enumerables = null;
71
-if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor'];
72
-
73
-Function.prototype.overloadSetter = function(usePlural){
74
-	var self = this;
75
-	return function(a, b){
76
-		if (a == null) return this;
77
-		if (usePlural || typeof a != 'string'){
78
-			for (var k in a) self.call(this, k, a[k]);
79
-			if (enumerables) for (var i = enumerables.length; i--;){
80
-				k = enumerables[i];
81
-				if (a.hasOwnProperty(k)) self.call(this, k, a[k]);
82
-			}
83
-		} else {
84
-			self.call(this, a, b);
85
-		}
86
-		return this;
87
-	};
88
-};
89
-
90
-Function.prototype.overloadGetter = function(usePlural){
91
-	var self = this;
92
-	return function(a){
93
-		var args, result;
94
-		if (usePlural || typeof a != 'string') args = a;
95
-		else if (arguments.length > 1) args = arguments;
96
-		if (args){
97
-			result = {};
98
-			for (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]);
99
-		} else {
100
-			result = self.call(this, a);
101
-		}
102
-		return result;
103
-	};
104
-};
105
-
106
-Function.prototype.extend = function(key, value){
107
-	this[key] = value;
108
-}.overloadSetter();
109
-
110
-Function.prototype.implement = function(key, value){
111
-	this.prototype[key] = value;
112
-}.overloadSetter();
113
-
114
-// From
115
-
116
-var slice = Array.prototype.slice;
117
-
118
-Function.from = function(item){
119
-	return (typeOf(item) == 'function') ? item : function(){
120
-		return item;
121
-	};
122
-};
123
-
124
-Array.from = function(item){
125
-	if (item == null) return [];
126
-	return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item];
127
-};
128
-
129
-Number.from = function(item){
130
-	var number = parseFloat(item);
131
-	return isFinite(number) ? number : null;
132
-};
133
-
134
-String.from = function(item){
135
-	return item + '';
136
-};
137
-
138
-// hide, protect
139
-
140
-Function.implement({
141
-
142
-	hide: function(){
143
-		this.$hidden = true;
144
-		return this;
145
-	},
146
-
147
-	protect: function(){
148
-		this.$protected = true;
149
-		return this;
150
-	}
151
-
152
-});
153
-
154
-// Type
155
-
156
-var Type = this.Type = function(name, object){
157
-	if (name){
158
-		var lower = name.toLowerCase();
159
-		var typeCheck = function(item){
160
-			return (typeOf(item) == lower);
161
-		};
162
-
163
-		Type['is' + name] = typeCheck;
164
-		if (object != null){
165
-			object.prototype.$family = (function(){
166
-				return lower;
167
-			}).hide();
168
-
169
-		}
170
-	}
171
-
172
-	if (object == null) return null;
173
-
174
-	object.extend(this);
175
-	object.$constructor = Type;
176
-	object.prototype.$constructor = object;
177
-
178
-	return object;
179
-};
180
-
181
-var toString = Object.prototype.toString;
182
-
183
-Type.isEnumerable = function(item){
184
-	return (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' );
185
-};
186
-
187
-var hooks = {};
188
-
189
-var hooksOf = function(object){
190
-	var type = typeOf(object.prototype);
191
-	return hooks[type] || (hooks[type] = []);
192
-};
193
-
194
-var implement = function(name, method){
195
-	if (method && method.$hidden) return;
196
-
197
-	var hooks = hooksOf(this);
198
-
199
-	for (var i = 0; i < hooks.length; i++){
200
-		var hook = hooks[i];
201
-		if (typeOf(hook) == 'type') implement.call(hook, name, method);
202
-		else hook.call(this, name, method);
203
-	}
204
-
205
-	var previous = this.prototype[name];
206
-	if (previous == null || !previous.$protected) this.prototype[name] = method;
207
-
208
-	if (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){
209
-		return method.apply(item, slice.call(arguments, 1));
210
-	});
211
-};
212
-
213
-var extend = function(name, method){
214
-	if (method && method.$hidden) return;
215
-	var previous = this[name];
216
-	if (previous == null || !previous.$protected) this[name] = method;
217
-};
218
-
219
-Type.implement({
220
-
221
-	implement: implement.overloadSetter(),
222
-
223
-	extend: extend.overloadSetter(),
224
-
225
-	alias: function(name, existing){
226
-		implement.call(this, name, this.prototype[existing]);
227
-	}.overloadSetter(),
228
-
229
-	mirror: function(hook){
230
-		hooksOf(this).push(hook);
231
-		return this;
232
-	}
233
-
234
-});
235
-
236
-new Type('Type', Type);
237
-
238
-// Default Types
239
-
240
-var force = function(name, object, methods){
241
-	var isType = (object != Object),
242
-		prototype = object.prototype;
243
-
244
-	if (isType) object = new Type(name, object);
245
-
246
-	for (var i = 0, l = methods.length; i < l; i++){
247
-		var key = methods[i],
248
-			generic = object[key],
249
-			proto = prototype[key];
250
-
251
-		if (generic) generic.protect();
252
-
253
-		if (isType && proto){
254
-			delete prototype[key];
255
-			prototype[key] = proto.protect();
256
-		}
257
-	}
258
-
259
-	if (isType) object.implement(prototype);
260
-
261
-	return force;
262
-};
263
-
264
-force('String', String, [
265
-	'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search',
266
-	'slice', 'split', 'substr', 'substring', 'toLowerCase', 'toUpperCase'
267
-])('Array', Array, [
268
-	'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice',
269
-	'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight'
270
-])('Number', Number, [
271
-	'toExponential', 'toFixed', 'toLocaleString', 'toPrecision'
272
-])('Function', Function, [
273
-	'apply', 'call', 'bind'
274
-])('RegExp', RegExp, [
275
-	'exec', 'test'
276
-])('Object', Object, [
277
-	'create', 'defineProperty', 'defineProperties', 'keys',
278
-	'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames',
279
-	'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen'
280
-])('Date', Date, ['now']);
281
-
282
-Object.extend = extend.overloadSetter();
283
-
284
-Date.extend('now', function(){
285
-	return +(new Date);
286
-});
287
-
288
-new Type('Boolean', Boolean);
289
-
290
-// fixes NaN returning as Number
291
-
292
-Number.prototype.$family = function(){
293
-	return isFinite(this) ? 'number' : 'null';
294
-}.hide();
295
-
296
-// Number.random
297
-
298
-Number.extend('random', function(min, max){
299
-	return Math.floor(Math.random() * (max - min + 1) + min);
300
-});
301
-
302
-// forEach, each
303
-
304
-var hasOwnProperty = Object.prototype.hasOwnProperty;
305
-Object.extend('forEach', function(object, fn, bind){
306
-	for (var key in object){
307
-		if (hasOwnProperty.call(object, key)) fn.call(bind, object[key], key, object);
308
-	}
309
-});
310
-
311
-Object.each = Object.forEach;
312
-
313
-Array.implement({
314
-
315
-	forEach: function(fn, bind){
316
-		for (var i = 0, l = this.length; i < l; i++){
317
-			if (i in this) fn.call(bind, this[i], i, this);
318
-		}
319
-	},
320
-
321
-	each: function(fn, bind){
322
-		Array.forEach(this, fn, bind);
323
-		return this;
324
-	}
325
-
326
-});
327
-
328
-// Array & Object cloning, Object merging and appending
329
-
330
-var cloneOf = function(item){
331
-	switch (typeOf(item)){
332
-		case 'array': return item.clone();
333
-		case 'object': return Object.clone(item);
334
-		default: return item;
335
-	}
336
-};
337
-
338
-Array.implement('clone', function(){
339
-	var i = this.length, clone = new Array(i);
340
-	while (i--) clone[i] = cloneOf(this[i]);
341
-	return clone;
342
-});
343
-
344
-var mergeOne = function(source, key, current){
345
-	switch (typeOf(current)){
346
-		case 'object':
347
-			if (typeOf(source[key]) == 'object') Object.merge(source[key], current);
348
-			else source[key] = Object.clone(current);
349
-		break;
350
-		case 'array': source[key] = current.clone(); break;
351
-		default: source[key] = current;
352
-	}
353
-	return source;
354
-};
355
-
356
-Object.extend({
357
-
358
-	merge: function(source, k, v){
359
-		if (typeOf(k) == 'string') return mergeOne(source, k, v);
360
-		for (var i = 1, l = arguments.length; i < l; i++){
361
-			var object = arguments[i];
362
-			for (var key in object) mergeOne(source, key, object[key]);
363
-		}
364
-		return source;
365
-	},
366
-
367
-	clone: function(object){
368
-		var clone = {};
369
-		for (var key in object) clone[key] = cloneOf(object[key]);
370
-		return clone;
371
-	},
372
-
373
-	append: function(original){
374
-		for (var i = 1, l = arguments.length; i < l; i++){
375
-			var extended = arguments[i] || {};
376
-			for (var key in extended) original[key] = extended[key];
377
-		}
378
-		return original;
379
-	}
380
-
381
-});
382
-
383
-// Object-less types
384
-
385
-['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){
386
-	new Type(name);
387
-});
388
-
389
-// Unique ID
390
-
391
-var UID = Date.now();
392
-
393
-String.extend('uniqueID', function(){
394
-	return (UID++).toString(36);
395
-});
396
-
397
-
398
-
399
-}).call(this);
400
-
401
-
402
-/*
403
-
404
-name: Array
405
-
406
-description: Contains Array Prototypes like each, contains, and erase.
407
-
408
-license: MIT-style license.
409
-
410
-requires: Type
411
-
412
-provides: Array
413
-
414
-...
415
-*/
416
-
417
-Array.implement({
418
-
419
-	invoke: function(methodName){
420
-		var args = Array.slice(arguments, 1);
421
-		return this.map(function(item){
422
-			return item[methodName].apply(item, args);
423
-		});
424
-	},
425
-
426
-	every: function(fn, bind){
427
-		for (var i = 0, l = this.length; i < l; i++){
428
-			if ((i in this) && !fn.call(bind, this[i], i, this)) return false;
429
-		}
430
-		return true;
431
-	},
432
-
433
-	filter: function(fn, bind){
434
-		var results = [];
435
-		for (var i = 0, l = this.length; i < l; i++){
436
-			if ((i in this) && fn.call(bind, this[i], i, this)) results.push(this[i]);
437
-		}
438
-		return results;
439
-	},
440
-
441
-	clean: function(){
442
-		return this.filter(function(item){
443
-			return item != null;
444
-		});
445
-	},
446
-
447
-	indexOf: function(item, from){
448
-		var len = this.length;
449
-		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
450
-			if (this[i] === item) return i;
451
-		}
452
-		return -1;
453
-	},
454
-
455
-	map: function(fn, bind){
456
-		var results = [];
457
-		for (var i = 0, l = this.length; i < l; i++){
458
-			if (i in this) results[i] = fn.call(bind, this[i], i, this);
459
-		}
460
-		return results;
461
-	},
462
-
463
-	some: function(fn, bind){
464
-		for (var i = 0, l = this.length; i < l; i++){
465
-			if ((i in this) && fn.call(bind, this[i], i, this)) return true;
466
-		}
467
-		return false;
468
-	},
469
-
470
-	associate: function(keys){
471
-		var obj = {}, length = Math.min(this.length, keys.length);
472
-		for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
473
-		return obj;
474
-	},
475
-
476
-	link: function(object){
477
-		var result = {};
478
-		for (var i = 0, l = this.length; i < l; i++){
479
-			for (var key in object){
480
-				if (object[key](this[i])){
481
-					result[key] = this[i];
482
-					delete object[key];
483
-					break;
484
-				}
485
-			}
486
-		}
487
-		return result;
488
-	},
489
-
490
-	contains: function(item, from){
491
-		return this.indexOf(item, from) != -1;
492
-	},
493
-
494
-	append: function(array){
495
-		this.push.apply(this, array);
496
-		return this;
497
-	},
498
-
499
-	getLast: function(){
500
-		return (this.length) ? this[this.length - 1] : null;
501
-	},
502
-
503
-	getRandom: function(){
504
-		return (this.length) ? this[Number.random(0, this.length - 1)] : null;
505
-	},
506
-
507
-	include: function(item){
508
-		if (!this.contains(item)) this.push(item);
509
-		return this;
510
-	},
511
-
512
-	combine: function(array){
513
-		for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
514
-		return this;
515
-	},
516
-
517
-	erase: function(item){
518
-		for (var i = this.length; i--;){
519
-			if (this[i] === item) this.splice(i, 1);
520
-		}
521
-		return this;
522
-	},
523
-
524
-	empty: function(){
525
-		this.length = 0;
526
-		return this;
527
-	},
528
-
529
-	flatten: function(){
530
-		var array = [];
531
-		for (var i = 0, l = this.length; i < l; i++){
532
-			var type = typeOf(this[i]);
533
-			if (type == 'null') continue;
534
-			array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]);
535
-		}
536
-		return array;
537
-	},
538
-
539
-	pick: function(){
540
-		for (var i = 0, l = this.length; i < l; i++){
541
-			if (this[i] != null) return this[i];
542
-		}
543
-		return null;
544
-	},
545
-
546
-	hexToRgb: function(array){
547
-		if (this.length != 3) return null;
548
-		var rgb = this.map(function(value){
549
-			if (value.length == 1) value += value;
550
-			return value.toInt(16);
551
-		});
552
-		return (array) ? rgb : 'rgb(' + rgb + ')';
553
-	},
554
-
555
-	rgbToHex: function(array){
556
-		if (this.length < 3) return null;
557
-		if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
558
-		var hex = [];
559
-		for (var i = 0; i < 3; i++){
560
-			var bit = (this[i] - 0).toString(16);
561
-			hex.push((bit.length == 1) ? '0' + bit : bit);
562
-		}
563
-		return (array) ? hex : '#' + hex.join('');
564
-	}
565
-
566
-});
567
-
568
-
569
-
570
-
571
-/*
572
-
573
-name: String
574
-
575
-description: Contains String Prototypes like camelCase, capitalize, test, and toInt.
576
-
577
-license: MIT-style license.
578
-
579
-requires: Type
580
-
581
-provides: String
582
-
583
-...
584
-*/
585
-
586
-String.implement({
587
-
588
-	test: function(regex, params){
589
-		return ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this);
590
-	},
591
-
592
-	contains: function(string, separator){
593
-		return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
594
-	},
595
-
596
-	trim: function(){
597
-		return this.replace(/^\s+|\s+$/g, '');
598
-	},
599
-
600
-	clean: function(){
601
-		return this.replace(/\s+/g, ' ').trim();
602
-	},
603
-
604
-	camelCase: function(){
605
-		return this.replace(/-\D/g, function(match){
606
-			return match.charAt(1).toUpperCase();
607
-		});
608
-	},
609
-
610
-	hyphenate: function(){
611
-		return this.replace(/[A-Z]/g, function(match){
612
-			return ('-' + match.charAt(0).toLowerCase());
613
-		});
614
-	},
615
-
616
-	capitalize: function(){
617
-		return this.replace(/\b[a-z]/g, function(match){
618
-			return match.toUpperCase();
619
-		});
620
-	},
621
-
622
-	escapeRegExp: function(){
623
-		return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
624
-	},
625
-
626
-	toInt: function(base){
627
-		return parseInt(this, base || 10);
628
-	},
629
-
630
-	toFloat: function(){
631
-		return parseFloat(this);
632
-	},
633
-
634
-	hexToRgb: function(array){
635
-		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
636
-		return (hex) ? hex.slice(1).hexToRgb(array) : null;
637
-	},
638
-
639
-	rgbToHex: function(array){
640
-		var rgb = this.match(/\d{1,3}/g);
641
-		return (rgb) ? rgb.rgbToHex(array) : null;
642
-	},
643
-
644
-	substitute: function(object, regexp){
645
-		return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
646
-			if (match.charAt(0) == '\\') return match.slice(1);
647
-			return (object[name] != null) ? object[name] : '';
648
-		});
649
-	}
650
-
651
-});
652
-
653
-
654
-/*
655
-
656
-name: Number
657
-
658
-description: Contains Number Prototypes like limit, round, times, and ceil.
659
-
660
-license: MIT-style license.
661
-
662
-requires: Type
663
-
664
-provides: Number
665
-
666
-...
667
-*/
668
-
669
-Number.implement({
670
-
671
-	limit: function(min, max){
672
-		return Math.min(max, Math.max(min, this));
673
-	},
674
-
675
-	round: function(precision){
676
-		precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0);
677
-		return Math.round(this * precision) / precision;
678
-	},
679
-
680
-	times: function(fn, bind){
681
-		for (var i = 0; i < this; i++) fn.call(bind, i, this);
682
-	},
683
-
684
-	toFloat: function(){
685
-		return parseFloat(this);
686
-	},
687
-
688
-	toInt: function(base){
689
-		return parseInt(this, base || 10);
690
-	}
691
-
692
-});
693
-
694
-Number.alias('each', 'times');
695
-
696
-(function(math){
697
-	var methods = {};
698
-	math.each(function(name){
699
-		if (!Number[name]) methods[name] = function(){
700
-			return Math[name].apply(null, [this].concat(Array.from(arguments)));
701
-		};
702
-	});
703
-	Number.implement(methods);
704
-})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);
705
-
706
-
707
-/*
708
-
709
-name: Function
710
-
711
-description: Contains Function Prototypes like create, bind, pass, and delay.
712
-
713
-license: MIT-style license.
714
-
715
-requires: Type
716
-
717
-provides: Function
718
-
719
-...
720
-*/
721
-
722
-Function.extend({
723
-
724
-	attempt: function(){
725
-		for (var i = 0, l = arguments.length; i < l; i++){
726
-			try {
727
-				return arguments[i]();
728
-			} catch (e){}
729
-		}
730
-		return null;
731
-	}
732
-
733
-});
734
-
735
-Function.implement({
736
-
737
-	attempt: function(args, bind){
738
-		try {
739
-			return this.apply(bind, Array.from(args));
740
-		} catch (e){}
741
-
742
-		return null;
743
-	},
744
-
745
-	bind: function(bind){
746
-		var self = this,
747
-			args = (arguments.length > 1) ? Array.slice(arguments, 1) : null;
748
-
749
-		return function(){
750
-			if (!args && !arguments.length) return self.call(bind);
751
-			if (args && arguments.length) return self.apply(bind, args.concat(Array.from(arguments)));
752
-			return self.apply(bind, args || arguments);
753
-		};
754
-	},
755
-
756
-	pass: function(args, bind){
757
-		var self = this;
758
-		if (args != null) args = Array.from(args);
759
-		return function(){
760
-			return self.apply(bind, args || arguments);
761
-		};
762
-	},
763
-
764
-	delay: function(delay, bind, args){
765
-		return setTimeout(this.pass((args == null ? [] : args), bind), delay);
766
-	},
767
-
768
-	periodical: function(periodical, bind, args){
769
-		return setInterval(this.pass((args == null ? [] : args), bind), periodical);
770
-	}
771
-
772
-});
773
-
774
-
775
-
776
-
777
-/*
778
-
779
-name: Object
780
-
781
-description: Object generic methods
782
-
783
-license: MIT-style license.
784
-
785
-requires: Type
786
-
787
-provides: [Object, Hash]
788
-
789
-...
790
-*/
791
-
792
-(function(){
793
-
794
-var hasOwnProperty = Object.prototype.hasOwnProperty;
795
-
796
-Object.extend({
797
-
798
-	subset: function(object, keys){
799
-		var results = {};
800
-		for (var i = 0, l = keys.length; i < l; i++){
801
-			var k = keys[i];
802
-			results[k] = object[k];
803
-		}
804
-		return results;
805
-	},
806
-
807
-	map: function(object, fn, bind){
808
-		var results = {};
809
-		for (var key in object){
810
-			if (hasOwnProperty.call(object, key)) results[key] = fn.call(bind, object[key], key, object);
811
-		}
812
-		return results;
813
-	},
814
-
815
-	filter: function(object, fn, bind){
816
-		var results = {};
817
-		Object.each(object, function(value, key){
818
-			if (fn.call(bind, value, key, object)) results[key] = value;
819
-		});
820
-		return results;
821
-	},
822
-
823
-	every: function(object, fn, bind){
824
-		for (var key in object){
825
-			if (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return false;
826
-		}
827
-		return true;
828
-	},
829
-
830
-	some: function(object, fn, bind){
831
-		for (var key in object){
832
-			if (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return true;
833
-		}
834
-		return false;
835
-	},
836
-
837
-	keys: function(object){
838
-		var keys = [];
839
-		for (var key in object){
840
-			if (hasOwnProperty.call(object, key)) keys.push(key);
841
-		}
842
-		return keys;
843
-	},
844
-
845
-	values: function(object){
846
-		var values = [];
847
-		for (var key in object){
848
-			if (hasOwnProperty.call(object, key)) values.push(object[key]);
849
-		}
850
-		return values;
851
-	},
852
-
853
-	getLength: function(object){
854
-		return Object.keys(object).length;
855
-	},
856
-
857
-	keyOf: function(object, value){
858
-		for (var key in object){
859
-			if (hasOwnProperty.call(object, key) && object[key] === value) return key;
860
-		}
861
-		return null;
862
-	},
863
-
864
-	contains: function(object, value){
865
-		return Object.keyOf(object, value) != null;
866
-	},
867
-
868
-	toQueryString: function(object, base){
869
-		var queryString = [];
870
-
871
-		Object.each(object, function(value, key){
872
-			if (base) key = base + '[' + key + ']';
873
-			var result;
874
-			switch (typeOf(value)){
875
-				case 'object': result = Object.toQueryString(value, key); break;
876
-				case 'array':
877
-					var qs = {};
878
-					value.each(function(val, i){
879
-						qs[i] = val;
880
-					});
881
-					result = Object.toQueryString(qs, key);
882
-				break;
883
-				default: result = key + '=' + encodeURIComponent(value);
884
-			}
885
-			if (value != null) queryString.push(result);
886
-		});
887
-
888
-		return queryString.join('&');
889
-	}
890
-
891
-});
892
-
893
-})();
894
-
895
-
896
-
897
-
898
-/*
899
-
900
-name: Browser
901
-
902
-description: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash.
903
-
904
-license: MIT-style license.
905
-
906
-requires: [Array, Function, Number, String]
907
-
908
-provides: [Browser, Window, Document]
909
-
910
-...
911
-*/
912
-
913
-(function(){
914
-
915
-var document = this.document;
916
-var window = document.window = this;
917
-
918
-var UID = 1;
919
-
920
-this.$uid = (window.ActiveXObject) ? function(item){
921
-	return (item.uid || (item.uid = [UID++]))[0];
922
-} : function(item){
923
-	return item.uid || (item.uid = UID++);
924
-};
925
-
926
-$uid(window);
927
-$uid(document);
928
-
929
-var ua = navigator.userAgent.toLowerCase(),
930
-	platform = navigator.platform.toLowerCase(),
931
-	UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [null, 'unknown', 0],
932
-	mode = UA[1] == 'ie' && document.documentMode;
933
-
934
-var Browser = this.Browser = {
935
-
936
-	extend: Function.prototype.extend,
937
-
938
-	name: (UA[1] == 'version') ? UA[3] : UA[1],
939
-
940
-	version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]),
941
-
942
-	Platform: {
943
-		name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0]
944
-	},
945
-
946
-	Features: {
947
-		xpath: !!(document.evaluate),
948
-		air: !!(window.runtime),
949
-		query: !!(document.querySelector),
950
-		json: !!(window.JSON)
951
-	},
952
-
953
-	Plugins: {}
954
-
955
-};
956
-
957
-Browser[Browser.name] = true;
958
-Browser[Browser.name + parseInt(Browser.version, 10)] = true;
959
-Browser.Platform[Browser.Platform.name] = true;
960
-
961
-// Request
962
-
963
-Browser.Request = (function(){
964
-
965
-	var XMLHTTP = function(){
966
-		return new XMLHttpRequest();
967
-	};
968
-
969
-	var MSXML2 = function(){
970
-		return new ActiveXObject('MSXML2.XMLHTTP');
971
-	};
972
-
973
-	var MSXML = function(){
974
-		return new ActiveXObject('Microsoft.XMLHTTP');
975
-	};
976
-
977
-	return Function.attempt(function(){
978
-		XMLHTTP();
979
-		return XMLHTTP;
980
-	}, function(){
981
-		MSXML2();
982
-		return MSXML2;
983
-	}, function(){
984
-		MSXML();
985
-		return MSXML;
986
-	});
987
-
988
-})();
989
-
990
-Browser.Features.xhr = !!(Browser.Request);
991
-
992
-// Flash detection
993
-
994
-var version = (Function.attempt(function(){
995
-	return navigator.plugins['Shockwave Flash'].description;
996
-}, function(){
997
-	return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
998
-}) || '0 r0').match(/\d+/g);
999
-
1000
-Browser.Plugins.Flash = {
1001
-	version: Number(version[0] || '0.' + version[1]) || 0,
1002
-	build: Number(version[2]) || 0
1003
-};
1004
-
1005
-// String scripts
1006
-
1007
-Browser.exec = function(text){
1008
-	if (!text) return text;
1009
-	if (window.execScript){
1010
-		window.execScript(text);
1011
-	} else {
1012
-		var script = document.createElement('script');
1013
-		script.setAttribute('type', 'text/javascript');
1014
-		script.text = text;
1015
-		document.head.appendChild(script);
1016
-		document.head.removeChild(script);
1017
-	}
1018
-	return text;
1019
-};
1020
-
1021
-String.implement('stripScripts', function(exec){
1022
-	var scripts = '';
1023
-	var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(all, code){
1024
-		scripts += code + '\n';
1025
-		return '';
1026
-	});
1027
-	if (exec === true) Browser.exec(scripts);
1028
-	else if (typeOf(exec) == 'function') exec(scripts, text);
1029
-	return text;
1030
-});
1031
-
1032
-// Window, Document
1033
-
1034
-Browser.extend({
1035
-	Document: this.Document,
1036
-	Window: this.Window,
1037
-	Element: this.Element,
1038
-	Event: this.Event
1039
-});
1040
-
1041
-this.Window = this.$constructor = new Type('Window', function(){});
1042
-
1043
-this.$family = Function.from('window').hide();
1044
-
1045
-Window.mirror(function(name, method){
1046
-	window[name] = method;
1047
-});
1048
-
1049
-this.Document = document.$constructor = new Type('Document', function(){});
1050
-
1051
-document.$family = Function.from('document').hide();
1052
-
1053
-Document.mirror(function(name, method){
1054
-	document[name] = method;
1055
-});
1056
-
1057
-document.html = document.documentElement;
1058
-document.head = document.getElementsByTagName('head')[0];
1059
-
1060
-if (document.execCommand) try {
1061
-	document.execCommand("BackgroundImageCache", false, true);
1062
-} catch (e){}
1063
-
1064
-if (this.attachEvent && !this.addEventListener){
1065
-	var unloadEvent = function(){
1066
-		this.detachEvent('onunload', unloadEvent);
1067
-		document.head = document.html = document.window = null;
1068
-	};
1069
-	this.attachEvent('onunload', unloadEvent);
1070
-}
1071
-
1072
-// IE fails on collections and <select>.options (refers to <select>)
1073
-var arrayFrom = Array.from;
1074
-try {
1075
-	arrayFrom(document.html.childNodes);
1076
-} catch(e){
1077
-	Array.from = function(item){
1078
-		if (typeof item != 'string' && Type.isEnumerable(item) && typeOf(item) != 'array'){
1079
-			var i = item.length, array = new Array(i);
1080
-			while (i--) array[i] = item[i];
1081
-			return array;
1082
-		}
1083
-		return arrayFrom(item);
1084
-	};
1085
-
1086
-	var prototype = Array.prototype,
1087
-		slice = prototype.slice;
1088
-	['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice'].each(function(name){
1089
-		var method = prototype[name];
1090
-		Array[name] = function(item){
1091
-			return method.apply(Array.from(item), slice.call(arguments, 1));
1092
-		};
1093
-	});
1094
-}
1095
-
1096
-
1097
-
1098
-}).call(this);
1099
-
1100
-
1101
-/*
1102
-
1103
-name: Event
1104
-
1105
-description: Contains the Event Class, to make the event object cross-browser.
1106
-
1107
-license: MIT-style license.
1108
-
1109
-requires: [Window, Document, Array, Function, String, Object]
1110
-
1111
-provides: Event
1112
-
1113
-...
1114
-*/
1115
-
1116
-var Event = new Type('Event', function(event, win){
1117
-	if (!win) win = window;
1118
-	var doc = win.document;
1119
-	event = event || win.event;
1120
-	if (event.$extended) return event;
1121
-	this.$extended = true;
1122
-	var type = event.type,
1123
-		target = event.target || event.srcElement,
1124
-		page = {},
1125
-		client = {},
1126
-		related = null,
1127
-		rightClick, wheel, code, key;
1128
-	while (target && target.nodeType == 3) target = target.parentNode;
1129
-
1130
-	if (type.indexOf('key') != -1){
1131
-		code = event.which || event.keyCode;
1132
-		key = Object.keyOf(Event.Keys, code);
1133
-		if (type == 'keydown'){
1134
-			var fKey = code - 111;
1135
-			if (fKey > 0 && fKey < 13) key = 'f' + fKey;
1136
-		}
1137
-		if (!key) key = String.fromCharCode(code).toLowerCase();
1138
-	} else if ((/click|mouse|menu/i).test(type)){
1139
-		doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
1140
-		page = {
1141
-			x: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft,
1142
-			y: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop
1143
-		};
1144
-		client = {
1145
-			x: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX,
1146
-			y: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY
1147
-		};
1148
-		if ((/DOMMouseScroll|mousewheel/).test(type)){
1149
-			wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
1150
-		}
1151
-		rightClick = (event.which == 3) || (event.button == 2);
1152
-		if ((/over|out/).test(type)){
1153
-			related = event.relatedTarget || event[(type == 'mouseover' ? 'from' : 'to') + 'Element'];
1154
-			var testRelated = function(){
1155
-				while (related && related.nodeType == 3) related = related.parentNode;
1156
-				return true;
1157
-			};
1158
-			var hasRelated = (Browser.firefox2) ? testRelated.attempt() : testRelated();
1159
-			related = (hasRelated) ? related : null;
1160
-		}
1161
-	} else if ((/gesture|touch/i).test(type)){
1162
-		this.rotation = event.rotation;
1163
-		this.scale = event.scale;
1164
-		this.targetTouches = event.targetTouches;
1165
-		this.changedTouches = event.changedTouches;
1166
-		var touches = this.touches = event.touches;
1167
-		if (touches && touches[0]){
1168
-			var touch = touches[0];
1169
-			page = {x: touch.pageX, y: touch.pageY};
1170
-			client = {x: touch.clientX, y: touch.clientY};
1171
-		}
1172
-	}
1173
-
1174
-	return Object.append(this, {
1175
-		event: event,
1176
-		type: type,
1177
-
1178
-		page: page,
1179
-		client: client,
1180
-		rightClick: rightClick,
1181
-
1182
-		wheel: wheel,
1183
-
1184
-		relatedTarget: document.id(related),
1185
-		target: document.id(target),
1186
-
1187
-		code: code,
1188
-		key: key,
1189
-
1190
-		shift: event.shiftKey,
1191
-		control: event.ctrlKey,
1192
-		alt: event.altKey,
1193
-		meta: event.metaKey
1194
-	});
1195
-});
1196
-
1197
-Event.Keys = {
1198
-	'enter': 13,
1199
-	'up': 38,
1200
-	'down': 40,
1201
-	'left': 37,
1202
-	'right': 39,
1203
-	'esc': 27,
1204
-	'space': 32,
1205
-	'backspace': 8,
1206
-	'tab': 9,
1207
-	'delete': 46
1208
-};
1209
-
1210
-
1211
-
1212
-Event.implement({
1213
-
1214
-	stop: function(){
1215
-		return this.stopPropagation().preventDefault();
1216
-	},
1217
-
1218
-	stopPropagation: function(){
1219
-		if (this.event.stopPropagation) this.event.stopPropagation();
1220
-		else this.event.cancelBubble = true;
1221
-		return this;
1222
-	},
1223
-
1224
-	preventDefault: function(){
1225
-		if (this.event.preventDefault) this.event.preventDefault();
1226
-		else this.event.returnValue = false;
1227
-		return this;
1228
-	}
1229
-
1230
-});
1231
-
1232
-
1233
-/*
1234
-
1235
-name: Class
1236
-
1237
-description: Contains the Class Function for easily creating, extending, and implementing reusable Classes.
1238
-
1239
-license: MIT-style license.
1240
-
1241
-requires: [Array, String, Function, Number]
1242
-
1243
-provides: Class
1244
-
1245
-...
1246
-*/
1247
-
1248
-(function(){
1249
-
1250
-var Class = this.Class = new Type('Class', function(params){
1251
-	if (instanceOf(params, Function)) params = {initialize: params};
1252
-
1253
-	var newClass = function(){
1254
-		reset(this);
1255
-		if (newClass.$prototyping) return this;
1256
-		this.$caller = null;
1257
-		var value = (this.initialize) ? this.initialize.apply(this, arguments) : this;
1258
-		this.$caller = this.caller = null;
1259
-		return value;
1260
-	}.extend(this).implement(params);
1261
-
1262
-	newClass.$constructor = Class;
1263
-	newClass.prototype.$constructor = newClass;
1264
-	newClass.prototype.parent = parent;
1265
-
1266
-	return newClass;
1267
-});
1268
-
1269
-var parent = function(){
1270
-	if (!this.$caller) throw new Error('The method "parent" cannot be called.');
1271
-	var name = this.$caller.$name,
1272
-		parent = this.$caller.$owner.parent,
1273
-		previous = (parent) ? parent.prototype[name] : null;
1274
-	if (!previous) throw new Error('The method "' + name + '" has no parent.');
1275
-	return previous.apply(this, arguments);
1276
-};
1277
-
1278
-var reset = function(object){
1279
-	for (var key in object){
1280
-		var value = object[key];
1281
-		switch (typeOf(value)){
1282
-			case 'object':
1283
-				var F = function(){};
1284
-				F.prototype = value;
1285
-				object[key] = reset(new F);
1286
-			break;
1287
-			case 'array': object[key] = value.clone(); break;
1288
-		}
1289
-	}
1290
-	return object;
1291
-};
1292
-
1293
-var wrap = function(self, key, method){
1294
-	if (method.$origin) method = method.$origin;
1295
-	var wrapper = function(){
1296
-		if (method.$protected && this.$caller == null) throw new Error('The method "' + key + '" cannot be called.');
1297
-		var caller = this.caller, current = this.$caller;
1298
-		this.caller = current; this.$caller = wrapper;
1299
-		var result = method.apply(this, arguments);
1300
-		this.$caller = current; this.caller = caller;
1301
-		return result;
1302
-	}.extend({$owner: self, $origin: method, $name: key});
1303
-	return wrapper;
1304
-};
1305
-
1306
-var implement = function(key, value, retain){
1307
-	if (Class.Mutators.hasOwnProperty(key)){
1308
-		value = Class.Mutators[key].call(this, value);
1309
-		if (value == null) return this;
1310
-	}
1311
-
1312
-	if (typeOf(value) == 'function'){
1313
-		if (value.$hidden) return this;
1314
-		this.prototype[key] = (retain) ? value : wrap(this, key, value);
1315
-	} else {
1316
-		Object.merge(this.prototype, key, value);
1317
-	}
1318
-
1319
-	return this;
1320
-};
1321
-
1322
-var getInstance = function(klass){
1323
-	klass.$prototyping = true;
1324
-	var proto = new klass;
1325
-	delete klass.$prototyping;
1326
-	return proto;
1327
-};
1328
-
1329
-Class.implement('implement', implement.overloadSetter());
1330
-
1331
-Class.Mutators = {
1332
-
1333
-	Extends: function(parent){
1334
-		this.parent = parent;
1335
-		this.prototype = getInstance(parent);
1336
-	},
1337
-
1338
-	Implements: function(items){
1339
-		Array.from(items).each(function(item){
1340
-			var instance = new item;
1341
-			for (var key in instance) implement.call(this, key, instance[key], true);
1342
-		}, this);
1343
-	}
1344
-};
1345
-
1346
-}).call(this);
1347
-
1348
-
1349
-/*
1350
-
1351
-name: Class.Extras
1352
-
1353
-description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.
1354
-
1355
-license: MIT-style license.
1356
-
1357
-requires: Class
1358
-
1359
-provides: [Class.Extras, Chain, Events, Options]
1360
-
1361
-...
1362
-*/
1363
-
1364
-(function(){
1365
-
1366
-this.Chain = new Class({
1367
-
1368
-	$chain: [],
1369
-
1370
-	chain: function(){
1371
-		this.$chain.append(Array.flatten(arguments));
1372
-		return this;
1373
-	},
1374
-
1375
-	callChain: function(){
1376
-		return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
1377
-	},
1378
-
1379
-	clearChain: function(){
1380
-		this.$chain.empty();
1381
-		return this;
1382
-	}
1383
-
1384
-});
1385
-
1386
-var removeOn = function(string){
1387
-	return string.replace(/^on([A-Z])/, function(full, first){
1388
-		return first.toLowerCase();
1389
-	});
1390
-};
1391
-
1392
-this.Events = new Class({
1393
-
1394
-	$events: {},
1395
-
1396
-	addEvent: function(type, fn, internal){
1397
-		type = removeOn(type);
1398
-
1399
-
1400
-
1401
-		this.$events[type] = (this.$events[type] || []).include(fn);
1402
-		if (internal) fn.internal = true;
1403
-		return this;
1404
-	},
1405
-
1406
-	addEvents: function(events){
1407
-		for (var type in events) this.addEvent(type, events[type]);
1408
-		return this;
1409
-	},
1410
-
1411
-	fireEvent: function(type, args, delay){
1412
-		type = removeOn(type);
1413
-		var events = this.$events[type];
1414
-		if (!events) return this;
1415
-		args = Array.from(args);
1416
-		events.each(function(fn){
1417
-			if (delay) fn.delay(delay, this, args);
1418
-			else fn.apply(this, args);
1419
-		}, this);
1420
-		return this;
1421
-	},
1422
-
1423
-	removeEvent: function(type, fn){
1424
-		type = removeOn(type);
1425
-		var events = this.$events[type];
1426
-		if (events && !fn.internal){
1427
-			var index =  events.indexOf(fn);
1428
-			if (index != -1) delete events[index];
1429
-		}
1430
-		return this;
1431
-	},
1432
-
1433
-	removeEvents: function(events){
1434
-		var type;
1435
-		if (typeOf(events) == 'object'){
1436
-			for (type in events) this.removeEvent(type, events[type]);
1437
-			return this;
1438
-		}
1439
-		if (events) events = removeOn(events);
1440
-		for (type in this.$events){
1441
-			if (events && events != type) continue;
1442
-			var fns = this.$events[type];
1443
-			for (var i = fns.length; i--;) if (i in fns){
1444
-				this.removeEvent(type, fns[i]);
1445
-			}
1446
-		}
1447
-		return this;
1448
-	}
1449
-
1450
-});
1451
-
1452
-this.Options = new Class({
1453
-
1454
-	setOptions: function(){
1455
-		var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments));
1456
-		if (this.addEvent) for (var option in options){
1457
-			if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
1458
-			this.addEvent(option, options[option]);
1459
-			delete options[option];
1460
-		}
1461
-		return this;
1462
-	}
1463
-
1464
-});
1465
-
1466
-}).call(this);
1467
-
1468
-
1469
-/*
1470
-name: Slick.Parser
1471
-description: Standalone CSS3 Selector parser
1472
-provides: Slick.Parser
1473
-...
1474
-*/
1475
-
1476
-;(function(){
1477
-
1478
-var parsed,
1479
-	separatorIndex,
1480
-	combinatorIndex,
1481
-	reversed,
1482
-	cache = {},
1483
-	reverseCache = {},
1484
-	reUnescape = /\\/g;
1485
-
1486
-var parse = function(expression, isReversed){
1487
-	if (expression == null) return null;
1488
-	if (expression.Slick === true) return expression;
1489
-	expression = ('' + expression).replace(/^\s+|\s+$/g, '');
1490
-	reversed = !!isReversed;
1491
-	var currentCache = (reversed) ? reverseCache : cache;
1492
-	if (currentCache[expression]) return currentCache[expression];
1493
-	parsed = {
1494
-		Slick: true,
1495
-		expressions: [],
1496
-		raw: expression,
1497
-		reverse: function(){
1498
-			return parse(this.raw, true);
1499
-		}
1500
-	};
1501
-	separatorIndex = -1;
1502
-	while (expression != (expression = expression.replace(regexp, parser)));
1503
-	parsed.length = parsed.expressions.length;
1504
-	return currentCache[parsed.raw] = (reversed) ? reverse(parsed) : parsed;
1505
-};
1506
-
1507
-var reverseCombinator = function(combinator){
1508
-	if (combinator === '!') return ' ';
1509
-	else if (combinator === ' ') return '!';
1510
-	else if ((/^!/).test(combinator)) return combinator.replace(/^!/, '');
1511
-	else return '!' + combinator;
1512
-};
1513
-
1514
-var reverse = function(expression){
1515
-	var expressions = expression.expressions;
1516
-	for (var i = 0; i < expressions.length; i++){
1517
-		var exp = expressions[i];
1518
-		var last = {parts: [], tag: '*', combinator: reverseCombinator(exp[0].combinator)};
1519
-
1520
-		for (var j = 0; j < exp.length; j++){
1521
-			var cexp = exp[j];
1522
-			if (!cexp.reverseCombinator) cexp.reverseCombinator = ' ';
1523
-			cexp.combinator = cexp.reverseCombinator;
1524
-			delete cexp.reverseCombinator;
1525
-		}
1526
-
1527
-		exp.reverse().push(last);
1528
-	}
1529
-	return expression;
1530
-};
1531
-
1532
-var escapeRegExp = function(string){// Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan <http://stevenlevithan.com/regex/xregexp/> MIT License
1533
-	return string.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, function(match){
1534
-		return '\\' + match;
1535
-	});
1536
-};
1537
-
1538
-var regexp = new RegExp(
1539
-/*
1540
-#!/usr/bin/env ruby
1541
-puts "\t\t" + DATA.read.gsub(/\(\?x\)|\s+#.*$|\s+|\\$|\\n/,'')
1542
-__END__
1543
-	"(?x)^(?:\
1544
-	  \\s* ( , ) \\s*               # Separator          \n\
1545
-	| \\s* ( <combinator>+ ) \\s*   # Combinator         \n\
1546
-	|      ( \\s+ )                 # CombinatorChildren \n\
1547
-	|      ( <unicode>+ | \\* )     # Tag                \n\
1548
-	| \\#  ( <unicode>+       )     # ID                 \n\
1549
-	| \\.  ( <unicode>+       )     # ClassName          \n\
1550
-	|                               # Attribute          \n\
1551
-	\\[  \
1552
-		\\s* (<unicode1>+)  (?:  \
1553
-			\\s* ([*^$!~|]?=)  (?:  \
1554
-				\\s* (?:\
1555
-					([\"']?)(.*?)\\9 \
1556
-				)\
1557
-			)  \
1558
-		)?  \\s*  \
1559
-	\\](?!\\]) \n\
1560
-	|   :+ ( <unicode>+ )(?:\
1561
-	\\( (?:\
1562
-		(?:([\"'])([^\\12]*)\\12)|((?:\\([^)]+\\)|[^()]*)+)\
1563
-	) \\)\
1564
-	)?\
1565
-	)"
1566
-*/
1567
-	"^(?:\\s*(,)\\s*|\\s*(<combinator>+)\\s*|(\\s+)|(<unicode>+|\\*)|\\#(<unicode>+)|\\.(<unicode>+)|\\[\\s*(<unicode1>+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(<unicode>+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)"
1568
-	.replace(/<combinator>/, '[' + escapeRegExp(">+~`!@$%^&={}\\;</") + ']')
1569
-	.replace(/<unicode>/g, '(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])')
1570
-	.replace(/<unicode1>/g, '(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])')
1571
-);
1572
-
1573
-function parser(
1574
-	rawMatch,
1575
-
1576
-	separator,
1577
-	combinator,
1578
-	combinatorChildren,
1579
-
1580
-	tagName,
1581
-	id,
1582
-	className,
1583
-
1584
-	attributeKey,
1585
-	attributeOperator,
1586
-	attributeQuote,
1587
-	attributeValue,
1588
-
1589
-	pseudoMarker,
1590
-	pseudoClass,
1591
-	pseudoQuote,
1592
-	pseudoClassQuotedValue,
1593
-	pseudoClassValue
1594
-){
1595
-	if (separator || separatorIndex === -1){
1596
-		parsed.expressions[++separatorIndex] = [];
1597
-		combinatorIndex = -1;
1598
-		if (separator) return '';
1599
-	}
1600
-
1601
-	if (combinator || combinatorChildren || combinatorIndex === -1){
1602
-		combinator = combinator || ' ';
1603
-		var currentSeparator = parsed.expressions[separatorIndex];
1604
-		if (reversed && currentSeparator[combinatorIndex])
1605
-			currentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator);
1606
-		currentSeparator[++combinatorIndex] = {combinator: combinator, tag: '*'};
1607
-	}
1608
-
1609
-	var currentParsed = parsed.expressions[separatorIndex][combinatorIndex];
1610
-
1611
-	if (tagName){
1612
-		currentParsed.tag = tagName.replace(reUnescape, '');
1613
-
1614
-	} else if (id){
1615
-		currentParsed.id = id.replace(reUnescape, '');
1616
-
1617
-	} else if (className){
1618
-		className = className.replace(reUnescape, '');
1619
-
1620
-		if (!currentParsed.classList) currentParsed.classList = [];
1621
-		if (!currentParsed.classes) currentParsed.classes = [];
1622
-		currentParsed.classList.push(className);
1623
-		currentParsed.classes.push({
1624
-			value: className,
1625
-			regexp: new RegExp('(^|\\s)' + escapeRegExp(className) + '(\\s|$)')
1626
-		});
1627
-
1628
-	} else if (pseudoClass){
1629
-		pseudoClassValue = pseudoClassValue || pseudoClassQuotedValue;
1630
-		pseudoClassValue = pseudoClassValue ? pseudoClassValue.replace(reUnescape, '') : null;
1631
-
1632
-		if (!currentParsed.pseudos) currentParsed.pseudos = [];
1633
-		currentParsed.pseudos.push({
1634
-			key: pseudoClass.replace(reUnescape, ''),
1635
-			value: pseudoClassValue,
1636
-			type: pseudoMarker.length == 1 ? 'class' : 'element'
1637
-		});
1638
-
1639
-	} else if (attributeKey){
1640
-		attributeKey = attributeKey.replace(reUnescape, '');
1641
-		attributeValue = (attributeValue || '').replace(reUnescape, '');
1642
-
1643
-		var test, regexp;
1644
-
1645
-		switch (attributeOperator){
1646
-			case '^=' : regexp = new RegExp(       '^'+ escapeRegExp(attributeValue)            ); break;
1647
-			case '$=' : regexp = new RegExp(            escapeRegExp(attributeValue) +'$'       ); break;
1648
-			case '~=' : regexp = new RegExp( '(^|\\s)'+ escapeRegExp(attributeValue) +'(\\s|$)' ); break;
1649
-			case '|=' : regexp = new RegExp(       '^'+ escapeRegExp(attributeValue) +'(-|$)'   ); break;
1650
-			case  '=' : test = function(value){
1651
-				return attributeValue == value;
1652
-			}; break;
1653
-			case '*=' : test = function(value){
1654
-				return value && value.indexOf(attributeValue) > -1;
1655
-			}; break;
1656
-			case '!=' : test = function(value){
1657
-				return attributeValue != value;
1658
-			}; break;
1659
-			default   : test = function(value){
1660
-				return !!value;
1661
-			};
1662
-		}
1663
-
1664
-		if (attributeValue == '' && (/^[*$^]=$/).test(attributeOperator)) test = function(){
1665
-			return false;
1666
-		};
1667
-
1668
-		if (!test) test = function(value){
1669
-			return value && regexp.test(value);
1670
-		};
1671
-
1672
-		if (!currentParsed.attributes) currentParsed.attributes = [];
1673
-		currentParsed.attributes.push({
1674
-			key: attributeKey,
1675
-			operator: attributeOperator,
1676
-			value: attributeValue,
1677
-			test: test
1678
-		});
1679
-
1680
-	}
1681
-
1682
-	return '';
1683
-};
1684
-
1685
-// Slick NS
1686
-
1687
-var Slick = (this.Slick || {});
1688
-
1689
-Slick.parse = function(expression){
1690
-	return parse(expression);
1691
-};
1692
-
1693
-Slick.escapeRegExp = escapeRegExp;
1694
-
1695
-if (!this.Slick) this.Slick = Slick;
1696
-
1697
-}).apply(/*<CommonJS>*/(typeof exports != 'undefined') ? exports : /*</CommonJS>*/this);
1698
-
1699
-
1700
-/*
1701
-name: Slick.Finder
1702
-description: The new, superfast css selector engine.
1703
-provides: Slick.Finder
1704
-requires: Slick.Parser
1705
-...
1706
-*/
1707
-
1708
-;(function(){
1709
-
1710
-var local = {},
1711
-	featuresCache = {},
1712
-	toString = Object.prototype.toString;
1713
-
1714
-// Feature / Bug detection
1715
-
1716
-local.isNativeCode = function(fn){
1717
-	return (/\{\s*\[native code\]\s*\}/).test('' + fn);
1718
-};
1719
-
1720
-local.isXML = function(document){
1721
-	return (!!document.xmlVersion) || (!!document.xml) || (toString.call(document) == '[object XMLDocument]') ||
1722
-	(document.nodeType == 9 && document.documentElement.nodeName != 'HTML');
1723
-};
1724
-
1725
-local.setDocument = function(document){
1726
-
1727
-	// convert elements / window arguments to document. if document cannot be extrapolated, the function returns.
1728
-	var nodeType = document.nodeType;
1729
-	if (nodeType == 9); // document
1730
-	else if (nodeType) document = document.ownerDocument; // node
1731
-	else if (document.navigator) document = document.document; // window
1732
-	else return;
1733
-
1734
-	// check if it's the old document
1735
-
1736
-	if (this.document === document) return;
1737
-	this.document = document;
1738
-
1739
-	// check if we have done feature detection on this document before
1740
-
1741
-	var root = document.documentElement,
1742
-		rootUid = this.getUIDXML(root),
1743
-		features = featuresCache[rootUid],
1744
-		feature;
1745
-
1746
-	if (features){
1747
-		for (feature in features){
1748
-			this[feature] = features[feature];
1749
-		}
1750
-		return;
1751
-	}
1752
-
1753
-	features = featuresCache[rootUid] = {};
1754
-
1755
-	features.root = root;
1756
-	features.isXMLDocument = this.isXML(document);
1757
-
1758
-	features.brokenStarGEBTN
1759
-	= features.starSelectsClosedQSA
1760
-	= features.idGetsName
1761
-	= features.brokenMixedCaseQSA
1762
-	= features.brokenGEBCN
1763
-	= features.brokenCheckedQSA
1764
-	= features.brokenEmptyAttributeQSA
1765
-	= features.isHTMLDocument
1766
-	= features.nativeMatchesSelector
1767
-	= false;
1768
-
1769
-	var starSelectsClosed, starSelectsComments,
1770
-		brokenSecondClassNameGEBCN, cachedGetElementsByClassName,
1771
-		brokenFormAttributeGetter;
1772
-
1773
-	var selected, id = 'slick_uniqueid';
1774
-	var testNode = document.createElement('div');
1775
-
1776
-	var testRoot = document.body || document.getElementsByTagName('body')[0] || root;
1777
-	testRoot.appendChild(testNode);
1778
-
1779
-	// on non-HTML documents innerHTML and getElementsById doesnt work properly
1780
-	try {
1781
-		testNode.innerHTML = '<a id="'+id+'"></a>';
1782
-		features.isHTMLDocument = !!document.getElementById(id);
1783
-	} catch(e){};
1784
-
1785
-	if (features.isHTMLDocument){
1786
-
1787
-		testNode.style.display = 'none';
1788
-
1789
-		// IE returns comment nodes for getElementsByTagName('*') for some documents
1790
-		testNode.appendChild(document.createComment(''));
1791
-		starSelectsComments = (testNode.getElementsByTagName('*').length > 1);
1792
-
1793
-		// IE returns closed nodes (EG:"</foo>") for getElementsByTagName('*') for some documents
1794
-		try {
1795
-			testNode.innerHTML = 'foo</foo>';
1796
-			selected = testNode.getElementsByTagName('*');
1797
-			starSelectsClosed = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');
1798
-		} catch(e){};
1799
-
1800
-		features.brokenStarGEBTN = starSelectsComments || starSelectsClosed;
1801
-
1802
-		// IE returns elements with the name instead of just id for getElementsById for some documents
1803
-		try {
1804
-			testNode.innerHTML = '<a name="'+ id +'"></a><b id="'+ id +'"></b>';
1805
-			features.idGetsName = document.getElementById(id) === testNode.firstChild;
1806
-		} catch(e){};
1807
-
1808
-		if (testNode.getElementsByClassName){
1809
-
1810
-			// Safari 3.2 getElementsByClassName caches results
1811
-			try {
1812
-				testNode.innerHTML = '<a class="f"></a><a class="b"></a>';
1813
-				testNode.getElementsByClassName('b').length;
1814
-				testNode.firstChild.className = 'b';
1815
-				cachedGetElementsByClassName = (testNode.getElementsByClassName('b').length != 2);
1816
-			} catch(e){};
1817
-
1818
-			// Opera 9.6 getElementsByClassName doesnt detects the class if its not the first one
1819
-			try {
1820
-				testNode.innerHTML = '<a class="a"></a><a class="f b a"></a>';
1821
-				brokenSecondClassNameGEBCN = (testNode.getElementsByClassName('a').length != 2);
1822
-			} catch(e){};
1823
-
1824
-			features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN;
1825
-		}
1826
-
1827
-		if (testNode.querySelectorAll){
1828
-			// IE 8 returns closed nodes (EG:"</foo>") for querySelectorAll('*') for some documents
1829
-			try {
1830
-				testNode.innerHTML = 'foo</foo>';
1831
-				selected = testNode.querySelectorAll('*');
1832
-				features.starSelectsClosedQSA = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');
1833
-			} catch(e){};
1834
-
1835
-			// Safari 3.2 querySelectorAll doesnt work with mixedcase on quirksmode
1836
-			try {
1837
-				testNode.innerHTML = '<a class="MiX"></a>';
1838
-				features.brokenMixedCaseQSA = !testNode.querySelectorAll('.MiX').length;
1839
-			} catch(e){};
1840
-
1841
-			// Webkit and Opera dont return selected options on querySelectorAll
1842
-			try {
1843
-				testNode.innerHTML = '<select><option selected="selected">a</option></select>';
1844
-				features.brokenCheckedQSA = (testNode.querySelectorAll(':checked').length == 0);
1845
-			} catch(e){};
1846
-
1847
-			// IE returns incorrect results for attr[*^$]="" selectors on querySelectorAll
1848
-			try {
1849
-				testNode.innerHTML = '<a class=""></a>';
1850
-				features.brokenEmptyAttributeQSA = (testNode.querySelectorAll('[class*=""]').length != 0);
1851
-			} catch(e){};
1852
-
1853
-		}
1854
-
1855
-		// IE6-7, if a form has an input of id x, form.getAttribute(x) returns a reference to the input
1856
-		try {
1857
-			testNode.innerHTML = '<form action="s"><input id="action"/></form>';
1858
-			brokenFormAttributeGetter = (testNode.firstChild.getAttribute('action') != 's');
1859
-		} catch(e){};
1860
-
1861
-		// native matchesSelector function
1862
-
1863
-		features.nativeMatchesSelector = root.matchesSelector || /*root.msMatchesSelector ||*/ root.mozMatchesSelector || root.webkitMatchesSelector;
1864
-		if (features.nativeMatchesSelector) try {
1865
-			// if matchesSelector trows errors on incorrect sintaxes we can use it
1866
-			features.nativeMatchesSelector.call(root, ':slick');
1867
-			features.nativeMatchesSelector = null;
1868
-		} catch(e){};
1869
-
1870
-	}
1871
-
1872
-	try {
1873
-		root.slick_expando = 1;
1874
-		delete root.slick_expando;
1875
-		features.getUID = this.getUIDHTML;
1876
-	} catch(e) {
1877
-		features.getUID = this.getUIDXML;
1878
-	}
1879
-
1880
-	testRoot.removeChild(testNode);
1881
-	testNode = selected = testRoot = null;
1882
-
1883
-	// getAttribute
1884
-
1885
-	features.getAttribute = (features.isHTMLDocument && brokenFormAttributeGetter) ? function(node, name){
1886
-		var method = this.attributeGetters[name];
1887
-		if (method) return method.call(node);
1888
-		var attributeNode = node.getAttributeNode(name);
1889
-		return (attributeNode) ? attributeNode.nodeValue : null;
1890
-	} : function(node, name){
1891
-		var method = this.attributeGetters[name];
1892
-		return (method) ? method.call(node) : node.getAttribute(name);
1893
-	};
1894
-
1895
-	// hasAttribute
1896
-
1897
-	features.hasAttribute = (root && this.isNativeCode(root.hasAttribute)) ? function(node, attribute) {
1898
-		return node.hasAttribute(attribute);
1899
-	} : function(node, attribute) {
1900
-		node = node.getAttributeNode(attribute);
1901
-		return !!(node && (node.specified || node.nodeValue));
1902
-	};
1903
-
1904
-	// contains
1905
-	// FIXME: Add specs: local.contains should be different for xml and html documents?
1906
-	features.contains = (root && this.isNativeCode(root.contains)) ? function(context, node){
1907
-		return context.contains(node);
1908
-	} : (root && root.compareDocumentPosition) ? function(context, node){
1909
-		return context === node || !!(context.compareDocumentPosition(node) & 16);
1910
-	} : function(context, node){
1911
-		if (node) do {
1912
-			if (node === context) return true;
1913
-		} while ((node = node.parentNode));
1914
-		return false;
1915
-	};
1916
-
1917
-	// document order sorting
1918
-	// credits to Sizzle (http://sizzlejs.com/)
1919
-
1920
-	features.documentSorter = (root.compareDocumentPosition) ? function(a, b){
1921
-		if (!a.compareDocumentPosition || !b.compareDocumentPosition) return 0;
1922
-		return a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
1923
-	} : ('sourceIndex' in root) ? function(a, b){
1924
-		if (!a.sourceIndex || !b.sourceIndex) return 0;
1925
-		return a.sourceIndex - b.sourceIndex;
1926
-	} : (document.createRange) ? function(a, b){
1927
-		if (!a.ownerDocument || !b.ownerDocument) return 0;
1928
-		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
1929
-		aRange.setStart(a, 0);
1930
-		aRange.setEnd(a, 0);
1931
-		bRange.setStart(b, 0);
1932
-		bRange.setEnd(b, 0);
1933
-		return aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
1934
-	} : null ;
1935
-
1936
-	root = null;
1937
-
1938
-	for (feature in features){
1939
-		this[feature] = features[feature];
1940
-	}
1941
-};
1942
-
1943
-// Main Method
1944
-
1945
-var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/,
1946
-	reEmptyAttribute = /\[.+[*$^]=(?:""|'')?\]/,
1947
-	qsaFailExpCache = {};
1948
-
1949
-local.search = function(context, expression, append, first){
1950
-
1951
-	var found = this.found = (first) ? null : (append || []);
1952
-
1953
-	if (!context) return found;
1954
-	else if (context.navigator) context = context.document; // Convert the node from a window to a document
1955
-	else if (!context.nodeType) return found;
1956
-
1957
-	// setup
1958
-
1959
-	var parsed, i,
1960
-		uniques = this.uniques = {},
1961
-		hasOthers = !!(append && append.length),
1962
-		contextIsDocument = (context.nodeType == 9);
1963
-
1964
-	if (this.document !== (contextIsDocument ? context : context.ownerDocument)) this.setDocument(context);
1965
-
1966
-	// avoid duplicating items already in the append array
1967
-	if (hasOthers) for (i = found.length; i--;) uniques[this.getUID(found[i])] = true;
1968
-
1969
-	// expression checks
1970
-
1971
-	if (typeof expression == 'string'){ // expression is a string
1972
-
1973
-		/*<simple-selectors-override>*/
1974
-		var simpleSelector = expression.match(reSimpleSelector);
1975
-		simpleSelectors: if (simpleSelector) {
1976
-
1977
-			var symbol = simpleSelector[1],
1978
-				name = simpleSelector[2],
1979
-				node, nodes;
1980
-
1981
-			if (!symbol){
1982
-
1983
-				if (name == '*' && this.brokenStarGEBTN) break simpleSelectors;
1984
-				nodes = context.getElementsByTagName(name);
1985
-				if (first) return nodes[0] || null;
1986
-				for (i = 0; node = nodes[i++];){
1987
-					if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
1988
-				}
1989
-
1990
-			} else if (symbol == '#'){
1991
-
1992
-				if (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors;
1993
-				node = context.getElementById(name);
1994
-				if (!node) return found;
1995
-				if (this.idGetsName && node.getAttributeNode('id').nodeValue != name) break simpleSelectors;
1996
-				if (first) return node || null;
1997
-				if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
1998
-
1999
-			} else if (symbol == '.'){
2000
-
2001
-				if (!this.isHTMLDocument || ((!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll)) break simpleSelectors;
2002
-				if (context.getElementsByClassName && !this.brokenGEBCN){
2003
-					nodes = context.getElementsByClassName(name);
2004
-					if (first) return nodes[0] || null;
2005
-					for (i = 0; node = nodes[i++];){
2006
-						if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
2007
-					}
2008
-				} else {
2009
-					var matchClass = new RegExp('(^|\\s)'+ Slick.escapeRegExp(name) +'(\\s|$)');
2010
-					nodes = context.getElementsByTagName('*');
2011
-					for (i = 0; node = nodes[i++];){
2012
-						className = node.className;
2013
-						if (!(className && matchClass.test(className))) continue;
2014
-						if (first) return node;
2015
-						if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
2016
-					}
2017
-				}
2018
-
2019
-			}
2020
-
2021
-			if (hasOthers) this.sort(found);
2022
-			return (first) ? null : found;
2023
-
2024
-		}
2025
-		/*</simple-selectors-override>*/
2026
-
2027
-		/*<query-selector-override>*/
2028
-		querySelector: if (context.querySelectorAll) {
2029
-
2030
-			if (!this.isHTMLDocument || this.brokenMixedCaseQSA || qsaFailExpCache[expression] ||
2031
-			(this.brokenCheckedQSA && expression.indexOf(':checked') > -1) ||
2032
-			(this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression)) || Slick.disableQSA) break querySelector;
2033
-
2034
-			var _expression = expression;
2035
-			if (!contextIsDocument){
2036
-				// non-document rooted QSA
2037
-				// credits to Andrew Dupont
2038
-				var currentId = context.getAttribute('id'), slickid = 'slickid__';
2039
-				context.setAttribute('id', slickid);
2040
-				_expression = '#' + slickid + ' ' + _expression;
2041
-			}
2042
-
2043
-			try {
2044
-				if (first) return context.querySelector(_expression) || null;
2045
-				else nodes = context.querySelectorAll(_expression);
2046
-			} catch(e) {
2047
-				qsaFailExpCache[expression] = 1;
2048
-				break querySelector;
2049
-			} finally {
2050
-				if (!contextIsDocument){
2051
-					if (currentId) context.setAttribute('id', currentId);
2052
-					else context.removeAttribute('id');
2053
-				}
2054
-			}
2055
-
2056
-			if (this.starSelectsClosedQSA) for (i = 0; node = nodes[i++];){
2057
-				if (node.nodeName > '@' && !(hasOthers && uniques[this.getUID(node)])) found.push(node);
2058
-			} else for (i = 0; node = nodes[i++];){
2059
-				if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
2060
-			}
2061
-
2062
-			if (hasOthers) this.sort(found);
2063
-			return found;
2064
-
2065
-		}
2066
-		/*</query-selector-override>*/
2067
-
2068
-		parsed = this.Slick.parse(expression);
2069
-		if (!parsed.length) return found;
2070
-	} else if (expression == null){ // there is no expression
2071
-		return found;
2072
-	} else if (expression.Slick){ // expression is a parsed Slick object
2073
-		parsed = expression;
2074
-	} else if (this.contains(context.documentElement || context, expression)){ // expression is a node
2075
-		(found) ? found.push(expression) : found = expression;
2076
-		return found;
2077
-	} else { // other junk
2078
-		return found;
2079
-	}
2080
-
2081
-	/*<pseudo-selectors>*//*<nth-pseudo-selectors>*/
2082
-
2083
-	// cache elements for the nth selectors
2084
-
2085
-	this.posNTH = {};
2086
-	this.posNTHLast = {};
2087
-	this.posNTHType = {};
2088
-	this.posNTHTypeLast = {};
2089
-
2090
-	/*</nth-pseudo-selectors>*//*</pseudo-selectors>*/
2091
-
2092
-	// if append is null and there is only a single selector with one expression use pushArray, else use pushUID
2093
-	this.push = (!hasOthers && (first || (parsed.length == 1 && parsed.expressions[0].length == 1))) ? this.pushArray : this.pushUID;
2094
-
2095
-	if (found == null) found = [];
2096
-
2097
-	// default engine
2098
-
2099
-	var j, m, n;
2100
-	var combinator, tag, id, classList, classes, attributes, pseudos;
2101
-	var currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions;
2102
-
2103
-	search: for (i = 0; (currentExpression = expressions[i]); i++) for (j = 0; (currentBit = currentExpression[j]); j++){
2104
-
2105
-		combinator = 'combinator:' + currentBit.combinator;
2106
-		if (!this[combinator]) continue search;
2107
-
2108
-		tag        = (this.isXMLDocument) ? currentBit.tag : currentBit.tag.toUpperCase();
2109
-		id         = currentBit.id;
2110
-		classList  = currentBit.classList;
2111
-		classes    = currentBit.classes;
2112
-		attributes = currentBit.attributes;
2113
-		pseudos    = currentBit.pseudos;
2114
-		lastBit    = (j === (currentExpression.length - 1));
2115
-
2116
-		this.bitUniques = {};
2117
-
2118
-		if (lastBit){
2119
-			this.uniques = uniques;
2120
-			this.found = found;
2121
-		} else {
2122
-			this.uniques = {};
2123
-			this.found = [];
2124
-		}
2125
-
2126
-		if (j === 0){
2127
-			this[combinator](context, tag, id, classes, attributes, pseudos, classList);
2128
-			if (first && lastBit && found.length) break search;
2129
-		} else {
2130
-			if (first && lastBit) for (m = 0, n = currentItems.length; m < n; m++){
2131
-				this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);
2132
-				if (found.length) break search;
2133
-			} else for (m = 0, n = currentItems.length; m < n; m++) this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);
2134
-		}
2135
-
2136
-		currentItems = this.found;
2137
-	}
2138
-
2139
-	// should sort if there are nodes in append and if you pass multiple expressions.
2140
-	if (hasOthers || (parsed.expressions.length > 1)) this.sort(found);
2141
-
2142
-	return (first) ? (found[0] || null) : found;
2143
-};
2144
-
2145
-// Utils
2146
-
2147
-local.uidx = 1;
2148
-local.uidk = 'slick-uniqueid';
2149
-
2150
-local.getUIDXML = function(node){
2151
-	var uid = node.getAttribute(this.uidk);
2152
-	if (!uid){
2153
-		uid = this.uidx++;
2154
-		node.setAttribute(this.uidk, uid);
2155
-	}
2156
-	return uid;
2157
-};
2158
-
2159
-local.getUIDHTML = function(node){
2160
-	return node.uniqueNumber || (node.uniqueNumber = this.uidx++);
2161
-};
2162
-
2163
-// sort based on the setDocument documentSorter method.
2164
-
2165
-local.sort = function(results){
2166
-	if (!this.documentSorter) return results;
2167
-	results.sort(this.documentSorter);
2168
-	return results;
2169
-};
2170
-
2171
-/*<pseudo-selectors>*//*<nth-pseudo-selectors>*/
2172
-
2173
-local.cacheNTH = {};
2174
-
2175
-local.matchNTH = /^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/;
2176
-
2177
-local.parseNTHArgument = function(argument){
2178
-	var parsed = argument.match(this.matchNTH);
2179
-	if (!parsed) return false;
2180
-	var special = parsed[2] || false;
2181
-	var a = parsed[1] || 1;
2182
-	if (a == '-') a = -1;
2183
-	var b = +parsed[3] || 0;
2184
-	parsed =
2185
-		(special == 'n')	? {a: a, b: b} :
2186
-		(special == 'odd')	? {a: 2, b: 1} :
2187
-		(special == 'even')	? {a: 2, b: 0} : {a: 0, b: a};
2188
-
2189
-	return (this.cacheNTH[argument] = parsed);
2190
-};
2191
-
2192
-local.createNTHPseudo = function(child, sibling, positions, ofType){
2193
-	return function(node, argument){
2194
-		var uid = this.getUID(node);
2195
-		if (!this[positions][uid]){
2196
-			var parent = node.parentNode;
2197
-			if (!parent) return false;
2198
-			var el = parent[child], count = 1;
2199
-			if (ofType){
2200
-				var nodeName = node.nodeName;
2201
-				do {
2202
-					if (el.nodeName != nodeName) continue;
2203
-					this[positions][this.getUID(el)] = count++;
2204
-				} while ((el = el[sibling]));
2205
-			} else {
2206
-				do {
2207
-					if (el.nodeType != 1) continue;
2208
-					this[positions][this.getUID(el)] = count++;
2209
-				} while ((el = el[sibling]));
2210
-			}
2211
-		}
2212
-		argument = argument || 'n';
2213
-		var parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument);
2214
-		if (!parsed) return false;
2215
-		var a = parsed.a, b = parsed.b, pos = this[positions][uid];
2216
-		if (a == 0) return b == pos;
2217
-		if (a > 0){
2218
-			if (pos < b) return false;
2219
-		} else {
2220
-			if (b < pos) return false;
2221
-		}
2222
-		return ((pos - b) % a) == 0;
2223
-	};
2224
-};
2225
-
2226
-/*</nth-pseudo-selectors>*//*</pseudo-selectors>*/
2227
-
2228
-local.pushArray = function(node, tag, id, classes, attributes, pseudos){
2229
-	if (this.matchSelector(node, tag, id, classes, attributes, pseudos)) this.found.push(node);
2230
-};
2231
-
2232
-local.pushUID = function(node, tag, id, classes, attributes, pseudos){
2233
-	var uid = this.getUID(node);
2234
-	if (!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos)){
2235
-		this.uniques[uid] = true;
2236
-		this.found.push(node);
2237
-	}
2238
-};
2239
-
2240
-local.matchNode = function(node, selector){
2241
-	if (this.isHTMLDocument && this.nativeMatchesSelector){
2242
-		try {
2243
-			return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, '[$1="$2"]'));
2244
-		} catch(matchError) {}
2245
-	}
2246
-
2247
-	var parsed = this.Slick.parse(selector);
2248
-	if (!parsed) return true;
2249
-
2250
-	// simple (single) selectors
2251
-	var expressions = parsed.expressions, reversedExpressions, simpleExpCounter = 0, i;
2252
-	for (i = 0; (currentExpression = expressions[i]); i++){
2253
-		if (currentExpression.length == 1){
2254
-			var exp = currentExpression[0];
2255
-			if (this.matchSelector(node, (this.isXMLDocument) ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return true;
2256
-			simpleExpCounter++;
2257
-		}
2258
-	}
2259
-
2260
-	if (simpleExpCounter == parsed.length) return false;
2261
-
2262
-	var nodes = this.search(this.document, parsed), item;
2263
-	for (i = 0; item = nodes[i++];){
2264
-		if (item === node) return true;
2265
-	}
2266
-	return false;
2267
-};
2268
-
2269
-local.matchPseudo = function(node, name, argument){
2270
-	var pseudoName = 'pseudo:' + name;
2271
-	if (this[pseudoName]) return this[pseudoName](node, argument);
2272
-	var attribute = this.getAttribute(node, name);
2273
-	return (argument) ? argument == attribute : !!attribute;
2274
-};
2275
-
2276
-local.matchSelector = function(node, tag, id, classes, attributes, pseudos){
2277
-	if (tag){
2278
-		var nodeName = (this.isXMLDocument) ? node.nodeName : node.nodeName.toUpperCase();
2279
-		if (tag == '*'){
2280
-			if (nodeName < '@') return false; // Fix for comment nodes and closed nodes
2281
-		} else {
2282
-			if (nodeName != tag) return false;
2283
-		}
2284
-	}
2285
-
2286
-	if (id && node.getAttribute('id') != id) return false;
2287
-
2288
-	var i, part, cls;
2289
-	if (classes) for (i = classes.length; i--;){
2290
-		cls = node.getAttribute('class') || node.className;
2291
-		if (!(cls && classes[i].regexp.test(cls))) return false;
2292
-	}
2293
-	if (attributes) for (i = attributes.length; i--;){
2294
-		part = attributes[i];
2295
-		if (part.operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return false;
2296
-	}
2297
-	if (pseudos) for (i = pseudos.length; i--;){
2298
-		part = pseudos[i];
2299
-		if (!this.matchPseudo(node, part.key, part.value)) return false;
2300
-	}
2301
-	return true;
2302
-};
2303
-
2304
-var combinators = {
2305
-
2306
-	' ': function(node, tag, id, classes, attributes, pseudos, classList){ // all child nodes, any level
2307
-
2308
-		var i, item, children;
2309
-
2310
-		if (this.isHTMLDocument){
2311
-			getById: if (id){
2312
-				item = this.document.getElementById(id);
2313
-				if ((!item && node.all) || (this.idGetsName && item && item.getAttributeNode('id').nodeValue != id)){
2314
-					// all[id] returns all the elements with that name or id inside node
2315
-					// if theres just one it will return the element, else it will be a collection
2316
-					children = node.all[id];
2317
-					if (!children) return;
2318
-					if (!children[0]) children = [children];
2319
-					for (i = 0; item = children[i++];){
2320
-						var idNode = item.getAttributeNode('id');
2321
-						if (idNode && idNode.nodeValue == id){
2322
-							this.push(item, tag, null, classes, attributes, pseudos);
2323
-							break;
2324
-						}
2325
-					}
2326
-					return;
2327
-				}
2328
-				if (!item){
2329
-					// if the context is in the dom we return, else we will try GEBTN, breaking the getById label
2330
-					if (this.contains(this.root, node)) return;
2331
-					else break getById;
2332
-				} else if (this.document !== node && !this.contains(node, item)) return;
2333
-				this.push(item, tag, null, classes, attributes, pseudos);
2334
-				return;
2335
-			}
2336
-			getByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN){
2337
-				children = node.getElementsByClassName(classList.join(' '));
2338
-				if (!(children && children.length)) break getByClass;
2339
-				for (i = 0; item = children[i++];) this.push(item, tag, id, null, attributes, pseudos);
2340
-				return;
2341
-			}
2342
-		}
2343
-		getByTag: {
2344
-			children = node.getElementsByTagName(tag);
2345
-			if (!(children && children.length)) break getByTag;
2346
-			if (!this.brokenStarGEBTN) tag = null;
2347
-			for (i = 0; item = children[i++];) this.push(item, tag, id, classes, attributes, pseudos);
2348
-		}
2349
-	},
2350
-
2351
-	'>': function(node, tag, id, classes, attributes, pseudos){ // direct children
2352
-		if ((node = node.firstChild)) do {
2353
-			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
2354
-		} while ((node = node.nextSibling));
2355
-	},
2356
-
2357
-	'+': function(node, tag, id, classes, attributes, pseudos){ // next sibling
2358
-		while ((node = node.nextSibling)) if (node.nodeType == 1){
2359
-			this.push(node, tag, id, classes, attributes, pseudos);
2360
-			break;
2361
-		}
2362
-	},
2363
-
2364
-	'^': function(node, tag, id, classes, attributes, pseudos){ // first child
2365
-		node = node.firstChild;
2366
-		if (node){
2367
-			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
2368
-			else this['combinator:+'](node, tag, id, classes, attributes, pseudos);
2369
-		}
2370
-	},
2371
-
2372
-	'~': function(node, tag, id, classes, attributes, pseudos){ // next siblings
2373
-		while ((node = node.nextSibling)){
2374
-			if (node.nodeType != 1) continue;
2375
-			var uid = this.getUID(node);
2376
-			if (this.bitUniques[uid]) break;
2377
-			this.bitUniques[uid] = true;
2378
-			this.push(node, tag, id, classes, attributes, pseudos);
2379
-		}
2380
-	},
2381
-
2382
-	'++': function(node, tag, id, classes, attributes, pseudos){ // next sibling and previous sibling
2383
-		this['combinator:+'](node, tag, id, classes, attributes, pseudos);
2384
-		this['combinator:!+'](node, tag, id, classes, attributes, pseudos);
2385
-	},
2386
-
2387
-	'~~': function(node, tag, id, classes, attributes, pseudos){ // next siblings and previous siblings
2388
-		this['combinator:~'](node, tag, id, classes, attributes, pseudos);
2389
-		this['combinator:!~'](node, tag, id, classes, attributes, pseudos);
2390
-	},
2391
-
2392
-	'!': function(node, tag, id, classes, attributes, pseudos){ // all parent nodes up to document
2393
-		while ((node = node.parentNode)) if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);
2394
-	},
2395
-
2396
-	'!>': function(node, tag, id, classes, attributes, pseudos){ // direct parent (one level)
2397
-		node = node.parentNode;
2398
-		if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);
2399
-	},
2400
-
2401
-	'!+': function(node, tag, id, classes, attributes, pseudos){ // previous sibling
2402
-		while ((node = node.previousSibling)) if (node.nodeType == 1){
2403
-			this.push(node, tag, id, classes, attributes, pseudos);
2404
-			break;
2405
-		}
2406
-	},
2407
-
2408
-	'!^': function(node, tag, id, classes, attributes, pseudos){ // last child
2409
-		node = node.lastChild;
2410
-		if (node){
2411
-			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
2412
-			else this['combinator:!+'](node, tag, id, classes, attributes, pseudos);
2413
-		}
2414
-	},
2415
-
2416
-	'!~': function(node, tag, id, classes, attributes, pseudos){ // previous siblings
2417
-		while ((node = node.previousSibling)){
2418
-			if (node.nodeType != 1) continue;
2419
-			var uid = this.getUID(node);
2420
-			if (this.bitUniques[uid]) break;
2421
-			this.bitUniques[uid] = true;
2422
-			this.push(node, tag, id, classes, attributes, pseudos);
2423
-		}
2424
-	}
2425
-
2426
-};
2427
-
2428
-for (var c in combinators) local['combinator:' + c] = combinators[c];
2429
-
2430
-var pseudos = {
2431
-
2432
-	/*<pseudo-selectors>*/
2433
-
2434
-	'empty': function(node){
2435
-		var child = node.firstChild;
2436
-		return !(child && child.nodeType == 1) && !(node.innerText || node.textContent || '').length;
2437
-	},
2438
-
2439
-	'not': function(node, expression){
2440
-		return !this.matchNode(node, expression);
2441
-	},
2442
-
2443
-	'contains': function(node, text){
2444
-		return (node.innerText || node.textContent || '').indexOf(text) > -1;
2445
-	},
2446
-
2447
-	'first-child': function(node){
2448
-		while ((node = node.previousSibling)) if (node.nodeType == 1) return false;
2449
-		return true;
2450
-	},
2451
-
2452
-	'last-child': function(node){
2453
-		while ((node = node.nextSibling)) if (node.nodeType == 1) return false;
2454
-		return true;
2455
-	},
2456
-
2457
-	'only-child': function(node){
2458
-		var prev = node;
2459
-		while ((prev = prev.previousSibling)) if (prev.nodeType == 1) return false;
2460
-		var next = node;
2461
-		while ((next = next.nextSibling)) if (next.nodeType == 1) return false;
2462
-		return true;
2463
-	},
2464
-
2465
-	/*<nth-pseudo-selectors>*/
2466
-
2467
-	'nth-child': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTH'),
2468
-
2469
-	'nth-last-child': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHLast'),
2470
-
2471
-	'nth-of-type': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTHType', true),
2472
-
2473
-	'nth-last-of-type': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHTypeLast', true),
2474
-
2475
-	'index': function(node, index){
2476
-		return this['pseudo:nth-child'](node, '' + index + 1);
2477
-	},
2478
-
2479
-	'even': function(node){
2480
-		return this['pseudo:nth-child'](node, '2n');
2481
-	},
2482
-
2483
-	'odd': function(node){
2484
-		return this['pseudo:nth-child'](node, '2n+1');
2485
-	},
2486
-
2487
-	/*</nth-pseudo-selectors>*/
2488
-
2489
-	/*<of-type-pseudo-selectors>*/
2490
-
2491
-	'first-of-type': function(node){
2492
-		var nodeName = node.nodeName;
2493
-		while ((node = node.previousSibling)) if (node.nodeName == nodeName) return false;
2494
-		return true;
2495
-	},
2496
-
2497
-	'last-of-type': function(node){
2498
-		var nodeName = node.nodeName;
2499
-		while ((node = node.nextSibling)) if (node.nodeName == nodeName) return false;
2500
-		return true;
2501
-	},
2502
-
2503
-	'only-of-type': function(node){
2504
-		var prev = node, nodeName = node.nodeName;
2505
-		while ((prev = prev.previousSibling)) if (prev.nodeName == nodeName) return false;
2506
-		var next = node;
2507
-		while ((next = next.nextSibling)) if (next.nodeName == nodeName) return false;
2508
-		return true;
2509
-	},
2510
-
2511
-	/*</of-type-pseudo-selectors>*/
2512
-
2513
-	// custom pseudos
2514
-
2515
-	'enabled': function(node){
2516
-		return !node.disabled;
2517
-	},
2518
-
2519
-	'disabled': function(node){
2520
-		return node.disabled;
2521
-	},
2522
-
2523
-	'checked': function(node){
2524
-		return node.checked || node.selected;
2525
-	},
2526
-
2527
-	'focus': function(node){
2528
-		return this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, 'tabindex'));
2529
-	},
2530
-
2531
-	'root': function(node){
2532
-		return (node === this.root);
2533
-	},
2534
-
2535
-	'selected': function(node){
2536
-		return node.selected;
2537
-	}
2538
-
2539
-	/*</pseudo-selectors>*/
2540
-};
2541
-
2542
-for (var p in pseudos) local['pseudo:' + p] = pseudos[p];
2543
-
2544
-// attributes methods
2545
-
2546
-local.attributeGetters = {
2547
-
2548
-	'class': function(){
2549
-		return this.getAttribute('class') || this.className;
2550
-	},
2551
-
2552
-	'for': function(){
2553
-		return ('htmlFor' in this) ? this.htmlFor : this.getAttribute('for');
2554
-	},
2555
-
2556
-	'href': function(){
2557
-		return ('href' in this) ? this.getAttribute('href', 2) : this.getAttribute('href');
2558
-	},
2559
-
2560
-	'style': function(){
2561
-		return (this.style) ? this.style.cssText : this.getAttribute('style');
2562
-	},
2563
-
2564
-	'tabindex': function(){
2565
-		var attributeNode = this.getAttributeNode('tabindex');
2566
-		return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null;
2567
-	},
2568
-
2569
-	'type': function(){
2570
-		return this.getAttribute('type');
2571
-	}
2572
-
2573
-};
2574
-
2575
-// Slick
2576
-
2577
-var Slick = local.Slick = (this.Slick || {});
2578
-
2579
-Slick.version = '1.1.5';
2580
-
2581
-// Slick finder
2582
-
2583
-Slick.search = function(context, expression, append){
2584
-	return local.search(context, expression, append);
2585
-};
2586
-
2587
-Slick.find = function(context, expression){
2588
-	return local.search(context, expression, null, true);
2589
-};
2590
-
2591
-// Slick containment checker
2592
-
2593
-Slick.contains = function(container, node){
2594
-	local.setDocument(container);
2595
-	return local.contains(container, node);
2596
-};
2597
-
2598
-// Slick attribute getter
2599
-
2600
-Slick.getAttribute = function(node, name){
2601
-	return local.getAttribute(node, name);
2602
-};
2603
-
2604
-// Slick matcher
2605
-
2606
-Slick.match = function(node, selector){
2607
-	if (!(node && selector)) return false;
2608
-	if (!selector || selector === node) return true;
2609
-	local.setDocument(node);
2610
-	return local.matchNode(node, selector);
2611
-};
2612
-
2613
-// Slick attribute accessor
2614
-
2615
-Slick.defineAttributeGetter = function(name, fn){
2616
-	local.attributeGetters[name] = fn;
2617
-	return this;
2618
-};
2619
-
2620
-Slick.lookupAttributeGetter = function(name){
2621
-	return local.attributeGetters[name];
2622
-};
2623
-
2624
-// Slick pseudo accessor
2625
-
2626
-Slick.definePseudo = function(name, fn){
2627
-	local['pseudo:' + name] = function(node, argument){
2628
-		return fn.call(node, argument);
2629
-	};
2630
-	return this;
2631
-};
2632
-
2633
-Slick.lookupPseudo = function(name){
2634
-	var pseudo = local['pseudo:' + name];
2635
-	if (pseudo) return function(argument){
2636
-		return pseudo.call(this, argument);
2637
-	};
2638
-	return null;
2639
-};
2640
-
2641
-// Slick overrides accessor
2642
-
2643
-Slick.override = function(regexp, fn){
2644
-	local.override(regexp, fn);
2645
-	return this;
2646
-};
2647
-
2648
-Slick.isXML = local.isXML;
2649
-
2650
-Slick.uidOf = function(node){
2651
-	return local.getUIDHTML(node);
2652
-};
2653
-
2654
-if (!this.Slick) this.Slick = Slick;
2655
-
2656
-}).apply(/*<CommonJS>*/(typeof exports != 'undefined') ? exports : /*</CommonJS>*/this);
2657
-
2658
-
2659
-/*
2660
-
2661
-name: Element
2662
-
2663
-description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.
2664
-
2665
-license: MIT-style license.
2666
-
2667
-requires: [Window, Document, Array, String, Function, Number, Slick.Parser, Slick.Finder]
2668
-
2669
-provides: [Element, Elements, $, $$, Iframe, Selectors]
2670
-
2671
-...
2672
-*/
2673
-
2674
-var Element = function(tag, props){
2675
-	var konstructor = Element.Constructors[tag];
2676
-	if (konstructor) return konstructor(props);
2677
-	if (typeof tag != 'string') return document.id(tag).set(props);
2678
-
2679
-	if (!props) props = {};
2680
-
2681
-	if (!(/^[\w-]+$/).test(tag)){
2682
-		var parsed = Slick.parse(tag).expressions[0][0];
2683
-		tag = (parsed.tag == '*') ? 'div' : parsed.tag;
2684
-		if (parsed.id && props.id == null) props.id = parsed.id;
2685
-
2686
-		var attributes = parsed.attributes;
2687
-		if (attributes) for (var i = 0, l = attributes.length; i < l; i++){
2688
-			var attr = attributes[i];
2689
-			if (attr.value != null && attr.operator == '=' && props[attr.key] == null)
2690
-				props[attr.key] = attr.value;
2691
-		}
2692
-
2693
-		if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' ');
2694
-	}
2695
-
2696
-	return document.newElement(tag, props);
2697
-};
2698
-
2699
-if (Browser.Element) Element.prototype = Browser.Element.prototype;
2700
-
2701
-new Type('Element', Element).mirror(function(name){
2702
-	if (Array.prototype[name]) return;
2703
-
2704
-	var obj = {};
2705
-	obj[name] = function(){
2706
-		var results = [], args = arguments, elements = true;
2707
-		for (var i = 0, l = this.length; i < l; i++){
2708
-			var element = this[i], result = results[i] = element[name].apply(element, args);
2709
-			elements = (elements && typeOf(result) == 'element');
2710
-		}
2711
-		return (elements) ? new Elements(results) : results;
2712
-	};
2713
-
2714
-	Elements.implement(obj);
2715
-});
2716
-
2717
-if (!Browser.Element){
2718
-	Element.parent = Object;
2719
-
2720
-	Element.Prototype = {'$family': Function.from('element').hide()};
2721
-
2722
-	Element.mirror(function(name, method){
2723
-		Element.Prototype[name] = method;
2724
-	});
2725
-}
2726
-
2727
-Element.Constructors = {};
2728
-
2729
-
2730
-
2731
-var IFrame = new Type('IFrame', function(){
2732
-	var params = Array.link(arguments, {
2733
-		properties: Type.isObject,
2734
-		iframe: function(obj){
2735
-			return (obj != null);
2736
-		}
2737
-	});
2738
-
2739
-	var props = params.properties || {}, iframe;
2740
-	if (params.iframe) iframe = document.id(params.iframe);
2741
-	var onload = props.onload || function(){};
2742
-	delete props.onload;
2743
-	props.id = props.name = [props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + String.uniqueID()].pick();
2744
-	iframe = new Element(iframe || 'iframe', props);
2745
-
2746
-	var onLoad = function(){
2747
-		onload.call(iframe.contentWindow);
2748
-	};
2749
-
2750
-	if (window.frames[props.id]) onLoad();
2751
-	else iframe.addListener('load', onLoad);
2752
-	return iframe;
2753
-});
2754
-
2755
-var Elements = this.Elements = function(nodes){
2756
-	if (nodes && nodes.length){
2757
-		var uniques = {}, node;
2758
-		for (var i = 0; node = nodes[i++];){
2759
-			var uid = Slick.uidOf(node);
2760
-			if (!uniques[uid]){
2761
-				uniques[uid] = true;
2762
-				this.push(node);
2763
-			}
2764
-		}
2765
-	}
2766
-};
2767
-
2768
-Elements.prototype = {length: 0};
2769
-Elements.parent = Array;
2770
-
2771
-new Type('Elements', Elements).implement({
2772
-
2773
-	filter: function(filter, bind){
2774
-		if (!filter) return this;
2775
-		return new Elements(Array.filter(this, (typeOf(filter) == 'string') ? function(item){
2776
-			return item.match(filter);
2777
-		} : filter, bind));
2778
-	}.protect(),
2779
-
2780
-	push: function(){
2781
-		var length = this.length;
2782
-		for (var i = 0, l = arguments.length; i < l; i++){
2783
-			var item = document.id(arguments[i]);
2784
-			if (item) this[length++] = item;
2785
-		}
2786
-		return (this.length = length);
2787
-	}.protect(),
2788
-
2789
-	unshift: function(){
2790
-		var items = [];
2791
-		for (var i = 0, l = arguments.length; i < l; i++){
2792
-			var item = document.id(arguments[i]);
2793
-			if (item) items.push(item);
2794
-		}
2795
-		return Array.prototype.unshift.apply(this, items);
2796
-	}.protect(),
2797
-
2798
-	concat: function(){
2799
-		var newElements = new Elements(this);
2800
-		for (var i = 0, l = arguments.length; i < l; i++){
2801
-			var item = arguments[i];
2802
-			if (Type.isEnumerable(item)) newElements.append(item);
2803
-			else newElements.push(item);
2804
-		}
2805
-		return newElements;
2806
-	}.protect(),
2807
-
2808
-	append: function(collection){
2809
-		for (var i = 0, l = collection.length; i < l; i++) this.push(collection[i]);
2810
-		return this;
2811
-	}.protect(),
2812
-
2813
-	empty: function(){
2814
-		while (this.length) delete this[--this.length];
2815
-		return this;
2816
-	}.protect()
2817
-
2818
-});
2819
-
2820
-
2821
-
2822
-(function(){
2823
-
2824
-// FF, IE
2825
-var splice = Array.prototype.splice, object = {'0': 0, '1': 1, length: 2};
2826
-
2827
-splice.call(object, 1, 1);
2828
-if (object[1] == 1) Elements.implement('splice', function(){
2829
-	var length = this.length;
2830
-	splice.apply(this, arguments);
2831
-	while (length >= this.length) delete this[length--];
2832
-	return this;
2833
-}.protect());
2834
-
2835
-Elements.implement(Array.prototype);
2836
-
2837
-Array.mirror(Elements);
2838
-
2839
-/*<ltIE8>*/
2840
-var createElementAcceptsHTML;
2841
-try {
2842
-	var x = document.createElement('<input name=x>');
2843
-	createElementAcceptsHTML = (x.name == 'x');
2844
-} catch(e){}
2845
-
2846
-var escapeQuotes = function(html){
2847
-	return ('' + html).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
2848
-};
2849
-/*</ltIE8>*/
2850
-
2851
-Document.implement({
2852
-
2853
-	newElement: function(tag, props){
2854
-		if (props && props.checked != null) props.defaultChecked = props.checked;
2855
-		/*<ltIE8>*/// Fix for readonly name and type properties in IE < 8
2856
-		if (createElementAcceptsHTML && props){
2857
-			tag = '<' + tag;
2858
-			if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"';
2859
-			if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"';
2860
-			tag += '>';
2861
-			delete props.name;
2862
-			delete props.type;
2863
-		}
2864
-		/*</ltIE8>*/
2865
-		return this.id(this.createElement(tag)).set(props);
2866
-	}
2867
-
2868
-});
2869
-
2870
-})();
2871
-
2872
-Document.implement({
2873
-
2874
-	newTextNode: function(text){
2875
-		return this.createTextNode(text);
2876
-	},
2877
-
2878
-	getDocument: function(){
2879
-		return this;
2880
-	},
2881
-
2882
-	getWindow: function(){
2883
-		return this.window;
2884
-	},
2885
-
2886
-	id: (function(){
2887
-
2888
-		var types = {
2889
-
2890
-			string: function(id, nocash, doc){
2891
-				id = Slick.find(doc, '#' + id.replace(/(\W)/g, '\\$1'));
2892
-				return (id) ? types.element(id, nocash) : null;
2893
-			},
2894
-
2895
-			element: function(el, nocash){
2896
-				$uid(el);
2897
-				if (!nocash && !el.$family && !(/^(?:object|embed)$/i).test(el.tagName)){
2898
-					Object.append(el, Element.Prototype);
2899
-				}
2900
-				return el;
2901
-			},
2902
-
2903
-			object: function(obj, nocash, doc){
2904
-				if (obj.toElement) return types.element(obj.toElement(doc), nocash);
2905
-				return null;
2906
-			}
2907
-
2908
-		};
2909
-
2910
-		types.textnode = types.whitespace = types.window = types.document = function(zero){
2911
-			return zero;
2912
-		};
2913
-
2914
-		return function(el, nocash, doc){
2915
-			if (el && el.$family && el.uid) return el;
2916
-			var type = typeOf(el);
2917
-			return (types[type]) ? types[type](el, nocash, doc || document) : null;
2918
-		};
2919
-
2920
-	})()
2921
-
2922
-});
2923
-
2924
-if (window.$ == null) Window.implement('$', function(el, nc){
2925
-	return document.id(el, nc, this.document);
2926
-});
2927
-
2928
-Window.implement({
2929
-
2930
-	getDocument: function(){
2931
-		return this.document;
2932
-	},
2933
-
2934
-	getWindow: function(){
2935
-		return this;
2936
-	}
2937
-
2938
-});
2939
-
2940
-[Document, Element].invoke('implement', {
2941
-
2942
-	getElements: function(expression){
2943
-		return Slick.search(this, expression, new Elements);
2944
-	},
2945
-
2946
-	getElement: function(expression){
2947
-		return document.id(Slick.find(this, expression));
2948
-	}
2949
-
2950
-});
2951
-
2952
-
2953
-
2954
-if (window.$$ == null) Window.implement('$$', function(selector){
2955
-	if (arguments.length == 1){
2956
-		if (typeof selector == 'string') return Slick.search(this.document, selector, new Elements);
2957
-		else if (Type.isEnumerable(selector)) return new Elements(selector);
2958
-	}
2959
-	return new Elements(arguments);
2960
-});
2961
-
2962
-(function(){
2963
-
2964
-var collected = {}, storage = {};
2965
-var formProps = {input: 'checked', option: 'selected', textarea: 'value'};
2966
-
2967
-var get = function(uid){
2968
-	return (storage[uid] || (storage[uid] = {}));
2969
-};
2970
-
2971
-var clean = function(item){
2972
-	var uid = item.uid;
2973
-	if (item.removeEvents) item.removeEvents();
2974
-	if (item.clearAttributes) item.clearAttributes();
2975
-	if (uid != null){
2976
-		delete collected[uid];
2977
-		delete storage[uid];
2978
-	}
2979
-	return item;
2980
-};
2981
-
2982
-var camels = ['defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly',
2983
-	'rowSpan', 'tabIndex', 'useMap'
2984
-];
2985
-var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readOnly', 'multiple', 'selected',
2986
-	'noresize', 'defer', 'defaultChecked'
2987
-];
2988
- var attributes = {
2989
-	'html': 'innerHTML',
2990
-	'class': 'className',
2991
-	'for': 'htmlFor',
2992
-	'text': (function(){
2993
-		var temp = document.createElement('div');
2994
-		return (temp.textContent == null) ? 'innerText' : 'textContent';
2995
-	})()
2996
-};
2997
-var readOnly = ['type'];
2998
-var expandos = ['value', 'defaultValue'];
2999
-var uriAttrs = /^(?:href|src|usemap)$/i;
3000
-
3001
-bools = bools.associate(bools);
3002
-camels = camels.associate(camels.map(String.toLowerCase));
3003
-readOnly = readOnly.associate(readOnly);
3004
-
3005
-Object.append(attributes, expandos.associate(expandos));
3006
-
3007
-var inserters = {
3008
-
3009
-	before: function(context, element){
3010
-		var parent = element.parentNode;
3011
-		if (parent) parent.insertBefore(context, element);
3012
-	},
3013
-
3014
-	after: function(context, element){
3015
-		var parent = element.parentNode;
3016
-		if (parent) parent.insertBefore(context, element.nextSibling);
3017
-	},
3018
-
3019
-	bottom: function(context, element){
3020
-		element.appendChild(context);
3021
-	},
3022
-
3023
-	top: function(context, element){
3024
-		element.insertBefore(context, element.firstChild);
3025
-	}
3026
-
3027
-};
3028
-
3029
-inserters.inside = inserters.bottom;
3030
-
3031
-
3032
-
3033
-var injectCombinator = function(expression, combinator){
3034
-	if (!expression) return combinator;
3035
-
3036
-	expression = Object.clone(Slick.parse(expression));
3037
-
3038
-	var expressions = expression.expressions;
3039
-	for (var i = expressions.length; i--;)
3040
-		expressions[i][0].combinator = combinator;
3041
-
3042
-	return expression;
3043
-};
3044
-
3045
-Element.implement({
3046
-
3047
-	set: function(prop, value){
3048
-		var property = Element.Properties[prop];
3049
-		(property && property.set) ? property.set.call(this, value) : this.setProperty(prop, value);
3050
-	}.overloadSetter(),
3051
-
3052
-	get: function(prop){
3053
-		var property = Element.Properties[prop];
3054
-		return (property && property.get) ? property.get.apply(this) : this.getProperty(prop);
3055
-	}.overloadGetter(),
3056
-
3057
-	erase: function(prop){
3058
-		var property = Element.Properties[prop];
3059
-		(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
3060
-		return this;
3061
-	},
3062
-
3063
-	setProperty: function(attribute, value){
3064
-		attribute = camels[attribute] || attribute;
3065
-		if (value == null) return this.removeProperty(attribute);
3066
-		var key = attributes[attribute];
3067
-		(key) ? this[key] = value :
3068
-			(bools[attribute]) ? this[attribute] = !!value : this.setAttribute(attribute, '' + value);
3069
-		return this;
3070
-	},
3071
-
3072
-	setProperties: function(attributes){
3073
-		for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
3074
-		return this;
3075
-	},
3076
-
3077
-	getProperty: function(attribute){
3078
-		attribute = camels[attribute] || attribute;
3079
-		var key = attributes[attribute] || readOnly[attribute];
3080
-		return (key) ? this[key] :
3081
-			(bools[attribute]) ? !!this[attribute] :
3082
-			(uriAttrs.test(attribute) ? this.getAttribute(attribute, 2) :
3083
-			(key = this.getAttributeNode(attribute)) ? key.nodeValue : null) || null;
3084
-	},
3085
-
3086
-	getProperties: function(){
3087
-		var args = Array.from(arguments);
3088
-		return args.map(this.getProperty, this).associate(args);
3089
-	},
3090
-
3091
-	removeProperty: function(attribute){
3092
-		attribute = camels[attribute] || attribute;
3093
-		var key = attributes[attribute];
3094
-		(key) ? this[key] = '' :
3095
-			(bools[attribute]) ? this[attribute] = false : this.removeAttribute(attribute);
3096
-		return this;
3097
-	},
3098
-
3099
-	removeProperties: function(){
3100
-		Array.each(arguments, this.removeProperty, this);
3101
-		return this;
3102
-	},
3103
-
3104
-	hasClass: function(className){
3105
-		return this.className.clean().contains(className, ' ');
3106
-	},
3107
-
3108
-	addClass: function(className){
3109
-		if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
3110
-		return this;
3111
-	},
3112
-
3113
-	removeClass: function(className){
3114
-		this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
3115
-		return this;
3116
-	},
3117
-
3118
-	toggleClass: function(className, force){
3119
-		if (force == null) force = !this.hasClass(className);
3120
-		return (force) ? this.addClass(className) : this.removeClass(className);
3121
-	},
3122
-
3123
-	adopt: function(){
3124
-		var parent = this, fragment, elements = Array.flatten(arguments), length = elements.length;
3125
-		if (length > 1) parent = fragment = document.createDocumentFragment();
3126
-
3127
-		for (var i = 0; i < length; i++){
3128
-			var element = document.id(elements[i], true);
3129
-			if (element) parent.appendChild(element);
3130
-		}
3131
-
3132
-		if (fragment) this.appendChild(fragment);
3133
-
3134
-		return this;
3135
-	},
3136
-
3137
-	appendText: function(text, where){
3138
-		return this.grab(this.getDocument().newTextNode(text), where);
3139
-	},
3140
-
3141
-	grab: function(el, where){
3142
-		inserters[where || 'bottom'](document.id(el, true), this);
3143
-		return this;
3144
-	},
3145
-
3146
-	inject: function(el, where){
3147
-		inserters[where || 'bottom'](this, document.id(el, true));
3148
-		return this;
3149
-	},
3150
-
3151
-	replaces: function(el){
3152
-		el = document.id(el, true);
3153
-		el.parentNode.replaceChild(this, el);
3154
-		return this;
3155
-	},
3156
-
3157
-	wraps: function(el, where){
3158
-		el = document.id(el, true);
3159
-		return this.replaces(el).grab(el, where);
3160
-	},
3161
-
3162
-	getPrevious: function(expression){
3163
-		return document.id(Slick.find(this, injectCombinator(expression, '!~')));
3164
-	},
3165
-
3166
-	getAllPrevious: function(expression){
3167
-		return Slick.search(this, injectCombinator(expression, '!~'), new Elements);
3168
-	},
3169
-
3170
-	getNext: function(expression){
3171
-		return document.id(Slick.find(this, injectCombinator(expression, '~')));
3172
-	},
3173
-
3174
-	getAllNext: function(expression){
3175
-		return Slick.search(this, injectCombinator(expression, '~'), new Elements);
3176
-	},
3177
-
3178
-	getFirst: function(expression){
3179
-		return document.id(Slick.search(this, injectCombinator(expression, '>'))[0]);
3180
-	},
3181
-
3182
-	getLast: function(expression){
3183
-		return document.id(Slick.search(this, injectCombinator(expression, '>')).getLast());
3184
-	},
3185
-
3186
-	getParent: function(expression){
3187
-		return document.id(Slick.find(this, injectCombinator(expression, '!')));
3188
-	},
3189
-
3190
-	getParents: function(expression){
3191
-		return Slick.search(this, injectCombinator(expression, '!'), new Elements);
3192
-	},
3193
-
3194
-	getSiblings: function(expression){
3195
-		return Slick.search(this, injectCombinator(expression, '~~'), new Elements);
3196
-	},
3197
-
3198
-	getChildren: function(expression){
3199
-		return Slick.search(this, injectCombinator(expression, '>'), new Elements);
3200
-	},
3201
-
3202
-	getWindow: function(){
3203
-		return this.ownerDocument.window;
3204
-	},
3205
-
3206
-	getDocument: function(){
3207
-		return this.ownerDocument;
3208
-	},
3209
-
3210
-	getElementById: function(id){
3211
-		return document.id(Slick.find(this, '#' + ('' + id).replace(/(\W)/g, '\\$1')));
3212
-	},
3213
-
3214
-	getSelected: function(){
3215
-		this.selectedIndex; // Safari 3.2.1
3216
-		return new Elements(Array.from(this.options).filter(function(option){
3217
-			return option.selected;
3218
-		}));
3219
-	},
3220
-
3221
-	toQueryString: function(){
3222
-		var queryString = [];
3223
-		this.getElements('input, select, textarea').each(function(el){
3224
-			var type = el.type;
3225
-			if (!el.name || el.disabled || type == 'submit' || type == 'reset' || type == 'file' || type == 'image') return;
3226
-
3227
-			var value = (el.get('tag') == 'select') ? el.getSelected().map(function(opt){
3228
-				// IE
3229
-				return document.id(opt).get('value');
3230
-			}) : ((type == 'radio' || type == 'checkbox') && !el.checked) ? null : el.get('value');
3231
-
3232
-			Array.from(value).each(function(val){
3233
-				if (typeof val != 'undefined') queryString.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(val));
3234
-			});
3235
-		});
3236
-		return queryString.join('&');
3237
-	},
3238
-
3239
-	destroy: function(){
3240
-		var children = clean(this).getElementsByTagName('*');
3241
-		Array.each(children, clean);
3242
-		Element.dispose(this);
3243
-		return null;
3244
-	},
3245
-
3246
-	empty: function(){
3247
-		Array.from(this.childNodes).each(Element.dispose);
3248
-		return this;
3249
-	},
3250
-
3251
-	dispose: function(){
3252
-		return (this.parentNode) ? this.parentNode.removeChild(this) : this;
3253
-	},
3254
-
3255
-	match: function(expression){
3256
-		return !expression || Slick.match(this, expression);
3257
-	}
3258
-
3259
-});
3260
-
3261
-var cleanClone = function(node, element, keepid){
3262
-	if (!keepid) node.setAttributeNode(document.createAttribute('id'));
3263
-	if (node.clearAttributes){
3264
-		node.clearAttributes();
3265
-		node.mergeAttributes(element);
3266
-		node.removeAttribute('uid');
3267
-		if (node.options){
3268
-			var no = node.options, eo = element.options;
3269
-			for (var i = no.length; i--;) no[i].selected = eo[i].selected;
3270
-		}
3271
-	}
3272
-
3273
-	var prop = formProps[element.tagName.toLowerCase()];
3274
-	if (prop && element[prop]) node[prop] = element[prop];
3275
-};
3276
-
3277
-Element.implement('clone', function(contents, keepid){
3278
-	contents = contents !== false;
3279
-	var clone = this.cloneNode(contents), i;
3280
-
3281
-	if (contents){
3282
-		var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
3283
-		for (i = ce.length; i--;) cleanClone(ce[i], te[i], keepid);
3284
-	}
3285
-
3286
-	cleanClone(clone, this, keepid);
3287
-
3288
-	if (Browser.ie){
3289
-		var co = clone.getElementsByTagName('object'), to = this.getElementsByTagName('object');
3290
-		for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML;
3291
-	}
3292
-	return document.id(clone);
3293
-});
3294
-
3295
-var contains = {contains: function(element){
3296
-	return Slick.contains(this, element);
3297
-}};
3298
-
3299
-if (!document.contains) Document.implement(contains);
3300
-if (!document.createElement('div').contains) Element.implement(contains);
3301
-
3302
-
3303
-
3304
-[Element, Window, Document].invoke('implement', {
3305
-
3306
-	addListener: function(type, fn){
3307
-		if (type == 'unload'){
3308
-			var old = fn, self = this;
3309
-			fn = function(){
3310
-				self.removeListener('unload', fn);
3311
-				old();
3312
-			};
3313
-		} else {
3314
-			collected[$uid(this)] = this;
3315
-		}
3316
-		if (this.addEventListener) this.addEventListener(type, fn, !!arguments[2]);
3317
-		else this.attachEvent('on' + type, fn);
3318
-		return this;
3319
-	},
3320
-
3321
-	removeListener: function(type, fn){
3322
-		if (this.removeEventListener) this.removeEventListener(type, fn, !!arguments[2]);
3323
-		else this.detachEvent('on' + type, fn);
3324
-		return this;
3325
-	},
3326
-
3327
-	retrieve: function(property, dflt){
3328
-		var storage = get($uid(this)), prop = storage[property];
3329
-		if (dflt != null && prop == null) prop = storage[property] = dflt;
3330
-		return prop != null ? prop : null;
3331
-	},
3332
-
3333
-	store: function(property, value){
3334
-		var storage = get($uid(this));
3335
-		storage[property] = value;
3336
-		return this;
3337
-	},
3338
-
3339
-	eliminate: function(property){
3340
-		var storage = get($uid(this));
3341
-		delete storage[property];
3342
-		return this;
3343
-	}
3344
-
3345
-});
3346
-
3347
-// IE purge
3348
-if (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){
3349
-	Object.each(collected, clean);
3350
-	if (window.CollectGarbage) CollectGarbage();
3351
-});
3352
-
3353
-})();
3354
-
3355
-Element.Properties = {};
3356
-
3357
-
3358
-
3359
-Element.Properties.style = {
3360
-
3361
-	set: function(style){
3362
-		this.style.cssText = style;
3363
-	},
3364
-
3365
-	get: function(){
3366
-		return this.style.cssText;
3367
-	},
3368
-
3369
-	erase: function(){
3370
-		this.style.cssText = '';
3371
-	}
3372
-
3373
-};
3374
-
3375
-Element.Properties.tag = {
3376
-
3377
-	get: function(){
3378
-		return this.tagName.toLowerCase();
3379
-	}
3380
-
3381
-};
3382
-
3383
-(function(maxLength){
3384
-	if (maxLength != null) Element.Properties.maxlength = Element.Properties.maxLength = {
3385
-		get: function(){
3386
-			var maxlength = this.getAttribute('maxLength');
3387
-			return maxlength == maxLength ? null : maxlength;
3388
-		}
3389
-	};
3390
-})(document.createElement('input').getAttribute('maxLength'));
3391
-
3392
-Element.Properties.html = (function(){
3393
-
3394
-	var tableTest = Function.attempt(function(){
3395
-		var table = document.createElement('table');
3396
-		table.innerHTML = '<tr><td></td></tr>';
3397
-	});
3398
-
3399
-	var wrapper = document.createElement('div');
3400
-
3401
-	var translations = {
3402
-		table: [1, '<table>', '</table>'],
3403
-		select: [1, '<select>', '</select>'],
3404
-		tbody: [2, '<table><tbody>', '</tbody></table>'],
3405
-		tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
3406
-	};
3407
-	translations.thead = translations.tfoot = translations.tbody;
3408
-
3409
-	var html = {
3410
-		set: function(){
3411
-			var html = Array.flatten(arguments).join('');
3412
-			var wrap = (!tableTest && translations[this.get('tag')]);
3413
-			if (wrap){
3414
-				var first = wrapper;
3415
-				first.innerHTML = wrap[1] + html + wrap[2];
3416
-				for (var i = wrap[0]; i--;) first = first.firstChild;
3417
-				this.empty().adopt(first.childNodes);
3418
-			} else {
3419
-				this.innerHTML = html;
3420
-			}
3421
-		}
3422
-	};
3423
-
3424
-	html.erase = html.set;
3425
-
3426
-	return html;
3427
-})();
3428
-
3429
-
3430
-/*
3431
-
3432
-name: Element.Style
3433
-
3434
-description: Contains methods for interacting with the styles of Elements in a fashionable way.
3435
-
3436
-license: MIT-style license.
3437
-
3438
-requires: Element
3439
-
3440
-provides: Element.Style
3441
-
3442
-...
3443
-*/
3444
-
3445
-(function(){
3446
-
3447
-var html = document.html;
3448
-
3449
-Element.Properties.styles = {set: function(styles){
3450
-	this.setStyles(styles);
3451
-}};
3452
-
3453
-var hasOpacity = (html.style.opacity != null);
3454
-var reAlpha = /alpha\(opacity=([\d.]+)\)/i;
3455
-
3456
-var setOpacity = function(element, opacity){
3457
-	if (!element.currentStyle || !element.currentStyle.hasLayout) element.style.zoom = 1;
3458
-	if (hasOpacity){
3459
-		element.style.opacity = opacity;
3460
-	} else {
3461
-		opacity = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
3462
-		var filter = element.style.filter || element.getComputedStyle('filter') || '';
3463
-		element.style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity;
3464
-	}
3465
-};
3466
-
3467
-Element.Properties.opacity = {
3468
-
3469
-	set: function(opacity){
3470
-		var visibility = this.style.visibility;
3471
-		if (opacity == 0 && visibility != 'hidden') this.style.visibility = 'hidden';
3472
-		else if (opacity != 0 && visibility != 'visible') this.style.visibility = 'visible';
3473
-
3474
-		setOpacity(this, opacity);
3475
-	},
3476
-
3477
-	get: (hasOpacity) ? function(){
3478
-		var opacity = this.style.opacity || this.getComputedStyle('opacity');
3479
-		return (opacity == '') ? 1 : opacity;
3480
-	} : function(){
3481
-		var opacity, filter = (this.style.filter || this.getComputedStyle('filter'));
3482
-		if (filter) opacity = filter.match(reAlpha);
3483
-		return (opacity == null || filter == null) ? 1 : (opacity[1] / 100);
3484
-	}
3485
-
3486
-};
3487
-
3488
-var floatName = (html.style.cssFloat == null) ? 'styleFloat' : 'cssFloat';
3489
-
3490
-Element.implement({
3491
-
3492
-	getComputedStyle: function(property){
3493
-		if (this.currentStyle) return this.currentStyle[property.camelCase()];
3494
-		var defaultView = Element.getDocument(this).defaultView,
3495
-			computed = defaultView ? defaultView.getComputedStyle(this, null) : null;
3496
-		return (computed) ? computed.getPropertyValue((property == floatName) ? 'float' : property.hyphenate()) : null;
3497
-	},
3498
-
3499
-	setOpacity: function(value){
3500
-		setOpacity(this, value);
3501
-		return this;
3502
-	},
3503
-
3504
-	getOpacity: function(){
3505
-		return this.get('opacity');
3506
-	},
3507
-
3508
-	setStyle: function(property, value){
3509
-		switch (property){
3510
-			case 'opacity': return this.set('opacity', parseFloat(value));
3511
-			case 'float': property = floatName;
3512
-		}
3513
-		property = property.camelCase();
3514
-		if (typeOf(value) != 'string'){
3515
-			var map = (Element.Styles[property] || '@').split(' ');
3516
-			value = Array.from(value).map(function(val, i){
3517
-				if (!map[i]) return '';
3518
-				return (typeOf(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
3519
-			}).join(' ');
3520
-		} else if (value == String(Number(value))){
3521
-			value = Math.round(value);
3522
-		}
3523
-		this.style[property] = value;
3524
-		return this;
3525
-	},
3526
-
3527
-	getStyle: function(property){
3528
-		switch (property){
3529
-			case 'opacity': return this.get('opacity');
3530
-			case 'float': property = floatName;
3531
-		}
3532
-		property = property.camelCase();
3533
-		var result = this.style[property];
3534
-		if (!result || property == 'zIndex'){
3535
-			result = [];
3536
-			for (var style in Element.ShortStyles){
3537
-				if (property != style) continue;
3538
-				for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
3539
-				return result.join(' ');
3540
-			}
3541
-			result = this.getComputedStyle(property);
3542
-		}
3543
-		if (result){
3544
-			result = String(result);
3545
-			var color = result.match(/rgba?\([\d\s,]+\)/);
3546
-			if (color) result = result.replace(color[0], color[0].rgbToHex());
3547
-		}
3548
-		if (Browser.opera || (Browser.ie && isNaN(parseFloat(result)))){
3549
-			if ((/^(height|width)$/).test(property)){
3550
-				var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
3551
-				values.each(function(value){
3552
-					size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
3553
-				}, this);
3554
-				return this['offset' + property.capitalize()] - size + 'px';
3555
-			}
3556
-			if (Browser.opera && String(result).indexOf('px') != -1) return result;
3557
-			if ((/^border(.+)Width|margin|padding/).test(property)) return '0px';
3558
-		}
3559
-		return result;
3560
-	},
3561
-
3562
-	setStyles: function(styles){
3563
-		for (var style in styles) this.setStyle(style, styles[style]);
3564
-		return this;
3565
-	},
3566
-
3567
-	getStyles: function(){
3568
-		var result = {};
3569
-		Array.flatten(arguments).each(function(key){
3570
-			result[key] = this.getStyle(key);
3571
-		}, this);
3572
-		return result;
3573
-	}
3574
-
3575
-});
3576
-
3577
-Element.Styles = {
3578
-	left: '@px', top: '@px', bottom: '@px', right: '@px',
3579
-	width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
3580
-	backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
3581
-	fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
3582
-	margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
3583
-	borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
3584
-	zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
3585
-};
3586
-
3587
-
3588
-
3589
-Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};
3590
-
3591
-['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
3592
-	var Short = Element.ShortStyles;
3593
-	var All = Element.Styles;
3594
-	['margin', 'padding'].each(function(style){
3595
-		var sd = style + direction;
3596
-		Short[style][sd] = All[sd] = '@px';
3597
-	});
3598
-	var bd = 'border' + direction;
3599
-	Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
3600
-	var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
3601
-	Short[bd] = {};
3602
-	Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
3603
-	Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
3604
-	Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
3605
-});
3606
-
3607
-}).call(this);
3608
-
3609
-
3610
-/*
3611
-
3612
-name: Element.Event
3613
-
3614
-description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events.
3615
-
3616
-license: MIT-style license.
3617
-
3618
-requires: [Element, Event]
3619
-
3620
-provides: Element.Event
3621
-
3622
-...
3623
-*/
3624
-
3625
-(function(){
3626
-
3627
-Element.Properties.events = {set: function(events){
3628
-	this.addEvents(events);
3629
-}};
3630
-
3631
-[Element, Window, Document].invoke('implement', {
3632
-
3633
-	addEvent: function(type, fn){
3634
-		var events = this.retrieve('events', {});
3635
-		if (!events[type]) events[type] = {keys: [], values: []};
3636
-		if (events[type].keys.contains(fn)) return this;
3637
-		events[type].keys.push(fn);
3638
-		var realType = type,
3639
-			custom = Element.Events[type],
3640
-			condition = fn,
3641
-			self = this;
3642
-		if (custom){
3643
-			if (custom.onAdd) custom.onAdd.call(this, fn);
3644
-			if (custom.condition){
3645
-				condition = function(event){
3646
-					if (custom.condition.call(this, event)) return fn.call(this, event);
3647
-					return true;
3648
-				};
3649
-			}
3650
-			realType = custom.base || realType;
3651
-		}
3652
-		var defn = function(){
3653
-			return fn.call(self);
3654
-		};
3655
-		var nativeEvent = Element.NativeEvents[realType];
3656
-		if (nativeEvent){
3657
-			if (nativeEvent == 2){
3658
-				defn = function(event){
3659
-					event = new Event(event, self.getWindow());
3660
-					if (condition.call(self, event) === false) event.stop();
3661
-				};
3662
-			}
3663
-			this.addListener(realType, defn, arguments[2]);
3664
-		}
3665
-		events[type].values.push(defn);
3666
-		return this;
3667
-	},
3668
-
3669
-	removeEvent: function(type, fn){
3670
-		var events = this.retrieve('events');
3671
-		if (!events || !events[type]) return this;
3672
-		var list = events[type];
3673
-		var index = list.keys.indexOf(fn);
3674
-		if (index == -1) return this;
3675
-		var value = list.values[index];
3676
-		delete list.keys[index];
3677
-		delete list.values[index];
3678
-		var custom = Element.Events[type];
3679
-		if (custom){
3680
-			if (custom.onRemove) custom.onRemove.call(this, fn);
3681
-			type = custom.base || type;
3682
-		}
3683
-		return (Element.NativeEvents[type]) ? this.removeListener(type, value, arguments[2]) : this;
3684
-	},
3685
-
3686
-	addEvents: function(events){
3687
-		for (var event in events) this.addEvent(event, events[event]);
3688
-		return this;
3689
-	},
3690
-
3691
-	removeEvents: function(events){
3692
-		var type;
3693
-		if (typeOf(events) == 'object'){
3694
-			for (type in events) this.removeEvent(type, events[type]);
3695
-			return this;
3696
-		}
3697
-		var attached = this.retrieve('events');
3698
-		if (!attached) return this;
3699
-		if (!events){
3700
-			for (type in attached) this.removeEvents(type);
3701
-			this.eliminate('events');
3702
-		} else if (attached[events]){
3703
-			attached[events].keys.each(function(fn){
3704
-				this.removeEvent(events, fn);
3705
-			}, this);
3706
-			delete attached[events];
3707
-		}
3708
-		return this;
3709
-	},
3710
-
3711
-	fireEvent: function(type, args, delay){
3712
-		var events = this.retrieve('events');
3713
-		if (!events || !events[type]) return this;
3714
-		args = Array.from(args);
3715
-
3716
-		events[type].keys.each(function(fn){
3717
-			if (delay) fn.delay(delay, this, args);
3718
-			else fn.apply(this, args);
3719
-		}, this);
3720
-		return this;
3721
-	},
3722
-
3723
-	cloneEvents: function(from, type){
3724
-		from = document.id(from);
3725
-		var events = from.retrieve('events');
3726
-		if (!events) return this;
3727
-		if (!type){
3728
-			for (var eventType in events) this.cloneEvents(from, eventType);
3729
-		} else if (events[type]){
3730
-			events[type].keys.each(function(fn){
3731
-				this.addEvent(type, fn);
3732
-			}, this);
3733
-		}
3734
-		return this;
3735
-	}
3736
-
3737
-});
3738
-
3739
-Element.NativeEvents = {
3740
-	click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
3741
-	mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
3742
-	mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
3743
-	keydown: 2, keypress: 2, keyup: 2, //keyboard
3744
-	orientationchange: 2, // mobile
3745
-	touchstart: 2, touchmove: 2, touchend: 2, touchcancel: 2, // touch
3746
-	gesturestart: 2, gesturechange: 2, gestureend: 2, // gesture
3747
-	focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
3748
-	load: 2, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
3749
-	error: 1, abort: 1, scroll: 1 //misc
3750
-};
3751
-
3752
-var check = function(event){
3753
-	var related = event.relatedTarget;
3754
-	if (related == null) return true;
3755
-	if (!related) return false;
3756
-	return (related != this && related.prefix != 'xul' && typeOf(this) != 'document' && !this.contains(related));
3757
-};
3758
-
3759
-Element.Events = {
3760
-
3761
-	mouseenter: {
3762
-		base: 'mouseover',
3763
-		condition: check
3764
-	},
3765
-
3766
-	mouseleave: {
3767
-		base: 'mouseout',
3768
-		condition: check
3769
-	},
3770
-
3771
-	mousewheel: {
3772
-		base: (Browser.firefox) ? 'DOMMouseScroll' : 'mousewheel'
3773
-	}
3774
-
3775
-};
3776
-
3777
-
3778
-
3779
-}).call(this);
3780
-
3781
-
3782
-/*
3783
-
3784
-name: Element.Dimensions
3785
-
3786
-description: Contains methods to work with size, scroll, or positioning of Elements and the window object.
3787
-
3788
-license: MIT-style license.
3789
-
3790
-credits:
3791
-  - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
3792
-  - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).
3793
-
3794
-requires: [Element, Element.Style]
3795
-
3796
-provides: [Element.Dimensions]
3797
-
3798
-...
3799
-*/
3800
-
3801
-(function(){
3802
-
3803
-var element = document.createElement('div'),
3804
-	child = document.createElement('div');
3805
-element.style.height = '0';
3806
-element.appendChild(child);
3807
-var brokenOffsetParent = (child.offsetParent === element);
3808
-element = child = null;
3809
-
3810
-var isOffset = function(el){
3811
-	return styleString(el, 'position') != 'static' || isBody(el);
3812
-};
3813
-
3814
-var isOffsetStatic = function(el){
3815
-	return isOffset(el) || (/^(?:table|td|th)$/i).test(el.tagName);
3816
-};
3817
-
3818
-Element.implement({
3819
-
3820
-	scrollTo: function(x, y){
3821
-		if (isBody(this)){
3822
-			this.getWindow().scrollTo(x, y);
3823
-		} else {
3824
-			this.scrollLeft = x;
3825
-			this.scrollTop = y;
3826
-		}
3827
-		return this;
3828
-	},
3829
-
3830
-	getSize: function(){
3831
-		if (isBody(this)) return this.getWindow().getSize();
3832
-		return {x: this.offsetWidth, y: this.offsetHeight};
3833
-	},
3834
-
3835
-	getScrollSize: function(){
3836
-		if (isBody(this)) return this.getWindow().getScrollSize();
3837
-		return {x: this.scrollWidth, y: this.scrollHeight};
3838
-	},
3839
-
3840
-	getScroll: function(){
3841
-		if (isBody(this)) return this.getWindow().getScroll();
3842
-		return {x: this.scrollLeft, y: this.scrollTop};
3843
-	},
3844
-
3845
-	getScrolls: function(){
3846
-		var element = this.parentNode, position = {x: 0, y: 0};
3847
-		while (element && !isBody(element)){
3848
-			position.x += element.scrollLeft;
3849
-			position.y += element.scrollTop;
3850
-			element = element.parentNode;
3851
-		}
3852
-		return position;
3853
-	},
3854
-
3855
-	getOffsetParent: brokenOffsetParent ? function(){
3856
-		var element = this;
3857
-		if (isBody(element) || styleString(element, 'position') == 'fixed') return null;
3858
-
3859
-		var isOffsetCheck = (styleString(element, 'position') == 'static') ? isOffsetStatic : isOffset;
3860
-		while ((element = element.parentNode)){
3861
-			if (isOffsetCheck(element)) return element;
3862
-		}
3863
-		return null;
3864
-	} : function(){
3865
-		var element = this;
3866
-		if (isBody(element) || styleString(element, 'position') == 'fixed') return null;
3867
-
3868
-		try {
3869
-			return element.offsetParent;
3870
-		} catch(e) {}
3871
-		return null;
3872
-	},
3873
-
3874
-	getOffsets: function(){
3875
-		if (this.getBoundingClientRect && !Browser.Platform.ios){
3876
-			var bound = this.getBoundingClientRect(),
3877
-				html = document.id(this.getDocument().documentElement),
3878
-				htmlScroll = html.getScroll(),
3879
-				elemScrolls = this.getScrolls(),
3880
-				isFixed = (styleString(this, 'position') == 'fixed');
3881
-
3882
-			return {
3883
-				x: bound.left.toInt() + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,
3884
-				y: bound.top.toInt()  + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop
3885
-			};
3886
-		}
3887
-
3888
-		var element = this, position = {x: 0, y: 0};
3889
-		if (isBody(this)) return position;
3890
-
3891
-		while (element && !isBody(element)){
3892
-			position.x += element.offsetLeft;
3893
-			position.y += element.offsetTop;
3894
-
3895
-			if (Browser.firefox){
3896
-				if (!borderBox(element)){
3897
-					position.x += leftBorder(element);
3898
-					position.y += topBorder(element);
3899
-				}
3900
-				var parent = element.parentNode;
3901
-				if (parent && styleString(parent, 'overflow') != 'visible'){
3902
-					position.x += leftBorder(parent);
3903
-					position.y += topBorder(parent);
3904
-				}
3905
-			} else if (element != this && Browser.safari){
3906
-				position.x += leftBorder(element);
3907
-				position.y += topBorder(element);
3908
-			}
3909
-
3910
-			element = element.offsetParent;
3911
-		}
3912
-		if (Browser.firefox && !borderBox(this)){
3913
-			position.x -= leftBorder(this);
3914
-			position.y -= topBorder(this);
3915
-		}
3916
-		return position;
3917
-	},
3918
-
3919
-	getPosition: function(relative){
3920
-		if (isBody(this)) return {x: 0, y: 0};
3921
-		var offset = this.getOffsets(),
3922
-			scroll = this.getScrolls();
3923
-		var position = {
3924
-			x: offset.x - scroll.x,
3925
-			y: offset.y - scroll.y
3926
-		};
3927
-
3928
-		if (relative && (relative = document.id(relative))){
3929
-			var relativePosition = relative.getPosition();
3930
-			return {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)};
3931
-		}
3932
-		return position;
3933
-	},
3934
-
3935
-	getCoordinates: function(element){
3936
-		if (isBody(this)) return this.getWindow().getCoordinates();
3937
-		var position = this.getPosition(element),
3938
-			size = this.getSize();
3939
-		var obj = {
3940
-			left: position.x,
3941
-			top: position.y,
3942
-			width: size.x,
3943
-			height: size.y
3944
-		};
3945
-		obj.right = obj.left + obj.width;
3946
-		obj.bottom = obj.top + obj.height;
3947
-		return obj;
3948
-	},
3949
-
3950
-	computePosition: function(obj){
3951
-		return {
3952
-			left: obj.x - styleNumber(this, 'margin-left'),
3953
-			top: obj.y - styleNumber(this, 'margin-top')
3954
-		};
3955
-	},
3956
-
3957
-	setPosition: function(obj){
3958
-		return this.setStyles(this.computePosition(obj));
3959
-	}
3960
-
3961
-});
3962
-
3963
-
3964
-[Document, Window].invoke('implement', {
3965
-
3966
-	getSize: function(){
3967
-		var doc = getCompatElement(this);
3968
-		return {x: doc.clientWidth, y: doc.clientHeight};
3969
-	},
3970
-
3971
-	getScroll: function(){
3972
-		var win = this.getWindow(), doc = getCompatElement(this);
3973
-		return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
3974
-	},
3975
-
3976
-	getScrollSize: function(){
3977
-		var doc = getCompatElement(this),
3978
-			min = this.getSize(),
3979
-			body = this.getDocument().body;
3980
-
3981
-		return {x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)};
3982
-	},
3983
-
3984
-	getPosition: function(){
3985
-		return {x: 0, y: 0};
3986
-	},
3987
-
3988
-	getCoordinates: function(){
3989
-		var size = this.getSize();
3990
-		return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
3991
-	}
3992
-
3993
-});
3994
-
3995
-// private methods
3996
-
3997
-var styleString = Element.getComputedStyle;
3998
-
3999
-function styleNumber(element, style){
4000
-	return styleString(element, style).toInt() || 0;
4001
-}
4002
-
4003
-function borderBox(element){
4004
-	return styleString(element, '-moz-box-sizing') == 'border-box';
4005
-}
4006
-
4007
-function topBorder(element){
4008
-	return styleNumber(element, 'border-top-width');
4009
-}
4010
-
4011
-function leftBorder(element){
4012
-	return styleNumber(element, 'border-left-width');
4013
-}
4014
-
4015
-function isBody(element){
4016
-	return (/^(?:body|html)$/i).test(element.tagName);
4017
-}
4018
-
4019
-function getCompatElement(element){
4020
-	var doc = element.getDocument();
4021
-	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
4022
-}
4023
-
4024
-}).call(this);
4025
-
4026
-//aliases
4027
-Element.alias({position: 'setPosition'}); //compatability
4028
-
4029
-[Window, Document, Element].invoke('implement', {
4030
-
4031
-	getHeight: function(){
4032
-		return this.getSize().y;
4033
-	},
4034
-
4035
-	getWidth: function(){
4036
-		return this.getSize().x;
4037
-	},
4038
-
4039
-	getScrollTop: function(){
4040
-		return this.getScroll().y;
4041
-	},
4042
-
4043
-	getScrollLeft: function(){
4044
-		return this.getScroll().x;
4045
-	},
4046
-
4047
-	getScrollHeight: function(){
4048
-		return this.getScrollSize().y;
4049
-	},
4050
-
4051
-	getScrollWidth: function(){
4052
-		return this.getScrollSize().x;
4053
-	},
4054
-
4055
-	getTop: function(){
4056
-		return this.getPosition().y;
4057
-	},
4058
-
4059
-	getLeft: function(){
4060
-		return this.getPosition().x;
4061
-	}
4062
-
4063
-});
4064
-
4065
-
4066
-/*
4067
-
4068
-name: Fx
4069
-
4070
-description: Contains the basic animation logic to be extended by all other Fx Classes.
4071
-
4072
-license: MIT-style license.
4073
-
4074
-requires: [Chain, Events, Options]
4075
-
4076
-provides: Fx
4077
-
4078
-...
4079
-*/
4080
-
4081
-(function(){
4082
-
4083
-var Fx = this.Fx = new Class({
4084
-
4085
-	Implements: [Chain, Events, Options],
4086
-
4087
-	options: {
4088
-		/*
4089
-		onStart: nil,
4090
-		onCancel: nil,
4091
-		onComplete: nil,
4092
-		*/
4093
-		fps: 60,
4094
-		unit: false,
4095
-		duration: 500,
4096
-		frames: null,
4097
-		frameSkip: true,
4098
-		link: 'ignore'
4099
-	},
4100
-
4101
-	initialize: function(options){
4102
-		this.subject = this.subject || this;
4103
-		this.setOptions(options);
4104
-	},
4105
-
4106
-	getTransition: function(){
4107
-		return function(p){
4108
-			return -(Math.cos(Math.PI * p) - 1) / 2;
4109
-		};
4110
-	},
4111
-
4112
-	step: function(now){
4113
-		if (this.options.frameSkip){
4114
-			var diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval;
4115
-			this.time = now;
4116
-			this.frame += frames;
4117
-		} else {
4118
-			this.frame++;
4119
-		}
4120
-
4121
-		if (this.frame < this.frames){
4122
-			var delta = this.transition(this.frame / this.frames);
4123
-			this.set(this.compute(this.from, this.to, delta));
4124
-		} else {
4125
-			this.frame = this.frames;
4126
-			this.set(this.compute(this.from, this.to, 1));
4127
-			this.stop();
4128
-		}
4129
-	},
4130
-
4131
-	set: function(now){
4132
-		return now;
4133
-	},
4134
-
4135
-	compute: function(from, to, delta){
4136
-		return Fx.compute(from, to, delta);
4137
-	},
4138
-
4139
-	check: function(){
4140
-		if (!this.isRunning()) return true;
4141
-		switch (this.options.link){
4142
-			case 'cancel': this.cancel(); return true;
4143
-			case 'chain': this.chain(this.caller.pass(arguments, this)); return false;
4144
-		}
4145
-		return false;
4146
-	},
4147
-
4148
-	start: function(from, to){
4149
-		if (!this.check(from, to)) return this;
4150
-		this.from = from;
4151
-		this.to = to;
4152
-		this.frame = (this.options.frameSkip) ? 0 : -1;
4153
-		this.time = null;
4154
-		this.transition = this.getTransition();
4155
-		var frames = this.options.frames, fps = this.options.fps, duration = this.options.duration;
4156
-		this.duration = Fx.Durations[duration] || duration.toInt();
4157
-		this.frameInterval = 1000 / fps;
4158
-		this.frames = frames || Math.round(this.duration / this.frameInterval);
4159
-		this.fireEvent('start', this.subject);
4160
-		pushInstance.call(this, fps);
4161
-		return this;
4162
-	},
4163
-
4164
-	stop: function(){
4165
-		if (this.isRunning()){
4166
-			this.time = null;
4167
-			pullInstance.call(this, this.options.fps);
4168
-			if (this.frames == this.frame){
4169
-				this.fireEvent('complete', this.subject);
4170
-				if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
4171
-			} else {
4172
-				this.fireEvent('stop', this.subject);
4173
-			}
4174
-		}
4175
-		return this;
4176
-	},
4177
-
4178
-	cancel: function(){
4179
-		if (this.isRunning()){
4180
-			this.time = null;
4181
-			pullInstance.call(this, this.options.fps);
4182
-			this.frame = this.frames;
4183
-			this.fireEvent('cancel', this.subject).clearChain();
4184
-		}
4185
-		return this;
4186
-	},
4187
-
4188
-	pause: function(){
4189
-		if (this.isRunning()){
4190
-			this.time = null;
4191
-			pullInstance.call(this, this.options.fps);
4192
-		}
4193
-		return this;
4194
-	},
4195
-
4196
-	resume: function(){
4197
-		if ((this.frame < this.frames) && !this.isRunning()) pushInstance.call(this, this.options.fps);
4198
-		return this;
4199
-	},
4200
-
4201
-	isRunning: function(){
4202
-		var list = instances[this.options.fps];
4203
-		return list && list.contains(this);
4204
-	}
4205
-
4206
-});
4207
-
4208
-Fx.compute = function(from, to, delta){
4209
-	return (to - from) * delta + from;
4210
-};
4211
-
4212
-Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};
4213
-
4214
-// global timers
4215
-
4216
-var instances = {}, timers = {};
4217
-
4218
-var loop = function(){
4219
-	var now = Date.now();
4220
-	for (var i = this.length; i--;){
4221
-		var instance = this[i];
4222
-		if (instance) instance.step(now);
4223
-	}
4224
-};
4225
-
4226
-var pushInstance = function(fps){
4227
-	var list = instances[fps] || (instances[fps] = []);
4228
-	list.push(this);
4229
-	if (!timers[fps]) timers[fps] = loop.periodical(Math.round(1000 / fps), list);
4230
-};
4231
-
4232
-var pullInstance = function(fps){
4233
-	var list = instances[fps];
4234
-	if (list){
4235
-		list.erase(this);
4236
-		if (!list.length && timers[fps]){
4237
-			delete instances[fps];
4238
-			timers[fps] = clearInterval(timers[fps]);
4239
-		}
4240
-	}
4241
-};
4242
-
4243
-}).call(this);
4244
-
4245
-
4246
-/*
4247
-
4248
-name: Fx.CSS
4249
-
4250
-description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.
4251
-
4252
-license: MIT-style license.
4253
-
4254
-requires: [Fx, Element.Style]
4255
-
4256
-provides: Fx.CSS
4257
-
4258
-...
4259
-*/
4260
-
4261
-Fx.CSS = new Class({
4262
-
4263
-	Extends: Fx,
4264
-
4265
-	//prepares the base from/to object
4266
-
4267
-	prepare: function(element, property, values){
4268
-		values = Array.from(values);
4269
-		if (values[1] == null){
4270
-			values[1] = values[0];
4271
-			values[0] = element.getStyle(property);
4272
-		}
4273
-		var parsed = values.map(this.parse);
4274
-		return {from: parsed[0], to: parsed[1]};
4275
-	},
4276
-
4277
-	//parses a value into an array
4278
-
4279
-	parse: function(value){
4280
-		value = Function.from(value)();
4281
-		value = (typeof value == 'string') ? value.split(' ') : Array.from(value);
4282
-		return value.map(function(val){
4283
-			val = String(val);
4284
-			var found = false;
4285
-			Object.each(Fx.CSS.Parsers, function(parser, key){
4286
-				if (found) return;
4287
-				var parsed = parser.parse(val);
4288
-				if (parsed || parsed === 0) found = {value: parsed, parser: parser};
4289
-			});
4290
-			found = found || {value: val, parser: Fx.CSS.Parsers.String};
4291
-			return found;
4292
-		});
4293
-	},
4294
-
4295
-	//computes by a from and to prepared objects, using their parsers.
4296
-
4297
-	compute: function(from, to, delta){
4298
-		var computed = [];
4299
-		(Math.min(from.length, to.length)).times(function(i){
4300
-			computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
4301
-		});
4302
-		computed.$family = Function.from('fx:css:value');
4303
-		return computed;
4304
-	},
4305
-
4306
-	//serves the value as settable
4307
-
4308
-	serve: function(value, unit){
4309
-		if (typeOf(value) != 'fx:css:value') value = this.parse(value);
4310
-		var returned = [];
4311
-		value.each(function(bit){
4312
-			returned = returned.concat(bit.parser.serve(bit.value, unit));
4313
-		});
4314
-		return returned;
4315
-	},
4316
-
4317
-	//renders the change to an element
4318
-
4319
-	render: function(element, property, value, unit){
4320
-		element.setStyle(property, this.serve(value, unit));
4321
-	},
4322
-
4323
-	//searches inside the page css to find the values for a selector
4324
-
4325
-	search: function(selector){
4326
-		if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
4327
-		var to = {}, selectorTest = new RegExp('^' + selector.escapeRegExp() + '$');
4328
-		Array.each(document.styleSheets, function(sheet, j){
4329
-			var href = sheet.href;
4330
-			if (href && href.contains('://') && !href.contains(document.domain)) return;
4331
-			var rules = sheet.rules || sheet.cssRules;
4332
-			Array.each(rules, function(rule, i){
4333
-				if (!rule.style) return;
4334
-				var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
4335
-					return m.toLowerCase();
4336
-				}) : null;
4337
-				if (!selectorText || !selectorTest.test(selectorText)) return;
4338
-				Object.each(Element.Styles, function(value, style){
4339
-					if (!rule.style[style] || Element.ShortStyles[style]) return;
4340
-					value = String(rule.style[style]);
4341
-					to[style] = ((/^rgb/).test(value)) ? value.rgbToHex() : value;
4342
-				});
4343
-			});
4344
-		});
4345
-		return Fx.CSS.Cache[selector] = to;
4346
-	}
4347
-
4348
-});
4349
-
4350
-Fx.CSS.Cache = {};
4351
-
4352
-Fx.CSS.Parsers = {
4353
-
4354
-	Color: {
4355
-		parse: function(value){
4356
-			if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
4357
-			return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
4358
-		},
4359
-		compute: function(from, to, delta){
4360
-			return from.map(function(value, i){
4361
-				return Math.round(Fx.compute(from[i], to[i], delta));
4362
-			});
4363
-		},
4364
-		serve: function(value){
4365
-			return value.map(Number);
4366
-		}
4367
-	},
4368
-
4369
-	Number: {
4370
-		parse: parseFloat,
4371
-		compute: Fx.compute,
4372
-		serve: function(value, unit){
4373
-			return (unit) ? value + unit : value;
4374
-		}
4375
-	},
4376
-
4377
-	String: {
4378
-		parse: Function.from(false),
4379
-		compute: function(zero, one){
4380
-			return one;
4381
-		},
4382
-		serve: function(zero){
4383
-			return zero;
4384
-		}
4385
-	}
4386
-
4387
-};
4388
-
4389
-
4390
-
4391
-
4392
-/*
4393
-
4394
-name: Fx.Tween
4395
-
4396
-description: Formerly Fx.Style, effect to transition any CSS property for an element.
4397
-
4398
-license: MIT-style license.
4399
-
4400
-requires: Fx.CSS
4401
-
4402
-provides: [Fx.Tween, Element.fade, Element.highlight]
4403
-
4404
-...
4405
-*/
4406
-
4407
-Fx.Tween = new Class({
4408
-
4409
-	Extends: Fx.CSS,
4410
-
4411
-	initialize: function(element, options){
4412
-		this.element = this.subject = document.id(element);
4413
-		this.parent(options);
4414
-	},
4415
-
4416
-	set: function(property, now){
4417
-		if (arguments.length == 1){
4418
-			now = property;
4419
-			property = this.property || this.options.property;
4420
-		}
4421
-		this.render(this.element, property, now, this.options.unit);
4422
-		return this;
4423
-	},
4424
-
4425
-	start: function(property, from, to){
4426
-		if (!this.check(property, from, to)) return this;
4427
-		var args = Array.flatten(arguments);
4428
-		this.property = this.options.property || args.shift();
4429
-		var parsed = this.prepare(this.element, this.property, args);
4430
-		return this.parent(parsed.from, parsed.to);
4431
-	}
4432
-
4433
-});
4434
-
4435
-Element.Properties.tween = {
4436
-
4437
-	set: function(options){
4438
-		this.get('tween').cancel().setOptions(options);
4439
-		return this;
4440
-	},
4441
-
4442
-	get: function(){
4443
-		var tween = this.retrieve('tween');
4444
-		if (!tween){
4445
-			tween = new Fx.Tween(this, {link: 'cancel'});
4446
-			this.store('tween', tween);
4447
-		}
4448
-		return tween;
4449
-	}
4450
-
4451
-};
4452
-
4453
-Element.implement({
4454
-
4455
-	tween: function(property, from, to){
4456
-		this.get('tween').start(arguments);
4457
-		return this;
4458
-	},
4459
-
4460
-	fade: function(how){
4461
-		var fade = this.get('tween'), o = 'opacity', toggle;
4462
-		how = [how, 'toggle'].pick();
4463
-		switch (how){
4464
-			case 'in': fade.start(o, 1); break;
4465
-			case 'out': fade.start(o, 0); break;
4466
-			case 'show': fade.set(o, 1); break;
4467
-			case 'hide': fade.set(o, 0); break;
4468
-			case 'toggle':
4469
-				var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
4470
-				fade.start(o, (flag) ? 0 : 1);
4471
-				this.store('fade:flag', !flag);
4472
-				toggle = true;
4473
-			break;
4474
-			default: fade.start(o, arguments);
4475
-		}
4476
-		if (!toggle) this.eliminate('fade:flag');
4477
-		return this;
4478
-	},
4479
-
4480
-	highlight: function(start, end){
4481
-		if (!end){
4482
-			end = this.retrieve('highlight:original', this.getStyle('background-color'));
4483
-			end = (end == 'transparent') ? '#fff' : end;
4484
-		}
4485
-		var tween = this.get('tween');
4486
-		tween.start('background-color', start || '#ffff88', end).chain(function(){
4487
-			this.setStyle('background-color', this.retrieve('highlight:original'));
4488
-			tween.callChain();
4489
-		}.bind(this));
4490
-		return this;
4491
-	}
4492
-
4493
-});
4494
-
4495
-
4496
-/*
4497
-
4498
-name: Fx.Morph
4499
-
4500
-description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.
4501
-
4502
-license: MIT-style license.
4503
-
4504
-requires: Fx.CSS
4505
-
4506
-provides: Fx.Morph
4507
-
4508
-...
4509
-*/
4510
-
4511
-Fx.Morph = new Class({
4512
-
4513
-	Extends: Fx.CSS,
4514
-
4515
-	initialize: function(element, options){
4516
-		this.element = this.subject = document.id(element);
4517
-		this.parent(options);
4518
-	},
4519
-
4520
-	set: function(now){
4521
-		if (typeof now == 'string') now = this.search(now);
4522
-		for (var p in now) this.render(this.element, p, now[p], this.options.unit);
4523
-		return this;
4524
-	},
4525
-
4526
-	compute: function(from, to, delta){
4527
-		var now = {};
4528
-		for (var p in from) now[p] = this.parent(from[p], to[p], delta);
4529
-		return now;
4530
-	},
4531
-
4532
-	start: function(properties){
4533
-		if (!this.check(properties)) return this;
4534
-		if (typeof properties == 'string') properties = this.search(properties);
4535
-		var from = {}, to = {};
4536
-		for (var p in properties){
4537
-			var parsed = this.prepare(this.element, p, properties[p]);
4538
-			from[p] = parsed.from;
4539
-			to[p] = parsed.to;
4540
-		}
4541
-		return this.parent(from, to);
4542
-	}
4543
-
4544
-});
4545
-
4546
-Element.Properties.morph = {
4547
-
4548
-	set: function(options){
4549
-		this.get('morph').cancel().setOptions(options);
4550
-		return this;
4551
-	},
4552
-
4553
-	get: function(){
4554
-		var morph = this.retrieve('morph');
4555
-		if (!morph){
4556
-			morph = new Fx.Morph(this, {link: 'cancel'});
4557
-			this.store('morph', morph);
4558
-		}
4559
-		return morph;
4560
-	}
4561
-
4562
-};
4563
-
4564
-Element.implement({
4565
-
4566
-	morph: function(props){
4567
-		this.get('morph').start(props);
4568
-		return this;
4569
-	}
4570
-
4571
-});
4572
-
4573
-
4574
-/*
4575
-
4576
-name: Fx.Transitions
4577
-
4578
-description: Contains a set of advanced transitions to be used with any of the Fx Classes.
4579
-
4580
-license: MIT-style license.
4581
-
4582
-credits:
4583
-  - Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified and optimized to be used with MooTools.
4584
-
4585
-requires: Fx
4586
-
4587
-provides: Fx.Transitions
4588
-
4589
-...
4590
-*/
4591
-
4592
-Fx.implement({
4593
-
4594
-	getTransition: function(){
4595
-		var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
4596
-		if (typeof trans == 'string'){
4597
-			var data = trans.split(':');
4598
-			trans = Fx.Transitions;
4599
-			trans = trans[data[0]] || trans[data[0].capitalize()];
4600
-			if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
4601
-		}
4602
-		return trans;
4603
-	}
4604
-
4605
-});
4606
-
4607
-Fx.Transition = function(transition, params){
4608
-	params = Array.from(params);
4609
-	var easeIn = function(pos){
4610
-		return transition(pos, params);
4611
-	};
4612
-	return Object.append(easeIn, {
4613
-		easeIn: easeIn,
4614
-		easeOut: function(pos){
4615
-			return 1 - transition(1 - pos, params);
4616
-		},
4617
-		easeInOut: function(pos){
4618
-			return (pos <= 0.5 ? transition(2 * pos, params) : (2 - transition(2 * (1 - pos), params))) / 2;
4619
-		}
4620
-	});
4621
-};
4622
-
4623
-Fx.Transitions = {
4624
-
4625
-	linear: function(zero){
4626
-		return zero;
4627
-	}
4628
-
4629
-};
4630
-
4631
-
4632
-
4633
-Fx.Transitions.extend = function(transitions){
4634
-	for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
4635
-};
4636
-
4637
-Fx.Transitions.extend({
4638
-
4639
-	Pow: function(p, x){
4640
-		return Math.pow(p, x && x[0] || 6);
4641
-	},
4642
-
4643
-	Expo: function(p){
4644
-		return Math.pow(2, 8 * (p - 1));
4645
-	},
4646
-
4647
-	Circ: function(p){
4648
-		return 1 - Math.sin(Math.acos(p));
4649
-	},
4650
-
4651
-	Sine: function(p){
4652
-		return 1 - Math.cos(p * Math.PI / 2);
4653
-	},
4654
-
4655
-	Back: function(p, x){
4656
-		x = x && x[0] || 1.618;
4657
-		return Math.pow(p, 2) * ((x + 1) * p - x);
4658
-	},
4659
-
4660
-	Bounce: function(p){
4661
-		var value;
4662
-		for (var a = 0, b = 1; 1; a += b, b /= 2){
4663
-			if (p >= (7 - 4 * a) / 11){
4664
-				value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
4665
-				break;
4666
-			}
4667
-		}
4668
-		return value;
4669
-	},
4670
-
4671
-	Elastic: function(p, x){
4672
-		return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x && x[0] || 1) / 3);
4673
-	}
4674
-
4675
-});
4676
-
4677
-['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
4678
-	Fx.Transitions[transition] = new Fx.Transition(function(p){
4679
-		return Math.pow(p, i + 2);
4680
-	});
4681
-});
4682
-
4683
-
4684
-/*
4685
-
4686
-name: Request
4687
-
4688
-description: Powerful all purpose Request Class. Uses XMLHTTPRequest.
4689
-
4690
-license: MIT-style license.
4691
-
4692
-requires: [Object, Element, Chain, Events, Options, Browser]
4693
-
4694
-provides: Request
4695
-
4696
-...
4697
-*/
4698
-
4699
-(function(){
4700
-
4701
-var empty = function(){},
4702
-	progressSupport = ('onprogress' in new Browser.Request);
4703
-
4704
-var Request = this.Request = new Class({
4705
-
4706
-	Implements: [Chain, Events, Options],
4707
-
4708
-	options: {/*
4709
-		onRequest: function(){},
4710
-		onLoadstart: function(event, xhr){},
4711
-		onProgress: function(event, xhr){},
4712
-		onComplete: function(){},
4713
-		onCancel: function(){},
4714
-		onSuccess: function(responseText, responseXML){},
4715
-		onFailure: function(xhr){},
4716
-		onException: function(headerName, value){},
4717
-		onTimeout: function(){},
4718
-		user: '',
4719
-		password: '',*/
4720
-		url: '',
4721
-		data: '',
4722
-		headers: {
4723
-			'X-Requested-With': 'XMLHttpRequest',
4724
-			'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
4725
-		},
4726
-		async: true,
4727
-		format: false,
4728
-		method: 'post',
4729
-		link: 'ignore',
4730
-		isSuccess: null,
4731
-		emulation: true,
4732
-		urlEncoded: true,
4733
-		encoding: 'utf-8',
4734
-		evalScripts: false,
4735
-		evalResponse: false,
4736
-		timeout: 0,
4737
-		noCache: false
4738
-	},
4739
-
4740
-	initialize: function(options){
4741
-		this.xhr = new Browser.Request();
4742
-		this.setOptions(options);
4743
-		this.headers = this.options.headers;
4744
-	},
4745
-
4746
-	onStateChange: function(){
4747
-		var xhr = this.xhr;
4748
-		if (xhr.readyState != 4 || !this.running) return;
4749
-		this.running = false;
4750
-		this.status = 0;
4751
-		Function.attempt(function(){
4752
-			var status = xhr.status;
4753
-			this.status = (status == 1223) ? 204 : status;
4754
-		}.bind(this));
4755
-		xhr.onreadystatechange = empty;
4756
-		if (progressSupport) xhr.onprogress = xhr.onloadstart = empty;
4757
-		clearTimeout(this.timer);
4758
-
4759
-		this.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML};
4760
-		if (this.options.isSuccess.call(this, this.status))
4761
-			this.success(this.response.text, this.response.xml);
4762
-		else
4763
-			this.failure();
4764
-	},
4765
-
4766
-	isSuccess: function(){
4767
-		var status = this.status;
4768
-		return (status >= 200 && status < 300);
4769
-	},
4770
-
4771
-	isRunning: function(){
4772
-		return !!this.running;
4773
-	},
4774
-
4775
-	processScripts: function(text){
4776
-		if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return Browser.exec(text);
4777
-		return text.stripScripts(this.options.evalScripts);
4778
-	},
4779
-
4780
-	success: function(text, xml){
4781
-		this.onSuccess(this.processScripts(text), xml);
4782
-	},
4783
-
4784
-	onSuccess: function(){
4785
-		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
4786
-	},
4787
-
4788
-	failure: function(){
4789
-		this.onFailure();
4790
-	},
4791
-
4792
-	onFailure: function(){
4793
-		this.fireEvent('complete').fireEvent('failure', this.xhr);
4794
-	},
4795
-
4796
-	loadstart: function(event){
4797
-		this.fireEvent('loadstart', [event, this.xhr]);
4798
-	},
4799
-
4800
-	progress: function(event){
4801
-		this.fireEvent('progress', [event, this.xhr]);
4802
-	},
4803
-
4804
-	timeout: function(){
4805
-		this.fireEvent('timeout', this.xhr);
4806
-	},
4807
-
4808
-	setHeader: function(name, value){
4809
-		this.headers[name] = value;
4810
-		return this;
4811
-	},
4812
-
4813
-	getHeader: function(name){
4814
-		return Function.attempt(function(){
4815
-			return this.xhr.getResponseHeader(name);
4816
-		}.bind(this));
4817
-	},
4818
-
4819
-	check: function(){
4820
-		if (!this.running) return true;
4821
-		switch (this.options.link){
4822
-			case 'cancel': this.cancel(); return true;
4823
-			case 'chain': this.chain(this.caller.pass(arguments, this)); return false;
4824
-		}
4825
-		return false;
4826
-	},
4827
-
4828
-	send: function(options){
4829
-		if (!this.check(options)) return this;
4830
-
4831
-		this.options.isSuccess = this.options.isSuccess || this.isSuccess;
4832
-		this.running = true;
4833
-
4834
-		var type = typeOf(options);
4835
-		if (type == 'string' || type == 'element') options = {data: options};
4836
-
4837
-		var old = this.options;
4838
-		options = Object.append({data: old.data, url: old.url, method: old.method}, options);
4839
-		var data = options.data, url = String(options.url), method = options.method.toLowerCase();
4840
-
4841
-		switch (typeOf(data)){
4842
-			case 'element': data = document.id(data).toQueryString(); break;
4843
-			case 'object': case 'hash': data = Object.toQueryString(data);
4844
-		}
4845
-
4846
-		if (this.options.format){
4847
-			var format = 'format=' + this.options.format;
4848
-			data = (data) ? format + '&' + data : format;
4849
-		}
4850
-
4851
-		if (this.options.emulation && !['get', 'post'].contains(method)){
4852
-			var _method = '_method=' + method;
4853
-			data = (data) ? _method + '&' + data : _method;
4854
-			method = 'post';
4855
-		}
4856
-
4857
-		if (this.options.urlEncoded && ['post', 'put'].contains(method)){
4858
-			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
4859
-			this.headers['Content-type'] = 'application/x-www-form-urlencoded' + encoding;
4860
-		}
4861
-
4862
-		if (!url) url = document.location.pathname;
4863
-
4864
-		var trimPosition = url.lastIndexOf('/');
4865
-		if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);
4866
-
4867
-		if (this.options.noCache)
4868
-			url += (url.contains('?') ? '&' : '?') + String.uniqueID();
4869
-
4870
-		if (data && method == 'get'){
4871
-			url += (url.contains('?') ? '&' : '?') + data;
4872
-			data = null;
4873
-		}
4874
-
4875
-		var xhr = this.xhr;
4876
-		if (progressSupport){
4877
-			xhr.onloadstart = this.loadstart.bind(this);
4878
-			xhr.onprogress = this.progress.bind(this);
4879
-		}
4880
-
4881
-		xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password);
4882
-		if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true;
4883
-
4884
-		xhr.onreadystatechange = this.onStateChange.bind(this);
4885
-
4886
-		Object.each(this.headers, function(value, key){
4887
-			try {
4888
-				xhr.setRequestHeader(key, value);
4889
-			} catch (e){
4890
-				this.fireEvent('exception', [key, value]);
4891
-			}
4892
-		}, this);
4893
-
4894
-		this.fireEvent('request');
4895
-		xhr.send(data);
4896
-		if (!this.options.async) this.onStateChange();
4897
-		if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this);
4898
-		return this;
4899
-	},
4900
-
4901
-	cancel: function(){
4902
-		if (!this.running) return this;
4903
-		this.running = false;
4904
-		var xhr = this.xhr;
4905
-		xhr.abort();
4906
-		clearTimeout(this.timer);
4907
-		xhr.onreadystatechange = empty;
4908
-		if (progressSupport) xhr.onprogress = xhr.onloadstart = empty;
4909
-		this.xhr = new Browser.Request();
4910
-		this.fireEvent('cancel');
4911
-		return this;
4912
-	}
4913
-
4914
-});
4915
-
4916
-var methods = {};
4917
-['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
4918
-	methods[method] = function(data){
4919
-		var object = {
4920
-			method: method
4921
-		};
4922
-		if (data != null) object.data = data;
4923
-		return this.send(object);
4924
-	};
4925
-});
4926
-
4927
-Request.implement(methods);
4928
-
4929
-Element.Properties.send = {
4930
-
4931
-	set: function(options){
4932
-		var send = this.get('send').cancel();
4933
-		send.setOptions(options);
4934
-		return this;
4935
-	},
4936
-
4937
-	get: function(){
4938
-		var send = this.retrieve('send');
4939
-		if (!send){
4940
-			send = new Request({
4941
-				data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
4942
-			});
4943
-			this.store('send', send);
4944
-		}
4945
-		return send;
4946
-	}
4947
-
4948
-};
4949
-
4950
-Element.implement({
4951
-
4952
-	send: function(url){
4953
-		var sender = this.get('send');
4954
-		sender.send({data: this, url: url || sender.options.url});
4955
-		return this;
4956
-	}
4957
-
4958
-});
4959
-
4960
-})();
4961
-
4962
-/*
4963
-
4964
-name: Request.HTML
4965
-
4966
-description: Extends the basic Request Class with additional methods for interacting with HTML responses.
4967
-
4968
-license: MIT-style license.
4969
-
4970
-requires: [Element, Request]
4971
-
4972
-provides: Request.HTML
4973
-
4974
-...
4975
-*/
4976
-
4977
-Request.HTML = new Class({
4978
-
4979
-	Extends: Request,
4980
-
4981
-	options: {
4982
-		update: false,
4983
-		append: false,
4984
-		evalScripts: true,
4985
-		filter: false,
4986
-		headers: {
4987
-			Accept: 'text/html, application/xml, text/xml, */*'
4988
-		}
4989
-	},
4990
-
4991
-	success: function(text){
4992
-		var options = this.options, response = this.response;
4993
-
4994
-		response.html = text.stripScripts(function(script){
4995
-			response.javascript = script;
4996
-		});
4997
-
4998
-		var match = response.html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
4999
-		if (match) response.html = match[1];
5000
-		var temp = new Element('div').set('html', response.html);
5001
-
5002
-		response.tree = temp.childNodes;
5003
-		response.elements = temp.getElements('*');
5004
-
5005
-		if (options.filter) response.tree = response.elements.filter(options.filter);
5006
-		if (options.update) document.id(options.update).empty().set('html', response.html);
5007
-		else if (options.append) document.id(options.append).adopt(temp.getChildren());
5008
-		if (options.evalScripts) Browser.exec(response.javascript);
5009
-
5010
-		this.onSuccess(response.tree, response.elements, response.html, response.javascript);
5011
-	}
5012
-
5013
-});
5014
-
5015
-Element.Properties.load = {
5016
-
5017
-	set: function(options){
5018
-		var load = this.get('load').cancel();
5019
-		load.setOptions(options);
5020
-		return this;
5021
-	},
5022
-
5023
-	get: function(){
5024
-		var load = this.retrieve('load');
5025
-		if (!load){
5026
-			load = new Request.HTML({data: this, link: 'cancel', update: this, method: 'get'});
5027
-			this.store('load', load);
5028
-		}
5029
-		return load;
5030
-	}
5031
-
5032
-};
5033
-
5034
-Element.implement({
5035
-
5036
-	load: function(){
5037
-		this.get('load').send(Array.link(arguments, {data: Type.isObject, url: Type.isString}));
5038
-		return this;
5039
-	}
5040
-
5041
-});
5042
-
5043
-
5044
-/*
5045
-
5046
-name: JSON
5047
-
5048
-description: JSON encoder and decoder.
5049
-
5050
-license: MIT-style license.
5051
-
5052
-See Also: <http://www.json.org/>
5053
-
5054
-requires: [Array, String, Number, Function]
5055
-
5056
-provides: JSON
5057
-
5058
-...
5059
-*/
5060
-
5061
-if (typeof JSON == 'undefined') this.JSON = {};
5062
-
5063
-
5064
-
5065
-(function(){
5066
-
5067
-var special = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'};
5068
-
5069
-var escape = function(chr){
5070
-	return special[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4);
5071
-};
5072
-
5073
-JSON.validate = function(string){
5074
-	string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
5075
-					replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
5076
-					replace(/(?:^|:|,)(?:\s*\[)+/g, '');
5077
-
5078
-	return (/^[\],:{}\s]*$/).test(string);
5079
-};
5080
-
5081
-JSON.encode = JSON.stringify ? function(obj){
5082
-	return JSON.stringify(obj);
5083
-} : function(obj){
5084
-	if (obj && obj.toJSON) obj = obj.toJSON();
5085
-
5086
-	switch (typeOf(obj)){
5087
-		case 'string':
5088
-			return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"';
5089
-		case 'array':
5090
-			return '[' + obj.map(JSON.encode).clean() + ']';
5091
-		case 'object': case 'hash':
5092
-			var string = [];
5093
-			Object.each(obj, function(value, key){
5094
-				var json = JSON.encode(value);
5095
-				if (json) string.push(JSON.encode(key) + ':' + json);
5096
-			});
5097
-			return '{' + string + '}';
5098
-		case 'number': case 'boolean': return '' + obj;
5099
-		case 'null': return 'null';
5100
-	}
5101
-
5102
-	return null;
5103
-};
5104
-
5105
-JSON.decode = function(string, secure){
5106
-	if (!string || typeOf(string) != 'string') return null;
5107
-
5108
-	if (secure || JSON.secure){
5109
-		if (JSON.parse) return JSON.parse(string);
5110
-		if (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.');
5111
-	}
5112
-
5113
-	return eval('(' + string + ')');
5114
-};
5115
-
5116
-}).call(this);
5117
-
5118
-
5119
-/*
5120
-
5121
-name: Request.JSON
5122
-
5123
-description: Extends the basic Request Class with additional methods for sending and receiving JSON data.
5124
-
5125
-license: MIT-style license.
5126
-
5127
-requires: [Request, JSON]
5128
-
5129
-provides: Request.JSON
5130
-
5131
-...
5132
-*/
5133
-
5134
-Request.JSON = new Class({
5135
-
5136
-	Extends: Request,
5137
-
5138
-	options: {
5139
-		/*onError: function(text, error){},*/
5140
-		secure: true
5141
-	},
5142
-
5143
-	initialize: function(options){
5144
-		this.parent(options);
5145
-		Object.append(this.headers, {
5146
-			'Accept': 'application/json',
5147
-			'X-Request': 'JSON'
5148
-		});
5149
-	},
5150
-
5151
-	success: function(text){
5152
-		var json;
5153
-		try {
5154
-			json = this.response.json = JSON.decode(text, this.options.secure);
5155
-		} catch (error){
5156
-			this.fireEvent('error', [text, error]);
5157
-			return;
5158
-		}
5159
-		if (json == null) this.onFailure();
5160
-		else this.onSuccess(json, text);
5161
-	}
5162
-
5163
-});
5164
-
5165
-
5166
-/*
5167
-
5168
-name: Cookie
5169
-
5170
-description: Class for creating, reading, and deleting browser Cookies.
5171
-
5172
-license: MIT-style license.
5173
-
5174
-credits:
5175
-  - Based on the functions by Peter-Paul Koch (http://quirksmode.org).
5176
-
5177
-requires: [Options, Browser]
5178
-
5179
-provides: Cookie
5180
-
5181
-...
5182
-*/
5183
-
5184
-var Cookie = new Class({
5185
-
5186
-	Implements: Options,
5187
-
5188
-	options: {
5189
-		path: '/',
5190
-		domain: false,
5191
-		duration: false,
5192
-		secure: false,
5193
-		document: document,
5194
-		encode: true
5195
-	},
5196
-
5197
-	initialize: function(key, options){
5198
-		this.key = key;
5199
-		this.setOptions(options);
5200
-	},
5201
-
5202
-	write: function(value){
5203
-		if (this.options.encode) value = encodeURIComponent(value);
5204
-		if (this.options.domain) value += '; domain=' + this.options.domain;
5205
-		if (this.options.path) value += '; path=' + this.options.path;
5206
-		if (this.options.duration){
5207
-			var date = new Date();
5208
-			date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
5209
-			value += '; expires=' + date.toGMTString();
5210
-		}
5211
-		if (this.options.secure) value += '; secure';
5212
-		this.options.document.cookie = this.key + '=' + value;
5213
-		return this;
5214
-	},
5215
-
5216
-	read: function(){
5217
-		var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
5218
-		return (value) ? decodeURIComponent(value[1]) : null;
5219
-	},
5220
-
5221
-	dispose: function(){
5222
-		new Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write('');
5223
-		return this;
5224
-	}
5225
-
5226
-});
5227
-
5228
-Cookie.write = function(key, value, options){
5229
-	return new Cookie(key, options).write(value);
5230
-};
5231
-
5232
-Cookie.read = function(key){
5233
-	return new Cookie(key).read();
5234
-};
5235
-
5236
-Cookie.dispose = function(key, options){
5237
-	return new Cookie(key, options).dispose();
5238
-};
5239
-
5240
-
5241
-/*
5242
-
5243
-name: DOMReady
5244
-
5245
-description: Contains the custom event domready.
5246
-
5247
-license: MIT-style license.
5248
-
5249
-requires: [Browser, Element, Element.Event]
5250
-
5251
-provides: [DOMReady, DomReady]
5252
-
5253
-...
5254
-*/
5255
-
5256
-(function(window, document){
5257
-
5258
-var ready,
5259
-	loaded,
5260
-	checks = [],
5261
-	shouldPoll,
5262
-	timer,
5263
-	isFramed = true;
5264
-
5265
-// Thanks to Rich Dougherty <http://www.richdougherty.com/>
5266
-try {
5267
-	isFramed = window.frameElement != null;
5268
-} catch(e){}
5269
-
5270
-var domready = function(){
5271
-	clearTimeout(timer);
5272
-	if (ready) return;
5273
-	Browser.loaded = ready = true;
5274
-	document.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check);
5275
-
5276
-	document.fireEvent('domready');
5277
-	window.fireEvent('domready');
5278
-};
5279
-
5280
-var check = function(){
5281
-	for (var i = checks.length; i--;) if (checks[i]()){
5282
-		domready();
5283
-		return true;
5284
-	}
5285
-
5286
-	return false;
5287
-};
5288
-
5289
-var poll = function(){
5290
-	clearTimeout(timer);
5291
-	if (!check()) timer = setTimeout(poll, 10);
5292
-};
5293
-
5294
-document.addListener('DOMContentLoaded', domready);
5295
-
5296
-// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/
5297
-var testElement = document.createElement('div');
5298
-if (testElement.doScroll && !isFramed){
5299
-	checks.push(function(){
5300
-		try {
5301
-			testElement.doScroll();
5302
-			return true;
5303
-		} catch (e){}
5304
-
5305
-		return false;
5306
-	});
5307
-	shouldPoll = true;
5308
-}
5309
-
5310
-if (document.readyState) checks.push(function(){
5311
-	var state = document.readyState;
5312
-	return (state == 'loaded' || state == 'complete');
5313
-});
5314
-
5315
-if ('onreadystatechange' in document) document.addListener('readystatechange', check);
5316
-else shouldPoll = true;
5317
-
5318
-if (shouldPoll) poll();
5319
-
5320
-Element.Events.domready = {
5321
-	onAdd: function(fn){
5322
-		if (ready) fn.call(this);
5323
-	}
5324
-};
5325
-
5326
-// Make sure that domready fires before load
5327
-Element.Events.load = {
5328
-	base: 'load',
5329
-	onAdd: function(fn){
5330
-		if (loaded && this == window) fn.call(this);
5331
-	},
5332
-	condition: function(){
5333
-		if (this == window){
5334
-			domready();
5335
-			delete Element.Events.load;
5336
-		}
5337
-
5338
-		return true;
5339
-	}
5340
-};
5341
-
5342
-// This is based on the custom load event
5343
-window.addEvent('load', function(){
5344
-	loaded = true;
5345
-});
5346
-
5347
-})(window, document);
5348
-
5349
-
5350
-/*
5351
-
5352
-name: Swiff
5353
-
5354
-description: Wrapper for embedding SWF movies. Supports External Interface Communication.
5355
-
5356
-license: MIT-style license.
5357
-
5358
-credits:
5359
-  - Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.
5360
-
5361
-requires: [Options, Object, Element]
5362
-
5363
-provides: Swiff
5364
-
5365
-...
5366
-*/
5367
-
5368
-(function(){
5369
-
5370
-var Swiff = this.Swiff = new Class({
5371
-
5372
-	Implements: Options,
5373
-
5374
-	options: {
5375
-		id: null,
5376
-		height: 1,
5377
-		width: 1,
5378
-		container: null,
5379
-		properties: {},
5380
-		params: {
5381
-			quality: 'high',
5382
-			allowScriptAccess: 'always',
5383
-			wMode: 'window',
5384
-			swLiveConnect: true
5385
-		},
5386
-		callBacks: {},
5387
-		vars: {}
5388
-	},
5389
-
5390
-	toElement: function(){
5391
-		return this.object;
5392
-	},
5393
-
5394
-	initialize: function(path, options){
5395
-		this.instance = 'Swiff_' + String.uniqueID();
5396
-
5397
-		this.setOptions(options);
5398
-		options = this.options;
5399
-		var id = this.id = options.id || this.instance;
5400
-		var container = document.id(options.container);
5401
-
5402
-		Swiff.CallBacks[this.instance] = {};
5403
-
5404
-		var params = options.params, vars = options.vars, callBacks = options.callBacks;
5405
-		var properties = Object.append({height: options.height, width: options.width}, options.properties);
5406
-
5407
-		var self = this;
5408
-
5409
-		for (var callBack in callBacks){
5410
-			Swiff.CallBacks[this.instance][callBack] = (function(option){
5411
-				return function(){
5412
-					return option.apply(self.object, arguments);
5413
-				};
5414
-			})(callBacks[callBack]);
5415
-			vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
5416
-		}
5417
-
5418
-		params.flashVars = Object.toQueryString(vars);
5419
-		if (Browser.ie){
5420
-			properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
5421
-			params.movie = path;
5422
-		} else {
5423
-			properties.type = 'application/x-shockwave-flash';
5424
-		}
5425
-		properties.data = path;
5426
-
5427
-		var build = '<object id="' + id + '"';
5428
-		for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
5429
-		build += '>';
5430
-		for (var param in params){
5431
-			if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
5432
-		}
5433
-		build += '</object>';
5434
-		this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
5435
-	},
5436
-
5437
-	replaces: function(element){
5438
-		element = document.id(element, true);
5439
-		element.parentNode.replaceChild(this.toElement(), element);
5440
-		return this;
5441
-	},
5442
-
5443
-	inject: function(element){
5444
-		document.id(element, true).appendChild(this.toElement());
5445
-		return this;
5446
-	},
5447
-
5448
-	remote: function(){
5449
-		return Swiff.remote.apply(Swiff, [this.toElement()].append(arguments));
5450
-	}
5451
-
5452
-});
5453
-
5454
-Swiff.CallBacks = {};
5455
-
5456
-Swiff.remote = function(obj, fn){
5457
-	var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
5458
-	return eval(rs);
5459
-};
5460
-
5461
-}).call(this);
5462
-
5463
-
... ...
@@ -1,76 +0,0 @@
1
-window.addEvent('domready', function() {
2
-  codeblocks = $$('div.highlight');
3
-  codeblocks.each(addExpander);
4
-});
5
-
6
-window.addEvents({
7
-  domready: function(){
8
-    if(twitter_user){
9
-      new Request.Twitter(twitter_user, {
10
-        include_replies: false,
11
-        data: { count: 3 },
12
-        onSuccess: function(tweets){
13
-          $('tweets').empty();
14
-          for (var i = tweets.length; i--; ){
15
-            new Element('li', {
16
-              'class': 'tweet'
17
-              }).adopt(
18
-              new Element('p', { 'html': tweets[i].text+' ' }).adopt(
19
-                new Element('a', {
20
-                  'href': 'http://twitter.com/'+twitter_user+'/status/'+tweets[i].id_str,
21
-                  'text': new Date(tweets[i].created_at).timeDiffInWords()
22
-                }))
23
-            ).inject('tweets', 'top');
24
-          }
25
-        }
26
-      }).send();
27
-    }
28
-    $$('#recent_posts time').each(function(date){
29
-      date.set('text', new Date(date.get('text')).timeDiffInWords());
30
-    });
31
-  },
32
-});
33
-
34
-
35
-function addExpander(div){
36
-  new Element('span',{
37
-		html: 'expand &raquo;',
38
-		'class': 'pre_expander',
39
-    'events': {
40
-      'click': function(){
41
-        toggleExpander(this);
42
-      }
43
-    }
44
-	}).inject(div, 'top');
45
-}
46
-function toggleExpander(expander){
47
-  var html = '';
48
-  var expanderPos = expander.getPosition().y;
49
-  if($('page').toggleClass('expanded').hasClass('expanded'))
50
-    html = '&laquo; contract';
51
-  else
52
-    html = 'expand &raquo;';
53
-  $$('div.highlight span.pre_expander').each(function(span){
54
-      span.set('html',html);
55
-  });
56
-  fixScroll(expander, expanderPos);
57
-}
58
-function fixScroll(el, position){
59
-  pos = el.getPosition().y - position;
60
-  window.scrollTo(window.getScroll().x ,window.getScroll().y + pos);
61
-}
62
-function enableCompressedLayout(codeblocks){
63
-  if(!codeblocks.length) return;
64
-  new Element('span',{
65
-		html: 'Collapse layout',
66
-		'id': 'collapser',
67
-    'events': {
68
-      'click': function(){
69
-        if($('page').toggleClass('collapsed').hasClass('collapsed'))
70
-          this.set('html','Expand layout');
71
-        else
72
-          this.set('html','Collapse layout');
73
-      }
74
-    }
75
-	}).inject($('main'), 'top');
76
-}
... ...
@@ -26,7 +26,7 @@ function Pinboard_Linkroll() {
26 26
       var str = this.format_item(item);
27 27
       lines.push(str);
28 28
     }
29
-    $(linkroll).set('html', lines.join("\n"));
29
+    document.getElementById(linkroll).innerHTML = lines.join("\n");
30 30
   }
31 31
   this.cook = function(v) {
32 32
     return v.replace('<', '&lt;').replace('>', '&gt>');
... ...
@@ -1,52 +1,70 @@
1
-Request.Twitter = new Class({
1
+/* http://www.JSON.org/json2.js 2009-09-29 Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. See http://www.JSON.org/js.html */
2
+if(!this.JSON){this.JSON={}}(function(){function l(c){return c<10?'0'+c:c}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(c){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+l(this.getUTCMonth()+1)+'-'+l(this.getUTCDate())+'T'+l(this.getUTCHours())+':'+l(this.getUTCMinutes())+':'+l(this.getUTCSeconds())+'Z':null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(c){return this.valueOf()}}var o=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,p=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,h,m,r={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},j;function q(a){p.lastIndex=0;return p.test(a)?'"'+a.replace(p,function(c){var f=r[c];return typeof f==='string'?f:'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function n(c,f){var a,e,d,i,k=h,g,b=f[c];if(b&&typeof b==='object'&&typeof b.toJSON==='function'){b=b.toJSON(c)}if(typeof j==='function'){b=j.call(f,c,b)}switch(typeof b){case'string':return q(b);case'number':return isFinite(b)?String(b):'null';case'boolean':case'null':return String(b);case'object':if(!b){return'null'}h+=m;g=[];if(Object.prototype.toString.apply(b)==='[object Array]'){i=b.length;for(a=0;a<i;a+=1){g[a]=n(a,b)||'null'}d=g.length===0?'[]':h?'[\n'+h+g.join(',\n'+h)+'\n'+k+']':'['+g.join(',')+']';h=k;return d}if(j&&typeof j==='object'){i=j.length;for(a=0;a<i;a+=1){e=j[a];if(typeof e==='string'){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}else{for(e in b){if(Object.hasOwnProperty.call(b,e)){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}d=g.length===0?'{}':h?'{\n'+h+g.join(',\n'+h)+'\n'+k+'}':'{'+g.join(',')+'}';h=k;return d}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(c,f,a){var e;h='';m='';if(typeof a==='number'){for(e=0;e<a;e+=1){m+=' '}}else if(typeof a==='string'){m=a}j=f;if(f&&typeof f!=='function'&&(typeof f!=='object'||typeof f.length!=='number')){throw new Error('JSON.stringify');}return n('',{'':c})}}if(typeof JSON.parse!=='function'){JSON.parse=function(i,k){var g;function b(c,f){var a,e,d=c[f];if(d&&typeof d==='object'){for(a in d){if(Object.hasOwnProperty.call(d,a)){e=b(d,a);if(e!==undefined){d[a]=e}else{delete d[a]}}}}return k.call(c,f,d)}o.lastIndex=0;if(o.test(i)){i=i.replace(o,function(c){return'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(i.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){g=eval('('+i+')');return typeof k==='function'?b({'':g},''):g}throw new SyntaxError('JSON.parse');}}}());
2 3
 
3
-  Extends: Request.JSONP,
4
+// jXHR.js (JSON-P XHR) | v0.1 (c) Kyle Simpson | MIT License
5
+(function(c){var b=c.setTimeout,d=c.document,a=0;c.jXHR=function(){var e,g,n,h,m=null;function l(){try{h.parentNode.removeChild(h)}catch(o){}}function k(){g=false;e="";l();h=null;i(0)}function f(p){try{m.onerror.call(m,p,e)}catch(o){throw new Error(p)}}function j(){if((this.readyState&&this.readyState!=="complete"&&this.readyState!=="loaded")||g){return}this.onload=this.onreadystatechange=null;g=true;if(m.readyState!==4){f("Script failed to load ["+e+"].")}l()}function i(o,p){p=p||[];m.readyState=o;if(typeof m.onreadystatechange==="function"){m.onreadystatechange.apply(m,p)}}m={onerror:null,onreadystatechange:null,readyState:0,open:function(p,o){k();internal_callback="cb"+(a++);(function(q){c.jXHR[q]=function(){try{i.call(m,4,arguments)}catch(r){m.readyState=-1;f("Script failed to run ["+e+"].")}c.jXHR[q]=null}})(internal_callback);e=o.replace(/=\?/,"=jXHR."+internal_callback);i(1)},send:function(){b(function(){h=d.createElement("script");h.setAttribute("type","text/javascript");h.onload=h.onreadystatechange=function(){j.call(h)};h.setAttribute("src",e);d.getElementsByTagName("head")[0].appendChild(h)},0);i(2)},setRequestHeader:function(){},getResponseHeader:function(){return""},getAllResponseHeaders:function(){return[]}};k();return m}})(window);
4 6
 
5
-  options: {
6
-    linkify: true,
7
-    url: 'http://twitter.com/statuses/user_timeline/{term}.json',
8
-    include_replies: true,
9
-    data: {
10
-      count: 5,
11
-      trim_user: true
7
+function getTwitterFeed(success, user, count, replies) {
8
+  feed = new jXHR();
9
+  feed.onerror = function (msg,url) { alert(msg); }
10
+  feed.onreadystatechange = function(data){
11
+    if (feed.readyState === 4) {
12
+      var tweets = new Array();
13
+      for (i in data){
14
+        if(tweets.length < count){
15
+          if(replies || data[i].in_reply_to_user_id == null){
16
+            tweets.push(data[i]);
17
+          }
18
+        }
19
+      }
20
+      success(tweets);
12 21
     }
13
-  },
22
+  };
23
+  feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+parseInt(count)+25+"&callback=?");
24
+  feed.send();
25
+}
14 26
 
15
-  initialize: function(term, options){
16
-    this.parent(options);
17
-    if(this.options.include_replies == false){
18
-      this.options.count = this.options.data.count
19
-      this.options.data.count += 30; // adds 30 tweets to request for filtering
20
-    }
21
-    this.options.url = this.options.url.substitute({term: term});
22
-    console.log(this.options.url);
23
-  },
24
-
25
-  success: function(args, index){
26
-    if(!this.options.include_replies){
27
-      args[0] = args[0].filter(function(item, index, array){
28
-        return item.in_reply_to_screen_name == null;
29
-      });
30
-      if(args[0].length > this.options.count){ args[0].length = this.options.count; }
31
-    }
32
-    var data = args[0];
33
-
34
-    if (this.options.linkify) data.each(function(tweet){
35
-      tweet.text = this.linkify(tweet.text);
36
-    }, this);
37
-
38
-    if (data[0]) this.options.data.since_id = data[0].id; // keep subsequent calls newer
39
-
40
-    this.parent(args, index);
41
-  },
27
+getTwitterFeed(showTwitterFeed, twitter_user, tweet_count, show_replies);
42 28
 
43
-  linkify: function(text){
44
-    // modified from TwitterGitter by David Walsh (davidwalsh.name)
45
-    // courtesy of Jeremy Parrish (rrish.org)
46
-    return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
47
-    .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
48
-      .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
29
+function showTwitterFeed(tweets){
30
+  var timeline = document.getElementById('tweets');
31
+  timeline.innerHTML='';
32
+  for (t in tweets){
33
+    timeline.innerHTML+='<li>'+'<p>'+linkifyTweet(tweets[t].text)+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'">'+prettyDate(tweets[t].created_at)+'</a></p>'+'</li>';
49 34
   }
35
+}
36
+function linkifyTweet(text){
37
+  return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
38
+    .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
39
+    .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
40
+}
50 41
 
51
-});
52
-
42
+function prettyDate(date_str){
43
+  var time_formats = [
44
+    [60, 'just now', 1], // 60
45
+    [120, '1 min', '1 minute from now'], // 60*2
46
+    [3600, 'mins', 60], // 60*60, 60
47
+    [7200, '1 hour', '1 hour from now'], // 60*60*2
48
+    [86400, 'hours', 3600], // 60*60*24, 60*60
49
+    [172800, '1 day', 'tomorrow'], // 60*60*24*2
50
+    [2903040000, 'days', 86400], // 60*60*24*7, 60*60*24
51
+  ];
52
+  var time = ('' + date_str).replace(/-/g,"/").replace(/[TZ]/g," ").replace(/^\s\s*/, '').replace(/\s\s*$/, '');
53
+  if(time.substr(time.length-4,1)==".") time =time.substr(0,time.length-4);
54
+  var seconds = (new Date - new Date(time)) / 1000;
55
+  var token = 'ago', list_choice = 1;
56
+  if (seconds < 0) {
57
+    seconds = Math.abs(seconds);
58
+    token = 'from now';
59
+    list_choice = 2;
60
+  }
61
+  var i = 0, format;
62
+  while (format = time_formats[i++])
63
+    if (seconds < format[0]) {
64
+      if (typeof format[2] == 'string')
65
+        return format[list_choice];
66
+      else
67
+        return Math.floor(seconds / format[2]) + ' ' + format[1];
68
+    }
69
+    return time;
70
+};
... ...
@@ -1,35 +1,35 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3 3
   <url>
4
-      <loc>http://recursive-design.com/about.haml</loc>
5
-      <lastmod>2009-11-24</lastmod>
4
+      <loc>http://yoursite.com/about.haml</loc>
5
+      <lastmod>2011-05-14</lastmod>
6 6
   </url>
7 7
   <url>
8
-      <loc>http://recursive-design.com/atom.xml</loc>
9
-      <lastmod>2011-03-13</lastmod>
8
+      <loc>http://yoursite.com/atom.xml</loc>
9
+      <lastmod>2011-05-12</lastmod>
10 10
   </url>
11 11
   <url>
12
-      <loc>http://recursive-design.com/</loc>
13
-      <lastmod>2011-04-08</lastmod>
12
+      <loc>http://yoursite.com/</loc>
13
+      <lastmod>2011-05-12</lastmod>
14 14
   </url>
15 15
   <url>
16
-      <loc>http://recursive-design.com/test/syntax.html</loc>
16
+      <loc>http://yoursite.com/test/syntax.html</loc>
17 17
       <lastmod>2010-04-10</lastmod>
18 18
   </url>
19 19
   <url>
20
-      <loc>http://recursive-design.com/test/typography.haml</loc>
21
-      <lastmod>2009-11-24</lastmod>
20
+      <loc>http://yoursite.com/test/typography.haml</loc>
21
+      <lastmod>2011-05-14</lastmod>
22 22
   </url>
23 23
   <url>
24
-      <loc>http://recursive-design.com/2011/04/07/test-of-typography</loc>
24
+      <loc>http://yoursite.com/2011/04/07/test-of-typography</loc>
25 25
       <lastmod>2011-04-07</lastmod>
26 26
   </url>
27 27
   <url>
28
-      <loc>http://recursive-design.com/2011/03/14/test-post</loc>
28
+      <loc>http://yoursite.com/2011/03/14/test-post</loc>
29 29
       <lastmod>2011-03-14</lastmod>
30 30
   </url>
31 31
   <url>
32
-      <loc>http://recursive-design.com/2009/11/13/hello-world</loc>
32
+      <loc>http://yoursite.com/2009/11/13/hello-world</loc>
33 33
       <lastmod>2009-11-13</lastmod>
34 34
   </url>
35 35
 </urlset>
36 36
\ No newline at end of file
... ...
@@ -1,3 +1 @@
1
-@charset "UTF-8";html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}.group,.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div,#page,#page > div{*zoom:1}.group:after,.inner-wrap:after,.core-layout > div:after,body > header > div:after,body > nav > div:after,body > footer > div:after,#page:after,#page > div:after{content:"\0020";display:block;height:0;clear:both;overflow:hidden;visibility:hidden}.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div{position:relative;margin:0 auto;padding:0 40px;max-width:1440px}body > header,body > nav,body > footer{min-width:320px}#page{padding:0;max-width:1520px;margin:0 auto}#page > div{margin-right:320px}#page > div > aside{float:left;width:260px;margin:0 -100% 0 0;padding:30px}#main{float:left;width:100%;padding-top:25px;padding-bottom:25px}#main > *{padding-right:40px;padding-left:40px}@media (min-device-width:1024px) and (max-width:800px),
2
-       screen and (max-device-width:480px), (max-device-width:480px) and (orientation:landscape),
3
-       (min-device-width:481px) and (max-device-width:1024px) and (orientation:portrait){#page > div{margin-right:0}#page > div #main{float:none}#page > div > aside{margin:0;float:none}page > div > aside{float:none}body > header > div,body > nav > div,body > footer > div{padding:0 15px}#main > *{padding-left:15px;padding-right:15px}}@media only screen and (min-device-width: 320px) and (max-device-width: 480px){body > header > div,body > nav > div,body > footer > div{padding:0 10px}#main > *{padding-left:10px;padding-right:10px}#page > div{margin:none}#page > div > aside{float:none}}@font-face{font-family:"Adelle";src:url('/fonts/adellebasic_bold-webfont.eot');src:url('/fonts/adellebasic_bold-webfont.eot?iefix') format('eot'), url('/fonts/adellebasic_bold-webfont.woff') format('woff'), url('/fonts/adellebasic_bold-webfont.ttf') format('truetype'), url('/fonts/adellebasic_bold-webfont.svg#webfontKykxqSyz') format('svg')}.heading-font,body > header h1,h1,h2,h3,h4,h5,h6{font-family:Adelle, "Helvetica Neue", Helvetica, Arial, sans}body > header h1{font-size:3em;line-height:1.2em;margin-bottom:0.6667em}body{font-size:1em;line-height:1.5em;color:black;font-family:Georgia, Times, serif}article{margin-bottom:1.5em;padding-bottom:1.5em;padding-top:1em}article + article{border-top:3px solid #555555}article:last-child{border-bottom:none}article h2{padding-top:0.8em;border-top:3px double #dddddd}article .author,article time{text-transform:uppercase}article .updated{font-size:.8em;color:#555555}article time span{font-size:.7em;line-height:0;position:relative;top:-0.4em}article header p{padding:0 0 1.5em;font-size:.8em;color:#555555;font-family:Palatino, Times, "Times New Roman";top-width:1px}h1,h2,h3,h4,h5,h6{font-weight:normal;line-height:1em;text-rendering:optimizelegibility}h1{font-size:2.6em;margin-bottom:0.6667em}h2,section h1{font-size:1.8em;margin-bottom:0.6667em}h3,section h2,section section h1{font-size:1.6em;margin-bottom:0.875em}h4,section h3,section section h2,section section section h1{font-size:1.3em;margin-bottom:0.875em}h5,section h4,section section h3{font-size:1.1em;margin-bottom:0.75em}h6,section h5,section section h4,section section section h3{font-size:1em;margin-bottom:0.5em}p,blockquote,ul,ol{margin-bottom:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}ol ol{list-style-type:lower-alpha}ul ul,ol ol{margin-left:1.75em}li{margin-bottom:.5em}strong{font-weight:bold}em{font-style:italic}sup,sub{font-size:0.8em;position:relative;display:inline-block}sup{top:-0.5em}sub{bottom:-0.5em}q{font-style:italic}q:before{content:"\201C"}q:after{content:"\201D"}em,dfn{font-style:italic}strong,dfn{font-weight:bold}del,s{text-decoration:line-through}abbr,acronym{border-bottom:1px dotted;cursor:help}sub,sup{line-height:0}hr{margin-bottom:0.2em}small{font-size:.8em}big{font-size:1.2em}blockquote{font-style:italic;position:relative;margin-left:2em}blockquote > p:first-child:before{content:"\201C";position:absolute;top:0.1em;left:-0.7em;font-size:3em;color:#dddddd}blockquote > p:last-child:after{content:"\201D";position:relative;top:0.3em;line-height:0;font-size:2em;color:#dddddd}blockquote + p > cite{margin-left:2em;text-align:right}blockquote + p > cite:before{content:'– ';color:#555555}blockquote + p > cite a{font-style:italic}
1
+@charset "UTF-8";html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}a{color:#165c95}a:hover,a:focus{color:#03345c}a:visited{color:#471069}.group,.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div,body > nav + div,body > nav + div > div,body > nav{*zoom:1}.group:after,.inner-wrap:after,.core-layout > div:after,body > header > div:after,body > nav > div:after,body > footer > div:after,body > nav + div:after,body > nav + div > div:after,body > nav:after{content:"\0020";display:block;height:0;clear:both;overflow:hidden;visibility:hidden}body > header,body > nav,body > footer{min-width:320px}@media only screen and (min-width: 320px){body > header > div,body > nav > div,body > footer > div{padding-left:.5em;padding-right:.5em}body > header{font-size:.7em;padding:.5em 0}#articles{font-size:.9em;line-height:1.5em}#articles > article{padding:.5em}#articles + aside{display:none}body > nav > div > div{width:180px}body > nav > div > div .search{width:110px}}@media only screen and (min-width: 768px){.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div{padding:0 15px;position:relative;margin:0 auto;max-width:1440px}body > nav + div{padding:0;max-width:1470px;margin:0 auto}body > nav + div > div{margin-right:240px}body > nav > div > div{width:210px}body > nav > div > div .search{width:140px}#articles{float:left;width:100%;padding-top:25px;padding-bottom:25px}#articles > *{padding-right:15px;padding-left:15px}#articles > article{margin-bottom:1.5em;padding-bottom:1.5em;padding-right:15px;padding-left:15px}#articles + aside{display:block;float:left;width:210px;margin:0 -100% 0 0;padding:15px}body > header,body #articles{font-size:.95em}}@media only screen and (min-width: 992px){.inner-wrap,.core-layout > div,body > header > div,body > nav > div,body > footer > div{padding:0 40px;position:relative;margin:0 auto;max-width:1440px}body > nav + div{padding:0;max-width:1520px;margin:0 auto}body > nav + div > div{margin-right:320px}body > nav > div > div{width:250px}body > nav > div > div .search{width:180px}#articles{float:left;width:100%;padding-top:25px;padding-bottom:25px}#articles > *{padding-right:40px;padding-left:40px}#articles > article{margin-bottom:1.5em;padding-bottom:1.5em;padding-right:40px;padding-left:40px}#articles + aside{display:block;float:left;width:260px;margin:0 -100% 0 0;padding:30px}body > header,body #articles{font-size:1.05em}}@font-face{font-family:"Adelle";src:url('/fonts/adellebasic_bold-webfont.eot');src:url('/fonts/adellebasic_bold-webfont.eot?iefix') format('eot'), url('/fonts/adellebasic_bold-webfont.woff') format('woff'), url('/fonts/adellebasic_bold-webfont.ttf') format('truetype'), url('/fonts/adellebasic_bold-webfont.svg#webfontKykxqSyz') format('svg')}.heading-font,body > header h1,h1,h2,h3,h4,h5,h6{font-family:Adelle, "Helvetica Neue", Helvetica, Arial, sans}.sans-font,#articles + aside section{font-family:"Helvetica Neue", Helvetica, Arial, sans}body > header h1{font-size:3em;line-height:1.2em;margin-bottom:0.6667em}body{font-size:1em;line-height:1.5em;color:black;font-family:Georgia, Times, serif}article:last-child{border-bottom:none}article h2{padding-top:0.8em;border-top:3px double #dddddd}article .byline + time:before,article .byline + time + time:before{content:"\2022 ";padding:0 .3em 0 .2em;display:inline-block;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5}article time span{font-size:.7em;line-height:0;position:relative;top:-0.4em}article header p{padding:0 0 1.5em;font-size:.8em;color:#555555;font-family:Palatino, Times, "Times New Roman";margin-top:-1.4em}h1,h2,h3,h4,h5,h6{font-weight:normal;line-height:1em;text-rendering:optimizelegibility}h1{font-size:2.6em;margin-bottom:0.6667em}h2,section h1{font-size:1.8em;margin-bottom:0.6667em}h3,section h2,section section h1{font-size:1.6em;margin-bottom:0.875em}h4,section h3,section section h2,section section section h1{font-size:1.3em;margin-bottom:0.875em}h5,section h4,section section h3{font-size:1.1em;margin-bottom:0.75em}h6,section h5,section section h4,section section section h3{font-size:1em;margin-bottom:0.5em}p,blockquote,ul,ol{margin-bottom:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}ol ol{list-style-type:lower-alpha}ul ul,ol ol{margin-left:1.75em}li{margin-bottom:.5em}strong{font-weight:bold}em{font-style:italic}sup,sub{font-size:0.8em;position:relative;display:inline-block}sup{top:-0.5em}sub{bottom:-0.5em}q{font-style:italic}q:before{content:"\201C"}q:after{content:"\201D"}em,dfn{font-style:italic}strong,dfn{font-weight:bold}del,s{text-decoration:line-through}abbr,acronym{border-bottom:1px dotted;cursor:help}sub,sup{line-height:0}hr{margin-bottom:0.2em}small{font-size:.8em}big{font-size:1.2em}blockquote{font-style:italic;position:relative;margin-left:2em}blockquote > p:first-child:before{content:"\201C";position:absolute;top:0.1em;left:-0.7em;font-size:3em;color:#dddddd}blockquote > p:last-child:after{content:"\201D";position:relative;top:0.3em;line-height:0;font-size:2em;color:#dddddd}blockquote + p > cite{margin-left:2em;text-align:right}blockquote + p > cite:before{content:'– ';color:#555555}blockquote + p > cite a{font-style:italic}body > header{background-color:#323232;border-bottom:1px solid #181818}body > header h1{display:inline-block;margin:0}body > header h1 a,body > header h1 a:visited{font-weight:normal;color:#dddddd;text-decoration:none}body > nav{position:relative;z-index:1;background-color:#e8e8e8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fcfcfc), color-stop(30%, #f4f4f4), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);background-image:-moz-linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);background-image:-o-linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);background-image:linear-gradient(#fcfcfc,#f4f4f4 30%,#dddddd);border-top:1px solid white;border-bottom:1px solid #aaaaaa}body > nav > div > div{float:right;position:relative;padding:.45em 0 0 0}body > nav > div > div a{float:right;text-indent:-119988px;overflow:hidden;text-align:left;background-image:url('/images/rss.png?1305289158');background-repeat:no-repeat;background-position:50% 50%;width:24px;height:24px}body > nav > div > div form{margin:0;padding:0;-moz-background-clip:padding;-webkit-background-clip:padding;-o-background-clip:padding-box;-ms-background-clip:padding-box;-khtml-background-clip:padding-box;background-clip:padding-box}body > nav > div > div form input[type='text']{margin:0;-moz-border-radius:1em;-webkit-border-radius:1em;-o-border-radius:1em;-ms-border-radius:1em;-khtml-border-radius:1em;border-radius:1em;float:left;border:1px solid #ccc;color:#888;background:url('/images/search.png?1305288930') no-repeat 0.5em 0.4em #f6f6f6;padding:.4em .8em .1em 1.8em;line-height:1.35em;font-size:.85em}body > nav > div > div form input[type='text']:focus{color:#444;border-color:#80b1df;-moz-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;-webkit-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;-o-box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;box-shadow:#80b1df 0 0 4px, #80b1df 0 0 3px inset;background-color:#fff;outline:none}body > nav ul{position:relative;margin:0;padding:0;border:0;overflow:hidden;*zoom:1;margin:0 auto;padding:.5em 0}body > nav ul li{list-style-image:none;list-style-type:none;margin-left:0px;white-space:nowrap;display:inline;float:left;padding-left:4px;padding-right:4px}body > nav ul li:first-child,body > nav ul li.first{padding-left:0}body > nav ul li:last-child{padding-right:0}body > nav ul li.last{padding-right:0}body > nav ul li{padding:0 1em;margin:0;border-left:1px solid #cccccc;border-right:1px solid white}body > nav ul li:first-child{border-left:none;padding-left:0}body > nav ul li:last-child{border-right:0}body > nav ul li a{display:inline-block;color:#555555;line-height:150%;text-decoration:none}body > nav ul li a:hover{color:black}body{background-color:#f2f2f2}body > div > div{background-color:white;border-right:1px solid #d5d5d5}#articles + aside section{font-size:.8em;line-height:1.5em;margin-bottom:1.5em}#articles + aside ul{margin-bottom:0.5em}#articles + aside li{list-style:none;padding:.5em 0;margin:0;border-bottom:1px solid #ddd}#articles + aside li p:last-child{margin-bottom:0}article .title{text-decoration:none}article .title:hover{text-decoration:underline}article .entry{border-bottom:1px solid #eeeeee}article .entry:first-child{padding-top:0}article .meta{border-bottom:1px dashed #dddddd;text-transform:uppercase;color:#777777;padding:8px 0 5px;margin-bottom:1.5em;font-size:75%;letter-spacing:1px}article .footer{padding-top:15px}footer{background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #252525), color-stop(100%, #323232));background:-webkit-linear-gradient(#252525,#323232);background:-moz-linear-gradient(#252525,#323232);background:-o-linear-gradient(#252525,#323232);background:linear-gradient(#252525,#323232);padding:15px 0;position:relative;z-index:2}footer a{color:#dddddd}footer a:hover{color:white}
4 2
new file mode 100644
... ...
@@ -0,0 +1,17 @@
0
+@import "compass";
1
+
2
+
3
+@include global-reset;
4
+
5
+@include reset-html5;
6
+
7
+/* SASS mixins */
8
+//@import "library/typography";
9
+
10
+/* primary SASS */
11
+//@import "theme";
12
+//@import "typography";
13
+@import "themes/classic/style";
14
+
15
+/* specific SASS */
16
+//@import "partials";
0 17
new file mode 100644
... ...
@@ -0,0 +1,13 @@
0
+//@import "partials/shared";
1
+//@import "partials/syntax";
2
+//@import "partials/search";
3
+//@import "partials/sidebar";
4
+//@import "partials/twitter";
5
+
6
+/* layout partials */
7
+@import "partials/header";
8
+@import "partials/navigation";
9
+@import "partials/page";
10
+@import "partials/sidebar";
11
+@import "partials/blog";
12
+@import "partials/footer";
0 13
new file mode 100644
... ...
@@ -0,0 +1,4 @@
0
+@import "core/theme";
1
+@import "core/layout";
2
+@import "core/typography";
3
+@import "partials";
0 4
new file mode 100644
... ...
@@ -0,0 +1,94 @@
0
+a {
1
+  color: $link_color;
2
+  &:hover, &:focus {
3
+    color: saturate(darken($link_color, 15), 20); }
4
+  &:visited {
5
+    color: darken(adjust_hue($link_color, 70), 10);
6
+  }
7
+}
8
+
9
+$min-width: 320px;
10
+$max-width: 1440px;
11
+$default-border-radius: 4px;
12
+
13
+.group { @include pie-clearfix; }
14
+.core-layout { > div { @extend .inner-wrap; } }
15
+
16
+body {
17
+  > header, > nav, > footer {
18
+    @extend .core-layout;
19
+    min-width: $min-width;
20
+  }
21
+}
22
+
23
+
24
+@mixin media-layout($page-pad, $sidebar-width, $sidebar-pad) {
25
+  $side-nav: $sidebar-width - $page-pad - $sidebar-pad;
26
+
27
+  .inner-wrap {
28
+    padding: 0 $page-pad;
29
+    position: relative;
30
+    margin: 0 auto;
31
+    max-width: $max-width;
32
+    @extend .group;
33
+  }
34
+
35
+  body > nav + div {
36
+    @extend .group;
37
+    padding: 0;
38
+    max-width: $max-width + $page-pad*2;
39
+    margin: 0 auto;
40
+    > div {
41
+      @extend .group;
42
+      margin-right: $sidebar-width;
43
+    }
44
+  }
45
+  body > nav > div > div { width: $side-nav;
46
+    .search { width: $side-nav - 70px; }
47
+  }
48
+
49
+  #articles {
50
+    float: left;
51
+    width: 100%;
52
+    padding-top: 25px;
53
+    padding-bottom: 25px;
54
+    > * {
55
+      padding-right: $page-pad;
56
+      padding-left: $page-pad;
57
+    }
58
+    > article {
59
+      margin-bottom: 1.5em;
60
+      padding-bottom: 1.5em;
61
+      padding-right: $page-pad;
62
+      padding-left: $page-pad;
63
+    }
64
+    + aside {
65
+      display: block;
66
+      float: left;
67
+      width: $sidebar-width - $sidebar-pad*2;
68
+      margin: 0 -100% 0 0;
69
+      padding: $sidebar-pad;
70
+    }
71
+  }
72
+}
73
+
74
+@media only screen and (min-width: 320px) {
75
+  @import "../media/480";
76
+}
77
+
78
+@media only screen and (min-width: 768px) {
79
+  @include media-layout(15px, 240px, 15px);
80
+  @import "../media/768";
81
+}
82
+
83
+@media only screen and (min-width: 992px) {
84
+  @include media-layout(40px, 320px, 30px);
85
+  @import "../media/992";
86
+}
87
+
88
+
89
+//*{
90
+    //transition: width .5s;
91
+    //-moz-transition: width .5s;
92
+    //-webkit-transition: margin .5s;
93
+//}
0 94
new file mode 100644
... ...
@@ -0,0 +1,45 @@
0
+// Link Colors
1
+$link_color: lighten(#165b94, 0.3);
2
+
3
+// Main Section Colors
4
+$body_color: #333333;
5
+$light_text: #999999;
6
+$body_bg: #323232;
7
+
8
+$header_bg: #323232;
9
+$header_border: #181818;
10
+$title_color: #dddddd;
11
+
12
+$nav_color: #555555;
13
+$nav_color_hover: black;
14
+$nav_bg: #e8e8e8;
15
+$nav_border_top: white;
16
+$nav_border_bottom: #aaaaaa;
17
+$nav_border_left: #cccccc;
18
+$nav_border_right: white;
19
+
20
+$sidebar_bg: #f2f2f2;
21
+$sidebar_border: #d5d5d5;
22
+
23
+// Blog
24
+$article_border: #eeeeee;
25
+$main_bg: #fff;
26
+
27
+$footer_color: #999999;
28
+$footer_bg: #444444;
29
+
30
+// Form Colors
31
+$fieldset_bg: #ececec;
32
+$fieldset_border: #c3c3c3;
33
+
34
+$textinput_color: #333333;
35
+$textinput_bg: #f4f4f4;
36
+$textinput_bg_focus: #fefeee;
37
+
38
+$textinput_border_top: #aaaaaa;
39
+$textinput_border_bottom: #c6c6c6;
40
+$textinput_border_left: #c3c3c3;
41
+$textinput_border_right: #c3c3c3;
42
+$textinput_border_focus: #989898;
43
+
44
+$twitter_topic: #888888;
0 45
new file mode 100644
... ...
@@ -0,0 +1,154 @@
0
+$type-border: #ddd;
1
+$type-color-light: #555;
2
+$type-color: #000;
3
+$blockquote: $type-border !default; //darken($type-border, 20) !default;
4
+
5
+
6
+// Fonts
7
+@include font-face("Adelle", font-files("adellebasic_bold-webfont.woff", woff, "adellebasic_bold-webfont.ttf", truetype, "adellebasic_bold-webfont.svg#webfontKykxqSyz", svg), $eot: "adellebasic_bold-webfont.eot" );
8
+.heading-font { font-family: Adelle, "Helvetica Neue", Helvetica, Arial, sans; }
9
+.sans-font { font-family: "Helvetica Neue", Helvetica, Arial, sans; }
10
+
11
+body > header h1 {
12
+  font-size: 3em;
13
+  @extend .heading-font;
14
+  line-height: 1.2em;
15
+  margin-bottom: 0.6667em;
16
+}
17
+
18
+
19
+body {
20
+  font-size: 1em;
21
+  line-height: 1.5em;
22
+  color: $type-color;
23
+  font-family: Georgia, Times, serif;
24
+}
25
+
26
+article {
27
+  &:last-child { border-bottom: none; }
28
+  h2 {
29
+    padding-top: 0.8em;
30
+    border-top: 3px double $type-border;
31
+  }
32
+  .byline + time:before, .byline + time +time:before {
33
+    content: "\2022 ";
34
+    padding: 0 .3em 0 .2em;
35
+    display: inline-block;
36
+    @include opacity(.5);
37
+  }
38
+  time span {
39
+    font-size: .7em;
40
+    line-height: 0;
41
+    position: relative;
42
+    top: -.4em;
43
+  }
44
+  header {
45
+    p {
46
+      padding: 0 0 1.5em;
47
+      font-size: .8em;
48
+      color: $type-color-light;
49
+      font-family: Palatino, Times, "Times New Roman";
50
+      margin-top: -1.4em;
51
+    }
52
+  }
53
+}
54
+
55
+#{headings()}{
56
+  @extend .heading-font; font-weight: normal;
57
+  line-height: 1em;
58
+  text-rendering: optimizelegibility;
59
+}
60
+h1 {
61
+  font-size: 2.6em;
62
+  margin-bottom: 0.6667em;
63
+}
64
+h2, section h1 {
65
+  font-size: 1.8em;
66
+  margin-bottom: 0.6667em;
67
+}
68
+h3, section h2, section section h1 {
69
+  font-size: 1.6em;
70
+  margin-bottom: 0.875em;
71
+}
72
+h4, section h3, section section h2, section section section h1 {
73
+  font-size: 1.3em;
74
+  margin-bottom: 0.875em;
75
+}
76
+h5, section h4, section section h3 {
77
+  font-size: 1.1em;
78
+  margin-bottom: 0.75em;
79
+}
80
+h6, section h5, section section h4, section section section h3 {
81
+  font-size: 1em;
82
+  margin-bottom: 0.5em;
83
+}
84
+p, blockquote, ul, ol { margin-bottom: 1.5em; }
85
+
86
+ul{ list-style-type: disc; }
87
+
88
+ol{ list-style-type: decimal; ol { list-style-type: lower-alpha; } }
89
+ul ul, ol ol { margin-left: 1.75em; }
90
+
91
+li { margin-bottom: .5em; }
92
+
93
+strong { font-weight: bold; }
94
+
95
+em { font-style: italic; }
96
+
97
+sup, sub { font-size: 0.8em; position: relative;  display: inline-block; }
98
+sup { top: -.5em; }
99
+sub { bottom: -.5em; }
100
+
101
+q { font-style: italic;
102
+  &:before { content: "\201C"; }
103
+  &:after { content: "\201D"; }
104
+}
105
+
106
+em, dfn { font-style: italic; }
107
+
108
+strong, dfn { font-weight: bold; }
109
+
110
+del, s { text-decoration: line-through; }
111
+
112
+abbr, acronym { border-bottom: 1px dotted; cursor: help; }
113
+
114
+pre, code, tt { @extend .mono-font; }
115
+
116
+sub, sup { line-height: 0; }
117
+
118
+hr { margin-bottom: 0.2em; }
119
+
120
+small { font-size: .8em; }
121
+
122
+big { font-size: 1.2em; }
123
+
124
+blockquote {
125
+  $bq-margin: 2em;
126
+  font-style: italic;
127
+  position: relative;
128
+  margin-left: $bq-margin;
129
+  > p {
130
+    &:first-child:before {
131
+      content: "\201C";
132
+      position: absolute;
133
+      top: 0.1em;
134
+      left: -.7em;
135
+      font-size: 3em;
136
+      color: $blockquote;
137
+    }
138
+    &:last-child:after {
139
+      content: "\201D";
140
+      position: relative;
141
+      top: 0.3em;
142
+      line-height: 0;
143
+      font-size: 2em;
144
+      color: $blockquote;
145
+    }
146
+  }
147
+  + p > cite {
148
+    margin-left: $bq-margin;
149
+    text-align: right;
150
+    &:before { content: '– '; color: $type-color-light; }
151
+    a { font-style: italic; }
152
+  }
153
+}
0 154
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+body {
1
+  > header, > nav, > footer {
2
+    > div {
3
+      padding-left: .5em;
4
+      padding-right: .5em;
5
+    }
6
+  }
7
+  > header { font-size: .7em; padding: .5em 0; }
8
+}
9
+#articles { font-size: .9em; line-height: 1.5em;
10
+  > article { padding: .5em; }
11
+  + aside { display: none; }
12
+}
13
+body > nav > div > div { width: 180px;
14
+  .search { width: 110px; }
15
+}
0 16
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+body > header, body #articles {
1
+  font-size: .95em;
2
+}
3
+
4
+//body {
5
+  //> header, > nav, > footer {
6
+    //> div { padding: 0 15px; }
7
+  //}
8
+//}
9
+//#page > div {
10
+  //margin-right: 0;
11
+  //#main { float: none; }
12
+  //> aside { margin: 0; float: none; }
13
+//}
14
+//page > div > aside { float: none; }
15
+//#main > * { padding-left: 15px; padding-right: 15px; }
0 16
new file mode 100644
... ...
@@ -0,0 +1,3 @@
0
+body > header, body #articles {
1
+  font-size: 1.05em;
2
+}
0 3
new file mode 100644
... ...
@@ -0,0 +1,20 @@
0
+article {
1
+  .title {
2
+    text-decoration: none;
3
+    &:hover {
4
+      text-decoration: underline; } }
5
+  .entry {
6
+    border-bottom: 1px solid $article-border;
7
+    &:first-child {
8
+      padding-top: 0; } }
9
+  #disqus_thread { }
10
+  .meta {
11
+    border-bottom: 1px dashed #dddddd;
12
+    text-transform: uppercase;
13
+    color: #777777;
14
+    padding: 8px 0 5px;
15
+    margin-bottom: 1.5em;
16
+    font-size: 75%;
17
+    letter-spacing: 1px; }
18
+  .footer {
19
+    padding-top: 15px; } }
0 20
new file mode 100644
... ...
@@ -0,0 +1,11 @@
0
+footer {
1
+  @include background(linear-gradient(darken($body-bg, 5), $body-bg));
2
+  //color: $footer-color;
3
+  //border-top: 10px solid $footer-bg;
4
+  padding: 15px 0;
5
+  position: relative;
6
+  z-index: 2;
7
+  a {
8
+    color: #dddddd;
9
+    &:hover {
10
+      color: white; } } }
0 11
new file mode 100644
... ...
@@ -0,0 +1,13 @@
0
+body > header {
1
+  background-color: $header_bg;
2
+  border-bottom: 1px solid $header_border;
3
+  h1 {
4
+    display: inline-block;
5
+    margin: 0;
6
+    a, a:visited {
7
+      font-weight: normal;
8
+      color: $title_color;
9
+      text-decoration: none;
10
+    }
11
+  }
12
+}
0 13
new file mode 100644
... ...
@@ -0,0 +1,67 @@
0
+body > nav {
1
+  > div > div {
2
+    float: right;
3
+    position: relative;
4
+    padding: .45em 0 0 0;
5
+    a {
6
+      float: right;
7
+      @include replace-text-with-dimensions('rss.png');
8
+    }
9
+    form {
10
+      margin: 0; padding: 0;
11
+      @include background-clip(padding-box);
12
+      input[type='text']{
13
+        margin: 0;
14
+        @include border-radius(1em);
15
+        float: left;
16
+        border: 1px solid #ccc;
17
+        color: #888;
18
+        background: image-url('search.png') no-repeat .5em .4em #f6f6f6;
19
+        padding: .4em .8em .1em 1.8em;
20
+        line-height: 1.35em;
21
+        font-size: .85em;
22
+        &:focus {
23
+          color: #444;
24
+          border-color: #80b1df;
25
+          @include box-shadow(#80b1df 0 0 4px, #80b1df 0 0 3px inset);
26
+          background-color: #fff;
27
+          outline: none;
28
+        }
29
+      }
30
+    }
31
+  }
32
+  @extend .group;
33
+  position: relative;
34
+  z-index: 1;
35
+  background-color: $nav-bg;
36
+  @include background-image(linear-gradient(#fcfcfc, #f4f4f4 0.3, #dddddd));
37
+  border: {
38
+    top: 1px solid $nav-border-top;
39
+    bottom: 1px solid $nav-border-bottom; };
40
+  ul {
41
+    position: relative;
42
+    @include horizontal-list;
43
+    margin: 0 auto;
44
+    padding: .5em 0;
45
+  }
46
+  ul li {
47
+    padding: 0 1em;
48
+    margin: 0;
49
+    border-left: 1px solid $nav-border-left;
50
+    border-right: 1px solid $nav-border-right;
51
+    &:first-child {
52
+      border-left: none;
53
+      padding-left: 0; }
54
+    &:last-child {
55
+      border-right: 0; }
56
+    a {
57
+      display: inline-block;
58
+      color: $nav-color;
59
+      line-height: 150%;
60
+      text-decoration: none;
61
+      &:hover {
62
+        color: $nav-color-hover;
63
+      }
64
+    }
65
+  }
66
+}
0 67
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+body {
1
+  background-color: $sidebar_bg;
2
+}
3
+
4
+body > div > div {
5
+  background-color: $main_bg; border-right: 1px solid $sidebar_border;
6
+  //@include box-shadow(rgba(#000, .1) 0 0 18px);
7
+}
0 8
new file mode 100644
1 9
new file mode 100644
... ...
@@ -0,0 +1,12 @@
0
+#collapser {
1
+  display: block;
2
+  cursor: pointer;
3
+  background: #f8f8f8;
4
+  color: #888888;
5
+  padding: 5px 10px;
6
+  font-size: 10px;
7
+  line-height: 150%;
8
+  cursor: pointer;
9
+  position: absolute;
10
+  top: 0;
11
+  right: 0; }
0 12
new file mode 100644
... ...
@@ -0,0 +1,20 @@
0
+#articles + aside {
1
+  section {
2
+    @extend .sans-font;
3
+    font-size: .8em;
4
+    line-height: 1.5em;
5
+    margin-bottom: 1.5em;
6
+  }
7
+  ul {
8
+    margin-bottom: 0.5em;
9
+  }
10
+  li {
11
+    list-style: none;
12
+    padding: .5em 0;
13
+    margin: 0;
14
+    border-bottom: 1px solid #ddd;
15
+    p:last-child {
16
+      margin-bottom: 0;
17
+    }
18
+  }
19
+}
0 20
new file mode 100644
... ...
@@ -0,0 +1,279 @@
0
+.code_window {
1
+  @include border-top-radius(5px);
2
+  @include border-bottom-radius(2px);
3
+  background: #aaaaaa image-url("code_bg.png") top repeat-x;
4
+  position: relative;
5
+  margin: 0.3em 0 1.3em;
6
+  padding: 0 3px 3px;
7
+  font-size: 14px;
8
+  border: 1px solid #898989;
9
+  border-top-color: #cbcbcb;
10
+  border-left-color: #a5a5a5;
11
+  border-right-color: #a5a5a5;
12
+  em {
13
+    text-align: center;
14
+    text-shadow: #cccccc 1px 1px 1px;
15
+    display: block;
16
+    padding: 1px 0;
17
+    color: #333333;
18
+    font-style: normal; }
19
+  .highlight {
20
+    margin: 0; } }
21
+
22
+pre {
23
+  color: #cccccc;
24
+  font-size: 13px;
25
+  background: #222222;
26
+  line-height: 1.5em;
27
+  border: #aaaaaa 1px solid;
28
+  overflow-x: auto;
29
+  overflow-y: hidden;
30
+  padding: 25px 20px;
31
+  .lineno {
32
+    color: #888888;
33
+    background: #e3e3e3;
34
+    display: inline-block;
35
+    padding: 0 0 0 10px;
36
+    &:first-child {
37
+      padding-top: 15px;
38
+      display: inline-block; } } }
39
+
40
+.highlight {
41
+  position: relative;
42
+  .pre_expander {
43
+    font-size: 10px;
44
+    text-align: right;
45
+    padding: 4px 8px;
46
+    line-height: 150%;
47
+    position: absolute;
48
+    cursor: pointer;
49
+    top: 2px;
50
+    right: 2px;
51
+    @include border-bottom-left-radius;
52
+    display: block;
53
+    color: #777777;
54
+    background: #333333;
55
+    &:hover {
56
+      background: #444444;
57
+      color: #cccccc; } } }
58
+
59
+// based on: http://github.com/mojombo/tpw/raw/master/css/syntax.css
60
+.editor {
61
+  background: rgb(0, 22, 41);
62
+  line-height: 1.25; }
63
+
64
+pre.console {
65
+  background-color: black;
66
+  color: lighten(green, 25);
67
+  letter-spacing: 1px;
68
+  padding: 0.5em;
69
+  .prompt {
70
+    color: lighten(navy, 50);
71
+    &:before {
72
+      color: white;
73
+      content: "["; }
74
+    &:after {
75
+      color: white;
76
+      content: "]"; } }
77
+  .stdin {
78
+    font-weight: bold;
79
+    color: lighten(green, 75); } }
80
+
81
+.highlight {
82
+  padding: 0 0 0.1em;
83
+  color: white;
84
+  // Comment
85
+  .c {
86
+    color: #999988;
87
+    font-style: italic; }
88
+  // Error
89
+  .err {
90
+    color: #a61717;
91
+    background-color: #e3d2d2; }
92
+  // Name
93
+  .n {
94
+    color: white; }
95
+  // Keyword
96
+  .k {
97
+    color: rgb(255, 157, 0); }
98
+  // Paren
99
+  .p {
100
+    color: darken(#ff9d00, 33); }
101
+  // Operator
102
+  .o {
103
+    color: rgb(255, 157, 0); }
104
+  // Comment.Multiline
105
+  .cm {
106
+    color: #999988;
107
+    font-style: italic; }
108
+  // Comment.Preproc
109
+  .cp {
110
+    color: #999999; }
111
+  // Comment.Single
112
+  .c1 {
113
+    color: #999988;
114
+    font-style: italic; }
115
+  // Comment.Special
116
+  .cs {
117
+    color: #999999;
118
+    font-style: italic; }
119
+  // Generic.Deleted
120
+  .gd {
121
+    color: black;
122
+    background-color: #ffdddd; }
123
+  // Generic.Deleted.Specific
124
+  .gd .x {
125
+    color: black;
126
+    background-color: #ffaaaa; }
127
+  // Generic.Emph
128
+  .ge {
129
+    font-style: italic; }
130
+  // Generic.Error
131
+  .gr {
132
+    color: #aa0000; }
133
+  // Generic.Heading
134
+  .gh {
135
+    color: #999999; }
136
+  // Generic.Inserted
137
+  .gi {
138
+    color: black;
139
+    background-color: #ddffdd; }
140
+  // Generic.Inserted.Specific
141
+  .gi .x {
142
+    color: black;
143
+    background-color: #aaffaa; }
144
+  // Generic.Output
145
+  .go {
146
+    color: #888888; }
147
+  // Generic.Prompt
148
+  .gp {
149
+    color: #555555; }
150
+  // Generic.Strong
151
+  .gs {
152
+    color: white; }
153
+  // Generic.Subheading
154
+  .gu {
155
+    color: #aaaaaa; }
156
+  // Generic.Traceback
157
+  .gt {
158
+    color: #aa0000; }
159
+  // Keyword.Constant
160
+  .kc {
161
+    color: white; }
162
+  // Keyword.Declaration
163
+  .kd {
164
+    color: white; }
165
+  // Keyword.Pseudo
166
+  .kp {
167
+    color: white; }
168
+  // Keyword.Reserved
169
+  .kr {
170
+    color: white; }
171
+  // Keyword.Type
172
+  .kt {
173
+    color: #445588; }
174
+  // Literal.Number
175
+  .m {
176
+    color: rgb(255, 98, 140); }
177
+  // Literal.String
178
+  .s {
179
+    color: #dd1144; }
180
+  // Name.Attribute
181
+  .na {
182
+    color: teal; }
183
+  // Name.Builtin
184
+  .nb {
185
+    color: darken(rgb(128, 255, 187), 20); }
186
+  // Name.Class
187
+  .nc {
188
+    color: darken(rgb(128, 255, 187), 20); }
189
+  // Name.Constant
190
+  .no {
191
+    color: rgb(128, 255, 187); }
192
+  // Name.Entity
193
+  .ni {
194
+    color: purple; }
195
+  // Name.Exception
196
+  .ne {
197
+    color: rgb(255, 221, 0); }
198
+  // Name.Function
199
+  .nf {
200
+    color: rgb(255, 221, 0); }
201
+  // Name.Namespace
202
+  .nn {
203
+    color: #555555; }
204
+  // Name.Tag
205
+  .nt {
206
+    color: white; }
207
+  // Name.Variable
208
+  .nv {
209
+    color: teal; }
210
+  // Operator.Word
211
+  .ow {
212
+    color: white; }
213
+  // Text.Whitespace
214
+  .w {
215
+    color: #bbbbbb; }
216
+  // Literal.Number
217
+  .nl {
218
+    color: rgb(255, 98, 140); }
219
+  // Literal.Number.Float
220
+  .mf {
221
+    color: rgb(255, 98, 140); }
222
+  // Literal.Number.Hex
223
+  .mh {
224
+    color: rgb(255, 98, 140); }
225
+  // Literal.Number.Integer
226
+  .mi {
227
+    color: rgb(255, 98, 140); }
228
+  // Literal.Number.Oct
229
+  .mo {
230
+    color: rgb(255, 98, 140); }
231
+  // Literal.String.Backtick
232
+  .sb {
233
+    color: rgb(58, 217, 0); }
234
+  // Literal.String.Char
235
+  .sc {
236
+    color: rgb(58, 217, 0); }
237
+  // Literal.String.Doc
238
+  .sd {
239
+    color: rgb(58, 217, 0); }
240
+  // Literal.String.Double
241
+  .s2 {
242
+    color: rgb(58, 217, 0); }
243
+  // Literal.String.Escape
244
+  .se {
245
+    color: rgb(58, 217, 0); }
246
+  // Literal.String.Heredoc
247
+  .sh {
248
+    color: rgb(58, 217, 0); }
249
+  // Literal.String.Interpol
250
+  .si {
251
+    color: rgb(158, 255, 128); }
252
+  // Literal.String.Other
253
+  .sx {
254
+    color: rgb(58, 217, 0); }
255
+  // Literal.String.Regex
256
+  .sr {
257
+    color: #009926; }
258
+  // Literal.String.Single
259
+  .s1 {
260
+    color: rgb(58, 217, 0); }
261
+  // Literal.String.Symbol
262
+  .ss {
263
+    color: rgb(255, 98, 140); }
264
+  // Name.Builtin.Pseudo
265
+  .bp {
266
+    color: #999999; }
267
+  // Name.Variable.Class
268
+  .vc {
269
+    color: teal; }
270
+  // Name.Variable.Global
271
+  .vg {
272
+    color: teal; }
273
+  // Name.Variable.Instance
274
+  .vi {
275
+    color: teal; }
276
+  // Literal.Number.Integer.Long
277
+  .il {
278
+    color: rgb(255, 98, 140); } }
0 279
new file mode 100644
... ...
@@ -0,0 +1,15 @@
0
+#twitter {
1
+  p {
2
+    padding-bottom: 10px;
3
+    a.topic {
4
+      color: $twitter_topic; } }
5
+  .meta {
6
+    color: $light_text;
7
+    font-size: 80%;
8
+    display: block;
9
+    padding: 8px 0 0;
10
+    a {
11
+      color: inherit;
12
+      text-decoration: none;
13
+      &:hover {
14
+        text-decoration: underline; } } } }
... ...
@@ -1,18 +1,21 @@
1 1
 <header>
2
+  <h1><a href="{{ page.url }}">{{ page.title }}</a></h1>
2 3
   <p>
3
-    <time>{{ page.date | ordinalize }}</time>
4 4
     {% if site.author or site.author == page.author %}
5
-      <span class="byline"><em>by</em> <span class="author">{{ site.author }}</span></span>
5
+      <span class="byline author vcard">By <span class="fn">{{ site.author }}</span></span>
6 6
     {% elsif page.author %}
7
-      <span class="byline"><em>by</em> <span class="author">{{ page.author }}</span></span>
7
+      <span class="byline author vcard">By <span class="fn">{{ page.author }}</span></span>
8
+    {% endif %}
9
+    {% if page.date %}
10
+      <time datetime="{{ page.date | datetime }}" pubdate>{{ page.date | ordinalize }}</time>
11
+    {% endif %}
12
+    {% if page.updated %}
13
+      <time class="updated" datetime="{{ page.updated | datetime }}" pubdate>Updated {{ page.updated | ordinalize }}</time>
8 14
     {% endif %}
9 15
   </p>
10
-  <h1><a href="{{ page.url }}">{{ page.title }}</a></h1>
11 16
 </header>
12 17
 {% if index %}
13 18
 <div class="entry">{{ content | exerpt(content, page.url, 'Continue reading &raquo;') | smart_quotes }}</div>
14 19
 {% else %}
15 20
 <div class="entry">{{ content | smart_quotes }}</div>
16 21
 {% endif %}
17
-
18
-{% if page.updated %}<p class="updated"><em>updated</em> <time>{{ page.updated | ordinalize }}</time></p>{% endif %}
... ...
@@ -1,3 +1,3 @@
1
-<h4>On Delicious</h4>
1
+<h1>On Delicious</h1>
2 2
 <script type="text/javascript" src="http://feeds.delicious.com/v2/js/{{ site.delicious_user }}?title=&count={{ site.delicious_count }}&sort=date&extended"></script>
3 3
 <p><a href="http://delicious.com/{{ site.delicious_user }}">My Delicious Bookmarks &raquo;</a></p>
... ...
@@ -1,26 +1,25 @@
1 1
 <head>
2
+  <meta charset="utf-8">
3
+
2 4
   <title>{{page.title}} - {{site.title}}</title>
3
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5
+  <meta name="author" content="{{site.author}}">
4 6
   {% if page.description %}
5 7
     <meta name="description" content="{{page.description}}"/>
6 8
   {% endif %}
9
+
10
+  <!-- http://t.co/dKP3o1e -->
11
+  <meta name="HandheldFriendly" content="True">
12
+  <meta name="MobileOptimized" content="320">
13
+  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1">
14
+
7 15
   {% if page.keywords %}
8 16
     <meta name="keywords" content="{{page.keywords}}"/>
9 17
   {% endif %}
18
+
10 19
   <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
11
-  <script src="/javascripts/mootools-yui-compressed.js" type="text/javascript"></script>
12
-  <script src="/javascripts/mootools-more-1.3.1.1.js" type="text/javascript"></script>
13
-  <script src="/javascripts/octopress.js" type="text/javascript"></script>
14
-  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
15
-  <meta name="viewport" content="initial-scale=1.0 width=device-width">
16
-  {% if site.twitter_user %}
17
-    <script>
18
-      var twitter_user = "{{site.twitter_user}}";
19
-      var show_replies = {{site.show_replies}};
20
-      var tweet_count = {{site.tweet_count}};
21
-    </script>
22
-    <script src="/javascripts/twitter.js" type="text/javascript"></script>
23
-  {% endif %}
20
+  <!--<script src="/javascripts/octopress.js" type="text/javascript"></script>-->
21
+  <script src="javascripts/libs/modernizr-1.7.min.js"></script>
22
+  <script src="javascripts/libs/ios-viewport-scaling-bug-fix.js"></script>
24 23
   {% if site.google_analytics_tracking_id %}
25 24
     {% include google_analytics.html %}
26 25
   {% endif %}
... ...
@@ -1,10 +1 @@
1 1
 <h1><a href="/">{{ site.title }}</a></h1>
2
-{% if site.google_custom_search_id && site.google_custom_search_id %}
3
-  <div id="search">
4
-    <form action="http://www.google.com/cse" id="cse-search-box">
5
-      <input type="hidden" name="cx" value="{{ site.google_custom_search_id }}">
6
-      <input type="hidden" name="ie" value="UTF-8">
7
-      <input#q type="text" name="q">
8
-    </form>
9
-  </div>
10
-{% endif %}
... ...
@@ -1,5 +1,11 @@
1
+<div>
2
+  <a href="/atom.xml">Subscribe</a>
3
+  <form action="{{ site.simple_search }}" method="get">
4
+    <input class="search" type="text" name="q" results="0" placeholder="Search"/>
5
+    <input type="hidden" name="q" value="site:{{ site.url | search_url }}" />
6
+  </form>
7
+</div>
1 8
 <ul>
2 9
   <li><a href="/">Blog</a></li>
3 10
   <li><a href="/about/">About</a></li>
4
-  <li class="subscribe"><a href="/atom.xml">Subscribe</a></li>
5 11
 </ul>
... ...
@@ -1,3 +1,3 @@
1
-<h4>My Pinboard</h4>
1
+<h1>My Pinboard</h1>
2 2
 <ul id="pinboard_linkroll">Fetching linkroll...</ul>
3 3
 <p><a href="http://pinboard.in/u:{{ site.pinboard_user }}">My Pinboard Bookmarks &raquo;</a></p>
... ...
@@ -1,8 +1,10 @@
1
-<h4>About Me</h4>
2
-<p> Yo everybody! </p>
1
+<section>
2
+  <h1>About Me</h1>
3
+  <p>Hi, I'm Octopress!</p>
4
+</section>
3 5
 {% if site.recent_posts %}
4 6
 <section>
5
-  <h4>Recent Posts</h4>
7
+  <h1>Recent Posts</h1>
6 8
   <ul id="recent_posts">
7 9
     {% for post in site.posts limit: site.recent_posts %}
8 10
       <li class="post">
... ...
@@ -1,5 +1,13 @@
1
-<h4>On Twitter</h4>
1
+<h1>Latest Tweets</h1>
2 2
 <ul id="tweets">
3 3
   Status updating...
4 4
 </ul>
5
-<p>Follow <a href="http://twitter.com/#{page.twitter_user}">@{{ site.twitter_user }}</a></p>
5
+<p>Follow <a href="http://twitter.com/{{site.twitter_user}}">@{{ site.twitter_user }}</a></p>
6
+{% if site.twitter_user %}
7
+  <script>
8
+    var twitter_user = "{{site.twitter_user}}";
9
+    var show_replies = {{site.show_replies}};
10
+    var tweet_count = {{site.tweet_count}};
11
+  </script>
12
+  <script src="/javascripts/twitter.js" type="text/javascript"></script>
13
+{% endif %}
... ...
@@ -1,15 +1,26 @@
1 1
 <!DOCTYPE html>
2
-<html>
2
+<!--[if IEMobile 7 ]><html class="no-js iem7" manifest="default.appcache?v=1"><![endif]-->
3
+<!--[if lt IE 7 ]><html class="no-js ie6" lang="en"><![endif]-->
4
+<!--[if IE 7 ]><html class="no-js ie7" lang="en"><![endif]-->
5
+<!--[if IE 8 ]><html class="no-js ie8" lang="en"><![endif]-->
6
+<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" manifest="default.appcache?v=1" lang="en"><!--<![endif]-->
3 7
 {% include head.html %}
4
-<body id="{{ page.body_id }}">
8
+<body {% if page.body_id %} id="{{ page.body_id }}" {% endif %} {% if page.no_sidebar %} class="no-sidebar" {% endif %}>
5 9
   <header><div>{% include header.html %}</div></header>
6
-  <nav id="nav"><div>{% include navigation.html %}</div></nav>
7
-  <div id="page">
10
+  <nav><div>{% include navigation.html %}</div></nav>
11
+  <div>
8 12
     <div>
9
-      <div id="main"><article>{{ content }}</article></div>
10
-      <aside>{% include sidebar.html %}</aside>
13
+      <div id="articles">{{ content }}</div>
14
+      {% unless page.no_sidebar %}
15
+        <aside>{% include sidebar.html %}</aside>
16
+      {% endunless %}
11 17
     </div>
12 18
   </div>
13 19
   <footer><div>{% include footer.html %}</div></footer>
20
+  <!--[if (lt IE 9) & (!IEMobile)]>
21
+  <script src="javascripts/libs/DOMAssistantCompressed-2.8.js"></script>
22
+  <script src="javascripts/libs/selectivizr-1.0.1.js"></script>
23
+  <script src="javascripts/libs/respond.min.js"></script>
24
+  <![endif]-->
14 25
 </body>
15 26
 </html>
16 27
new file mode 100644
... ...
@@ -0,0 +1,10 @@
0
+---
1
+layout: default
2
+---
3
+
4
+<article>
5
+  {% include article.html %}
6
+  {% if site.disqus_short_name %}
7
+    <div id="disqus_thread">{% include disqus_thread.html %}</div>
8
+  {% endif %}
9
+</article>
... ...
@@ -1,13 +1,13 @@
1 1
 ---
2 2
 layout: default
3 3
 title: About Me
4
+layout: page
5
+date: May 14 2011
4 6
 ---
5 7
 / use the :mardown filter if you want to write pages with Markdown
6 8
 :markdown
7
-  # About Me
8
-
9 9
   Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum.
10 10
 
11 11
   Ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt.
12 12
 
13
-  Dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent.
14 13
\ No newline at end of file
14
+  Dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent.
15 15
Binary files a/source/images/rss.png and b/source/images/rss.png differ
16 16
new file mode 100644
17 17
Binary files /dev/null and b/source/images/search.png differ
18 18
deleted file mode 100644
19 19
Binary files a/source/images/search_bg.png and /dev/null differ
20 20
new file mode 100644
... ...
@@ -0,0 +1,4 @@
0
+// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8
1
+var DOMAssistant=function(){var j=function(){},o=window,g=o.$,k=o.$$,d=/*@cc_on!@*/false,i=d&&parseFloat(navigator.appVersion)<6,h,c={},q={},a=true,n=Array.prototype.slice,p={accesskey:"accessKey","class":"className",colspan:"colSpan","for":"htmlFor",maxlength:"maxLength",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",valign:"vAlign",cellspacing:"cellSpacing",cellpadding:"cellPadding"},m={rules:/\s*,\s*/g,selector:/^(\w+|\*)?(#[\w\u00C0-\uFFFF\-=$]+)?((\.[\w\u00C0-\uFFFF\-]+)*)?((\[\w+\s*([~^$*|])?(=\s*([-\w\u00C0-\uFFFF\s.]+|"[^"]*"|'[^']*'))?\]+)*)?((:\w[-\w]*(\((odd|even|\-?\d*n?([-+]\d+)?|[:#]?[-\w\u00C0-\uFFFF.]+|"[^"]*"|'[^']*'|((\w*\.[-\w\u00C0-\uFFFF]+)*)?|(\[#?\w+([~^$*|])?=?[-\w\u00C0-\uFFFF\s.'"]+\]+)|(:\w[-\w]*\(.+\)))\))?)*)?([+>~])?/,selectorSplit:/(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g,id:/^#([-\w\u00C0-\uFFFF=$]+)$/,tag:/^\w+/,relation:/^[+>~]$/,pseudo:/^:(\w[-\w]*)(\((.+)\))?$/,pseudos:/:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g,attribs:/\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g,classes:/\.([-\w\u00C0-\uFFFF]+)/g,quoted:/^["'](.*)["']$/,nth:/^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/,special:/(:check|:enabl|\bselect)ed\b/},f=function(t,u,r){var s=t.tagName;while((t=t[u+"Sibling"])&&(t.nodeType!==1||(r?t.tagName!==s:t.tagName==="!"))){}return t},b=function(r){return typeof r!=="undefined"},l=function(r){return(l=r[0].compareDocumentPosition?function(s){return s.sort(function(u,t){return 3-(u.compareDocumentPosition(t)&6)})}:d?function(s){return s.sort(function(u,t){return u.sourceIndex-t.sourceIndex})}:function(s){return s.sort(function(w,u){var v=document.createRange(),t=document.createRange();v.setStart(w,0);v.setEnd(w,0);t.setStart(u,0);t.setEnd(u,0);return v.compareBoundaryPoints(Range.START_TO_END,t)})})(r)};var e=function(s,r){s.push.apply(s,n.apply(r));return s};if(d){e=function(t,s){if(s.slice){return t.concat(s)}var r=0,u;while((u=s[r++])){t[t.length]=u}return t}}return{isIE:d,camel:p,def:b,allMethods:[],publicMethods:["prev","next","hasChild","cssSelect","elmsByClass","elmsByAttribute","elmsByTag"],harmonize:function(){o.$=g;o.$$=k;return this},initCore:function(){this.applyMethod.call(o,"$",this.$);this.applyMethod.call(o,"$$",this.$$);o.DOMAssistant=this;if(d){j=Array}j.prototype=[];(function(r){r.each=function(v,u){for(var t=0,s=this.length;t<s;t++){if(v.call(u||this[t],this[t],t,this)===false){break}}return this};r.first=function(){return b(this[0])?DOMAssistant.addMethodsToElm(this[0]):null};r.end=function(){return this.previousSet};r.indexOf=r.indexOf||function(u){for(var t=0,s=this.length;t<s;t++){if(t in this&&this[t]===u){return t}}return -1};r.map=function(w,v){var u=[];for(var t=0,s=this.length;t<s;t++){if(t in this){u[t]=w.call(v||this[t],this[t],t,this)}}return u};r.filter=function(w,v){var u=new j();u.previousSet=this;for(var t=0,s=this.length;t<s;t++){if(t in this&&w.call(v||this[t],this[t],t,this)){u.push(this[t])}}return u};r.every=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&!v.call(u||this[t],this[t],t,this)){return false}}return true};r.some=function(v,u){for(var t=0,s=this.length;t<s;t++){if(t in this&&v.call(u||this[t],this[t],t,this)){return true}}return false}})(j.prototype);this.attach(this)},addMethods:function(r,s){if(!b(this.allMethods[r])){this.allMethods[r]=s;this.addHTMLArrayPrototype(r,s)}},addMethodsToElm:function(s){for(var r in this.allMethods){if(b(this.allMethods[r])){this.applyMethod.call(s,r,this.allMethods[r])}}return s},applyMethod:function(s,r){if(typeof this[s]!=="function"){this[s]=r}},attach:function(t){var r=t.publicMethods;if(!b(r)){for(var v in t){if(v!=="init"&&b(t[v])){this.addMethods(v,t[v])}}}else{if(r.constructor===Array){for(var s=0,u;(u=r[s]);s++){this.addMethods(u,t[u])}}}if(typeof t.init==="function"){t.init()}},addHTMLArrayPrototype:function(r,s){j.prototype[r]=function(){var v=new j();v.previousSet=this;for(var u=0,t=this.length;u<t;u++){v.push(s.apply(DOMAssistant.$$(this[u]),arguments))}return v}},cleanUp:function(u){var s=u.all||u.getElementsByTagName("*");for(var r=0,t;(t=s[r++]);){if(t.hasData&&t.hasData()){if(t.removeEvent){t.removeEvent()}t.unstore()}}u.innerHTML=""},setCache:function(r){a=r},$:function(){var u=arguments[0];if(arguments.length===1&&(typeof u==="object"||(typeof u==="function"&&!!u.nodeName))){return DOMAssistant.$$(u)}var w=!!u?new j():null;for(var s=0,r,v;(r=arguments[s]);s++){if(typeof r==="string"){r=r.replace(/^[^#\(]*(#)/,"$1");if(m.id.test(r)){if((v=DOMAssistant.$$(r.substr(1),false))){w.push(v)}}else{var t=(document.all||document.getElementsByTagName("*")).length;w=(!document.querySelectorAll&&a&&q.rule&&q.rule===r&&q.doc===t)?q.elms:e(w,DOMAssistant.cssSelection.call(document,r));q={rule:r,elms:w,doc:t}}}}return w},$$:function(x,u){var w=(typeof x==="object"||typeof x==="function"&&!!x.nodeName)?x:document.getElementById(x),v=b(u)?u:true,t=function(z){var y=z.id;return typeof y!=="object"?y:z.attributes.id.nodeValue};if(typeof x==="string"&&w&&t(w)!==x){w=null;for(var r=0,s;(s=document.all[r]);r++){if(t(s)===x){w=s;break}}}if(w&&v&&!w.next){DOMAssistant.addMethodsToElm(w)}return w},prev:function(){return DOMAssistant.$$(f(this,"previous"))},next:function(){return DOMAssistant.$$(f(this,"next"))},hasChild:function(r){return this===document||this!==r&&(this.contains?this.contains(r):!!(this.compareDocumentPosition(r)&16))},getSequence:function(v){var w,u=2,s=-1,r=-1,t=m.nth.exec(v.replace(/^0n\+/,"").replace(/^2n$/,"even").replace(/^2n+1$/,"odd"));if(!t){return null}if(t[2]){w=(t[2]==="odd")?1:2;r=(w===1)?1:0}else{if(t[3]){w=s=parseInt(t[3],10);u=0}else{if(t[4]){u=t[6]?parseInt(t[6],10):1;w=t[7]?parseInt(t[7],10):0;while(w<1){w+=u}r=(w>=u)?(w-u)%u:w}else{if(t[8]){u=t[10]?parseInt(t[10],10):1;w=s=parseInt(t[11],10);while(w>u){w-=u}r=(s>=u)?(s-u)%u:s}}}}return{start:w,add:u,max:s,modVal:r}},cssByDOM:function(v){var aU,I,D,N,av,x,ah,A,K,w,aq,aN,y,aI,at,aB=new j(),aR=aB.indexOf,ap=[],aG=[],aK=v.replace(m.rules,",").split(","),aF={};function aQ(s){s=s||ap;for(var r=s.length;r--;){s[r].added=null;s[r].removeAttribute("added")}}function C(){for(var r=aU.length;r--;){aU[r].childElms=null}}function am(t,r){for(var u=0,aX;(aX=t[u]);u++){var aW=false;for(var s=0,aV;(aV=r[s]);s++){if(aV===aX){aW=true;r.splice(s,1);break}}if(aW){t.splice(u--,1)}}return t}function E(s,r){return(d||m.special.test(r))?s[p[r.toLowerCase()]||r]:s.getAttribute(r,2)}function P(r,s){r=r?r.replace(m.quoted,"$1").replace(/(\.|\[|\])/g,"\\$1"):null;return{"^":"^"+r,"$":r+"$","*":r,"|":"^"+r+"(\\-\\w+)*$","~":"\\b"+r+"\\b"}[s]||(r!==null?"^"+r+"$":r)}function W(r){return(r||this).tagName!=="!"}function S(r,s){return i?(r==="*"?s.all:s.all.tags(r)):s.getElementsByTagName(r)}function aL(r,s){r=r||"*";s=s||document;return(s===document||s.lastModified)?c[r]||(c[r]=S(r,document)):S(r,s)}function ar(aX,bf,u){aU=[];var aV=bf.split("-"),a0=[],a5=0,be=/\-of\-type$/.test(bf),a4,aZ={first:function(bg){return !f(bg,"previous",be)},last:function(bg){return !f(bg,"next",be)},empty:function(bg){return !bg.firstChild},enabled:function(bg){return !bg.disabled&&bg.type!=="hidden"},disabled:function(bg){return bg.disabled},checked:function(bg){return bg.checked},contains:function(bg){return(bg.innerText||bg.textContent||"").indexOf(u.replace(m.quoted,"$1"))>-1},other:function(bg){return E(bg,bf)===u}};function t(bg){while((A=aX[a5++])){if(W(A)&&aZ[bg](A)){a0[a0.length]=A}}return a0}var bb=aV[0]||null;if(bb&&aZ[bb]){return t(bb)}switch(bb){case"only":var a1,aW;while((A=aX[a5++])){K=A.parentNode;var a6=A.nodeName;if(K!==a1||a6!==aW){if(aZ.first(A)&&aZ.last(A)){a0[a0.length]=A}a1=K;aW=a6}}break;case"nth":if(u==="n"){a0=aX}else{var bd=(aV[1]==="last")?["lastChild","previousSibling"]:["firstChild","nextSibling"];aI=DOMAssistant.getSequence(u);if(aI){while((A=aX[a5++])){K=A.parentNode;K.childElms=K.childElms||{};var a7=A.nodeName;if(!K.childElms[a7]){var ba=0;aN=aI.start;y=K[bd[0]];while(y&&(aI.max<0||aN<=aI.max)){var bc=y.nodeName;if((be&&bc===a7)||(!be&&y.nodeType===1&&bc!=="!")){if(++ba===aN){if(bc===a7){a0[a0.length]=y}aN+=aI.add}}y=y[bd[1]]}if(at){h++}K.childElms[a7]=true;aU[aU.length]=K}}C()}}break;case"target":var s=document.location.hash.slice(1);if(s){while((A=aX[a5++])){if(E(A,"name")===s||E(A,"id")===s){a0[a0.length]=A;break}}}break;case"not":if((a4=m.pseudo.exec(u))){a0=am(aX,ar(aX,a4[1]?a4[1].toLowerCase():null,a4[3]||null))}else{for(var a8 in m){if(m[a8].lastIndex){m[a8].lastIndex=0}}u=u.replace(m.id,"[id=$1]");var a3=m.tag.exec(u);var aY=m.classes.exec(u);var a2=m.attribs.exec(u);var r=new RegExp(a2?P(a2[4],a2[2]):"(^|\\s)"+(a3?a3[0]:aY?aY[1]:"")+"(\\s|$)","i");while((w=aX[a5++])){aq=null;if(a3&&!r.test(w.nodeName)||aY&&!r.test(w.className)){aq=w}else{if(a2){var a9=E(w,a2[1]);if(!b(a9)||a9===false||typeof a9==="string"&&!r.test(a9)){aq=w}}}if(aq&&!aq.added){aq.added=true;a0[a0.length]=aq}}}break;default:return t("other")}return a0}function Z(aV,t){var r=0,u=aV,aW;while((aW=t[r++])){if(!u.length||u.indexOf(aW)<0){aV.push(aW)}}return aV}h=-1;for(var ak=0,aJ=[];(I=aK[ak]);ak++){if(!(D=I.match(m.selectorSplit))||ak&&aR.call(aK.slice(0,ak),I)>-1){continue}ap=[this];for(var ai=0,G;(G=D[ai]);ai++){aG=[];if((N=m.relation.exec(G))){var an=null,aS=D[ai+1];if((av=m.tag.exec(aS))){av=av[0];x=new RegExp("(^|\\s)"+av+"(\\s|$)","i")}else{if(m.id.test(aS)){an=DOMAssistant.$(aS)||null}}for(var ag=0,M;(M=ap[ag]);ag++){switch(N[0]){case">":var aD=an||aL(av,M);for(var ae=0,ay;(ay=aD[ae]);ae++){if(ay.parentNode===M){aG[aG.length]=ay}}break;case"+":if((M=f(M,"next"))){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){aG[aG.length]=M}}break;case"~":while((M=M.nextSibling)&&!M.added){if((an&&an[0]===M)||(!an&&(!av||x.test(M.nodeName)))){M.added=true;aG[aG.length]=M}}break}}ap=aG;aQ();G=D[++ai];if(/^\w+$/.test(G)||m.id.test(G)){continue}ap.skipTag=true}var au=m.selector.exec(G);aF={tag:au[1]?au[1]:"*",id:au[2],allClasses:au[3],allAttr:au[5],allPseudos:au[10]};at=(aF.tag==="*");if(aF.id){var O=0,al=document.getElementById(aF.id.slice(1));if(al){while(ap[O]&&!DOMAssistant.hasChild.call(ap[O],al)){O++}aG=(O<ap.length&&(at||aF.tag===al.tagName.toLowerCase()))?[al]:[]}ap=aG}else{if(aF.tag&&!ap.skipTag){if(ai===0&&!aG.length&&ap.length===1){ap=aG=e([],aL(aF.tag,ap[0]))}else{for(var ad=0,aO=ap.length,az,aw;ad<aO;ad++){az=aL(aF.tag,ap[ad]);for(var aa=0;(aw=az[aa]);aa++){if(!aw.added){aw.added=true;aG[aG.length]=aw}}}ap=aG;aQ()}}}if(!aG.length){break}ap.skipTag=false;if(aF.allClasses){var Y=0,ab=[],J=aF.allClasses.split(".").slice(1);while((ah=ap[Y++])){var af=true,ax=ah.className;if(ax&&ax.length){ax=ax.split(" ");for(var X=J.length;X--;){if(ax.indexOf(J[X])<0){af=false;break}}if(af){ab[ab.length]=ah}}}ap=aG=ab}if(aF.allAttr){var B,T=0,aC=[],ac=[],aH=aF.allAttr.match(m.attribs);for(var H=/^\[(selected|readonly)(\s*=.+)?\]$/,V=0,z=aH.length,U,aP;V<z;V++){m.attribs.lastIndex=0;U=m.attribs.exec(aH[V].replace(H,"[$1]"));aP=P(U[4],U[2]||null);aC[V]=[(aP?new RegExp(aP):null),U[1]]}while((ah=aG[T++])){for(var R=0,aE=aC.length;R<aE;R++){var aA=aC[R][0],aj=E(ah,aC[R][1]);B=true;if(!aA&&aj===true){continue}if((!aA&&(!aj||typeof aj!=="string"||!aj.length))||(!!aA&&!aA.test(aj))){B=false;break}}if(B){ac[ac.length]=ah}}ap=aG=ac}if(aF.allPseudos){var F=aF.allPseudos.match(m.pseudos);for(var Q=0,ao=F.length;Q<ao;Q++){m.pseudos.lastIndex=0;var aT=m.pseudos.exec(F[Q]);var L=aT[1]?aT[1].toLowerCase():null;var aM=aT[3]||null;aG=ar(aG,L,aM);aQ(aG)}ap=aG}}aB=((aJ.length&&(at||aR.call(aJ,aF.tag)>=0||aR.call(aJ,"*")>=0))?Z:e)(aB,ap);aJ.push(aF.tag);if(d&&at){aB=aB.filter(W)}}return((aB.length>1&&aK.length>1)||h>0)?l(aB):aB},cssByXpath:function(s){var t={xhtml:"http://www.w3.org/1999/xhtml"},u=(document.documentElement.namespaceURI===t.xhtml)?"xhtml:":"",r=function v(w){return t[w]||null};DOMAssistant.cssByXpath=function(N){var R,T,J,z,A,E,B=new j(),C=N.replace(m.rules,",").split(",");function M(W){var X=W?"[":"",V=W?"]":"";return function(Y,ac,ab,aa,Z){Z=(Z||"").replace(m.quoted,"$1");if(ac===Z&&ac==="readonly"){aa=null}return X+({"^":"starts-with(@"+ac+', "'+Z+'")',"$":"substring(@"+ac+", (string-length(@"+ac+") - "+(Z.length-1)+"), "+Z.length+') = "'+Z+'"',"*":'contains(concat(" ", @'+ac+', " "), "'+Z+'")',"|":"@"+ac+'="'+Z+'" or starts-with(@'+ac+', "'+Z+'-")',"~":'contains(concat(" ", @'+ac+', " "), " '+Z+' ")'}[ab]||("@"+ac+(aa?'="'+Z+'"':"")))+V}}function P(W,Y,X){W=/\-child$/.test(Y)?"*":W;var aa=Y.split("-"),V=((aa[1]==="last")?"(count(following-sibling::":"(count(preceding-sibling::")+W+") + 1)",Z,ab;switch(aa[0]){case"nth":return(X!=="n"&&(E=DOMAssistant.getSequence(X)))?((E.start===E.max)?V+" = "+E.start:V+" mod "+E.add+" = "+E.modVal+((E.start>1)?" and "+V+" >= "+E.start:"")+((E.max>0)?" and "+V+" <= "+E.max:"")):"";case"not":return"not("+((Z=m.pseudo.exec(X))?P(W,Z[1]?Z[1].toLowerCase():null,Z[3]||null):X.replace(m.id,"[id=$1]").replace(m.tag,"self::$0").replace(m.classes,'contains(concat(" ", @class, " "), " $1 ")').replace(m.attribs,M()))+")";case"first":return"not(preceding-sibling::"+W+")";case"last":return"not(following-sibling::"+W+")";case"only":return"not(preceding-sibling::"+W+" or following-sibling::"+W+")";case"empty":return"not(child::*) and not(text())";case"contains":return'contains(., "'+X.replace(m.quoted,"$1")+'")';case"enabled":return'not(@disabled) and not(@type="hidden")';case"disabled":return"@disabled";case"target":return'@name="'+(ab=document.location.hash.slice(1))+'" or @id="'+ab+'"';default:return"@"+Y+'="'+X+'"'}}for(var O=0;(R=C[O]);O++){if(!(T=R.match(m.selectorSplit))||O&&B.indexOf.call(C.slice(0,O),R)>-1){continue}J=J?J+" | .":".";for(var L=0,Q=T.length;L<Q;L++){z=m.selector.exec(T[L]);A={tag:u+(z[1]?z[1]:"*"),id:z[2],allClasses:z[3],allAttr:z[5],allPseudos:z[10],tagRelation:z[20]};J+=(A.tagRelation?({">":"/","+":"/following-sibling::*[1]/self::","~":"/following-sibling::"}[A.tagRelation]||""):((L>0&&m.relation.test(T[L-1]))?A.tag:("//"+A.tag)))+(A.id||"").replace(m.id,'[@id = "$1"]')+(A.allClasses||"").replace(m.classes,'[contains(concat(" ", @class, " "), " $1 ")]')+(A.allAttr||"").replace(m.attribs,M(true));if(A.allPseudos){var D=A.allPseudos.match(m.pseudos);for(var K=0,x=D.length;K<x;K++){m.pseudos.lastIndex=0;var y=m.pseudos.exec(D[K]),U=y[1]?y[1].toLowerCase():null,w=y[3]||null,G=P(A.tag,U,w);if(G.length){J+="["+G+"]"}}}}}try{var I=document.evaluate(J,this,r,7,null),H,F=0;while((H=I.snapshotItem(F++))){B.push(H)}}catch(S){}return B};return DOMAssistant.cssByXpath.call(this,s)},cssSelection:function(s){if(!s){return null}var r=m.special.test(s);try{if(document.querySelectorAll&&!r){return e(new j(),this.querySelectorAll(s))}}catch(t){}return((document.evaluate&&!r&&!/-of-type/.test(s))?DOMAssistant.cssByXpath:DOMAssistant.cssByDOM).call(this,s)},cssSelect:function(r){return DOMAssistant.cssSelection.call(this,r)},elmsByClass:function(t,r){var s=(r||"")+"."+t;return DOMAssistant.cssSelection.call(this,s)},elmsByAttribute:function(s,t,r,v){var u=(r||"")+"["+s+((t&&t!=="*")?((v||"")+"="+t+"]"):"]");return DOMAssistant.cssSelection.call(this,u)},elmsByTag:function(r){return DOMAssistant.cssSelection.call(this,r)}}}();DOMAssistant.initCore();DOMAssistant.Storage=function(){var c=1,a=[],b="_da"+ +new Date();return{hasData:function(){var d=this[b];return !!d&&!!a[d]},retrieve:function(d){if(!DOMAssistant.def(d)){return this[b]||(this[b]=c++)}if(!this[b]||!a[this[b]]){return}return a[this[b]][d]},store:function(f,g){var e=this[b]||(this[b]=c++);a[e]=a[e]||{};if(typeof f==="object"){for(var d in f){if(typeof d==="string"){a[e][d]=f[d]}}}else{a[e][f]=g}return this},unstore:function(e){var d=this[b]||(this[b]=c++);if(a[d]){if(DOMAssistant.def(e)){delete a[d][e]}else{a[d]=null}}return this}}}();DOMAssistant.attach(DOMAssistant.Storage);DOMAssistant.AJAX=function(){var globalXMLHttp=null,readyState=0,status=-1,statusText="",requestPool=[],createAjaxObj=function(url,method,callback,addToContent){var params=null;if(/POST/i.test(method)){url=url.split("?");params=url[1];url=url[0]}return{url:url,method:method,callback:callback,params:params,headers:{},responseType:"text",addToContent:addToContent||false}};return{publicMethods:["ajax","get","post","load"],initRequest:function(){var XMLHttp=null;if(!!window.XMLHttpRequest&&!DOMAssistant.isIE){XMLHttp=new XMLHttpRequest();DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new XMLHttpRequest()}}else{if(!!window.ActiveXObject){var XMLHttpMS=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0;i<XMLHttpMS.length;i++){try{XMLHttp=new window.ActiveXObject(XMLHttpMS[i]);DOMAssistant.AJAX.initRequest=function(){return requestPool.length?requestPool.pop():new window.ActiveXObject(XMLHttpMS[i])};break}catch(e){XMLHttp=null}}}}return XMLHttp},ajax:function(ajaxObj){if(!ajaxObj.noParse&&ajaxObj.url&&/\?/.test(ajaxObj.url)&&ajaxObj.method&&/POST/i.test(ajaxObj.method)){var url=ajaxObj.url.split("?");ajaxObj.url=url[0];ajaxObj.params=url[1]+((url[1].length>0&&ajaxObj.params)?("&"+ajaxObj.params):"")}return DOMAssistant.AJAX.makeCall.call(this,ajaxObj)},get:function(url,callback,addToContent){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"GET",callback,addToContent))},post:function(url,callback){return DOMAssistant.AJAX.makeCall.call(this,createAjaxObj(url,"POST",callback))},load:function(url,addToContent){this.get(url,DOMAssistant.AJAX.replaceWithAJAXContent,addToContent)},makeCall:function(ajaxObj){var XMLHttp=DOMAssistant.AJAX.initRequest();if(XMLHttp){globalXMLHttp=XMLHttp;(function(elm){var url=ajaxObj.url,method=ajaxObj.method||"GET",callback=ajaxObj.callback,params=ajaxObj.params,headers=ajaxObj.headers,responseType=ajaxObj.responseType||"text",addToContent=ajaxObj.addToContent,timeout=ajaxObj.timeout||null,ex=ajaxObj.exception,timeoutId=null,done=false;XMLHttp.open(method,url,true);XMLHttp.setRequestHeader("AJAX","true");XMLHttp.setRequestHeader("X-Requested-With","XMLHttpRequest");if(method==="POST"){XMLHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");XMLHttp.setRequestHeader("Content-length",params?params.length:0);if(XMLHttp.overrideMimeType){XMLHttp.setRequestHeader("Connection","close")}}if(responseType==="json"){XMLHttp.setRequestHeader("Accept","application/json, text/javascript, */*")}for(var i in headers){if(typeof i==="string"){XMLHttp.setRequestHeader(i,headers[i])}}if(typeof callback==="function"){XMLHttp.onreadystatechange=function(){try{if(XMLHttp.readyState===4&&!done){window.clearTimeout(timeoutId);done=true;status=XMLHttp.status;statusText=XMLHttp.statusText;readyState=4;if((status||location.protocol!=="file:")&&(status<200||status>=300)){throw new Error(statusText)}var response=/xml/i.test(responseType)?XMLHttp.responseXML:XMLHttp.responseText;if(/json/i.test(responseType)&&!!response){response=(typeof JSON==="object"&&typeof JSON.parse==="function")?JSON.parse(response):eval("("+response+")")}globalXMLHttp=null;XMLHttp.onreadystatechange=function(){};requestPool.push(XMLHttp);callback.call(elm,response,addToContent)}}catch(e){globalXMLHttp=XMLHttp=null;if(typeof ex==="function"){ex.call(elm,e);ex=null}}}}XMLHttp.send(params);if(timeout){timeoutId=window.setTimeout(function(){if(!done){XMLHttp.abort();done=true;if(typeof ex==="function"){readyState=0;status=408;statusText="Request timeout";globalXMLHttp=XMLHttp=null;ex.call(elm,new Error(statusText));ex=null}}},timeout)}})(this)}return this},replaceWithAJAXContent:function(content,add){if(add){this.innerHTML+=content}else{DOMAssistant.cleanUp(this);this.innerHTML=content}},getReadyState:function(){return(globalXMLHttp&&DOMAssistant.def(globalXMLHttp.readyState))?globalXMLHttp.readyState:readyState},getStatus:function(){return status},getStatusText:function(){return statusText}}}();DOMAssistant.attach(DOMAssistant.AJAX);DOMAssistant.CSS=function(){var a=DOMAssistant.def,b={display:true};return{addClass:function(d){if(!this.hasClass(d)){var c=this.className;this.className=c+(c.length?" ":"")+d}return this},removeClass:function(c){return this.replaceClass(c)},replaceClass:function(d,e){var c=new RegExp(("(^|\\s)"+d+"(\\s|$)"),"i");this.className=this.className.replace(c,function(f,h,g){return e?(h+e+g):" "}).replace(/^\s+|\s+$/g,"");return this},hasClass:function(c){return(" "+this.className+" ").indexOf(" "+c+" ")>-1},setStyle:function(f,g){var e=this.style;if("filters" in this&&(typeof f==="string"?/opacity/i.test(f):a(f.opacity))){e.zoom=1;e.filter=(e.filter||"").replace(/alpha\([^)]*\)/,"")+"alpha(opacity="+(a(f.opacity)?f.opacity:g)*100+")"}if(a(e.cssText)){var c=e.cssText;if(typeof f==="object"){for(var d in f){if(typeof d==="string"){if(b[d]){e[d]=f[d]}c+=";"+d+":"+f[d]}}}else{if(b[f]){e[f]=g}c+=";"+f+":"+g}e.cssText=c}return this},getStyle:function(c){var e="",d;c=c.toLowerCase();if(document.defaultView&&document.defaultView.getComputedStyle){e=document.defaultView.getComputedStyle(this,"").getPropertyValue(c)}else{if(this.currentStyle){if("filters" in this&&c==="opacity"){e=(d=this.style.filter||this.currentStyle.filter)&&d.indexOf("opacity=")>=0?parseFloat(d.match(/opacity=([^)]*)/)[1])/100:1}else{c=c.replace(/^float$/,"styleFloat").replace(/\-(\w)/g,function(f,g){return g.toUpperCase()});e=this.currentStyle[c]}if(e==="auto"&&/^(width|height)$/.test(c)&&this.currentStyle.display!=="none"){e=this["offset"+c.charAt(0).toUpperCase()+c.substr(1)]+"px"}}}return e}}}();DOMAssistant.attach(DOMAssistant.CSS);DOMAssistant.Content=function(){var a=DOMAssistant.$$;return{init:function(){DOMAssistant.setCache(false)},create:function(d,c,b,e){var f=a(document.createElement(d));if(c){f=f.setAttributes(c)}if(DOMAssistant.def(e)){f.addContent(e)}if(b){this.appendChild(f)}return f},setAttributes:function(b){if(DOMAssistant.isIE){var c=function(g,e,f){var d=e.toLowerCase();switch(d){case"name":case"type":case"multiple":return a(document.createElement(g.outerHTML.replace(new RegExp(d+"(=[a-zA-Z]+)?")," ").replace(">"," "+d+"="+f+">")));case"style":g.style.cssText=f;return g;default:g[DOMAssistant.camel[d]||e]=f;return g}};DOMAssistant.Content.setAttributes=function(d){var h=this;var g=this.parentNode;for(var f in d){if(typeof d[f]==="string"||typeof d[f]==="number"){var e=c(h,f,d[f]);if(g&&/(name|type)/i.test(f)){if(h.innerHTML){e.innerHTML=h.innerHTML}g.replaceChild(e,h)}h=e}}return h}}else{DOMAssistant.Content.setAttributes=function(d){for(var e in d){if(/class/i.test(e)){this.className=d[e]}else{this.setAttribute(e,d[e])}}return this}}return DOMAssistant.Content.setAttributes.call(this,b)},addContent:function(f){var d=typeof f;if(d==="string"||d==="number"){if(!this.firstChild){this.innerHTML=f}else{var c=document.createElement("div");c.innerHTML=f;for(var b=c.childNodes.length-1,e=null;b>=0;b--){e=this.insertBefore(c.childNodes[b],e)}}}else{if(d==="object"||(d==="function"&&!!f.nodeName)){this.appendChild(f)}}return this},replaceContent:function(b){DOMAssistant.cleanUp(this);return this.addContent(b)},replace:function(g,b){var f=typeof g;if(f==="string"||f==="number"){var e=this.parentNode;var d=DOMAssistant.Content.create.call(e,"div",null,false,g);for(var c=d.childNodes.length;c--;){e.insertBefore(d.childNodes[c],this.nextSibling)}g=this.nextSibling;e.removeChild(this)}else{if(f==="object"||(f==="function"&&!!g.nodeName)){this.parentNode.replaceChild(g,this)}}return b?g:this},remove:function(){DOMAssistant.cleanUp(this);if(this.hasData()){if(this.removeEvent){this.removeEvent()}this.unstore()}this.parentNode.removeChild(this);return null}}}();DOMAssistant.attach(DOMAssistant.Content);DOMAssistant.Events=function(){var i,g="_events",c=!!document.addEventListener,a={focus:true,blur:true},b=DOMAssistant.isIE?{focus:"activate",blur:"deactivate",mouseenter:"mouseover",mouseleave:"mouseout"}:{mouseenter:"mouseover",mouseleave:"mouseout"},f={special:/^submit|reset|change|select$/i,mouseenterleave:/^mouse(enter|leave)$/i,dom:/^DOM/,on:/^on/i},e=function(j){return DOMAssistant.isIE&&f.special.test(j)},d=function(j){return b[j]||j},h=function(n,k,m){n=n||window.event||{};if(n.event){return n}var l={event:n,type:k||n.type,bubbles:n.bubbles||true,cancelable:n.cancelable||false,target:m||n.target||n.srcElement,clientX:n.clientX||0,clientY:n.clientY||0,altKey:n.altKey||false,ctrlKey:n.ctrlKey||false,shiftKey:n.shiftKey||false,button:n.button||null,timeStamp:+new Date(),preventDefault:function(){if(n.preventDefault){n.preventDefault()}this.returnValue=n.returnValue=false},stopPropagation:function(){if(n.stopPropagation){n.stopPropagation()}this.cancelBubble=n.cancelBubble=true}};if(l.target&&3===l.target.nodeType){l.target=l.target.parentNode}l.currentTarget=l.target;l.relatedTarget=n.relatedTarget||(n.fromElement===l.target?n.toElement:n.fromElement)||null;var o=document.documentElement,j=document.body;l.pageX=DOMAssistant.def(n.pageX)?n.pageX:(l.clientX+(o.scrollLeft||j.scrollLeft)-(o.clientLeft||0));l.pageY=DOMAssistant.def(n.pageY)?n.pageY:(l.clientY+(o.scrollTop||j.scrollTop)-(o.clientTop||0));if("number"===typeof n.which){l.keyCode=n.keyCode;l.charCode=l.which=n.which}else{if(n.keyCode){l.keyCode=l.charCode=n.keyCode}}return l};return{publicMethods:["triggerEvent","addEvent","removeEvent","relayEvent","unrelayEvent","preventDefault","cancelBubble"],init:function(){DOMAssistant.preventDefault=this.preventDefault;DOMAssistant.cancelBubble=this.cancelBubble;i=this.handleEvent},triggerEvent:function(r,o,q){var m=d(r),s=this.retrieve(g),j=q||h(q,m,o||this);j.currentTarget=this;if(s&&s[m]){for(var n=0,l=s[m].length;n<l;n++){if(s[m][n].call(this,j)===false){j.stopPropagation()}}}else{if(typeof this["on"+m]==="function"){this["on"+m].call(this,j)}}var k=DOMAssistant.$$(this.parentNode);if(!j.cancelBubble&&k&&k.nodeType===1){k.triggerEvent(m,o,j)}return this},addEvent:function(r,l,k,q,n){var j,m=d(r),p=m+this.retrieve(),o="on"+m;if(!(l.attachedElements&&l.attachedElements[p])){var s=this.retrieve(g)||{};if(!s[m]){s[m]=[];j=this[o];this[o]=null}if(typeof this.window==="object"){this.window[o]=i}else{if(!s[m].length){if(c){this.addEventListener(m,i,a[m])}else{this[o]=i}}}if(j){s[m].push(j)}if(m!==r){l.evt=r}l.relay=k;l.proxy=q;l.selector=n;l.attachedElements=l.attachedElements||{};l.attachedElements[p]=true;s[m].push(l);this.store(g,s)}return this},handleEvent:function(r){var q=(r&&f.dom.test(r.type)&&c)?r:h(r),o=d(q.type),p=q.target,l=q.relatedTarget,n=this.retrieve(g)[o].slice(0),t,j,s;if((t=n.length)){for(var m=0;m<t;m++){if(typeof n[m]==="function"){if((s=n[m].evt)&&s!==o){q.type=s;if(l&&f.mouseenterleave.test(s)){if(n[m].relay){var k=n[m].elms||(n[m].elms=this.cssSelect(n[m].selector));if(k.indexOf(p)<0||!DOMAssistant.hasChild.call(l,p)){continue}}else{if(this===l||this.hasChild(l)){continue}}}}j=n[m].call(this,q)}}if(j===false){q.stopPropagation()}return j}},removeEvent:function(w,l,k,s){var q=(w=d(w))+this.retrieve(),x=this.retrieve(g),p="on"+w;if(x&&!w){for(var v in x){if(x[v].length){this.removeEvent(v)}}var r=this.attributes;for(var t,m=r.length;m--;){t=r[m].nodeName.toLowerCase();if(f.on.test(t)&&typeof this[t]==="function"){this[t]=null}}}else{if(x&&x[w]){var o=x[w];for(var u,n=o.length;n--;){u=l||o[n];if(o[n]===u&&k===u.relay&&s===u.proxy){o.splice(n,1);if(!!s&&u.selector){this.cssSelect(u.selector).removeEvent(s)}if(u.attachedElements){u.attachedElements[q]=null}}}if(!x[w].length){if(c){this.removeEventListener(w,i,a[w])}else{this[p]=null}}}else{if(this[p]&&!l&&!k){this[p]=null}}}return this},relayEvent:function(k,j,m,l){if(e(k)){this.relayEvent("focus",j,function(){DOMAssistant.$$(this).removeEvent(k).addEvent(k,function(n){return m.call(this,h(n))})},k).relayEvent("blur",j,function(){DOMAssistant.$$(this).removeEvent(k)},k);return this}return this.addEvent(k,function(s){s=h(s);var r=s.target,n=arguments,o=0,t,p=this.cssSelect(j);while((t=p[o++])){if((t===r||DOMAssistant.hasChild.call(t,r))&&!t.disabled){s.currentTarget=t;var q=m.apply(t,n);if(!q){s.preventDefault()}return q}}},true,l,j)},unrelayEvent:function(j){if(e(j)){return this.removeEvent("focus",null,true,j).removeEvent("blur",null,true,j)}return this.removeEvent(j,null,true)},preventDefault:function(j){if(j.preventDefault){j.preventDefault()}j.returnValue=false},cancelBubble:function(j){if(j.stopPropagation){j.stopPropagation()}j.cancelBubble=true}}}();DOMAssistant.attach(DOMAssistant.Events);DOMAssistant.DOMLoad=function(){var g=false,a=null,f=[],b={},c=null,d=function(){for(var j=0,h=f.length;j<h;j++){try{f[j]()}catch(k){if(c&&typeof c==="function"){c(k)}}}f=[]},e=function(){if(g){return}g=true;d()};
2
+/*@cc_on @if(@_win32||@_win64)document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>");document.getElementById("ieScriptLoad").onreadystatechange=function(){if(this.readyState==="complete"){e()}}@end@*/
3
+if(document.addEventListener){document.addEventListener("DOMContentLoaded",e,false)}if(/KHTML|WebKit|iCab/i.test(navigator.userAgent)){a=setInterval(function(){if(/loaded|complete/i.test(document.readyState)){e();clearInterval(a)}},10)}window.onload=e;return{DOMReady:function(){for(var j=0,h=arguments.length,k;j<h;j++){k=arguments[j];if(!k.DOMReady&&!b[k]){if(typeof k==="string"){b[k]=true;k=new Function(k)}k.DOMReady=true;f.push(k)}}if(g){d()}},setErrorHandling:function(h){c=h}}}();DOMAssistant.DOMReady=DOMAssistant.DOMLoad.DOMReady;
0 4
\ No newline at end of file
1 5
new file mode 100644
... ...
@@ -0,0 +1,20 @@
0
+// https://gist.github.com/901295
1
+// By @mathias, @cheeaun and @jdalton
2
+
3
+(function(doc) {
4
+	var addEvent = 'addEventListener',
5
+	    type = 'gesturestart',
6
+	    qsa = 'querySelectorAll',
7
+	    scales = [1, 1],
8
+	    meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
9
+	function fix() {
10
+		meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
11
+		doc.removeEventListener(type, fix, true);
12
+	}
13
+	if ((meta = meta[meta.length - 1]) && addEvent in doc) {
14
+		fix();
15
+		scales = [.25, 1.6];
16
+		doc[addEvent](type, fix, true);
17
+	}
18
+}(document));
19
+
0 20
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+// Modernizr v1.7  www.modernizr.com
1
+window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document)
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+/*
1
+ * respond.js - A small and fast polyfill for min/max-width CSS3 Media Queries
2
+ * Copyright 2011, Scott Jehl, scottjehl.com
3
+ * Dual licensed under the MIT or GPL Version 2 licenses.
4
+ * Usage: Check out the readme file or github.com/scottjehl/respond
5
+*/
6
+(function(e,h){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=h;if(h){return}var u=e.document,r=u.documentElement,i=[],k=[],p=[],o={},g=30,f=u.getElementsByTagName("head")[0]||r,b=f.getElementsByTagName("link"),d=[],a=function(){var B=b,w=B.length;for(var z=0;z<w;z++){var y=B[z],x=y.href,A=y.media,v=y.rel&&y.rel.toLowerCase()==="stylesheet";if(!!x&&v&&!o[x]){if(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(x)||x.replace(RegExp.$1,"").split("/")[0]===e.location.host){d.push({href:x,media:A})}else{o[x]=true}}}t()},t=function(){if(d.length){var v=d.shift();n(v.href,function(w){m(w,v.href,v.media);o[v.href]=true;t()})}},m=function(G,v,x){var E=G.match(/@media ([^\{]+)\{((?!@media)[\s\S])*(?=\}[\s]*\/\*\/mediaquery\*\/)/gmi),H=E&&E.length||0,v=v.substring(0,v.lastIndexOf("/")),w=function(I){return I.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+v+"$2$3")},y=!H&&x;if(v.length){v+="/"}if(y){H=1}for(var B=0;B<H;B++){var C;if(y){C=x;k.push(w(G))}else{C=E[B].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1;k.push(RegExp.$2&&w(RegExp.$2))}var z=C.split(","),F=z.length;for(var A=0;A<F;A++){var D=z[A];i.push({media:D.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:k.length-1,minw:D.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:D.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}}j()},l,q,j=function(E){var v="clientWidth",x=r[v],D=u.compatMode==="CSS1Compat"&&x||u.body[v]||x,z={},C=u.createDocumentFragment(),B=b[b.length-1],w=(new Date()).getTime();if(E&&l&&w-l<g){clearTimeout(q);q=setTimeout(j,g);return}else{l=w}for(var y in i){var F=i[y];if(!F.minw&&!F.maxw||(!F.minw||F.minw&&D>=F.minw)&&(!F.maxw||F.maxw&&D<=F.maxw)){if(!z[F.media]){z[F.media]=[]}z[F.media].push(k[F.rules])}}for(var y in p){if(p[y]&&p[y].parentNode===f){f.removeChild(p[y])}}for(var y in z){var G=u.createElement("style"),A=z[y].join("\n");G.type="text/css";G.media=y;if(G.styleSheet){G.styleSheet.cssText=A}else{G.appendChild(u.createTextNode(A))}C.appendChild(G);p.push(G)}f.insertBefore(C,B.nextSibling)},n=function(v,x){var w=c();if(!w){return}w.open("GET",v,true);w.onreadystatechange=function(){if(w.readyState!=4||w.status!=200&&w.status!=304){return}x(w.responseText)};if(w.readyState==4){return}w.send()},c=(function(){var v=false,w=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new XMLHttpRequest()}],y=w.length;while(y--){try{v=w[y]()}catch(x){continue}break}return function(){return v}})();a();respond.update=a;function s(){j(true)}if(e.addEventListener){e.addEventListener("resize",s,false)}else{if(e.attachEvent){e.attachEvent("onresize",s)}}})(this,(function(f){if(f.matchMedia){return true}var e,i=document,c=i.documentElement,g=c.firstElementChild||c.firstChild,h=!i.body,d=i.body||i.createElement("body"),b=i.createElement("div"),a="only all";b.id="mq-test-1";b.style.cssText="position:absolute;top:-99em";d.appendChild(b);b.innerHTML='_<style media="'+a+'"> #mq-test-1 { width: 9px; }</style>';if(h){c.insertBefore(d,g)}b.removeChild(b.firstChild);e=b.offsetWidth==9;if(h){c.removeChild(d)}else{d.removeChild(b)}return e})(this));
7
+
0 8
new file mode 100755
... ...
@@ -0,0 +1,5 @@
0
+/*!
1
+ * selectivizr v1.0.2 - (c) Keith Clark, freely distributable under the terms of the MIT license.
2
+ * selectivizr.com
3
+ */
4
+(function(j){function A(a){return a.replace(B,h).replace(C,function(a,d,b){for(var a=b.split(","),b=0,e=a.length;b<e;b++){var s=D(a[b].replace(E,h).replace(F,h))+o,l=[];a[b]=s.replace(G,function(a,b,c,d,e){if(b){if(l.length>0){var a=l,f,e=s.substring(0,e).replace(H,i);if(e==i||e.charAt(e.length-1)==o)e+="*";try{f=t(e)}catch(k){}if(f){e=0;for(c=f.length;e<c;e++){for(var d=f[e],h=d.className,j=0,m=a.length;j<m;j++){var g=a[j];if(!RegExp("(^|\\s)"+g.className+"(\\s|$)").test(d.className)&&g.b&&(g.b===!0||g.b(d)===!0))h=u(h,g.className,!0)}d.className=h}}l=[]}return b}else{if(b=c?I(c):!v||v.test(d)?{className:w(d),b:!0}:null)return l.push(b),"."+b.className;return a}})}return d+a.join(",")})}function I(a){var c=!0,d=w(a.slice(1)),b=a.substring(0,5)==":not(",e,f;b&&(a=a.slice(5,-1));var l=a.indexOf("(");l>-1&&(a=a.substring(0,l));if(a.charAt(0)==":")switch(a.slice(1)){case "root":c=function(a){return b?a!=p:a==p};break;case "target":if(m==8){c=function(a){function c(){var d=location.hash,e=d.slice(1);return b?d==i||a.id!=e:d!=i&&a.id==e}k(j,"hashchange",function(){g(a,d,c())});return c()};break}return!1;case "checked":c=function(a){J.test(a.type)&&k(a,"propertychange",function(){event.propertyName=="checked"&&g(a,d,a.checked!==b)});return a.checked!==b};break;case "disabled":b=!b;case "enabled":c=function(c){if(K.test(c.tagName))return k(c,"propertychange",function(){event.propertyName=="$disabled"&&g(c,d,c.a===b)}),q.push(c),c.a=c.disabled,c.disabled===b;return a==":enabled"?b:!b};break;case "focus":e="focus",f="blur";case "hover":e||(e="mouseenter",f="mouseleave");c=function(a){k(a,b?f:e,function(){g(a,d,!0)});k(a,b?e:f,function(){g(a,d,!1)});return b};break;default:if(!L.test(a))return!1}return{className:d,b:c}}function w(a){return M+"-"+(m==6&&N?O++:a.replace(P,function(a){return a.charCodeAt(0)}))}function D(a){return a.replace(x,h).replace(Q,o)}function g(a,c,d){var b=a.className,c=u(b,c,d);if(c!=b)a.className=c,a.parentNode.className+=i}function u(a,c,d){var b=RegExp("(^|\\s)"+c+"(\\s|$)"),e=b.test(a);return d?e?a:a+o+c:e?a.replace(b,h).replace(x,h):a}function k(a,c,d){a.attachEvent("on"+c,d)}function r(a,c){if(/^https?:\/\//i.test(a))return c.substring(0,c.indexOf("/",8))==a.substring(0,a.indexOf("/",8))?a:null;if(a.charAt(0)=="/")return c.substring(0,c.indexOf("/",8))+a;var d=c.split(/[?#]/)[0];a.charAt(0)!="?"&&d.charAt(d.length-1)!="/"&&(d=d.substring(0,d.lastIndexOf("/")+1));return d+a}function y(a){if(a)return n.open("GET",a,!1),n.send(),(n.status==200?n.responseText:i).replace(R,i).replace(S,function(c,d,b,e,f){return y(r(b||f,a))}).replace(T,function(c,d,b){d=d||i;return" url("+d+r(b,a)+d+") "});return i}function U(){var a,c;a=f.getElementsByTagName("BASE");for(var d=a.length>0?a[0].href:f.location.href,b=0;b<f.styleSheets.length;b++)if(c=f.styleSheets[b],c.href!=i&&(a=r(c.href,d)))c.cssText=A(y(a));q.length>0&&setInterval(function(){for(var a=0,c=q.length;a<c;a++){var b=q[a];if(b.disabled!==b.a)b.disabled?(b.disabled=!1,b.a=!0,b.disabled=!0):b.a=b.disabled}},250)}if(!/*@cc_on!@*/true){var f=document,p=f.documentElement,n=function(){if(j.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return null}}(),m=/MSIE (\d+)/.exec(navigator.userAgent)[1];if(!(f.compatMode!="CSS1Compat"||m<6||m>8||!n)){var z={NW:"*.Dom.select",MooTools:"$$",DOMAssistant:"*.$",Prototype:"$$",YAHOO:"*.util.Selector.query",Sizzle:"*",jQuery:"*",dojo:"*.query"},t,q=[],O=0,N=!0,M="slvzr",R=/(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g,S=/@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g,T=/\burl\(\s*(["']?)(?!data:)([^"')]+)\1\s*\)/g,L=/^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/,B=/:(:first-(?:line|letter))/g,C=/(^|})\s*([^\{]*?[\[:][^{]+)/g,G=/([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g,H=/(:not\()?:(hover|enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g,P=/[^\w-]/g,K=/^(INPUT|SELECT|TEXTAREA|BUTTON)$/,J=/^(checkbox|radio)$/,v=m>6?/[\$\^*]=(['"])\1/:null,E=/([(\[+~])\s+/g,F=/\s+([)\]+~])/g,Q=/\s+/g,x=/^\s*((?:[\S\s]*\S)?)\s*$/,i="",o=" ",h="$1";(function(a,c){function d(){try{p.doScroll("left")}catch(a){setTimeout(d,50);return}b("poll")}function b(d){if(!(d.type=="readystatechange"&&f.readyState!="complete")&&((d.type=="load"?a:f).detachEvent("on"+d.type,b,!1),!e&&(e=!0)))c.call(a,d.type||d)}var e=!1,g=!0;if(f.readyState=="complete")c.call(a,i);else{if(f.createEventObject&&p.doScroll){try{g=!a.frameElement}catch(h){}g&&d()}k(f,"readystatechange",b);k(a,"load",b)}})(j,function(){for(var a in z){var c,d,b=j;if(j[a]){for(c=z[a].replace("*",a).split(".");(d=c.shift())&&(b=b[d]););if(typeof b=="function"){t=b;U();break}}}})}}})(this);
0 5
\ No newline at end of file
1 6
deleted file mode 100644
... ...
@@ -1,100 +0,0 @@
1
-//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.
2
-
3
-MooTools.More={version:"1.2.4.2",build:"bd5a93c0913cce25917c48cbdacde568e15e02ef"};(function(){var a={language:"en-US",languages:{"en-US":{}},cascades:["en-US"]};
4
-var b;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(c){if(!a.languages[c]){return this;}a.language=c;this.load();this.fireEvent("langChange",c);
5
-return this;},load:function(){var c=this.cascade(this.getCurrentLanguage());b={};$each(c,function(e,d){b[d]=this.lambda(e);},this);},getCurrentLanguage:function(){return a.language;
6
-},addLanguage:function(c){a.languages[c]=a.languages[c]||{};return this;},cascade:function(e){var c=(a.languages[e]||{}).cascades||[];c.combine(a.cascades);
7
-c.erase(e).push(e);var d=c.map(function(f){return a.languages[f];},this);return $merge.apply(this,d);},lambda:function(c){(c||{}).get=function(e,d){return $lambda(c[e]).apply(this,$splat(d));
8
-};return c;},get:function(e,d,c){if(b&&b[e]){return(d?b[e].get(d,c):b[e]);}},set:function(d,e,c){this.addLanguage(d);langData=a.languages[d];if(!langData[e]){langData[e]={};
9
-}$extend(langData[e],c);if(d==this.getCurrentLanguage()){this.load();this.fireEvent("langChange",d);}return this;},list:function(){return Hash.getKeys(a.languages);
10
-}});})();(function(){var i=this.Date;if(!i.now){i.now=$time;}i.Methods={ms:"Milliseconds",year:"FullYear",min:"Minutes",mo:"Month",sec:"Seconds",hr:"Hours"};
11
-["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds","Time","TimezoneOffset","Week","Timezone","GMTOffset","DayOfYear","LastMonth","LastDayOfMonth","UTCDate","UTCDay","UTCFullYear","AMPM","Ordinal","UTCHours","UTCMilliseconds","UTCMinutes","UTCMonth","UTCSeconds"].each(function(p){i.Methods[p.toLowerCase()]=p;
12
-});var d=function(q,p){return new Array(p-String(q).length+1).join("0")+q;};i.implement({set:function(t,r){switch($type(t)){case"object":for(var s in t){this.set(s,t[s]);
13
-}break;case"string":t=t.toLowerCase();var q=i.Methods;if(q[t]){this["set"+q[t]](r);}}return this;},get:function(q){q=q.toLowerCase();var p=i.Methods;if(p[q]){return this["get"+p[q]]();
14
-}return null;},clone:function(){return new i(this.get("time"));},increment:function(p,r){p=p||"day";r=$pick(r,1);switch(p){case"year":return this.increment("month",r*12);
15
-case"month":var q=this.get("date");this.set("date",1).set("mo",this.get("mo")+r);return this.set("date",q.min(this.get("lastdayofmonth")));case"week":return this.increment("day",r*7);
16
-case"day":return this.set("date",this.get("date")+r);}if(!i.units[p]){throw new Error(p+" is not a supported interval");}return this.set("time",this.get("time")+r*i.units[p]());
17
-},decrement:function(p,q){return this.increment(p,-1*$pick(q,1));},isLeapYear:function(){return i.isLeapYear(this.get("year"));},clearTime:function(){return this.set({hr:0,min:0,sec:0,ms:0});
18
-},diff:function(q,p){if($type(q)=="string"){q=i.parse(q);}return((q-this)/i.units[p||"day"](3,3)).toInt();},getLastDayOfMonth:function(){return i.daysInMonth(this.get("mo"),this.get("year"));
19
-},getDayOfYear:function(){return(i.UTC(this.get("year"),this.get("mo"),this.get("date")+1)-i.UTC(this.get("year"),0,1))/i.units.day();},getWeek:function(){return(this.get("dayofyear")/7).ceil();
20
-},getOrdinal:function(p){return i.getMsg("ordinal",p||this.get("date"));},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");
21
-},getGMTOffset:function(){var p=this.get("timezoneOffset");return((p>0)?"-":"+")+d((p.abs()/60).floor(),2)+d(p%60,2);},setAMPM:function(p){p=p.toUpperCase();
22
-var q=this.get("hr");if(q>11&&p=="AM"){return this.decrement("hour",12);}else{if(q<12&&p=="PM"){return this.increment("hour",12);}}return this;},getAMPM:function(){return(this.get("hr")<12)?"AM":"PM";
23
-},parse:function(p){this.set("time",i.parse(p));return this;},isValid:function(p){return !!(p||this).valueOf();},format:function(p){if(!this.isValid()){return"invalid date";
24
-}p=p||"%x %X";p=k[p.toLowerCase()]||p;var q=this;return p.replace(/%([a-z%])/gi,function(s,r){switch(r){case"a":return i.getMsg("days")[q.get("day")].substr(0,3);
25
-case"A":return i.getMsg("days")[q.get("day")];case"b":return i.getMsg("months")[q.get("month")].substr(0,3);case"B":return i.getMsg("months")[q.get("month")];
26
-case"c":return q.toString();case"d":return d(q.get("date"),2);case"H":return d(q.get("hr"),2);case"I":return((q.get("hr")%12)||12);case"j":return d(q.get("dayofyear"),3);
27
-case"m":return d((q.get("mo")+1),2);case"M":return d(q.get("min"),2);case"o":return q.get("ordinal");case"p":return i.getMsg(q.get("ampm"));case"S":return d(q.get("seconds"),2);
28
-case"U":return d(q.get("week"),2);case"w":return q.get("day");case"x":return q.format(i.getMsg("shortDate"));case"X":return q.format(i.getMsg("shortTime"));
29
-case"y":return q.get("year").toString().substr(2);case"Y":return q.get("year");case"T":return q.get("GMTOffset");case"Z":return q.get("Timezone");}return r;
30
-});},toISOString:function(){return this.format("iso8601");}});i.alias("toISOString","toJSON");i.alias("diff","compare");i.alias("format","strftime");var k={db:"%Y-%m-%d %H:%M:%S",compact:"%Y%m%dT%H%M%S",iso8601:"%Y-%m-%dT%H:%M:%S%T",rfc822:"%a, %d %b %Y %H:%M:%S %Z","short":"%d %b %H:%M","long":"%B %d, %Y %H:%M"};
31
-var g=[];var e=i.parse;var n=function(s,u,r){var q=-1;var t=i.getMsg(s+"s");switch($type(u)){case"object":q=t[u.get(s)];break;case"number":q=t[month-1];
32
-if(!q){throw new Error("Invalid "+s+" index: "+index);}break;case"string":var p=t.filter(function(v){return this.test(v);},new RegExp("^"+u,"i"));if(!p.length){throw new Error("Invalid "+s+" string");
33
-}if(p.length>1){throw new Error("Ambiguous "+s);}q=p[0];}return(r)?t.indexOf(q):q;};i.extend({getMsg:function(q,p){return MooTools.lang.get("Date",q,p);
34
-},units:{ms:$lambda(1),second:$lambda(1000),minute:$lambda(60000),hour:$lambda(3600000),day:$lambda(86400000),week:$lambda(608400000),month:function(q,p){var r=new i;
35
-return i.daysInMonth($pick(q,r.get("mo")),$pick(p,r.get("year")))*86400000;},year:function(p){p=p||new i().get("year");return i.isLeapYear(p)?31622400000:31536000000;
36
-}},daysInMonth:function(q,p){return[31,i.isLeapYear(p)?29:28,31,30,31,30,31,31,30,31,30,31][q];},isLeapYear:function(p){return((p%4===0)&&(p%100!==0))||(p%400===0);
37
-},parse:function(r){var q=$type(r);if(q=="number"){return new i(r);}if(q!="string"){return r;}r=r.clean();if(!r.length){return null;}var p;g.some(function(t){var s=t.re.exec(r);
38
-return(s)?(p=t.handler(s)):false;});return p||new i(e(r));},parseDay:function(p,q){return n("day",p,q);},parseMonth:function(q,p){return n("month",q,p);
39
-},parseUTC:function(q){var p=new i(q);var r=i.UTC(p.get("year"),p.get("mo"),p.get("date"),p.get("hr"),p.get("min"),p.get("sec"));return new i(r);},orderIndex:function(p){return i.getMsg("dateOrder").indexOf(p)+1;
40
-},defineFormat:function(p,q){k[p]=q;},defineFormats:function(p){for(var q in p){i.defineFormat(q,p[q]);}},parsePatterns:g,defineParser:function(p){g.push((p.re&&p.handler)?p:l(p));
41
-},defineParsers:function(){Array.flatten(arguments).each(i.defineParser);},define2DigitYearStart:function(p){h=p%100;m=p-h;}});var m=1900;var h=70;var j=function(p){return new RegExp("(?:"+i.getMsg(p).map(function(q){return q.substr(0,3);
42
-}).join("|")+")[a-z]*");};var a=function(p){switch(p){case"x":return((i.orderIndex("month")==1)?"%m[.-/]%d":"%d[.-/]%m")+"([.-/]%y)?";case"X":return"%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%T?";
43
-}return null;};var o={d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,o:/[a-z]*/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,T:/Z|[+-]\d{2}(?::?\d{2})?/};
44
-o.m=o.I;o.S=o.M;var c;var b=function(p){c=p;o.a=o.A=j("days");o.b=o.B=j("months");g.each(function(r,q){if(r.format){g[q]=l(r.format);}});};var l=function(r){if(!c){return{format:r};
45
-}var p=[];var q=(r.source||r).replace(/%([a-z])/gi,function(t,s){return a(s)||t;}).replace(/\((?!\?)/g,"(?:").replace(/ (?!\?|\*)/g,",? ").replace(/%([a-z%])/gi,function(t,s){var u=o[s];
46
-if(!u){return s;}p.push(s);return"("+u.source+")";}).replace(/\[a-z\]/gi,"[a-z\\u00c0-\\uffff]");return{format:r,re:new RegExp("^"+q+"$","i"),handler:function(u){u=u.slice(1).associate(p);
47
-var s=new i().clearTime();if("d" in u){f.call(s,"d",1);}if("m" in u){f.call(s,"m",1);}for(var t in u){f.call(s,t,u[t]);}return s;}};};var f=function(p,q){if(!q){return this;
48
-}switch(p){case"a":case"A":return this.set("day",i.parseDay(q,true));case"b":case"B":return this.set("mo",i.parseMonth(q,true));case"d":return this.set("date",q);
49
-case"H":case"I":return this.set("hr",q);case"m":return this.set("mo",q-1);case"M":return this.set("min",q);case"p":return this.set("ampm",q.replace(/\./g,""));
50
-case"S":return this.set("sec",q);case"s":return this.set("ms",("0."+q)*1000);case"w":return this.set("day",q);case"Y":return this.set("year",q);case"y":q=+q;
51
-if(q<100){q+=m+(q<h?100:0);}return this.set("year",q);case"T":if(q=="Z"){q="+00";}var r=q.match(/([+-])(\d{2}):?(\d{2})?/);r=(r[1]+"1")*(r[2]*60+(+r[3]||0))+this.getTimezoneOffset();
52
-return this.set("time",this-r*60000);}return this;};i.defineParsers("%Y([-./]%m([-./]%d((T| )%X)?)?)?","%Y%m%d(T%H(%M%S?)?)?","%x( %X)?","%d%o( %b( %Y)?)?( %X)?","%b( %d%o)?( %Y)?( %X)?","%Y %b( %d%o( %X)?)?","%o %b %d %X %T %Y");
53
-MooTools.lang.addEvent("langChange",function(p){if(MooTools.lang.get("Date")){b(p);}}).fireEvent("langChange",MooTools.lang.getCurrentLanguage());})();
54
-Date.implement({timeDiffInWords:function(a){return Date.distanceOfTimeInWords(this,a||new Date);},timeDiff:function(g,b){if(g==null){g=new Date;}var f=((g-this)/1000).toInt();
55
-if(!f){return"0s";}var a={s:60,m:60,h:24,d:365,y:0};var e,d=[];for(var c in a){if(!f){break;}if((e=a[c])){d.unshift((f%e)+c);f=(f/e).toInt();}else{d.unshift(f+c);
56
-}}return d.join(b||":");}});Date.alias("timeDiffInWords","timeAgoInWords");Date.extend({distanceOfTimeInWords:function(b,a){return Date.getTimePhrase(((a-b)/1000).toInt());
57
-},getTimePhrase:function(f){var d=(f<0)?"Until":"Ago";if(f<0){f*=-1;}var b={minute:60,hour:60,day:24,week:7,month:52/12,year:12,eon:Infinity};var e="lessThanMinute";
58
-for(var c in b){var a=b[c];if(f<1.5*a){if(f>0.75*a){e=c;}break;}f/=a;e=c+"s";}return Date.getMsg(e+d).substitute({delta:f.round()});}});Date.defineParsers({re:/^(?:tod|tom|yes)/i,handler:function(a){var b=new Date().clearTime();
59
-switch(a[0]){case"tom":return b.increment();case"yes":return b.decrement();default:return b;}}},{re:/^(next|last) ([a-z]+)$/i,handler:function(e){var f=new Date().clearTime();
60
-var b=f.getDay();var c=Date.parseDay(e[2],true);var a=c-b;if(c<=b){a+=7;}if(e[1]=="last"){a-=7;}return f.set("date",f.getDate()+a);}});Element.implement({measure:function(e){var g=function(h){return !!(!h||h.offsetHeight||h.offsetWidth);
61
-};if(g(this)){return e.apply(this);}var d=this.getParent(),f=[],b=[];while(!g(d)&&d!=document.body){b.push(d.expose());d=d.getParent();}var c=this.expose();
62
-var a=e.apply(this);c();b.each(function(h){h();});return a;},expose:function(){if(this.getStyle("display")!="none"){return $empty;}var a=this.style.cssText;
63
-this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=a;}.bind(this);},getDimensions:function(a){a=$merge({computeSize:false},a);
64
-var f={};var d=function(g,e){return(e.computeSize)?g.getComputedSize(e):g.getSize();};var b=this.getParent("body");if(b&&this.getStyle("display")=="none"){f=this.measure(function(){return d(this,a);
65
-});}else{if(b){try{f=d(this,a);}catch(c){}}else{f={x:0,y:0};}}return $chk(f.x)?$extend(f,{width:f.x,height:f.y}):$extend(f,{x:f.width,y:f.height});},getComputedSize:function(a){a=$merge({styles:["padding","border"],plains:{height:["top","bottom"],width:["left","right"]},mode:"both"},a);
66
-var c={width:0,height:0};switch(a.mode){case"vertical":delete c.width;delete a.plains.width;break;case"horizontal":delete c.height;delete a.plains.height;
67
-break;}var b=[];$each(a.plains,function(g,f){g.each(function(h){a.styles.each(function(i){b.push((i=="border")?i+"-"+h+"-width":i+"-"+h);});});});var e={};
68
-b.each(function(f){e[f]=this.getComputedStyle(f);},this);var d=[];$each(a.plains,function(g,f){var h=f.capitalize();c["total"+h]=c["computed"+h]=0;g.each(function(i){c["computed"+i.capitalize()]=0;
69
-b.each(function(k,j){if(k.test(i)){e[k]=e[k].toInt()||0;c["total"+h]=c["total"+h]+e[k];c["computed"+i.capitalize()]=c["computed"+i.capitalize()]+e[k];}if(k.test(i)&&f!=k&&(k.test("border")||k.test("padding"))&&!d.contains(k)){d.push(k);
70
-c["computed"+h]=c["computed"+h]-e[k];}});});});["Width","Height"].each(function(g){var f=g.toLowerCase();if(!$chk(c[f])){return;}c[f]=c[f]+this["offset"+g]+c["computed"+g];
71
-c["total"+g]=c[f]+c["total"+g];delete c["computed"+g];},this);return $extend(e,c);}});Element.implement({isDisplayed:function(){return this.getStyle("display")!="none";
72
-},isVisible:function(){var a=this.offsetWidth,b=this.offsetHeight;return(a==0&&b==0)?false:(a>0&&b>0)?true:this.isDisplayed();},toggle:function(){return this[this.isDisplayed()?"hide":"show"]();
73
-},hide:function(){var b;try{if((b=this.getStyle("display"))=="none"){b=null;}}catch(a){}return this.store("originalDisplay",b||"block").setStyle("display","none");
74
-},show:function(a){return this.setStyle("display",a||this.retrieve("originalDisplay")||"block");},swapClass:function(a,b){return this.removeClass(a).addClass(b);
75
-}});Fx.Reveal=new Class({Extends:Fx.Morph,options:{link:"cancel",styles:["padding","border","margin"],transitionOpacity:!Browser.Engine.trident4,mode:"vertical",display:"block",hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed":false},dissolve:function(){try{if(!this.hiding&&!this.showing){if(this.element.getStyle("display")!="none"){this.hiding=true;
76
-this.showing=false;this.hidden=true;this.cssText=this.element.style.cssText;var d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
77
-this.element.setStyle("display","block");if(this.options.transitionOpacity){d.opacity=1;}var b={};$each(d,function(f,e){b[e]=[f,0];},this);this.element.setStyle("overflow","hidden");
78
-var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;this.$chain.unshift(function(){if(this.hidden){this.hiding=false;$each(d,function(f,e){d[e]=f;
79
-},this);this.element.style.cssText=this.cssText;this.element.setStyle("display","none");if(a){a.setStyle("visibility","visible");}}this.fireEvent("hide",this.element);
80
-this.callChain();}.bind(this));if(a){a.setStyle("visibility","hidden");}this.start(b);}else{this.callChain.delay(10,this);this.fireEvent("complete",this.element);
81
-this.fireEvent("hide",this.element);}}else{if(this.options.link=="chain"){this.chain(this.dissolve.bind(this));}else{if(this.options.link=="cancel"&&!this.hiding){this.cancel();
82
-this.dissolve();}}}}catch(c){this.hiding=false;this.element.setStyle("display","none");this.callChain.delay(10,this);this.fireEvent("complete",this.element);
83
-this.fireEvent("hide",this.element);}return this;},reveal:function(){try{if(!this.showing&&!this.hiding){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.showing=true;
84
-this.hiding=this.hidden=false;var d;this.cssText=this.element.style.cssText;this.element.measure(function(){d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
85
-}.bind(this));$each(d,function(f,e){d[e]=f;});if($chk(this.options.heightOverride)){d.height=this.options.heightOverride.toInt();}if($chk(this.options.widthOverride)){d.width=this.options.widthOverride.toInt();
86
-}if(this.options.transitionOpacity){this.element.setStyle("opacity",0);d.opacity=1;}var b={height:0,display:this.options.display};$each(d,function(f,e){b[e]=0;
87
-});this.element.setStyles($merge(b,{overflow:"hidden"}));var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;if(a){a.setStyle("visibility","hidden");
88
-}this.start(d);this.$chain.unshift(function(){this.element.style.cssText=this.cssText;this.element.setStyle("display",this.options.display);if(!this.hidden){this.showing=false;
89
-}if(a){a.setStyle("visibility","visible");}this.callChain();this.fireEvent("show",this.element);}.bind(this));}else{this.callChain();this.fireEvent("complete",this.element);
90
-this.fireEvent("show",this.element);}}else{if(this.options.link=="chain"){this.chain(this.reveal.bind(this));}else{if(this.options.link=="cancel"&&!this.showing){this.cancel();
91
-this.reveal();}}}}catch(c){this.element.setStyles({display:this.options.display,visiblity:"visible",opacity:1});this.showing=false;this.callChain.delay(10,this);
92
-this.fireEvent("complete",this.element);this.fireEvent("show",this.element);}return this;},toggle:function(){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.reveal();
93
-}else{this.dissolve();}return this;},cancel:function(){this.parent.apply(this,arguments);this.element.style.cssText=this.cssText;this.hidding=false;this.showing=false;
94
-}});Element.Properties.reveal={set:function(a){var b=this.retrieve("reveal");if(b){b.cancel();}return this.eliminate("reveal").store("reveal:options",a);
95
-},get:function(a){if(a||!this.retrieve("reveal")){if(a||!this.retrieve("reveal:options")){this.set("reveal",a);}this.store("reveal",new Fx.Reveal(this,this.retrieve("reveal:options")));
96
-}return this.retrieve("reveal");}};Element.Properties.dissolve=Element.Properties.reveal;Element.implement({reveal:function(a){this.get("reveal",a).reveal();
97
-return this;},dissolve:function(a){this.get("reveal",a).dissolve();return this;},nix:function(){var a=Array.link(arguments,{destroy:Boolean.type,options:Object.type});
98
-this.get("reveal",a.options).dissolve().chain(function(){this[a.destroy?"destroy":"dispose"]();}.bind(this));return this;},wink:function(){var b=Array.link(arguments,{duration:Number.type,options:Object.type});
99
-var a=this.get("reveal",b.options);a.reveal().chain(function(){(function(){a.dissolve();}).delay(b.duration||2000);});}});MooTools.lang.set("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
100
-},lessThanMinuteAgo:"less than a minute ago",minuteAgo:"about a minute ago",minutesAgo:"{delta} minutes ago",hourAgo:"about an hour ago",hoursAgo:"about {delta} hours ago",dayAgo:"1 day ago",daysAgo:"{delta} days ago",weekAgo:"1 week ago",weeksAgo:"{delta} weeks ago",monthAgo:"1 month ago",monthsAgo:"{delta} months ago",yearAgo:"1 year ago",yearsAgo:"{delta} years ago",lessThanMinuteUntil:"less than a minute from now",minuteUntil:"about a minute from now",minutesUntil:"{delta} minutes from now",hourUntil:"about an hour from now",hoursUntil:"about {delta} hours from now",dayUntil:"1 day from now",daysUntil:"{delta} days from now",weekUntil:"1 week from now",weeksUntil:"{delta} weeks from now",monthUntil:"1 month from now",monthsUntil:"{delta} months from now",yearUntil:"1 year from now",yearsUntil:"{delta} years from now"});
101 1
deleted file mode 100644
... ...
@@ -1,1322 +0,0 @@
1
-// MooTools: the javascript framework.
2
-// Load this file's selection again by visiting: http://mootools.net/more/0a2b8625655481363709ef8d9ab1d0f4
3
-// Or build this file again with packager using: packager build More/Date More/Date.Extras More/Hash More/Request.JSONP
4
-/*
5
-
6
-script: More.js
7
-
8
-name: More
9
-
10
-description: MooTools More
11
-
12
-license: MIT-style license
13
-
14
-authors:
15
-  - Guillermo Rauch
16
-  - Thomas Aylott
17
-  - Scott Kyle
18
-  - Arian Stolwijk
19
-  - Tim Wienk
20
-  - Christoph Pojer
21
-  - Aaron Newton
22
-
23
-requires:
24
-  - Core/MooTools
25
-
26
-provides: [MooTools.More]
27
-
28
-...
29
-*/
30
-
31
-MooTools.More = {
32
-	'version': '1.3.1.1',
33
-	'build': '0292a3af1eea242b817fecf9daa127417d10d4ce'
34
-};
35
-
36
-
37
-/*
38
-
39
-script: Object.Extras.js
40
-
41
-name: Object.Extras
42
-
43
-description: Extra Object generics, like getFromPath which allows a path notation to child elements.
44
-
45
-license: MIT-style license
46
-
47
-authors:
48
-  - Aaron Newton
49
-
50
-requires:
51
-  - Core/Object
52
-  - /MooTools.More
53
-
54
-provides: [Object.Extras]
55
-
56
-...
57
-*/
58
-
59
-(function(){
60
-
61
-var defined = function(value){
62
-	return value != null;
63
-};
64
-
65
-var hasOwnProperty = Object.prototype.hasOwnProperty;
66
-
67
-Object.extend({
68
-
69
-	getFromPath: function(source, parts){
70
-		if (typeof parts == 'string') parts = parts.split('.');
71
-		for (var i = 0, l = parts.length; i < l; i++){
72
-			if (hasOwnProperty.call(source, parts[i])) source = source[parts[i]];
73
-			else return null;
74
-		}
75
-		return source;
76
-	},
77
-
78
-	cleanValues: function(object, method){
79
-		method = method || defined;
80
-		for (var key in object) if (!method(object[key])){
81
-			delete object[key];
82
-		}
83
-		return object;
84
-	},
85
-
86
-	erase: function(object, key){
87
-		if (hasOwnProperty.call(object, key)) delete object[key];
88
-		return object;
89
-	},
90
-
91
-	run: function(object){
92
-		var args = Array.slice(arguments, 1);
93
-		for (var key in object) if (object[key].apply){
94
-			object[key].apply(object, args);
95
-		}
96
-		return object;
97
-	}
98
-
99
-});
100
-
101
-}).call(this);
102
-
103
-
104
-/*
105
-
106
-script: Locale.js
107
-
108
-name: Locale
109
-
110
-description: Provides methods for localization.
111
-
112
-license: MIT-style license
113
-
114
-authors:
115
-  - Aaron Newton
116
-  - Arian Stolwijk
117
-
118
-requires:
119
-  - Core/Events
120
-  - /Object.Extras
121
-  - /MooTools.More
122
-
123
-provides: [Locale, Lang]
124
-
125
-...
126
-*/
127
-
128
-(function(){
129
-
130
-var current = null,
131
-	locales = {},
132
-	inherits = {};
133
-
134
-var getSet = function(set){
135
-	if (instanceOf(set, Locale.Set)) return set;
136
-	else return locales[set];
137
-};
138
-
139
-var Locale = this.Locale = {
140
-
141
-	define: function(locale, set, key, value){
142
-		var name;
143
-		if (instanceOf(locale, Locale.Set)){
144
-			name = locale.name;
145
-			if (name) locales[name] = locale;
146
-		} else {
147
-			name = locale;
148
-			if (!locales[name]) locales[name] = new Locale.Set(name);
149
-			locale = locales[name];
150
-		}
151
-
152
-		if (set) locale.define(set, key, value);
153
-
154
-
155
-
156
-		if (!current) current = locale;
157
-
158
-		return locale;
159
-	},
160
-
161
-	use: function(locale){
162
-		locale = getSet(locale);
163
-
164
-		if (locale){
165
-			current = locale;
166
-
167
-			this.fireEvent('change', locale);
168
-
169
-
170
-		}
171
-
172
-		return this;
173
-	},
174
-
175
-	getCurrent: function(){
176
-		return current;
177
-	},
178
-
179
-	get: function(key, args){
180
-		return (current) ? current.get(key, args) : '';
181
-	},
182
-
183
-	inherit: function(locale, inherits, set){
184
-		locale = getSet(locale);
185
-
186
-		if (locale) locale.inherit(inherits, set);
187
-		return this;
188
-	},
189
-
190
-	list: function(){
191
-		return Object.keys(locales);
192
-	}
193
-
194
-};
195
-
196
-Object.append(Locale, new Events);
197
-
198
-Locale.Set = new Class({
199
-
200
-	sets: {},
201
-
202
-	inherits: {
203
-		locales: [],
204
-		sets: {}
205
-	},
206
-
207
-	initialize: function(name){
208
-		this.name = name || '';
209
-	},
210
-
211
-	define: function(set, key, value){
212
-		var defineData = this.sets[set];
213
-		if (!defineData) defineData = {};
214
-
215
-		if (key){
216
-			if (typeOf(key) == 'object') defineData = Object.merge(defineData, key);
217
-			else defineData[key] = value;
218
-		}
219
-		this.sets[set] = defineData;
220
-
221
-		return this;
222
-	},
223
-
224
-	get: function(key, args, _base){
225
-		var value = Object.getFromPath(this.sets, key);
226
-		if (value != null){
227
-			var type = typeOf(value);
228
-			if (type == 'function') value = value.apply(null, Array.from(args));
229
-			else if (type == 'object') value = Object.clone(value);
230
-			return value;
231
-		}
232
-
233
-		// get value of inherited locales
234
-		var index = key.indexOf('.'),
235
-			set = index < 0 ? key : key.substr(0, index),
236
-			names = (this.inherits.sets[set] || []).combine(this.inherits.locales).include('en-US');
237
-		if (!_base) _base = [];
238
-
239
-		for (var i = 0, l = names.length; i < l; i++){
240
-			if (_base.contains(names[i])) continue;
241
-			_base.include(names[i]);
242
-
243
-			var locale = locales[names[i]];
244
-			if (!locale) continue;
245
-
246
-			value = locale.get(key, args, _base);
247
-			if (value != null) return value;
248
-		}
249
-
250
-		return '';
251
-	},
252
-
253
-	inherit: function(names, set){
254
-		names = Array.from(names);
255
-
256
-		if (set && !this.inherits.sets[set]) this.inherits.sets[set] = [];
257
-
258
-		var l = names.length;
259
-		while (l--) (set ? this.inherits.sets[set] : this.inherits.locales).unshift(names[l]);
260
-
261
-		return this;
262
-	}
263
-
264
-});
265
-
266
-
267
-
268
-}).call(this);
269
-
270
-
271
-/*
272
-
273
-name: Locale.en-US.Date
274
-
275
-description: Date messages for US English.
276
-
277
-license: MIT-style license
278
-
279
-authors:
280
-  - Aaron Newton
281
-
282
-requires:
283
-  - /Locale
284
-
285
-provides: [Locale.en-US.Date]
286
-
287
-...
288
-*/
289
-
290
-Locale.define('en-US', 'Date', {
291
-
292
-	months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
293
-	months_abbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
294
-	days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
295
-	days_abbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
296
-
297
-	// Culture's date order: MM/DD/YYYY
298
-	dateOrder: ['month', 'date', 'year'],
299
-	shortDate: '%m/%d/%Y',
300
-	shortTime: '%I:%M%p',
301
-	AM: 'AM',
302
-	PM: 'PM',
303
-	firstDayOfWeek: 0,
304
-
305
-	// Date.Extras
306
-	ordinal: function(dayOfMonth){
307
-		// 1st, 2nd, 3rd, etc.
308
-		return (dayOfMonth > 3 && dayOfMonth < 21) ? 'th' : ['th', 'st', 'nd', 'rd', 'th'][Math.min(dayOfMonth % 10, 4)];
309
-	},
310
-
311
-	lessThanMinuteAgo: 'less than a minute ago',
312
-	minuteAgo: 'about a minute ago',
313
-	minutesAgo: '{delta} minutes ago',
314
-	hourAgo: 'about an hour ago',
315
-	hoursAgo: 'about {delta} hours ago',
316
-	dayAgo: '1 day ago',
317
-	daysAgo: '{delta} days ago',
318
-	weekAgo: '1 week ago',
319
-	weeksAgo: '{delta} weeks ago',
320
-	monthAgo: '1 month ago',
321
-	monthsAgo: '{delta} months ago',
322
-	yearAgo: '1 year ago',
323
-	yearsAgo: '{delta} years ago',
324
-
325
-	lessThanMinuteUntil: 'less than a minute from now',
326
-	minuteUntil: 'about a minute from now',
327
-	minutesUntil: '{delta} minutes from now',
328
-	hourUntil: 'about an hour from now',
329
-	hoursUntil: 'about {delta} hours from now',
330
-	dayUntil: '1 day from now',
331
-	daysUntil: '{delta} days from now',
332
-	weekUntil: '1 week from now',
333
-	weeksUntil: '{delta} weeks from now',
334
-	monthUntil: '1 month from now',
335
-	monthsUntil: '{delta} months from now',
336
-	yearUntil: '1 year from now',
337
-	yearsUntil: '{delta} years from now'
338
-
339
-});
340
-
341
-
342
-/*
343
-
344
-script: Date.js
345
-
346
-name: Date
347
-
348
-description: Extends the Date native object to include methods useful in managing dates.
349
-
350
-license: MIT-style license
351
-
352
-authors:
353
-  - Aaron Newton
354
-  - Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/
355
-  - Harald Kirshner - mail [at] digitarald.de; http://digitarald.de
356
-  - Scott Kyle - scott [at] appden.com; http://appden.com
357
-
358
-requires:
359
-  - Core/Array
360
-  - Core/String
361
-  - Core/Number
362
-  - MooTools.More
363
-  - Locale
364
-  - Locale.en-US.Date
365
-
366
-provides: [Date]
367
-
368
-...
369
-*/
370
-
371
-(function(){
372
-
373
-var Date = this.Date;
374
-
375
-var DateMethods = Date.Methods = {
376
-	ms: 'Milliseconds',
377
-	year: 'FullYear',
378
-	min: 'Minutes',
379
-	mo: 'Month',
380
-	sec: 'Seconds',
381
-	hr: 'Hours'
382
-};
383
-
384
-['Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset',
385
-	'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear',
386
-	'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds', 'UTCMilliseconds'].each(function(method){
387
-	Date.Methods[method.toLowerCase()] = method;
388
-});
389
-
390
-var pad = function(n, digits, string){
391
-	if (digits == 1) return n;
392
-	return n < Math.pow(10, digits - 1) ? (string || '0') + pad(n, digits - 1, string) : n;
393
-};
394
-
395
-Date.implement({
396
-
397
-	set: function(prop, value){
398
-		prop = prop.toLowerCase();
399
-		var method = DateMethods[prop] && 'set' + DateMethods[prop];
400
-		if (method && this[method]) this[method](value);
401
-		return this;
402
-	}.overloadSetter(),
403
-
404
-	get: function(prop){
405
-		prop = prop.toLowerCase();
406
-		var method = DateMethods[prop] && 'get' + DateMethods[prop];
407
-		if (method && this[method]) return this[method]();
408
-		return null;
409
-	}.overloadGetter(),
410
-
411
-	clone: function(){
412
-		return new Date(this.get('time'));
413
-	},
414
-
415
-	increment: function(interval, times){
416
-		interval = interval || 'day';
417
-		times = times != null ? times : 1;
418
-
419
-		switch (interval){
420
-			case 'year':
421
-				return this.increment('month', times * 12);
422
-			case 'month':
423
-				var d = this.get('date');
424
-				this.set('date', 1).set('mo', this.get('mo') + times);
425
-				return this.set('date', d.min(this.get('lastdayofmonth')));
426
-			case 'week':
427
-				return this.increment('day', times * 7);
428
-			case 'day':
429
-				return this.set('date', this.get('date') + times);
430
-		}
431
-
432
-		if (!Date.units[interval]) throw new Error(interval + ' is not a supported interval');
433
-
434
-		return this.set('time', this.get('time') + times * Date.units[interval]());
435
-	},
436
-
437
-	decrement: function(interval, times){
438
-		return this.increment(interval, -1 * (times != null ? times : 1));
439
-	},
440
-
441
-	isLeapYear: function(){
442
-		return Date.isLeapYear(this.get('year'));
443
-	},
444
-
445
-	clearTime: function(){
446
-		return this.set({hr: 0, min: 0, sec: 0, ms: 0});
447
-	},
448
-
449
-	diff: function(date, resolution){
450
-		if (typeOf(date) == 'string') date = Date.parse(date);
451
-
452
-		return ((date - this) / Date.units[resolution || 'day'](3, 3)).round(); // non-leap year, 30-day month
453
-	},
454
-
455
-	getLastDayOfMonth: function(){
456
-		return Date.daysInMonth(this.get('mo'), this.get('year'));
457
-	},
458
-
459
-	getDayOfYear: function(){
460
-		return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1)
461
-			- Date.UTC(this.get('year'), 0, 1)) / Date.units.day();
462
-	},
463
-
464
-	setDay: function(day, firstDayOfWeek){
465
-		if (firstDayOfWeek == null){
466
-			firstDayOfWeek = Date.getMsg('firstDayOfWeek');
467
-			if (firstDayOfWeek === '') firstDayOfWeek = 1;
468
-		}
469
-
470
-		day = (7 + Date.parseDay(day, true) - firstDayOfWeek) % 7;
471
-		var currentDay = (7 + this.get('day') - firstDayOfWeek) % 7;
472
-
473
-		return this.increment('day', day - currentDay);
474
-	},
475
-
476
-	getWeek: function(firstDayOfWeek){
477
-		if (firstDayOfWeek == null){
478
-			firstDayOfWeek = Date.getMsg('firstDayOfWeek');
479
-			if (firstDayOfWeek === '') firstDayOfWeek = 1;
480
-		}
481
-
482
-		var date = this,
483
-			dayOfWeek = (7 + date.get('day') - firstDayOfWeek) % 7,
484
-			dividend = 0,
485
-			firstDayOfYear;
486
-
487
-		if (firstDayOfWeek == 1){
488
-			// ISO-8601, week belongs to year that has the most days of the week (i.e. has the thursday of the week)
489
-			var month = date.get('month'),
490
-				startOfWeek = date.get('date') - dayOfWeek;
491
-
492
-			if (month == 11 && startOfWeek > 28) return 1; // Week 1 of next year
493
-
494
-			if (month == 0 && startOfWeek < -2){
495
-				// Use a date from last year to determine the week
496
-				date = new Date(date).decrement('day', dayOfWeek);
497
-				dayOfWeek = 0;
498
-			}
499
-
500
-			firstDayOfYear = new Date(date.get('year'), 0, 1).get('day') || 7;
501
-			if (firstDayOfYear > 4) dividend = -7; // First week of the year is not week 1
502
-		} else {
503
-			// In other cultures the first week of the year is always week 1 and the last week always 53 or 54.
504
-			// Days in the same week can have a different weeknumber if the week spreads across two years.
505
-			firstDayOfYear = new Date(date.get('year'), 0, 1).get('day');
506
-		}
507
-
508
-		dividend += date.get('dayofyear');
509
-		dividend += 6 - dayOfWeek; // Add days so we calculate the current date's week as a full week
510
-		dividend += (7 + firstDayOfYear - firstDayOfWeek) % 7; // Make up for first week of the year not being a full week
511
-
512
-		return (dividend / 7);
513
-	},
514
-
515
-	getOrdinal: function(day){
516
-		return Date.getMsg('ordinal', day || this.get('date'));
517
-	},
518
-
519
-	getTimezone: function(){
520
-		return this.toString()
521
-			.replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/, '$1')
522
-			.replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, '$1$2$3');
523
-	},
524
-
525
-	getGMTOffset: function(){
526
-		var off = this.get('timezoneOffset');
527
-		return ((off > 0) ? '-' : '+') + pad((off.abs() / 60).floor(), 2) + pad(off % 60, 2);
528
-	},
529
-
530
-	setAMPM: function(ampm){
531
-		ampm = ampm.toUpperCase();
532
-		var hr = this.get('hr');
533
-		if (hr > 11 && ampm == 'AM') return this.decrement('hour', 12);
534
-		else if (hr < 12 && ampm == 'PM') return this.increment('hour', 12);
535
-		return this;
536
-	},
537
-
538
-	getAMPM: function(){
539
-		return (this.get('hr') < 12) ? 'AM' : 'PM';
540
-	},
541
-
542
-	parse: function(str){
543
-		this.set('time', Date.parse(str));
544
-		return this;
545
-	},
546
-
547
-	isValid: function(date){
548
-		return !isNaN((date || this).valueOf());
549
-	},
550
-
551
-	format: function(f){
552
-		if (!this.isValid()) return 'invalid date';
553
-		if (!f) f = '%x %X';
554
-
555
-		var formatLower = f.toLowerCase();
556
-		if (formatters[formatLower]) return formatters[formatLower](this); // it's a formatter!
557
-		f = formats[formatLower] || f; // replace short-hand with actual format
558
-
559
-		var d = this;
560
-		return f.replace(/%([a-z%])/gi,
561
-			function($0, $1){
562
-				switch ($1){
563
-					case 'a': return Date.getMsg('days_abbr')[d.get('day')];
564
-					case 'A': return Date.getMsg('days')[d.get('day')];
565
-					case 'b': return Date.getMsg('months_abbr')[d.get('month')];
566
-					case 'B': return Date.getMsg('months')[d.get('month')];
567
-					case 'c': return d.format('%a %b %d %H:%M:%S %Y');
568
-					case 'd': return pad(d.get('date'), 2);
569
-					case 'e': return pad(d.get('date'), 2, ' ');
570
-					case 'H': return pad(d.get('hr'), 2);
571
-					case 'I': return pad((d.get('hr') % 12) || 12, 2);
572
-					case 'j': return pad(d.get('dayofyear'), 3);
573
-					case 'k': return pad(d.get('hr'), 2, ' ');
574
-					case 'l': return pad((d.get('hr') % 12) || 12, 2, ' ');
575
-					case 'L': return pad(d.get('ms'), 3);
576
-					case 'm': return pad((d.get('mo') + 1), 2);
577
-					case 'M': return pad(d.get('min'), 2);
578
-					case 'o': return d.get('ordinal');
579
-					case 'p': return Date.getMsg(d.get('ampm'));
580
-					case 's': return Math.round(d / 1000);
581
-					case 'S': return pad(d.get('seconds'), 2);
582
-					case 'T': return d.format('%H:%M:%S');
583
-					case 'U': return pad(d.get('week'), 2);
584
-					case 'w': return d.get('day');
585
-					case 'x': return d.format(Date.getMsg('shortDate'));
586
-					case 'X': return d.format(Date.getMsg('shortTime'));
587
-					case 'y': return d.get('year').toString().substr(2);
588
-					case 'Y': return d.get('year');
589
-					case 'z': return d.get('GMTOffset');
590
-					case 'Z': return d.get('Timezone');
591
-				}
592
-				return $1;
593
-			}
594
-		);
595
-	},
596
-
597
-	toISOString: function(){
598
-		return this.format('iso8601');
599
-	}
600
-
601
-}).alias({
602
-	toJSON: 'toISOString',
603
-	compare: 'diff',
604
-	strftime: 'format'
605
-});
606
-
607
-var formats = {
608
-	db: '%Y-%m-%d %H:%M:%S',
609
-	compact: '%Y%m%dT%H%M%S',
610
-	'short': '%d %b %H:%M',
611
-	'long': '%B %d, %Y %H:%M'
612
-};
613
-
614
-// The day and month abbreviations are standardized, so we cannot use simply %a and %b because they will get localized
615
-var rfcDayAbbr = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
616
-	rfcMonthAbbr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
617
-
618
-var formatters = {
619
-	rfc822: function(date){
620
-		return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %Z');
621
-	},
622
-	rfc2822: function(date){
623
-		return rfcDayAbbr[date.get('day')] + date.format(', %d ') + rfcMonthAbbr[date.get('month')] + date.format(' %Y %H:%M:%S %z');
624
-	},
625
-	iso8601: function(date){
626
-		return (
627
-			date.getUTCFullYear() + '-' +
628
-			pad(date.getUTCMonth() + 1, 2) + '-' +
629
-			pad(date.getUTCDate(), 2) + 'T' +
630
-			pad(date.getUTCHours(), 2) + ':' +
631
-			pad(date.getUTCMinutes(), 2) + ':' +
632
-			pad(date.getUTCSeconds(), 2) + '.' +
633
-			pad(date.getUTCMilliseconds(), 3) + 'Z'
634
-		);
635
-	}
636
-};
637
-
638
-
639
-var parsePatterns = [],
640
-	nativeParse = Date.parse;
641
-
642
-var parseWord = function(type, word, num){
643
-	var ret = -1,
644
-		translated = Date.getMsg(type + 's');
645
-	switch (typeOf(word)){
646
-		case 'object':
647
-			ret = translated[word.get(type)];
648
-			break;
649
-		case 'number':
650
-			ret = translated[word];
651
-			if (!ret) throw new Error('Invalid ' + type + ' index: ' + word);
652
-			break;
653
-		case 'string':
654
-			var match = translated.filter(function(name){
655
-				return this.test(name);
656
-			}, new RegExp('^' + word, 'i'));
657
-			if (!match.length) throw new Error('Invalid ' + type + ' string');
658
-			if (match.length > 1) throw new Error('Ambiguous ' + type);
659
-			ret = match[0];
660
-	}
661
-
662
-	return (num) ? translated.indexOf(ret) : ret;
663
-};
664
-
665
-var startCentury = 1900,
666
-	startYear = 70;
667
-
668
-Date.extend({
669
-
670
-	getMsg: function(key, args){
671
-		return Locale.get('Date.' + key, args);
672
-	},
673
-
674
-	units: {
675
-		ms: Function.from(1),
676
-		second: Function.from(1000),
677
-		minute: Function.from(60000),
678
-		hour: Function.from(3600000),
679
-		day: Function.from(86400000),
680
-		week: Function.from(608400000),
681
-		month: function(month, year){
682
-			var d = new Date;
683
-			return Date.daysInMonth(month != null ? month : d.get('mo'), year != null ? year : d.get('year')) * 86400000;
684
-		},
685
-		year: function(year){
686
-			year = year || new Date().get('year');
687
-			return Date.isLeapYear(year) ? 31622400000 : 31536000000;
688
-		}
689
-	},
690
-
691
-	daysInMonth: function(month, year){
692
-		return [31, Date.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
693
-	},
694
-
695
-	isLeapYear: function(year){
696
-		return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
697
-	},
698
-
699
-	parse: function(from){
700
-		var t = typeOf(from);
701
-		if (t == 'number') return new Date(from);
702
-		if (t != 'string') return from;
703
-		from = from.clean();
704
-		if (!from.length) return null;
705
-
706
-		var parsed;
707
-		parsePatterns.some(function(pattern){
708
-			var bits = pattern.re.exec(from);
709
-			return (bits) ? (parsed = pattern.handler(bits)) : false;
710
-		});
711
-
712
-		if (!(parsed && parsed.isValid())){
713
-			parsed = new Date(nativeParse(from));
714
-			if (!(parsed && parsed.isValid())) parsed = new Date(from.toInt());
715
-		}
716
-		return parsed;
717
-	},
718
-
719
-	parseDay: function(day, num){
720
-		return parseWord('day', day, num);
721
-	},
722
-
723
-	parseMonth: function(month, num){
724
-		return parseWord('month', month, num);
725
-	},
726
-
727
-	parseUTC: function(value){
728
-		var localDate = new Date(value);
729
-		var utcSeconds = Date.UTC(
730
-			localDate.get('year'),
731
-			localDate.get('mo'),
732
-			localDate.get('date'),
733
-			localDate.get('hr'),
734
-			localDate.get('min'),
735
-			localDate.get('sec'),
736
-			localDate.get('ms')
737
-		);
738
-		return new Date(utcSeconds);
739
-	},
740
-
741
-	orderIndex: function(unit){
742
-		return Date.getMsg('dateOrder').indexOf(unit) + 1;
743
-	},
744
-
745
-	defineFormat: function(name, format){
746
-		formats[name] = format;
747
-		return this;
748
-	},
749
-
750
-	defineFormats: function(formats){
751
-		for (var name in formats) Date.defineFormat(name, formats[name]);
752
-		return this;
753
-	},
754
-
755
-
756
-
757
-	defineParser: function(pattern){
758
-		parsePatterns.push((pattern.re && pattern.handler) ? pattern : build(pattern));
759
-		return this;
760
-	},
761
-
762
-	defineParsers: function(){
763
-		Array.flatten(arguments).each(Date.defineParser);
764
-		return this;
765
-	},
766
-
767
-	define2DigitYearStart: function(year){
768
-		startYear = year % 100;
769
-		startCentury = year - startYear;
770
-		return this;
771
-	}
772
-
773
-});
774
-
775
-var regexOf = function(type){
776
-	return new RegExp('(?:' + Date.getMsg(type).map(function(name){
777
-		return name.substr(0, 3);
778
-	}).join('|') + ')[a-z]*');
779
-};
780
-
781
-var replacers = function(key){
782
-	switch (key){
783
-		case 'T':
784
-			return '%H:%M:%S';
785
-		case 'x': // iso8601 covers yyyy-mm-dd, so just check if month is first
786
-			return ((Date.orderIndex('month') == 1) ? '%m[-./]%d' : '%d[-./]%m') + '([-./]%y)?';
787
-		case 'X':
788
-			return '%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%z?';
789
-	}
790
-	return null;
791
-};
792
-
793
-var keys = {
794
-	d: /[0-2]?[0-9]|3[01]/,
795
-	H: /[01]?[0-9]|2[0-3]/,
796
-	I: /0?[1-9]|1[0-2]/,
797
-	M: /[0-5]?\d/,
798
-	s: /\d+/,
799
-	o: /[a-z]*/,
800
-	p: /[ap]\.?m\.?/,
801
-	y: /\d{2}|\d{4}/,
802
-	Y: /\d{4}/,
803
-	z: /Z|[+-]\d{2}(?::?\d{2})?/
804
-};
805
-
806
-keys.m = keys.I;
807
-keys.S = keys.M;
808
-
809
-var currentLanguage;
810
-
811
-var recompile = function(language){
812
-	currentLanguage = language;
813
-
814
-	keys.a = keys.A = regexOf('days');
815
-	keys.b = keys.B = regexOf('months');
816
-
817
-	parsePatterns.each(function(pattern, i){
818
-		if (pattern.format) parsePatterns[i] = build(pattern.format);
819
-	});
820
-};
821
-
822
-var build = function(format){
823
-	if (!currentLanguage) return {format: format};
824
-
825
-	var parsed = [];
826
-	var re = (format.source || format) // allow format to be regex
827
-	 .replace(/%([a-z])/gi,
828
-		function($0, $1){
829
-			return replacers($1) || $0;
830
-		}
831
-	).replace(/\((?!\?)/g, '(?:') // make all groups non-capturing
832
-	 .replace(/ (?!\?|\*)/g, ',? ') // be forgiving with spaces and commas
833
-	 .replace(/%([a-z%])/gi,
834
-		function($0, $1){
835
-			var p = keys[$1];
836
-			if (!p) return $1;
837
-			parsed.push($1);
838
-			return '(' + p.source + ')';
839
-		}
840
-	).replace(/\[a-z\]/gi, '[a-z\\u00c0-\\uffff;\&]'); // handle unicode words
841
-
842
-	return {
843
-		format: format,
844
-		re: new RegExp('^' + re + '$', 'i'),
845
-		handler: function(bits){
846
-			bits = bits.slice(1).associate(parsed);
847
-			var date = new Date().clearTime(),
848
-				year = bits.y || bits.Y;
849
-
850
-			if (year != null) handle.call(date, 'y', year); // need to start in the right year
851
-			if ('d' in bits) handle.call(date, 'd', 1);
852
-			if ('m' in bits || bits.b || bits.B) handle.call(date, 'm', 1);
853
-
854
-			for (var key in bits) handle.call(date, key, bits[key]);
855
-			return date;
856
-		}
857
-	};
858
-};
859
-
860
-var handle = function(key, value){
861
-	if (!value) return this;
862
-
863
-	switch (key){
864
-		case 'a': case 'A': return this.set('day', Date.parseDay(value, true));
865
-		case 'b': case 'B': return this.set('mo', Date.parseMonth(value, true));
866
-		case 'd': return this.set('date', value);
867
-		case 'H': case 'I': return this.set('hr', value);
868
-		case 'm': return this.set('mo', value - 1);
869
-		case 'M': return this.set('min', value);
870
-		case 'p': return this.set('ampm', value.replace(/\./g, ''));
871
-		case 'S': return this.set('sec', value);
872
-		case 's': return this.set('ms', ('0.' + value) * 1000);
873
-		case 'w': return this.set('day', value);
874
-		case 'Y': return this.set('year', value);
875
-		case 'y':
876
-			value = +value;
877
-			if (value < 100) value += startCentury + (value < startYear ? 100 : 0);
878
-			return this.set('year', value);
879
-		case 'z':
880
-			if (value == 'Z') value = '+00';
881
-			var offset = value.match(/([+-])(\d{2}):?(\d{2})?/);
882
-			offset = (offset[1] + '1') * (offset[2] * 60 + (+offset[3] || 0)) + this.getTimezoneOffset();
883
-			return this.set('time', this - offset * 60000);
884
-	}
885
-
886
-	return this;
887
-};
888
-
889
-Date.defineParsers(
890
-	'%Y([-./]%m([-./]%d((T| )%X)?)?)?', // "1999-12-31", "1999-12-31 11:59pm", "1999-12-31 23:59:59", ISO8601
891
-	'%Y%m%d(T%H(%M%S?)?)?', // "19991231", "19991231T1159", compact
892
-	'%x( %X)?', // "12/31", "12.31.99", "12-31-1999", "12/31/2008 11:59 PM"
893
-	'%d%o( %b( %Y)?)?( %X)?', // "31st", "31st December", "31 Dec 1999", "31 Dec 1999 11:59pm"
894
-	'%b( %d%o)?( %Y)?( %X)?', // Same as above with month and day switched
895
-	'%Y %b( %d%o( %X)?)?', // Same as above with year coming first
896
-	'%o %b %d %X %z %Y', // "Thu Oct 22 08:11:23 +0000 2009"
897
-	'%T', // %H:%M:%S
898
-	'%H:%M( ?%p)?' // "11:05pm", "11:05 am" and "11:05"
899
-);
900
-
901
-Locale.addEvent('change', function(language){
902
-	if (Locale.get('Date')) recompile(language);
903
-}).fireEvent('change', Locale.getCurrent());
904
-
905
-}).call(this);
906
-
907
-
908
-/*
909
-
910
-script: Date.Extras.js
911
-
912
-name: Date.Extras
913
-
914
-description: Extends the Date native object to include extra methods (on top of those in Date.js).
915
-
916
-license: MIT-style license
917
-
918
-authors:
919
-  - Aaron Newton
920
-  - Scott Kyle
921
-
922
-requires:
923
-  - /Date
924
-
925
-provides: [Date.Extras]
926
-
927
-...
928
-*/
929
-
930
-Date.implement({
931
-
932
-	timeDiffInWords: function(to){
933
-		return Date.distanceOfTimeInWords(this, to || new Date);
934
-	},
935
-
936
-	timeDiff: function(to, separator){
937
-		if (to == null) to = new Date;
938
-		var delta = ((to - this) / 1000).floor();
939
-
940
-		var vals = [],
941
-			durations = [60, 60, 24, 365, 0],
942
-			names = ['s', 'm', 'h', 'd', 'y'],
943
-			value, duration;
944
-
945
-		for (var item = 0; item < durations.length; item++){
946
-			if (item && !delta) break;
947
-			value = delta;
948
-			if ((duration = durations[item])){
949
-				value = (delta % duration);
950
-				delta = (delta / duration).floor();
951
-			}
952
-			vals.unshift(value + (names[item] || ''));
953
-		}
954
-
955
-		return vals.join(separator || ':');
956
-	}
957
-
958
-}).extend({
959
-
960
-	distanceOfTimeInWords: function(from, to){
961
-		return Date.getTimePhrase(((to - from) / 1000).toInt());
962
-	},
963
-
964
-	getTimePhrase: function(delta){
965
-		var suffix = (delta < 0) ? 'Until' : 'Ago';
966
-		if (delta < 0) delta *= -1;
967
-
968
-		var units = {
969
-			minute: 60,
970
-			hour: 60,
971
-			day: 24,
972
-			week: 7,
973
-			month: 52 / 12,
974
-			year: 12,
975
-			eon: Infinity
976
-		};
977
-
978
-		var msg = 'lessThanMinute';
979
-
980
-		for (var unit in units){
981
-			var interval = units[unit];
982
-			if (delta < 1.5 * interval){
983
-				if (delta > 0.75 * interval) msg = unit;
984
-				break;
985
-			}
986
-			delta /= interval;
987
-			msg = unit + 's';
988
-		}
989
-
990
-		delta = delta.round();
991
-		return Date.getMsg(msg + suffix, delta).substitute({delta: delta});
992
-	}
993
-
994
-}).defineParsers(
995
-
996
-	{
997
-		// "today", "tomorrow", "yesterday"
998
-		re: /^(?:tod|tom|yes)/i,
999
-		handler: function(bits){
1000
-			var d = new Date().clearTime();
1001
-			switch (bits[0]){
1002
-				case 'tom': return d.increment();
1003
-				case 'yes': return d.decrement();
1004
-				default: return d;
1005
-			}
1006
-		}
1007
-	},
1008
-
1009
-	{
1010
-		// "next Wednesday", "last Thursday"
1011
-		re: /^(next|last) ([a-z]+)$/i,
1012
-		handler: function(bits){
1013
-			var d = new Date().clearTime();
1014
-			var day = d.getDay();
1015
-			var newDay = Date.parseDay(bits[2], true);
1016
-			var addDays = newDay - day;
1017
-			if (newDay <= day) addDays += 7;
1018
-			if (bits[1] == 'last') addDays -= 7;
1019
-			return d.set('date', d.getDate() + addDays);
1020
-		}
1021
-	}
1022
-
1023
-).alias('timeAgoInWords', 'timeDiffInWords');
1024
-
1025
-
1026
-/*
1027
-
1028
-name: Hash
1029
-
1030
-description: Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects.
1031
-
1032
-license: MIT-style license.
1033
-
1034
-requires:
1035
-  - Core/Object
1036
-  - /MooTools.More
1037
-
1038
-provides: [Hash]
1039
-
1040
-...
1041
-*/
1042
-
1043
-(function(){
1044
-
1045
-if (this.Hash) return;
1046
-
1047
-var Hash = this.Hash = new Type('Hash', function(object){
1048
-	if (typeOf(object) == 'hash') object = Object.clone(object.getClean());
1049
-	for (var key in object) this[key] = object[key];
1050
-	return this;
1051
-});
1052
-
1053
-this.$H = function(object){
1054
-	return new Hash(object);
1055
-};
1056
-
1057
-Hash.implement({
1058
-
1059
-	forEach: function(fn, bind){
1060
-		Object.forEach(this, fn, bind);
1061
-	},
1062
-
1063
-	getClean: function(){
1064
-		var clean = {};
1065
-		for (var key in this){
1066
-			if (this.hasOwnProperty(key)) clean[key] = this[key];
1067
-		}
1068
-		return clean;
1069
-	},
1070
-
1071
-	getLength: function(){
1072
-		var length = 0;
1073
-		for (var key in this){
1074
-			if (this.hasOwnProperty(key)) length++;
1075
-		}
1076
-		return length;
1077
-	}
1078
-
1079
-});
1080
-
1081
-Hash.alias('each', 'forEach');
1082
-
1083
-Hash.implement({
1084
-
1085
-	has: Object.prototype.hasOwnProperty,
1086
-
1087
-	keyOf: function(value){
1088
-		return Object.keyOf(this, value);
1089
-	},
1090
-
1091
-	hasValue: function(value){
1092
-		return Object.contains(this, value);
1093
-	},
1094
-
1095
-	extend: function(properties){
1096
-		Hash.each(properties || {}, function(value, key){
1097
-			Hash.set(this, key, value);
1098
-		}, this);
1099
-		return this;
1100
-	},
1101
-
1102
-	combine: function(properties){
1103
-		Hash.each(properties || {}, function(value, key){
1104
-			Hash.include(this, key, value);
1105
-		}, this);
1106
-		return this;
1107
-	},
1108
-
1109
-	erase: function(key){
1110
-		if (this.hasOwnProperty(key)) delete this[key];
1111
-		return this;
1112
-	},
1113
-
1114
-	get: function(key){
1115
-		return (this.hasOwnProperty(key)) ? this[key] : null;
1116
-	},
1117
-
1118
-	set: function(key, value){
1119
-		if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
1120
-		return this;
1121
-	},
1122
-
1123
-	empty: function(){
1124
-		Hash.each(this, function(value, key){
1125
-			delete this[key];
1126
-		}, this);
1127
-		return this;
1128
-	},
1129
-
1130
-	include: function(key, value){
1131
-		if (this[key] == undefined) this[key] = value;
1132
-		return this;
1133
-	},
1134
-
1135
-	map: function(fn, bind){
1136
-		return new Hash(Object.map(this, fn, bind));
1137
-	},
1138
-
1139
-	filter: function(fn, bind){
1140
-		return new Hash(Object.filter(this, fn, bind));
1141
-	},
1142
-
1143
-	every: function(fn, bind){
1144
-		return Object.every(this, fn, bind);
1145
-	},
1146
-
1147
-	some: function(fn, bind){
1148
-		return Object.some(this, fn, bind);
1149
-	},
1150
-
1151
-	getKeys: function(){
1152
-		return Object.keys(this);
1153
-	},
1154
-
1155
-	getValues: function(){
1156
-		return Object.values(this);
1157
-	},
1158
-
1159
-	toQueryString: function(base){
1160
-		return Object.toQueryString(this, base);
1161
-	}
1162
-
1163
-});
1164
-
1165
-Hash.alias({indexOf: 'keyOf', contains: 'hasValue'});
1166
-
1167
-
1168
-}).call(this);
1169
-
1170
-
1171
-
1172
-/*
1173
-
1174
-script: Request.JSONP.js
1175
-
1176
-name: Request.JSONP
1177
-
1178
-description: Defines Request.JSONP, a class for cross domain javascript via script injection.
1179
-
1180
-license: MIT-style license
1181
-
1182
-authors:
1183
-  - Aaron Newton
1184
-  - Guillermo Rauch
1185
-  - Arian Stolwijk
1186
-
1187
-requires:
1188
-  - Core/Element
1189
-  - Core/Request
1190
-  - MooTools.More
1191
-
1192
-provides: [Request.JSONP]
1193
-
1194
-...
1195
-*/
1196
-
1197
-Request.JSONP = new Class({
1198
-
1199
-	Implements: [Chain, Events, Options],
1200
-
1201
-	options: {
1202
-	/*
1203
-		onRequest: function(src, scriptElement){},
1204
-		onComplete: function(data){},
1205
-		onSuccess: function(data){},
1206
-		onCancel: function(){},
1207
-		onTimeout: function(){},
1208
-		onError: function(){}, */
1209
-		onRequest: function(src){
1210
-			if (this.options.log && window.console && console.log){
1211
-				console.log('JSONP retrieving script with url:' + src);
1212
-			}
1213
-		},
1214
-		onError: function(src){
1215
-			if (this.options.log && window.console && console.warn){
1216
-				console.warn('JSONP '+ src +' will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs');
1217
-			}
1218
-		},
1219
-		url: '',
1220
-		callbackKey: 'callback',
1221
-		injectScript: document.head,
1222
-		data: '',
1223
-		link: 'ignore',
1224
-		timeout: 0,
1225
-		log: false
1226
-	},
1227
-
1228
-	initialize: function(options){
1229
-		this.setOptions(options);
1230
-	},
1231
-
1232
-	send: function(options){
1233
-		if (!Request.prototype.check.call(this, options)) return this;
1234
-		this.running = true;
1235
-
1236
-		var type = typeOf(options);
1237
-		if (type == 'string' || type == 'element') options = {data: options};
1238
-		options = Object.merge(this.options, options || {});
1239
-
1240
-		var data = options.data;
1241
-		switch (typeOf(data)){
1242
-			case 'element': data = document.id(data).toQueryString(); break;
1243
-			case 'object': case 'hash': data = Object.toQueryString(data);
1244
-		}
1245
-
1246
-		var index = this.index = Request.JSONP.counter++;
1247
-
1248
-		var src = options.url +
1249
-			(options.url.test('\\?') ? '&' :'?') +
1250
-			(options.callbackKey) +
1251
-			'=Request.JSONP.request_map.request_'+ index +
1252
-			(data ? '&' + data : '');
1253
-
1254
-		if (src.length > 2083) this.fireEvent('error', src);
1255
-
1256
-		Request.JSONP.request_map['request_' + index] = function(){
1257
-			this.success(arguments, index);
1258
-		}.bind(this);
1259
-
1260
-		var script = this.getScript(src).inject(options.injectScript);
1261
-		this.fireEvent('request', [src, script]);
1262
-
1263
-		if (options.timeout) this.timeout.delay(options.timeout, this);
1264
-
1265
-		return this;
1266
-	},
1267
-
1268
-	getScript: function(src){
1269
-		if (!this.script) this.script = new Element('script[type=text/javascript]', {
1270
-			async: true,
1271
-			src: src
1272
-		});
1273
-		return this.script;
1274
-	},
1275
-
1276
-	success: function(args, index){
1277
-		if (!this.running) return false;
1278
-		this.clear()
1279
-			.fireEvent('complete', args).fireEvent('success', args)
1280
-			.callChain();
1281
-	},
1282
-
1283
-	cancel: function(){
1284
-		if (this.running) this.clear().fireEvent('cancel');
1285
-		return this;
1286
-	},
1287
-
1288
-	isRunning: function(){
1289
-		return !!this.running;
1290
-	},
1291
-
1292
-	clear: function(){
1293
-		this.running = false;
1294
-		if (this.script){
1295
-			this.script.destroy();
1296
-			this.script = null;
1297
-		}
1298
-		return this;
1299
-	},
1300
-
1301
-	timeout: function(){
1302
-		if (this.running){
1303
-			this.running = false;
1304
-			this.fireEvent('timeout', [this.script.get('src'), this.script]).fireEvent('failure').cancel();
1305
-		}
1306
-		return this;
1307
-	}
1308
-
1309
-});
1310
-
1311
-Request.JSONP.counter = 0;
1312
-Request.JSONP.request_map = {};
1313
-
1314
-
1315 1
deleted file mode 100644
... ...
@@ -1,5492 +0,0 @@
1
-/*
2
-MooTools: the javascript framework
3
-
4
-web build:
5
- - http://mootools.net/core/7c56cfef9dddcf170a5d68e3fb61cfd7
6
-
7
-packager build:
8
- - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff
9
-
10
-/*
11
-
12
-name: Core
13
-
14
-description: The heart of MooTools.
15
-
16
-license: MIT-style license.
17
-
18
-copyright: Copyright (c) 2006-2010 [Valerio Proietti](http://mad4milk.net/).
19
-
20
-authors: The MooTools production team (http://mootools.net/developers/)
21
-
22
-inspiration:
23
-  - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
24
-  - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
25
-
26
-provides: [Core, MooTools, Type, typeOf, instanceOf, Native]
27
-
28
-...
29
-*/
30
-
31
-(function(){
32
-
33
-this.MooTools = {
34
-	version: '1.3.1',
35
-	build: 'af48c8d589f43f32212f9bb8ff68a127e6a3ba6c'
36
-};
37
-
38
-// typeOf, instanceOf
39
-
40
-var typeOf = this.typeOf = function(item){
41
-	if (item == null) return 'null';
42
-	if (item.$family) return item.$family();
43
-
44
-	if (item.nodeName){
45
-		if (item.nodeType == 1) return 'element';
46
-		if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace';
47
-	} else if (typeof item.length == 'number'){
48
-		if (item.callee) return 'arguments';
49
-		if ('item' in item) return 'collection';
50
-	}
51
-
52
-	return typeof item;
53
-};
54
-
55
-var instanceOf = this.instanceOf = function(item, object){
56
-	if (item == null) return false;
57
-	var constructor = item.$constructor || item.constructor;
58
-	while (constructor){
59
-		if (constructor === object) return true;
60
-		constructor = constructor.parent;
61
-	}
62
-	return item instanceof object;
63
-};
64
-
65
-// Function overloading
66
-
67
-var Function = this.Function;
68
-
69
-var enumerables = true;
70
-for (var i in {toString: 1}) enumerables = null;
71
-if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor'];
72
-
73
-Function.prototype.overloadSetter = function(usePlural){
74
-	var self = this;
75
-	return function(a, b){
76
-		if (a == null) return this;
77
-		if (usePlural || typeof a != 'string'){
78
-			for (var k in a) self.call(this, k, a[k]);
79
-			if (enumerables) for (var i = enumerables.length; i--;){
80
-				k = enumerables[i];
81
-				if (a.hasOwnProperty(k)) self.call(this, k, a[k]);
82
-			}
83
-		} else {
84
-			self.call(this, a, b);
85
-		}
86
-		return this;
87
-	};
88
-};
89
-
90
-Function.prototype.overloadGetter = function(usePlural){
91
-	var self = this;
92
-	return function(a){
93
-		var args, result;
94
-		if (usePlural || typeof a != 'string') args = a;
95
-		else if (arguments.length > 1) args = arguments;
96
-		if (args){
97
-			result = {};
98
-			for (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]);
99
-		} else {
100
-			result = self.call(this, a);
101
-		}
102
-		return result;
103
-	};
104
-};
105
-
106
-Function.prototype.extend = function(key, value){
107
-	this[key] = value;
108
-}.overloadSetter();
109
-
110
-Function.prototype.implement = function(key, value){
111
-	this.prototype[key] = value;
112
-}.overloadSetter();
113
-
114
-// From
115
-
116
-var slice = Array.prototype.slice;
117
-
118
-Function.from = function(item){
119
-	return (typeOf(item) == 'function') ? item : function(){
120
-		return item;
121
-	};
122
-};
123
-
124
-Array.from = function(item){
125
-	if (item == null) return [];
126
-	return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item];
127
-};
128
-
129
-Number.from = function(item){
130
-	var number = parseFloat(item);
131
-	return isFinite(number) ? number : null;
132
-};
133
-
134
-String.from = function(item){
135
-	return item + '';
136
-};
137
-
138
-// hide, protect
139
-
140
-Function.implement({
141
-
142
-	hide: function(){
143
-		this.$hidden = true;
144
-		return this;
145
-	},
146
-
147
-	protect: function(){
148
-		this.$protected = true;
149
-		return this;
150
-	}
151
-
152
-});
153
-
154
-// Type
155
-
156
-var Type = this.Type = function(name, object){
157
-	if (name){
158
-		var lower = name.toLowerCase();
159
-		var typeCheck = function(item){
160
-			return (typeOf(item) == lower);
161
-		};
162
-
163
-		Type['is' + name] = typeCheck;
164
-		if (object != null){
165
-			object.prototype.$family = (function(){
166
-				return lower;
167
-			}).hide();
168
-
169
-		}
170
-	}
171
-
172
-	if (object == null) return null;
173
-
174
-	object.extend(this);
175
-	object.$constructor = Type;
176
-	object.prototype.$constructor = object;
177
-
178
-	return object;
179
-};
180
-
181
-var toString = Object.prototype.toString;
182
-
183
-Type.isEnumerable = function(item){
184
-	return (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' );
185
-};
186
-
187
-var hooks = {};
188
-
189
-var hooksOf = function(object){
190
-	var type = typeOf(object.prototype);
191
-	return hooks[type] || (hooks[type] = []);
192
-};
193
-
194
-var implement = function(name, method){
195
-	if (method && method.$hidden) return;
196
-
197
-	var hooks = hooksOf(this);
198
-
199
-	for (var i = 0; i < hooks.length; i++){
200
-		var hook = hooks[i];
201
-		if (typeOf(hook) == 'type') implement.call(hook, name, method);
202
-		else hook.call(this, name, method);
203
-	}
204
-
205
-	var previous = this.prototype[name];
206
-	if (previous == null || !previous.$protected) this.prototype[name] = method;
207
-
208
-	if (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){
209
-		return method.apply(item, slice.call(arguments, 1));
210
-	});
211
-};
212
-
213
-var extend = function(name, method){
214
-	if (method && method.$hidden) return;
215
-	var previous = this[name];
216
-	if (previous == null || !previous.$protected) this[name] = method;
217
-};
218
-
219
-Type.implement({
220
-
221
-	implement: implement.overloadSetter(),
222
-
223
-	extend: extend.overloadSetter(),
224
-
225
-	alias: function(name, existing){
226
-		implement.call(this, name, this.prototype[existing]);
227
-	}.overloadSetter(),
228
-
229
-	mirror: function(hook){
230
-		hooksOf(this).push(hook);
231
-		return this;
232
-	}
233
-
234
-});
235
-
236
-new Type('Type', Type);
237
-
238
-// Default Types
239
-
240
-var force = function(name, object, methods){
241
-	var isType = (object != Object),
242
-		prototype = object.prototype;
243
-
244
-	if (isType) object = new Type(name, object);
245
-
246
-	for (var i = 0, l = methods.length; i < l; i++){
247
-		var key = methods[i],
248
-			generic = object[key],
249
-			proto = prototype[key];
250
-
251
-		if (generic) generic.protect();
252
-
253
-		if (isType && proto){
254
-			delete prototype[key];
255
-			prototype[key] = proto.protect();
256
-		}
257
-	}
258
-
259
-	if (isType) object.implement(prototype);
260
-
261
-	return force;
262
-};
263
-
264
-force('String', String, [
265
-	'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search',
266
-	'slice', 'split', 'substr', 'substring', 'toLowerCase', 'toUpperCase'
267
-])('Array', Array, [
268
-	'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice',
269
-	'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight'
270
-])('Number', Number, [
271
-	'toExponential', 'toFixed', 'toLocaleString', 'toPrecision'
272
-])('Function', Function, [
273
-	'apply', 'call', 'bind'
274
-])('RegExp', RegExp, [
275
-	'exec', 'test'
276
-])('Object', Object, [
277
-	'create', 'defineProperty', 'defineProperties', 'keys',
278
-	'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames',
279
-	'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen'
280
-])('Date', Date, ['now']);
281
-
282
-Object.extend = extend.overloadSetter();
283
-
284
-Date.extend('now', function(){
285
-	return +(new Date);
286
-});
287
-
288
-new Type('Boolean', Boolean);
289
-
290
-// fixes NaN returning as Number
291
-
292
-Number.prototype.$family = function(){
293
-	return isFinite(this) ? 'number' : 'null';
294
-}.hide();
295
-
296
-// Number.random
297
-
298
-Number.extend('random', function(min, max){
299
-	return Math.floor(Math.random() * (max - min + 1) + min);
300
-});
301
-
302
-// forEach, each
303
-
304
-var hasOwnProperty = Object.prototype.hasOwnProperty;
305
-Object.extend('forEach', function(object, fn, bind){
306
-	for (var key in object){
307
-		if (hasOwnProperty.call(object, key)) fn.call(bind, object[key], key, object);
308
-	}
309
-});
310
-
311
-Object.each = Object.forEach;
312
-
313
-Array.implement({
314
-
315
-	forEach: function(fn, bind){
316
-		for (var i = 0, l = this.length; i < l; i++){
317
-			if (i in this) fn.call(bind, this[i], i, this);
318
-		}
319
-	},
320
-
321
-	each: function(fn, bind){
322
-		Array.forEach(this, fn, bind);
323
-		return this;
324
-	}
325
-
326
-});
327
-
328
-// Array & Object cloning, Object merging and appending
329
-
330
-var cloneOf = function(item){
331
-	switch (typeOf(item)){
332
-		case 'array': return item.clone();
333
-		case 'object': return Object.clone(item);
334
-		default: return item;
335
-	}
336
-};
337
-
338
-Array.implement('clone', function(){
339
-	var i = this.length, clone = new Array(i);
340
-	while (i--) clone[i] = cloneOf(this[i]);
341
-	return clone;
342
-});
343
-
344
-var mergeOne = function(source, key, current){
345
-	switch (typeOf(current)){
346
-		case 'object':
347
-			if (typeOf(source[key]) == 'object') Object.merge(source[key], current);
348
-			else source[key] = Object.clone(current);
349
-		break;
350
-		case 'array': source[key] = current.clone(); break;
351
-		default: source[key] = current;
352
-	}
353
-	return source;
354
-};
355
-
356
-Object.extend({
357
-
358
-	merge: function(source, k, v){
359
-		if (typeOf(k) == 'string') return mergeOne(source, k, v);
360
-		for (var i = 1, l = arguments.length; i < l; i++){
361
-			var object = arguments[i];
362
-			for (var key in object) mergeOne(source, key, object[key]);
363
-		}
364
-		return source;
365
-	},
366
-
367
-	clone: function(object){
368
-		var clone = {};
369
-		for (var key in object) clone[key] = cloneOf(object[key]);
370
-		return clone;
371
-	},
372
-
373
-	append: function(original){
374
-		for (var i = 1, l = arguments.length; i < l; i++){
375
-			var extended = arguments[i] || {};
376
-			for (var key in extended) original[key] = extended[key];
377
-		}
378
-		return original;
379
-	}
380
-
381
-});
382
-
383
-// Object-less types
384
-
385
-['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){
386
-	new Type(name);
387
-});
388
-
389
-// Unique ID
390
-
391
-var UID = Date.now();
392
-
393
-String.extend('uniqueID', function(){
394
-	return (UID++).toString(36);
395
-});
396
-
397
-
398
-
399
-}).call(this);
400
-
401
-
402
-/*
403
-
404
-name: Array
405
-
406
-description: Contains Array Prototypes like each, contains, and erase.
407
-
408
-license: MIT-style license.
409
-
410
-requires: Type
411
-
412
-provides: Array
413
-
414
-...
415
-*/
416
-
417
-Array.implement({
418
-
419
-	invoke: function(methodName){
420
-		var args = Array.slice(arguments, 1);
421
-		return this.map(function(item){
422
-			return item[methodName].apply(item, args);
423
-		});
424
-	},
425
-
426
-	every: function(fn, bind){
427
-		for (var i = 0, l = this.length; i < l; i++){
428
-			if ((i in this) && !fn.call(bind, this[i], i, this)) return false;
429
-		}
430
-		return true;
431
-	},
432
-
433
-	filter: function(fn, bind){
434
-		var results = [];
435
-		for (var i = 0, l = this.length; i < l; i++){
436
-			if ((i in this) && fn.call(bind, this[i], i, this)) results.push(this[i]);
437
-		}
438
-		return results;
439
-	},
440
-
441
-	clean: function(){
442
-		return this.filter(function(item){
443
-			return item != null;
444
-		});
445
-	},
446
-
447
-	indexOf: function(item, from){
448
-		var len = this.length;
449
-		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
450
-			if (this[i] === item) return i;
451
-		}
452
-		return -1;
453
-	},
454
-
455
-	map: function(fn, bind){
456
-		var results = [];
457
-		for (var i = 0, l = this.length; i < l; i++){
458
-			if (i in this) results[i] = fn.call(bind, this[i], i, this);
459
-		}
460
-		return results;
461
-	},
462
-
463
-	some: function(fn, bind){
464
-		for (var i = 0, l = this.length; i < l; i++){
465
-			if ((i in this) && fn.call(bind, this[i], i, this)) return true;
466
-		}
467
-		return false;
468
-	},
469
-
470
-	associate: function(keys){
471
-		var obj = {}, length = Math.min(this.length, keys.length);
472
-		for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
473
-		return obj;
474
-	},
475
-
476
-	link: function(object){
477
-		var result = {};
478
-		for (var i = 0, l = this.length; i < l; i++){
479
-			for (var key in object){
480
-				if (object[key](this[i])){
481
-					result[key] = this[i];
482
-					delete object[key];
483
-					break;
484
-				}
485
-			}
486
-		}
487
-		return result;
488
-	},
489
-
490
-	contains: function(item, from){
491
-		return this.indexOf(item, from) != -1;
492
-	},
493
-
494
-	append: function(array){
495
-		this.push.apply(this, array);
496
-		return this;
497
-	},
498
-
499
-	getLast: function(){
500
-		return (this.length) ? this[this.length - 1] : null;
501
-	},
502
-
503
-	getRandom: function(){
504
-		return (this.length) ? this[Number.random(0, this.length - 1)] : null;
505
-	},
506
-
507
-	include: function(item){
508
-		if (!this.contains(item)) this.push(item);
509
-		return this;
510
-	},
511
-
512
-	combine: function(array){
513
-		for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
514
-		return this;
515
-	},
516
-
517
-	erase: function(item){
518
-		for (var i = this.length; i--;){
519
-			if (this[i] === item) this.splice(i, 1);
520
-		}
521
-		return this;
522
-	},
523
-
524
-	empty: function(){
525
-		this.length = 0;
526
-		return this;
527
-	},
528
-
529
-	flatten: function(){
530
-		var array = [];
531
-		for (var i = 0, l = this.length; i < l; i++){
532
-			var type = typeOf(this[i]);
533
-			if (type == 'null') continue;
534
-			array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]);
535
-		}
536
-		return array;
537
-	},
538
-
539
-	pick: function(){
540
-		for (var i = 0, l = this.length; i < l; i++){
541
-			if (this[i] != null) return this[i];
542
-		}
543
-		return null;
544
-	},
545
-
546
-	hexToRgb: function(array){
547
-		if (this.length != 3) return null;
548
-		var rgb = this.map(function(value){
549
-			if (value.length == 1) value += value;
550
-			return value.toInt(16);
551
-		});
552
-		return (array) ? rgb : 'rgb(' + rgb + ')';
553
-	},
554
-
555
-	rgbToHex: function(array){
556
-		if (this.length < 3) return null;
557
-		if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
558
-		var hex = [];
559
-		for (var i = 0; i < 3; i++){
560
-			var bit = (this[i] - 0).toString(16);
561
-			hex.push((bit.length == 1) ? '0' + bit : bit);
562
-		}
563
-		return (array) ? hex : '#' + hex.join('');
564
-	}
565
-
566
-});
567
-
568
-
569
-
570
-
571
-/*
572
-
573
-name: String
574
-
575
-description: Contains String Prototypes like camelCase, capitalize, test, and toInt.
576
-
577
-license: MIT-style license.
578
-
579
-requires: Type
580
-
581
-provides: String
582
-
583
-...
584
-*/
585
-
586
-String.implement({
587
-
588
-	test: function(regex, params){
589
-		return ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this);
590
-	},
591
-
592
-	contains: function(string, separator){
593
-		return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
594
-	},
595
-
596
-	trim: function(){
597
-		return this.replace(/^\s+|\s+$/g, '');
598
-	},
599
-
600
-	clean: function(){
601
-		return this.replace(/\s+/g, ' ').trim();
602
-	},
603
-
604
-	camelCase: function(){
605
-		return this.replace(/-\D/g, function(match){
606
-			return match.charAt(1).toUpperCase();
607
-		});
608
-	},
609
-
610
-	hyphenate: function(){
611
-		return this.replace(/[A-Z]/g, function(match){
612
-			return ('-' + match.charAt(0).toLowerCase());
613
-		});
614
-	},
615
-
616
-	capitalize: function(){
617
-		return this.replace(/\b[a-z]/g, function(match){
618
-			return match.toUpperCase();
619
-		});
620
-	},
621
-
622
-	escapeRegExp: function(){
623
-		return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
624
-	},
625
-
626
-	toInt: function(base){
627
-		return parseInt(this, base || 10);
628
-	},
629
-
630
-	toFloat: function(){
631
-		return parseFloat(this);
632
-	},
633
-
634
-	hexToRgb: function(array){
635
-		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
636
-		return (hex) ? hex.slice(1).hexToRgb(array) : null;
637
-	},
638
-
639
-	rgbToHex: function(array){
640
-		var rgb = this.match(/\d{1,3}/g);
641
-		return (rgb) ? rgb.rgbToHex(array) : null;
642
-	},
643
-
644
-	substitute: function(object, regexp){
645
-		return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
646
-			if (match.charAt(0) == '\\') return match.slice(1);
647
-			return (object[name] != null) ? object[name] : '';
648
-		});
649
-	}
650
-
651
-});
652
-
653
-
654
-/*
655
-
656
-name: Number
657
-
658
-description: Contains Number Prototypes like limit, round, times, and ceil.
659
-
660
-license: MIT-style license.
661
-
662
-requires: Type
663
-
664
-provides: Number
665
-
666
-...
667
-*/
668
-
669
-Number.implement({
670
-
671
-	limit: function(min, max){
672
-		return Math.min(max, Math.max(min, this));
673
-	},
674
-
675
-	round: function(precision){
676
-		precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0);
677
-		return Math.round(this * precision) / precision;
678
-	},
679
-
680
-	times: function(fn, bind){
681
-		for (var i = 0; i < this; i++) fn.call(bind, i, this);
682
-	},
683
-
684
-	toFloat: function(){
685
-		return parseFloat(this);
686
-	},
687
-
688
-	toInt: function(base){
689
-		return parseInt(this, base || 10);
690
-	}
691
-
692
-});
693
-
694
-Number.alias('each', 'times');
695
-
696
-(function(math){
697
-	var methods = {};
698
-	math.each(function(name){
699
-		if (!Number[name]) methods[name] = function(){
700
-			return Math[name].apply(null, [this].concat(Array.from(arguments)));
701
-		};
702
-	});
703
-	Number.implement(methods);
704
-})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);
705
-
706
-
707
-/*
708
-
709
-name: Function
710
-
711
-description: Contains Function Prototypes like create, bind, pass, and delay.
712
-
713
-license: MIT-style license.
714
-
715
-requires: Type
716
-
717
-provides: Function
718
-
719
-...
720
-*/
721
-
722
-Function.extend({
723
-
724
-	attempt: function(){
725
-		for (var i = 0, l = arguments.length; i < l; i++){
726
-			try {
727
-				return arguments[i]();
728
-			} catch (e){}
729
-		}
730
-		return null;
731
-	}
732
-
733
-});
734
-
735
-Function.implement({
736
-
737
-	attempt: function(args, bind){
738
-		try {
739
-			return this.apply(bind, Array.from(args));
740
-		} catch (e){}
741
-
742
-		return null;
743
-	},
744
-
745
-	bind: function(bind){
746
-		var self = this,
747
-			args = (arguments.length > 1) ? Array.slice(arguments, 1) : null;
748
-
749
-		return function(){
750
-			if (!args && !arguments.length) return self.call(bind);
751
-			if (args && arguments.length) return self.apply(bind, args.concat(Array.from(arguments)));
752
-			return self.apply(bind, args || arguments);
753
-		};
754
-	},
755
-
756
-	pass: function(args, bind){
757
-		var self = this;
758
-		if (args != null) args = Array.from(args);
759
-		return function(){
760
-			return self.apply(bind, args || arguments);
761
-		};
762
-	},
763
-
764
-	delay: function(delay, bind, args){
765
-		return setTimeout(this.pass((args == null ? [] : args), bind), delay);
766
-	},
767
-
768
-	periodical: function(periodical, bind, args){
769
-		return setInterval(this.pass((args == null ? [] : args), bind), periodical);
770
-	}
771
-
772
-});
773
-
774
-
775
-
776
-
777
-/*
778
-
779
-name: Object
780
-
781
-description: Object generic methods
782
-
783
-license: MIT-style license.
784
-
785
-requires: Type
786
-
787
-provides: [Object, Hash]
788
-
789
-...
790
-*/
791
-
792
-(function(){
793
-
794
-var hasOwnProperty = Object.prototype.hasOwnProperty;
795
-
796
-Object.extend({
797
-
798
-	subset: function(object, keys){
799
-		var results = {};
800
-		for (var i = 0, l = keys.length; i < l; i++){
801
-			var k = keys[i];
802
-			results[k] = object[k];
803
-		}
804
-		return results;
805
-	},
806
-
807
-	map: function(object, fn, bind){
808
-		var results = {};
809
-		for (var key in object){
810
-			if (hasOwnProperty.call(object, key)) results[key] = fn.call(bind, object[key], key, object);
811
-		}
812
-		return results;
813
-	},
814
-
815
-	filter: function(object, fn, bind){
816
-		var results = {};
817
-		Object.each(object, function(value, key){
818
-			if (fn.call(bind, value, key, object)) results[key] = value;
819
-		});
820
-		return results;
821
-	},
822
-
823
-	every: function(object, fn, bind){
824
-		for (var key in object){
825
-			if (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return false;
826
-		}
827
-		return true;
828
-	},
829
-
830
-	some: function(object, fn, bind){
831
-		for (var key in object){
832
-			if (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return true;
833
-		}
834
-		return false;
835
-	},
836
-
837
-	keys: function(object){
838
-		var keys = [];
839
-		for (var key in object){
840
-			if (hasOwnProperty.call(object, key)) keys.push(key);
841
-		}
842
-		return keys;
843
-	},
844
-
845
-	values: function(object){
846
-		var values = [];
847
-		for (var key in object){
848
-			if (hasOwnProperty.call(object, key)) values.push(object[key]);
849
-		}
850
-		return values;
851
-	},
852
-
853
-	getLength: function(object){
854
-		return Object.keys(object).length;
855
-	},
856
-
857
-	keyOf: function(object, value){
858
-		for (var key in object){
859
-			if (hasOwnProperty.call(object, key) && object[key] === value) return key;
860
-		}
861
-		return null;
862
-	},
863
-
864
-	contains: function(object, value){
865
-		return Object.keyOf(object, value) != null;
866
-	},
867
-
868
-	toQueryString: function(object, base){
869
-		var queryString = [];
870
-
871
-		Object.each(object, function(value, key){
872
-			if (base) key = base + '[' + key + ']';
873
-			var result;
874
-			switch (typeOf(value)){
875
-				case 'object': result = Object.toQueryString(value, key); break;
876
-				case 'array':
877
-					var qs = {};
878
-					value.each(function(val, i){
879
-						qs[i] = val;
880
-					});
881
-					result = Object.toQueryString(qs, key);
882
-				break;
883
-				default: result = key + '=' + encodeURIComponent(value);
884
-			}
885
-			if (value != null) queryString.push(result);
886
-		});
887
-
888
-		return queryString.join('&');
889
-	}
890
-
891
-});
892
-
893
-})();
894
-
895
-
896
-
897
-
898
-/*
899
-
900
-name: Browser
901
-
902
-description: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash.
903
-
904
-license: MIT-style license.
905
-
906
-requires: [Array, Function, Number, String]
907
-
908
-provides: [Browser, Window, Document]
909
-
910
-...
911
-*/
912
-
913
-(function(){
914
-
915
-var document = this.document;
916
-var window = document.window = this;
917
-
918
-var UID = 1;
919
-
920
-this.$uid = (window.ActiveXObject) ? function(item){
921
-	return (item.uid || (item.uid = [UID++]))[0];
922
-} : function(item){
923
-	return item.uid || (item.uid = UID++);
924
-};
925
-
926
-$uid(window);
927
-$uid(document);
928
-
929
-var ua = navigator.userAgent.toLowerCase(),
930
-	platform = navigator.platform.toLowerCase(),
931
-	UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [null, 'unknown', 0],
932
-	mode = UA[1] == 'ie' && document.documentMode;
933
-
934
-var Browser = this.Browser = {
935
-
936
-	extend: Function.prototype.extend,
937
-
938
-	name: (UA[1] == 'version') ? UA[3] : UA[1],
939
-
940
-	version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]),
941
-
942
-	Platform: {
943
-		name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0]
944
-	},
945
-
946
-	Features: {
947
-		xpath: !!(document.evaluate),
948
-		air: !!(window.runtime),
949
-		query: !!(document.querySelector),
950
-		json: !!(window.JSON)
951
-	},
952
-
953
-	Plugins: {}
954
-
955
-};
956
-
957
-Browser[Browser.name] = true;
958
-Browser[Browser.name + parseInt(Browser.version, 10)] = true;
959
-Browser.Platform[Browser.Platform.name] = true;
960
-
961
-// Request
962
-
963
-Browser.Request = (function(){
964
-
965
-	var XMLHTTP = function(){
966
-		return new XMLHttpRequest();
967
-	};
968
-
969
-	var MSXML2 = function(){
970
-		return new ActiveXObject('MSXML2.XMLHTTP');
971
-	};
972
-
973
-	var MSXML = function(){
974
-		return new ActiveXObject('Microsoft.XMLHTTP');
975
-	};
976
-
977
-	return Function.attempt(function(){
978
-		XMLHTTP();
979
-		return XMLHTTP;
980
-	}, function(){
981
-		MSXML2();
982
-		return MSXML2;
983
-	}, function(){
984
-		MSXML();
985
-		return MSXML;
986
-	});
987
-
988
-})();
989
-
990
-Browser.Features.xhr = !!(Browser.Request);
991
-
992
-// Flash detection
993
-
994
-var version = (Function.attempt(function(){
995
-	return navigator.plugins['Shockwave Flash'].description;
996
-}, function(){
997
-	return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
998
-}) || '0 r0').match(/\d+/g);
999
-
1000
-Browser.Plugins.Flash = {
1001
-	version: Number(version[0] || '0.' + version[1]) || 0,
1002
-	build: Number(version[2]) || 0
1003
-};
1004
-
1005
-// String scripts
1006
-
1007
-Browser.exec = function(text){
1008
-	if (!text) return text;
1009
-	if (window.execScript){
1010
-		window.execScript(text);
1011
-	} else {
1012
-		var script = document.createElement('script');
1013
-		script.setAttribute('type', 'text/javascript');
1014
-		script.text = text;
1015
-		document.head.appendChild(script);
1016
-		document.head.removeChild(script);
1017
-	}
1018
-	return text;
1019
-};
1020
-
1021
-String.implement('stripScripts', function(exec){
1022
-	var scripts = '';
1023
-	var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(all, code){
1024
-		scripts += code + '\n';
1025
-		return '';
1026
-	});
1027
-	if (exec === true) Browser.exec(scripts);
1028
-	else if (typeOf(exec) == 'function') exec(scripts, text);
1029
-	return text;
1030
-});
1031
-
1032
-// Window, Document
1033
-
1034
-Browser.extend({
1035
-	Document: this.Document,
1036
-	Window: this.Window,
1037
-	Element: this.Element,
1038
-	Event: this.Event
1039
-});
1040
-
1041
-this.Window = this.$constructor = new Type('Window', function(){});
1042
-
1043
-this.$family = Function.from('window').hide();
1044
-
1045
-Window.mirror(function(name, method){
1046
-	window[name] = method;
1047
-});
1048
-
1049
-this.Document = document.$constructor = new Type('Document', function(){});
1050
-
1051
-document.$family = Function.from('document').hide();
1052
-
1053
-Document.mirror(function(name, method){
1054
-	document[name] = method;
1055
-});
1056
-
1057
-document.html = document.documentElement;
1058
-document.head = document.getElementsByTagName('head')[0];
1059
-
1060
-if (document.execCommand) try {
1061
-	document.execCommand("BackgroundImageCache", false, true);
1062
-} catch (e){}
1063
-
1064
-if (this.attachEvent && !this.addEventListener){
1065
-	var unloadEvent = function(){
1066
-		this.detachEvent('onunload', unloadEvent);
1067
-		document.head = document.html = document.window = null;
1068
-	};
1069
-	this.attachEvent('onunload', unloadEvent);
1070
-}
1071
-
1072
-// IE fails on collections and <select>.options (refers to <select>)
1073
-var arrayFrom = Array.from;
1074
-try {
1075
-	arrayFrom(document.html.childNodes);
1076
-} catch(e){
1077
-	Array.from = function(item){
1078
-		if (typeof item != 'string' && Type.isEnumerable(item) && typeOf(item) != 'array'){
1079
-			var i = item.length, array = new Array(i);
1080
-			while (i--) array[i] = item[i];
1081
-			return array;
1082
-		}
1083
-		return arrayFrom(item);
1084
-	};
1085
-
1086
-	var prototype = Array.prototype,
1087
-		slice = prototype.slice;
1088
-	['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice'].each(function(name){
1089
-		var method = prototype[name];
1090
-		Array[name] = function(item){
1091
-			return method.apply(Array.from(item), slice.call(arguments, 1));
1092
-		};
1093
-	});
1094
-}
1095
-
1096
-
1097
-
1098
-}).call(this);
1099
-
1100
-
1101
-/*
1102
-
1103
-name: Event
1104
-
1105
-description: Contains the Event Class, to make the event object cross-browser.
1106
-
1107
-license: MIT-style license.
1108
-
1109
-requires: [Window, Document, Array, Function, String, Object]
1110
-
1111
-provides: Event
1112
-
1113
-...
1114
-*/
1115
-
1116
-var Event = new Type('Event', function(event, win){
1117
-	if (!win) win = window;
1118
-	var doc = win.document;
1119
-	event = event || win.event;
1120
-	if (event.$extended) return event;
1121
-	this.$extended = true;
1122
-	var type = event.type,
1123
-		target = event.target || event.srcElement,
1124
-		page = {},
1125
-		client = {},
1126
-		related = null,
1127
-		rightClick, wheel, code, key;
1128
-	while (target && target.nodeType == 3) target = target.parentNode;
1129
-
1130
-	if (type.indexOf('key') != -1){
1131
-		code = event.which || event.keyCode;
1132
-		key = Object.keyOf(Event.Keys, code);
1133
-		if (type == 'keydown'){
1134
-			var fKey = code - 111;
1135
-			if (fKey > 0 && fKey < 13) key = 'f' + fKey;
1136
-		}
1137
-		if (!key) key = String.fromCharCode(code).toLowerCase();
1138
-	} else if ((/click|mouse|menu/i).test(type)){
1139
-		doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
1140
-		page = {
1141
-			x: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft,
1142
-			y: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop
1143
-		};
1144
-		client = {
1145
-			x: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX,
1146
-			y: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY
1147
-		};
1148
-		if ((/DOMMouseScroll|mousewheel/).test(type)){
1149
-			wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
1150
-		}
1151
-		rightClick = (event.which == 3) || (event.button == 2);
1152
-		if ((/over|out/).test(type)){
1153
-			related = event.relatedTarget || event[(type == 'mouseover' ? 'from' : 'to') + 'Element'];
1154
-			var testRelated = function(){
1155
-				while (related && related.nodeType == 3) related = related.parentNode;
1156
-				return true;
1157
-			};
1158
-			var hasRelated = (Browser.firefox2) ? testRelated.attempt() : testRelated();
1159
-			related = (hasRelated) ? related : null;
1160
-		}
1161
-	} else if ((/gesture|touch/i).test(type)){
1162
-		this.rotation = event.rotation;
1163
-		this.scale = event.scale;
1164
-		this.targetTouches = event.targetTouches;
1165
-		this.changedTouches = event.changedTouches;
1166
-		var touches = this.touches = event.touches;
1167
-		if (touches && touches[0]){
1168
-			var touch = touches[0];
1169
-			page = {x: touch.pageX, y: touch.pageY};
1170
-			client = {x: touch.clientX, y: touch.clientY};
1171
-		}
1172
-	}
1173
-
1174
-	return Object.append(this, {
1175
-		event: event,
1176
-		type: type,
1177
-
1178
-		page: page,
1179
-		client: client,
1180
-		rightClick: rightClick,
1181
-
1182
-		wheel: wheel,
1183
-
1184
-		relatedTarget: document.id(related),
1185
-		target: document.id(target),
1186
-
1187
-		code: code,
1188
-		key: key,
1189
-
1190
-		shift: event.shiftKey,
1191
-		control: event.ctrlKey,
1192
-		alt: event.altKey,
1193
-		meta: event.metaKey
1194
-	});
1195
-});
1196
-
1197
-Event.Keys = {
1198
-	'enter': 13,
1199
-	'up': 38,
1200
-	'down': 40,
1201
-	'left': 37,
1202
-	'right': 39,
1203
-	'esc': 27,
1204
-	'space': 32,
1205
-	'backspace': 8,
1206
-	'tab': 9,
1207
-	'delete': 46
1208
-};
1209
-
1210
-
1211
-
1212
-Event.implement({
1213
-
1214
-	stop: function(){
1215
-		return this.stopPropagation().preventDefault();
1216
-	},
1217
-
1218
-	stopPropagation: function(){
1219
-		if (this.event.stopPropagation) this.event.stopPropagation();
1220
-		else this.event.cancelBubble = true;
1221
-		return this;
1222
-	},
1223
-
1224
-	preventDefault: function(){
1225
-		if (this.event.preventDefault) this.event.preventDefault();
1226
-		else this.event.returnValue = false;
1227
-		return this;
1228
-	}
1229
-
1230
-});
1231
-
1232
-
1233
-/*
1234
-
1235
-name: Class
1236
-
1237
-description: Contains the Class Function for easily creating, extending, and implementing reusable Classes.
1238
-
1239
-license: MIT-style license.
1240
-
1241
-requires: [Array, String, Function, Number]
1242
-
1243
-provides: Class
1244
-
1245
-...
1246
-*/
1247
-
1248
-(function(){
1249
-
1250
-var Class = this.Class = new Type('Class', function(params){
1251
-	if (instanceOf(params, Function)) params = {initialize: params};
1252
-
1253
-	var newClass = function(){
1254
-		reset(this);
1255
-		if (newClass.$prototyping) return this;
1256
-		this.$caller = null;
1257
-		var value = (this.initialize) ? this.initialize.apply(this, arguments) : this;
1258
-		this.$caller = this.caller = null;
1259
-		return value;
1260
-	}.extend(this).implement(params);
1261
-
1262
-	newClass.$constructor = Class;
1263
-	newClass.prototype.$constructor = newClass;
1264
-	newClass.prototype.parent = parent;
1265
-
1266
-	return newClass;
1267
-});
1268
-
1269
-var parent = function(){
1270
-	if (!this.$caller) throw new Error('The method "parent" cannot be called.');
1271
-	var name = this.$caller.$name,
1272
-		parent = this.$caller.$owner.parent,
1273
-		previous = (parent) ? parent.prototype[name] : null;
1274
-	if (!previous) throw new Error('The method "' + name + '" has no parent.');
1275
-	return previous.apply(this, arguments);
1276
-};
1277
-
1278
-var reset = function(object){
1279
-	for (var key in object){
1280
-		var value = object[key];
1281
-		switch (typeOf(value)){
1282
-			case 'object':
1283
-				var F = function(){};
1284
-				F.prototype = value;
1285
-				object[key] = reset(new F);
1286
-			break;
1287
-			case 'array': object[key] = value.clone(); break;
1288
-		}
1289
-	}
1290
-	return object;
1291
-};
1292
-
1293
-var wrap = function(self, key, method){
1294
-	if (method.$origin) method = method.$origin;
1295
-	var wrapper = function(){
1296
-		if (method.$protected && this.$caller == null) throw new Error('The method "' + key + '" cannot be called.');
1297
-		var caller = this.caller, current = this.$caller;
1298
-		this.caller = current; this.$caller = wrapper;
1299
-		var result = method.apply(this, arguments);
1300
-		this.$caller = current; this.caller = caller;
1301
-		return result;
1302
-	}.extend({$owner: self, $origin: method, $name: key});
1303
-	return wrapper;
1304
-};
1305
-
1306
-var implement = function(key, value, retain){
1307
-	if (Class.Mutators.hasOwnProperty(key)){
1308
-		value = Class.Mutators[key].call(this, value);
1309
-		if (value == null) return this;
1310
-	}
1311
-
1312
-	if (typeOf(value) == 'function'){
1313
-		if (value.$hidden) return this;
1314
-		this.prototype[key] = (retain) ? value : wrap(this, key, value);
1315
-	} else {
1316
-		Object.merge(this.prototype, key, value);
1317
-	}
1318
-
1319
-	return this;
1320
-};
1321
-
1322
-var getInstance = function(klass){
1323
-	klass.$prototyping = true;
1324
-	var proto = new klass;
1325
-	delete klass.$prototyping;
1326
-	return proto;
1327
-};
1328
-
1329
-Class.implement('implement', implement.overloadSetter());
1330
-
1331
-Class.Mutators = {
1332
-
1333
-	Extends: function(parent){
1334
-		this.parent = parent;
1335
-		this.prototype = getInstance(parent);
1336
-	},
1337
-
1338
-	Implements: function(items){
1339
-		Array.from(items).each(function(item){
1340
-			var instance = new item;
1341
-			for (var key in instance) implement.call(this, key, instance[key], true);
1342
-		}, this);
1343
-	}
1344
-};
1345
-
1346
-}).call(this);
1347
-
1348
-
1349
-/*
1350
-
1351
-name: Class.Extras
1352
-
1353
-description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.
1354
-
1355
-license: MIT-style license.
1356
-
1357
-requires: Class
1358
-
1359
-provides: [Class.Extras, Chain, Events, Options]
1360
-
1361
-...
1362
-*/
1363
-
1364
-(function(){
1365
-
1366
-this.Chain = new Class({
1367
-
1368
-	$chain: [],
1369
-
1370
-	chain: function(){
1371
-		this.$chain.append(Array.flatten(arguments));
1372
-		return this;
1373
-	},
1374
-
1375
-	callChain: function(){
1376
-		return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
1377
-	},
1378
-
1379
-	clearChain: function(){
1380
-		this.$chain.empty();
1381
-		return this;
1382
-	}
1383
-
1384
-});
1385
-
1386
-var removeOn = function(string){
1387
-	return string.replace(/^on([A-Z])/, function(full, first){
1388
-		return first.toLowerCase();
1389
-	});
1390
-};
1391
-
1392
-this.Events = new Class({
1393
-
1394
-	$events: {},
1395
-
1396
-	addEvent: function(type, fn, internal){
1397
-		type = removeOn(type);
1398
-
1399
-
1400
-
1401
-		this.$events[type] = (this.$events[type] || []).include(fn);
1402
-		if (internal) fn.internal = true;
1403
-		return this;
1404
-	},
1405
-
1406
-	addEvents: function(events){
1407
-		for (var type in events) this.addEvent(type, events[type]);
1408
-		return this;
1409
-	},
1410
-
1411
-	fireEvent: function(type, args, delay){
1412
-		type = removeOn(type);
1413
-		var events = this.$events[type];
1414
-		if (!events) return this;
1415
-		args = Array.from(args);
1416
-		events.each(function(fn){
1417
-			if (delay) fn.delay(delay, this, args);
1418
-			else fn.apply(this, args);
1419
-		}, this);
1420
-		return this;
1421
-	},
1422
-
1423
-	removeEvent: function(type, fn){
1424
-		type = removeOn(type);
1425
-		var events = this.$events[type];
1426
-		if (events && !fn.internal){
1427
-			var index =  events.indexOf(fn);
1428
-			if (index != -1) delete events[index];
1429
-		}
1430
-		return this;
1431
-	},
1432
-
1433
-	removeEvents: function(events){
1434
-		var type;
1435
-		if (typeOf(events) == 'object'){
1436
-			for (type in events) this.removeEvent(type, events[type]);
1437
-			return this;
1438
-		}
1439
-		if (events) events = removeOn(events);
1440
-		for (type in this.$events){
1441
-			if (events && events != type) continue;
1442
-			var fns = this.$events[type];
1443
-			for (var i = fns.length; i--;) if (i in fns){
1444
-				this.removeEvent(type, fns[i]);
1445
-			}
1446
-		}
1447
-		return this;
1448
-	}
1449
-
1450
-});
1451
-
1452
-this.Options = new Class({
1453
-
1454
-	setOptions: function(){
1455
-		var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments));
1456
-		if (this.addEvent) for (var option in options){
1457
-			if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
1458
-			this.addEvent(option, options[option]);
1459
-			delete options[option];
1460
-		}
1461
-		return this;
1462
-	}
1463
-
1464
-});
1465
-
1466
-}).call(this);
1467
-
1468
-
1469
-/*
1470
-name: Slick.Parser
1471
-description: Standalone CSS3 Selector parser
1472
-provides: Slick.Parser
1473
-...
1474
-*/
1475
-
1476
-;(function(){
1477
-
1478
-var parsed,
1479
-	separatorIndex,
1480
-	combinatorIndex,
1481
-	reversed,
1482
-	cache = {},
1483
-	reverseCache = {},
1484
-	reUnescape = /\\/g;
1485
-
1486
-var parse = function(expression, isReversed){
1487
-	if (expression == null) return null;
1488
-	if (expression.Slick === true) return expression;
1489
-	expression = ('' + expression).replace(/^\s+|\s+$/g, '');
1490
-	reversed = !!isReversed;
1491
-	var currentCache = (reversed) ? reverseCache : cache;
1492
-	if (currentCache[expression]) return currentCache[expression];
1493
-	parsed = {
1494
-		Slick: true,
1495
-		expressions: [],
1496
-		raw: expression,
1497
-		reverse: function(){
1498
-			return parse(this.raw, true);
1499
-		}
1500
-	};
1501
-	separatorIndex = -1;
1502
-	while (expression != (expression = expression.replace(regexp, parser)));
1503
-	parsed.length = parsed.expressions.length;
1504
-	return currentCache[parsed.raw] = (reversed) ? reverse(parsed) : parsed;
1505
-};
1506
-
1507
-var reverseCombinator = function(combinator){
1508
-	if (combinator === '!') return ' ';
1509
-	else if (combinator === ' ') return '!';
1510
-	else if ((/^!/).test(combinator)) return combinator.replace(/^!/, '');
1511
-	else return '!' + combinator;
1512
-};
1513
-
1514
-var reverse = function(expression){
1515
-	var expressions = expression.expressions;
1516
-	for (var i = 0; i < expressions.length; i++){
1517
-		var exp = expressions[i];
1518
-		var last = {parts: [], tag: '*', combinator: reverseCombinator(exp[0].combinator)};
1519
-
1520
-		for (var j = 0; j < exp.length; j++){
1521
-			var cexp = exp[j];
1522
-			if (!cexp.reverseCombinator) cexp.reverseCombinator = ' ';
1523
-			cexp.combinator = cexp.reverseCombinator;
1524
-			delete cexp.reverseCombinator;
1525
-		}
1526
-
1527
-		exp.reverse().push(last);
1528
-	}
1529
-	return expression;
1530
-};
1531
-
1532
-var escapeRegExp = function(string){// Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan <http://stevenlevithan.com/regex/xregexp/> MIT License
1533
-	return string.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, function(match){
1534
-		return '\\' + match;
1535
-	});
1536
-};
1537
-
1538
-var regexp = new RegExp(
1539
-/*
1540
-#!/usr/bin/env ruby
1541
-puts "\t\t" + DATA.read.gsub(/\(\?x\)|\s+#.*$|\s+|\\$|\\n/,'')
1542
-__END__
1543
-	"(?x)^(?:\
1544
-	  \\s* ( , ) \\s*               # Separator          \n\
1545
-	| \\s* ( <combinator>+ ) \\s*   # Combinator         \n\
1546
-	|      ( \\s+ )                 # CombinatorChildren \n\
1547
-	|      ( <unicode>+ | \\* )     # Tag                \n\
1548
-	| \\#  ( <unicode>+       )     # ID                 \n\
1549
-	| \\.  ( <unicode>+       )     # ClassName          \n\
1550
-	|                               # Attribute          \n\
1551
-	\\[  \
1552
-		\\s* (<unicode1>+)  (?:  \
1553
-			\\s* ([*^$!~|]?=)  (?:  \
1554
-				\\s* (?:\
1555
-					([\"']?)(.*?)\\9 \
1556
-				)\
1557
-			)  \
1558
-		)?  \\s*  \
1559
-	\\](?!\\]) \n\
1560
-	|   :+ ( <unicode>+ )(?:\
1561
-	\\( (?:\
1562
-		(?:([\"'])([^\\12]*)\\12)|((?:\\([^)]+\\)|[^()]*)+)\
1563
-	) \\)\
1564
-	)?\
1565
-	)"
1566
-*/
1567
-	"^(?:\\s*(,)\\s*|\\s*(<combinator>+)\\s*|(\\s+)|(<unicode>+|\\*)|\\#(<unicode>+)|\\.(<unicode>+)|\\[\\s*(<unicode1>+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(<unicode>+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)"
1568
-	.replace(/<combinator>/, '[' + escapeRegExp(">+~`!@$%^&={}\\;</") + ']')
1569
-	.replace(/<unicode>/g, '(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])')
1570
-	.replace(/<unicode1>/g, '(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])')
1571
-);
1572
-
1573
-function parser(
1574
-	rawMatch,
1575
-
1576
-	separator,
1577
-	combinator,
1578
-	combinatorChildren,
1579
-
1580
-	tagName,
1581
-	id,
1582
-	className,
1583
-
1584
-	attributeKey,
1585
-	attributeOperator,
1586
-	attributeQuote,
1587
-	attributeValue,
1588
-
1589
-	pseudoMarker,
1590
-	pseudoClass,
1591
-	pseudoQuote,
1592
-	pseudoClassQuotedValue,
1593
-	pseudoClassValue
1594
-){
1595
-	if (separator || separatorIndex === -1){
1596
-		parsed.expressions[++separatorIndex] = [];
1597
-		combinatorIndex = -1;
1598
-		if (separator) return '';
1599
-	}
1600
-
1601
-	if (combinator || combinatorChildren || combinatorIndex === -1){
1602
-		combinator = combinator || ' ';
1603
-		var currentSeparator = parsed.expressions[separatorIndex];
1604
-		if (reversed && currentSeparator[combinatorIndex])
1605
-			currentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator);
1606
-		currentSeparator[++combinatorIndex] = {combinator: combinator, tag: '*'};
1607
-	}
1608
-
1609
-	var currentParsed = parsed.expressions[separatorIndex][combinatorIndex];
1610
-
1611
-	if (tagName){
1612
-		currentParsed.tag = tagName.replace(reUnescape, '');
1613
-
1614
-	} else if (id){
1615
-		currentParsed.id = id.replace(reUnescape, '');
1616
-
1617
-	} else if (className){
1618
-		className = className.replace(reUnescape, '');
1619
-
1620
-		if (!currentParsed.classList) currentParsed.classList = [];
1621
-		if (!currentParsed.classes) currentParsed.classes = [];
1622
-		currentParsed.classList.push(className);
1623
-		currentParsed.classes.push({
1624
-			value: className,
1625
-			regexp: new RegExp('(^|\\s)' + escapeRegExp(className) + '(\\s|$)')
1626
-		});
1627
-
1628
-	} else if (pseudoClass){
1629
-		pseudoClassValue = pseudoClassValue || pseudoClassQuotedValue;
1630
-		pseudoClassValue = pseudoClassValue ? pseudoClassValue.replace(reUnescape, '') : null;
1631
-
1632
-		if (!currentParsed.pseudos) currentParsed.pseudos = [];
1633
-		currentParsed.pseudos.push({
1634
-			key: pseudoClass.replace(reUnescape, ''),
1635
-			value: pseudoClassValue,
1636
-			type: pseudoMarker.length == 1 ? 'class' : 'element'
1637
-		});
1638
-
1639
-	} else if (attributeKey){
1640
-		attributeKey = attributeKey.replace(reUnescape, '');
1641
-		attributeValue = (attributeValue || '').replace(reUnescape, '');
1642
-
1643
-		var test, regexp;
1644
-
1645
-		switch (attributeOperator){
1646
-			case '^=' : regexp = new RegExp(       '^'+ escapeRegExp(attributeValue)            ); break;
1647
-			case '$=' : regexp = new RegExp(            escapeRegExp(attributeValue) +'$'       ); break;
1648
-			case '~=' : regexp = new RegExp( '(^|\\s)'+ escapeRegExp(attributeValue) +'(\\s|$)' ); break;
1649
-			case '|=' : regexp = new RegExp(       '^'+ escapeRegExp(attributeValue) +'(-|$)'   ); break;
1650
-			case  '=' : test = function(value){
1651
-				return attributeValue == value;
1652
-			}; break;
1653
-			case '*=' : test = function(value){
1654
-				return value && value.indexOf(attributeValue) > -1;
1655
-			}; break;
1656
-			case '!=' : test = function(value){
1657
-				return attributeValue != value;
1658
-			}; break;
1659
-			default   : test = function(value){
1660
-				return !!value;
1661
-			};
1662
-		}
1663
-
1664
-		if (attributeValue == '' && (/^[*$^]=$/).test(attributeOperator)) test = function(){
1665
-			return false;
1666
-		};
1667
-
1668
-		if (!test) test = function(value){
1669
-			return value && regexp.test(value);
1670
-		};
1671
-
1672
-		if (!currentParsed.attributes) currentParsed.attributes = [];
1673
-		currentParsed.attributes.push({
1674
-			key: attributeKey,
1675
-			operator: attributeOperator,
1676
-			value: attributeValue,
1677
-			test: test
1678
-		});
1679
-
1680
-	}
1681
-
1682
-	return '';
1683
-};
1684
-
1685
-// Slick NS
1686
-
1687
-var Slick = (this.Slick || {});
1688
-
1689
-Slick.parse = function(expression){
1690
-	return parse(expression);
1691
-};
1692
-
1693
-Slick.escapeRegExp = escapeRegExp;
1694
-
1695
-if (!this.Slick) this.Slick = Slick;
1696
-
1697
-}).apply(/*<CommonJS>*/(typeof exports != 'undefined') ? exports : /*</CommonJS>*/this);
1698
-
1699
-
1700
-/*
1701
-name: Slick.Finder
1702
-description: The new, superfast css selector engine.
1703
-provides: Slick.Finder
1704
-requires: Slick.Parser
1705
-...
1706
-*/
1707
-
1708
-;(function(){
1709
-
1710
-var local = {},
1711
-	featuresCache = {},
1712
-	toString = Object.prototype.toString;
1713
-
1714
-// Feature / Bug detection
1715
-
1716
-local.isNativeCode = function(fn){
1717
-	return (/\{\s*\[native code\]\s*\}/).test('' + fn);
1718
-};
1719
-
1720
-local.isXML = function(document){
1721
-	return (!!document.xmlVersion) || (!!document.xml) || (toString.call(document) == '[object XMLDocument]') ||
1722
-	(document.nodeType == 9 && document.documentElement.nodeName != 'HTML');
1723
-};
1724
-
1725
-local.setDocument = function(document){
1726
-
1727
-	// convert elements / window arguments to document. if document cannot be extrapolated, the function returns.
1728
-	var nodeType = document.nodeType;
1729
-	if (nodeType == 9); // document
1730
-	else if (nodeType) document = document.ownerDocument; // node
1731
-	else if (document.navigator) document = document.document; // window
1732
-	else return;
1733
-
1734
-	// check if it's the old document
1735
-
1736
-	if (this.document === document) return;
1737
-	this.document = document;
1738
-
1739
-	// check if we have done feature detection on this document before
1740
-
1741
-	var root = document.documentElement,
1742
-		rootUid = this.getUIDXML(root),
1743
-		features = featuresCache[rootUid],
1744
-		feature;
1745
-
1746
-	if (features){
1747
-		for (feature in features){
1748
-			this[feature] = features[feature];
1749
-		}
1750
-		return;
1751
-	}
1752
-
1753
-	features = featuresCache[rootUid] = {};
1754
-
1755
-	features.root = root;
1756
-	features.isXMLDocument = this.isXML(document);
1757
-
1758
-	features.brokenStarGEBTN
1759
-	= features.starSelectsClosedQSA
1760
-	= features.idGetsName
1761
-	= features.brokenMixedCaseQSA
1762
-	= features.brokenGEBCN
1763
-	= features.brokenCheckedQSA
1764
-	= features.brokenEmptyAttributeQSA
1765
-	= features.isHTMLDocument
1766
-	= features.nativeMatchesSelector
1767
-	= false;
1768
-
1769
-	var starSelectsClosed, starSelectsComments,
1770
-		brokenSecondClassNameGEBCN, cachedGetElementsByClassName,
1771
-		brokenFormAttributeGetter;
1772
-
1773
-	var selected, id = 'slick_uniqueid';
1774
-	var testNode = document.createElement('div');
1775
-
1776
-	var testRoot = document.body || document.getElementsByTagName('body')[0] || root;
1777
-	testRoot.appendChild(testNode);
1778
-
1779
-	// on non-HTML documents innerHTML and getElementsById doesnt work properly
1780
-	try {
1781
-		testNode.innerHTML = '<a id="'+id+'"></a>';
1782
-		features.isHTMLDocument = !!document.getElementById(id);
1783
-	} catch(e){};
1784
-
1785
-	if (features.isHTMLDocument){
1786
-
1787
-		testNode.style.display = 'none';
1788
-
1789
-		// IE returns comment nodes for getElementsByTagName('*') for some documents
1790
-		testNode.appendChild(document.createComment(''));
1791
-		starSelectsComments = (testNode.getElementsByTagName('*').length > 1);
1792
-
1793
-		// IE returns closed nodes (EG:"</foo>") for getElementsByTagName('*') for some documents
1794
-		try {
1795
-			testNode.innerHTML = 'foo</foo>';
1796
-			selected = testNode.getElementsByTagName('*');
1797
-			starSelectsClosed = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');
1798
-		} catch(e){};
1799
-
1800
-		features.brokenStarGEBTN = starSelectsComments || starSelectsClosed;
1801
-
1802
-		// IE returns elements with the name instead of just id for getElementsById for some documents
1803
-		try {
1804
-			testNode.innerHTML = '<a name="'+ id +'"></a><b id="'+ id +'"></b>';
1805
-			features.idGetsName = document.getElementById(id) === testNode.firstChild;
1806
-		} catch(e){};
1807
-
1808
-		if (testNode.getElementsByClassName){
1809
-
1810
-			// Safari 3.2 getElementsByClassName caches results
1811
-			try {
1812
-				testNode.innerHTML = '<a class="f"></a><a class="b"></a>';
1813
-				testNode.getElementsByClassName('b').length;
1814
-				testNode.firstChild.className = 'b';
1815
-				cachedGetElementsByClassName = (testNode.getElementsByClassName('b').length != 2);
1816
-			} catch(e){};
1817
-
1818
-			// Opera 9.6 getElementsByClassName doesnt detects the class if its not the first one
1819
-			try {
1820
-				testNode.innerHTML = '<a class="a"></a><a class="f b a"></a>';
1821
-				brokenSecondClassNameGEBCN = (testNode.getElementsByClassName('a').length != 2);
1822
-			} catch(e){};
1823
-
1824
-			features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN;
1825
-		}
1826
-
1827
-		if (testNode.querySelectorAll){
1828
-			// IE 8 returns closed nodes (EG:"</foo>") for querySelectorAll('*') for some documents
1829
-			try {
1830
-				testNode.innerHTML = 'foo</foo>';
1831
-				selected = testNode.querySelectorAll('*');
1832
-				features.starSelectsClosedQSA = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');
1833
-			} catch(e){};
1834
-
1835
-			// Safari 3.2 querySelectorAll doesnt work with mixedcase on quirksmode
1836
-			try {
1837
-				testNode.innerHTML = '<a class="MiX"></a>';
1838
-				features.brokenMixedCaseQSA = !testNode.querySelectorAll('.MiX').length;
1839
-			} catch(e){};
1840
-
1841
-			// Webkit and Opera dont return selected options on querySelectorAll
1842
-			try {
1843
-				testNode.innerHTML = '<select><option selected="selected">a</option></select>';
1844
-				features.brokenCheckedQSA = (testNode.querySelectorAll(':checked').length == 0);
1845
-			} catch(e){};
1846
-
1847
-			// IE returns incorrect results for attr[*^$]="" selectors on querySelectorAll
1848
-			try {
1849
-				testNode.innerHTML = '<a class=""></a>';
1850
-				features.brokenEmptyAttributeQSA = (testNode.querySelectorAll('[class*=""]').length != 0);
1851
-			} catch(e){};
1852
-
1853
-		}
1854
-
1855
-		// IE6-7, if a form has an input of id x, form.getAttribute(x) returns a reference to the input
1856
-		try {
1857
-			testNode.innerHTML = '<form action="s"><input id="action"/></form>';
1858
-			brokenFormAttributeGetter = (testNode.firstChild.getAttribute('action') != 's');
1859
-		} catch(e){};
1860
-
1861
-		// native matchesSelector function
1862
-
1863
-		features.nativeMatchesSelector = root.matchesSelector || /*root.msMatchesSelector ||*/ root.mozMatchesSelector || root.webkitMatchesSelector;
1864
-		if (features.nativeMatchesSelector) try {
1865
-			// if matchesSelector trows errors on incorrect sintaxes we can use it
1866
-			features.nativeMatchesSelector.call(root, ':slick');
1867
-			features.nativeMatchesSelector = null;
1868
-		} catch(e){};
1869
-
1870
-	}
1871
-
1872
-	try {
1873
-		root.slick_expando = 1;
1874
-		delete root.slick_expando;
1875
-		features.getUID = this.getUIDHTML;
1876
-	} catch(e) {
1877
-		features.getUID = this.getUIDXML;
1878
-	}
1879
-
1880
-	testRoot.removeChild(testNode);
1881
-	testNode = selected = testRoot = null;
1882
-
1883
-	// getAttribute
1884
-
1885
-	features.getAttribute = (features.isHTMLDocument && brokenFormAttributeGetter) ? function(node, name){
1886
-		var method = this.attributeGetters[name];
1887
-		if (method) return method.call(node);
1888
-		var attributeNode = node.getAttributeNode(name);
1889
-		return (attributeNode) ? attributeNode.nodeValue : null;
1890
-	} : function(node, name){
1891
-		var method = this.attributeGetters[name];
1892
-		return (method) ? method.call(node) : node.getAttribute(name);
1893
-	};
1894
-
1895
-	// hasAttribute
1896
-
1897
-	features.hasAttribute = (root && this.isNativeCode(root.hasAttribute)) ? function(node, attribute) {
1898
-		return node.hasAttribute(attribute);
1899
-	} : function(node, attribute) {
1900
-		node = node.getAttributeNode(attribute);
1901
-		return !!(node && (node.specified || node.nodeValue));
1902
-	};
1903
-
1904
-	// contains
1905
-	// FIXME: Add specs: local.contains should be different for xml and html documents?
1906
-	features.contains = (root && this.isNativeCode(root.contains)) ? function(context, node){
1907
-		return context.contains(node);
1908
-	} : (root && root.compareDocumentPosition) ? function(context, node){
1909
-		return context === node || !!(context.compareDocumentPosition(node) & 16);
1910
-	} : function(context, node){
1911
-		if (node) do {
1912
-			if (node === context) return true;
1913
-		} while ((node = node.parentNode));
1914
-		return false;
1915
-	};
1916
-
1917
-	// document order sorting
1918
-	// credits to Sizzle (http://sizzlejs.com/)
1919
-
1920
-	features.documentSorter = (root.compareDocumentPosition) ? function(a, b){
1921
-		if (!a.compareDocumentPosition || !b.compareDocumentPosition) return 0;
1922
-		return a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
1923
-	} : ('sourceIndex' in root) ? function(a, b){
1924
-		if (!a.sourceIndex || !b.sourceIndex) return 0;
1925
-		return a.sourceIndex - b.sourceIndex;
1926
-	} : (document.createRange) ? function(a, b){
1927
-		if (!a.ownerDocument || !b.ownerDocument) return 0;
1928
-		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
1929
-		aRange.setStart(a, 0);
1930
-		aRange.setEnd(a, 0);
1931
-		bRange.setStart(b, 0);
1932
-		bRange.setEnd(b, 0);
1933
-		return aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
1934
-	} : null ;
1935
-
1936
-	root = null;
1937
-
1938
-	for (feature in features){
1939
-		this[feature] = features[feature];
1940
-	}
1941
-};
1942
-
1943
-// Main Method
1944
-
1945
-var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/,
1946
-	reEmptyAttribute = /\[.+[*$^]=(?:""|'')?\]/,
1947
-	qsaFailExpCache = {};
1948
-
1949
-local.search = function(context, expression, append, first){
1950
-
1951
-	var found = this.found = (first) ? null : (append || []);
1952
-
1953
-	if (!context) return found;
1954
-	else if (context.navigator) context = context.document; // Convert the node from a window to a document
1955
-	else if (!context.nodeType) return found;
1956
-
1957
-	// setup
1958
-
1959
-	var parsed, i,
1960
-		uniques = this.uniques = {},
1961
-		hasOthers = !!(append && append.length),
1962
-		contextIsDocument = (context.nodeType == 9);
1963
-
1964
-	if (this.document !== (contextIsDocument ? context : context.ownerDocument)) this.setDocument(context);
1965
-
1966
-	// avoid duplicating items already in the append array
1967
-	if (hasOthers) for (i = found.length; i--;) uniques[this.getUID(found[i])] = true;
1968
-
1969
-	// expression checks
1970
-
1971
-	if (typeof expression == 'string'){ // expression is a string
1972
-
1973
-		/*<simple-selectors-override>*/
1974
-		var simpleSelector = expression.match(reSimpleSelector);
1975
-		simpleSelectors: if (simpleSelector) {
1976
-
1977
-			var symbol = simpleSelector[1],
1978
-				name = simpleSelector[2],
1979
-				node, nodes;
1980
-
1981
-			if (!symbol){
1982
-
1983
-				if (name == '*' && this.brokenStarGEBTN) break simpleSelectors;
1984
-				nodes = context.getElementsByTagName(name);
1985
-				if (first) return nodes[0] || null;
1986
-				for (i = 0; node = nodes[i++];){
1987
-					if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
1988
-				}
1989
-
1990
-			} else if (symbol == '#'){
1991
-
1992
-				if (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors;
1993
-				node = context.getElementById(name);
1994
-				if (!node) return found;
1995
-				if (this.idGetsName && node.getAttributeNode('id').nodeValue != name) break simpleSelectors;
1996
-				if (first) return node || null;
1997
-				if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
1998
-
1999
-			} else if (symbol == '.'){
2000
-
2001
-				if (!this.isHTMLDocument || ((!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll)) break simpleSelectors;
2002
-				if (context.getElementsByClassName && !this.brokenGEBCN){
2003
-					nodes = context.getElementsByClassName(name);
2004
-					if (first) return nodes[0] || null;
2005
-					for (i = 0; node = nodes[i++];){
2006
-						if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
2007
-					}
2008
-				} else {
2009
-					var matchClass = new RegExp('(^|\\s)'+ Slick.escapeRegExp(name) +'(\\s|$)');
2010
-					nodes = context.getElementsByTagName('*');
2011
-					for (i = 0; node = nodes[i++];){
2012
-						className = node.className;
2013
-						if (!(className && matchClass.test(className))) continue;
2014
-						if (first) return node;
2015
-						if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
2016
-					}
2017
-				}
2018
-
2019
-			}
2020
-
2021
-			if (hasOthers) this.sort(found);
2022
-			return (first) ? null : found;
2023
-
2024
-		}
2025
-		/*</simple-selectors-override>*/
2026
-
2027
-		/*<query-selector-override>*/
2028
-		querySelector: if (context.querySelectorAll) {
2029
-
2030
-			if (!this.isHTMLDocument || this.brokenMixedCaseQSA || qsaFailExpCache[expression] ||
2031
-			(this.brokenCheckedQSA && expression.indexOf(':checked') > -1) ||
2032
-			(this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression)) || Slick.disableQSA) break querySelector;
2033
-
2034
-			var _expression = expression;
2035
-			if (!contextIsDocument){
2036
-				// non-document rooted QSA
2037
-				// credits to Andrew Dupont
2038
-				var currentId = context.getAttribute('id'), slickid = 'slickid__';
2039
-				context.setAttribute('id', slickid);
2040
-				_expression = '#' + slickid + ' ' + _expression;
2041
-			}
2042
-
2043
-			try {
2044
-				if (first) return context.querySelector(_expression) || null;
2045
-				else nodes = context.querySelectorAll(_expression);
2046
-			} catch(e) {
2047
-				qsaFailExpCache[expression] = 1;
2048
-				break querySelector;
2049
-			} finally {
2050
-				if (!contextIsDocument){
2051
-					if (currentId) context.setAttribute('id', currentId);
2052
-					else context.removeAttribute('id');
2053
-				}
2054
-			}
2055
-
2056
-			if (this.starSelectsClosedQSA) for (i = 0; node = nodes[i++];){
2057
-				if (node.nodeName > '@' && !(hasOthers && uniques[this.getUID(node)])) found.push(node);
2058
-			} else for (i = 0; node = nodes[i++];){
2059
-				if (!(hasOthers && uniques[this.getUID(node)])) found.push(node);
2060
-			}
2061
-
2062
-			if (hasOthers) this.sort(found);
2063
-			return found;
2064
-
2065
-		}
2066
-		/*</query-selector-override>*/
2067
-
2068
-		parsed = this.Slick.parse(expression);
2069
-		if (!parsed.length) return found;
2070
-	} else if (expression == null){ // there is no expression
2071
-		return found;
2072
-	} else if (expression.Slick){ // expression is a parsed Slick object
2073
-		parsed = expression;
2074
-	} else if (this.contains(context.documentElement || context, expression)){ // expression is a node
2075
-		(found) ? found.push(expression) : found = expression;
2076
-		return found;
2077
-	} else { // other junk
2078
-		return found;
2079
-	}
2080
-
2081
-	/*<pseudo-selectors>*//*<nth-pseudo-selectors>*/
2082
-
2083
-	// cache elements for the nth selectors
2084
-
2085
-	this.posNTH = {};
2086
-	this.posNTHLast = {};
2087
-	this.posNTHType = {};
2088
-	this.posNTHTypeLast = {};
2089
-
2090
-	/*</nth-pseudo-selectors>*//*</pseudo-selectors>*/
2091
-
2092
-	// if append is null and there is only a single selector with one expression use pushArray, else use pushUID
2093
-	this.push = (!hasOthers && (first || (parsed.length == 1 && parsed.expressions[0].length == 1))) ? this.pushArray : this.pushUID;
2094
-
2095
-	if (found == null) found = [];
2096
-
2097
-	// default engine
2098
-
2099
-	var j, m, n;
2100
-	var combinator, tag, id, classList, classes, attributes, pseudos;
2101
-	var currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions;
2102
-
2103
-	search: for (i = 0; (currentExpression = expressions[i]); i++) for (j = 0; (currentBit = currentExpression[j]); j++){
2104
-
2105
-		combinator = 'combinator:' + currentBit.combinator;
2106
-		if (!this[combinator]) continue search;
2107
-
2108
-		tag        = (this.isXMLDocument) ? currentBit.tag : currentBit.tag.toUpperCase();
2109
-		id         = currentBit.id;
2110
-		classList  = currentBit.classList;
2111
-		classes    = currentBit.classes;
2112
-		attributes = currentBit.attributes;
2113
-		pseudos    = currentBit.pseudos;
2114
-		lastBit    = (j === (currentExpression.length - 1));
2115
-
2116
-		this.bitUniques = {};
2117
-
2118
-		if (lastBit){
2119
-			this.uniques = uniques;
2120
-			this.found = found;
2121
-		} else {
2122
-			this.uniques = {};
2123
-			this.found = [];
2124
-		}
2125
-
2126
-		if (j === 0){
2127
-			this[combinator](context, tag, id, classes, attributes, pseudos, classList);
2128
-			if (first && lastBit && found.length) break search;
2129
-		} else {
2130
-			if (first && lastBit) for (m = 0, n = currentItems.length; m < n; m++){
2131
-				this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);
2132
-				if (found.length) break search;
2133
-			} else for (m = 0, n = currentItems.length; m < n; m++) this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);
2134
-		}
2135
-
2136
-		currentItems = this.found;
2137
-	}
2138
-
2139
-	// should sort if there are nodes in append and if you pass multiple expressions.
2140
-	if (hasOthers || (parsed.expressions.length > 1)) this.sort(found);
2141
-
2142
-	return (first) ? (found[0] || null) : found;
2143
-};
2144
-
2145
-// Utils
2146
-
2147
-local.uidx = 1;
2148
-local.uidk = 'slick-uniqueid';
2149
-
2150
-local.getUIDXML = function(node){
2151
-	var uid = node.getAttribute(this.uidk);
2152
-	if (!uid){
2153
-		uid = this.uidx++;
2154
-		node.setAttribute(this.uidk, uid);
2155
-	}
2156
-	return uid;
2157
-};
2158
-
2159
-local.getUIDHTML = function(node){
2160
-	return node.uniqueNumber || (node.uniqueNumber = this.uidx++);
2161
-};
2162
-
2163
-// sort based on the setDocument documentSorter method.
2164
-
2165
-local.sort = function(results){
2166
-	if (!this.documentSorter) return results;
2167
-	results.sort(this.documentSorter);
2168
-	return results;
2169
-};
2170
-
2171
-/*<pseudo-selectors>*//*<nth-pseudo-selectors>*/
2172
-
2173
-local.cacheNTH = {};
2174
-
2175
-local.matchNTH = /^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/;
2176
-
2177
-local.parseNTHArgument = function(argument){
2178
-	var parsed = argument.match(this.matchNTH);
2179
-	if (!parsed) return false;
2180
-	var special = parsed[2] || false;
2181
-	var a = parsed[1] || 1;
2182
-	if (a == '-') a = -1;
2183
-	var b = +parsed[3] || 0;
2184
-	parsed =
2185
-		(special == 'n')	? {a: a, b: b} :
2186
-		(special == 'odd')	? {a: 2, b: 1} :
2187
-		(special == 'even')	? {a: 2, b: 0} : {a: 0, b: a};
2188
-
2189
-	return (this.cacheNTH[argument] = parsed);
2190
-};
2191
-
2192
-local.createNTHPseudo = function(child, sibling, positions, ofType){
2193
-	return function(node, argument){
2194
-		var uid = this.getUID(node);
2195
-		if (!this[positions][uid]){
2196
-			var parent = node.parentNode;
2197
-			if (!parent) return false;
2198
-			var el = parent[child], count = 1;
2199
-			if (ofType){
2200
-				var nodeName = node.nodeName;
2201
-				do {
2202
-					if (el.nodeName != nodeName) continue;
2203
-					this[positions][this.getUID(el)] = count++;
2204
-				} while ((el = el[sibling]));
2205
-			} else {
2206
-				do {
2207
-					if (el.nodeType != 1) continue;
2208
-					this[positions][this.getUID(el)] = count++;
2209
-				} while ((el = el[sibling]));
2210
-			}
2211
-		}
2212
-		argument = argument || 'n';
2213
-		var parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument);
2214
-		if (!parsed) return false;
2215
-		var a = parsed.a, b = parsed.b, pos = this[positions][uid];
2216
-		if (a == 0) return b == pos;
2217
-		if (a > 0){
2218
-			if (pos < b) return false;
2219
-		} else {
2220
-			if (b < pos) return false;
2221
-		}
2222
-		return ((pos - b) % a) == 0;
2223
-	};
2224
-};
2225
-
2226
-/*</nth-pseudo-selectors>*//*</pseudo-selectors>*/
2227
-
2228
-local.pushArray = function(node, tag, id, classes, attributes, pseudos){
2229
-	if (this.matchSelector(node, tag, id, classes, attributes, pseudos)) this.found.push(node);
2230
-};
2231
-
2232
-local.pushUID = function(node, tag, id, classes, attributes, pseudos){
2233
-	var uid = this.getUID(node);
2234
-	if (!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos)){
2235
-		this.uniques[uid] = true;
2236
-		this.found.push(node);
2237
-	}
2238
-};
2239
-
2240
-local.matchNode = function(node, selector){
2241
-	if (this.isHTMLDocument && this.nativeMatchesSelector){
2242
-		try {
2243
-			return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, '[$1="$2"]'));
2244
-		} catch(matchError) {}
2245
-	}
2246
-
2247
-	var parsed = this.Slick.parse(selector);
2248
-	if (!parsed) return true;
2249
-
2250
-	// simple (single) selectors
2251
-	var expressions = parsed.expressions, reversedExpressions, simpleExpCounter = 0, i;
2252
-	for (i = 0; (currentExpression = expressions[i]); i++){
2253
-		if (currentExpression.length == 1){
2254
-			var exp = currentExpression[0];
2255
-			if (this.matchSelector(node, (this.isXMLDocument) ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return true;
2256
-			simpleExpCounter++;
2257
-		}
2258
-	}
2259
-
2260
-	if (simpleExpCounter == parsed.length) return false;
2261
-
2262
-	var nodes = this.search(this.document, parsed), item;
2263
-	for (i = 0; item = nodes[i++];){
2264
-		if (item === node) return true;
2265
-	}
2266
-	return false;
2267
-};
2268
-
2269
-local.matchPseudo = function(node, name, argument){
2270
-	var pseudoName = 'pseudo:' + name;
2271
-	if (this[pseudoName]) return this[pseudoName](node, argument);
2272
-	var attribute = this.getAttribute(node, name);
2273
-	return (argument) ? argument == attribute : !!attribute;
2274
-};
2275
-
2276
-local.matchSelector = function(node, tag, id, classes, attributes, pseudos){
2277
-	if (tag){
2278
-		var nodeName = (this.isXMLDocument) ? node.nodeName : node.nodeName.toUpperCase();
2279
-		if (tag == '*'){
2280
-			if (nodeName < '@') return false; // Fix for comment nodes and closed nodes
2281
-		} else {
2282
-			if (nodeName != tag) return false;
2283
-		}
2284
-	}
2285
-
2286
-	if (id && node.getAttribute('id') != id) return false;
2287
-
2288
-	var i, part, cls;
2289
-	if (classes) for (i = classes.length; i--;){
2290
-		cls = node.getAttribute('class') || node.className;
2291
-		if (!(cls && classes[i].regexp.test(cls))) return false;
2292
-	}
2293
-	if (attributes) for (i = attributes.length; i--;){
2294
-		part = attributes[i];
2295
-		if (part.operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return false;
2296
-	}
2297
-	if (pseudos) for (i = pseudos.length; i--;){
2298
-		part = pseudos[i];
2299
-		if (!this.matchPseudo(node, part.key, part.value)) return false;
2300
-	}
2301
-	return true;
2302
-};
2303
-
2304
-var combinators = {
2305
-
2306
-	' ': function(node, tag, id, classes, attributes, pseudos, classList){ // all child nodes, any level
2307
-
2308
-		var i, item, children;
2309
-
2310
-		if (this.isHTMLDocument){
2311
-			getById: if (id){
2312
-				item = this.document.getElementById(id);
2313
-				if ((!item && node.all) || (this.idGetsName && item && item.getAttributeNode('id').nodeValue != id)){
2314
-					// all[id] returns all the elements with that name or id inside node
2315
-					// if theres just one it will return the element, else it will be a collection
2316
-					children = node.all[id];
2317
-					if (!children) return;
2318
-					if (!children[0]) children = [children];
2319
-					for (i = 0; item = children[i++];){
2320
-						var idNode = item.getAttributeNode('id');
2321
-						if (idNode && idNode.nodeValue == id){
2322
-							this.push(item, tag, null, classes, attributes, pseudos);
2323
-							break;
2324
-						}
2325
-					}
2326
-					return;
2327
-				}
2328
-				if (!item){
2329
-					// if the context is in the dom we return, else we will try GEBTN, breaking the getById label
2330
-					if (this.contains(this.root, node)) return;
2331
-					else break getById;
2332
-				} else if (this.document !== node && !this.contains(node, item)) return;
2333
-				this.push(item, tag, null, classes, attributes, pseudos);
2334
-				return;
2335
-			}
2336
-			getByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN){
2337
-				children = node.getElementsByClassName(classList.join(' '));
2338
-				if (!(children && children.length)) break getByClass;
2339
-				for (i = 0; item = children[i++];) this.push(item, tag, id, null, attributes, pseudos);
2340
-				return;
2341
-			}
2342
-		}
2343
-		getByTag: {
2344
-			children = node.getElementsByTagName(tag);
2345
-			if (!(children && children.length)) break getByTag;
2346
-			if (!this.brokenStarGEBTN) tag = null;
2347
-			for (i = 0; item = children[i++];) this.push(item, tag, id, classes, attributes, pseudos);
2348
-		}
2349
-	},
2350
-
2351
-	'>': function(node, tag, id, classes, attributes, pseudos){ // direct children
2352
-		if ((node = node.firstChild)) do {
2353
-			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
2354
-		} while ((node = node.nextSibling));
2355
-	},
2356
-
2357
-	'+': function(node, tag, id, classes, attributes, pseudos){ // next sibling
2358
-		while ((node = node.nextSibling)) if (node.nodeType == 1){
2359
-			this.push(node, tag, id, classes, attributes, pseudos);
2360
-			break;
2361
-		}
2362
-	},
2363
-
2364
-	'^': function(node, tag, id, classes, attributes, pseudos){ // first child
2365
-		node = node.firstChild;
2366
-		if (node){
2367
-			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
2368
-			else this['combinator:+'](node, tag, id, classes, attributes, pseudos);
2369
-		}
2370
-	},
2371
-
2372
-	'~': function(node, tag, id, classes, attributes, pseudos){ // next siblings
2373
-		while ((node = node.nextSibling)){
2374
-			if (node.nodeType != 1) continue;
2375
-			var uid = this.getUID(node);
2376
-			if (this.bitUniques[uid]) break;
2377
-			this.bitUniques[uid] = true;
2378
-			this.push(node, tag, id, classes, attributes, pseudos);
2379
-		}
2380
-	},
2381
-
2382
-	'++': function(node, tag, id, classes, attributes, pseudos){ // next sibling and previous sibling
2383
-		this['combinator:+'](node, tag, id, classes, attributes, pseudos);
2384
-		this['combinator:!+'](node, tag, id, classes, attributes, pseudos);
2385
-	},
2386
-
2387
-	'~~': function(node, tag, id, classes, attributes, pseudos){ // next siblings and previous siblings
2388
-		this['combinator:~'](node, tag, id, classes, attributes, pseudos);
2389
-		this['combinator:!~'](node, tag, id, classes, attributes, pseudos);
2390
-	},
2391
-
2392
-	'!': function(node, tag, id, classes, attributes, pseudos){ // all parent nodes up to document
2393
-		while ((node = node.parentNode)) if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);
2394
-	},
2395
-
2396
-	'!>': function(node, tag, id, classes, attributes, pseudos){ // direct parent (one level)
2397
-		node = node.parentNode;
2398
-		if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);
2399
-	},
2400
-
2401
-	'!+': function(node, tag, id, classes, attributes, pseudos){ // previous sibling
2402
-		while ((node = node.previousSibling)) if (node.nodeType == 1){
2403
-			this.push(node, tag, id, classes, attributes, pseudos);
2404
-			break;
2405
-		}
2406
-	},
2407
-
2408
-	'!^': function(node, tag, id, classes, attributes, pseudos){ // last child
2409
-		node = node.lastChild;
2410
-		if (node){
2411
-			if (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);
2412
-			else this['combinator:!+'](node, tag, id, classes, attributes, pseudos);
2413
-		}
2414
-	},
2415
-
2416
-	'!~': function(node, tag, id, classes, attributes, pseudos){ // previous siblings
2417
-		while ((node = node.previousSibling)){
2418
-			if (node.nodeType != 1) continue;
2419
-			var uid = this.getUID(node);
2420
-			if (this.bitUniques[uid]) break;
2421
-			this.bitUniques[uid] = true;
2422
-			this.push(node, tag, id, classes, attributes, pseudos);
2423
-		}
2424
-	}
2425
-
2426
-};
2427
-
2428
-for (var c in combinators) local['combinator:' + c] = combinators[c];
2429
-
2430
-var pseudos = {
2431
-
2432
-	/*<pseudo-selectors>*/
2433
-
2434
-	'empty': function(node){
2435
-		var child = node.firstChild;
2436
-		return !(child && child.nodeType == 1) && !(node.innerText || node.textContent || '').length;
2437
-	},
2438
-
2439
-	'not': function(node, expression){
2440
-		return !this.matchNode(node, expression);
2441
-	},
2442
-
2443
-	'contains': function(node, text){
2444
-		return (node.innerText || node.textContent || '').indexOf(text) > -1;
2445
-	},
2446
-
2447
-	'first-child': function(node){
2448
-		while ((node = node.previousSibling)) if (node.nodeType == 1) return false;
2449
-		return true;
2450
-	},
2451
-
2452
-	'last-child': function(node){
2453
-		while ((node = node.nextSibling)) if (node.nodeType == 1) return false;
2454
-		return true;
2455
-	},
2456
-
2457
-	'only-child': function(node){
2458
-		var prev = node;
2459
-		while ((prev = prev.previousSibling)) if (prev.nodeType == 1) return false;
2460
-		var next = node;
2461
-		while ((next = next.nextSibling)) if (next.nodeType == 1) return false;
2462
-		return true;
2463
-	},
2464
-
2465
-	/*<nth-pseudo-selectors>*/
2466
-
2467
-	'nth-child': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTH'),
2468
-
2469
-	'nth-last-child': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHLast'),
2470
-
2471
-	'nth-of-type': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTHType', true),
2472
-
2473
-	'nth-last-of-type': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHTypeLast', true),
2474
-
2475
-	'index': function(node, index){
2476
-		return this['pseudo:nth-child'](node, '' + index + 1);
2477
-	},
2478
-
2479
-	'even': function(node){
2480
-		return this['pseudo:nth-child'](node, '2n');
2481
-	},
2482
-
2483
-	'odd': function(node){
2484
-		return this['pseudo:nth-child'](node, '2n+1');
2485
-	},
2486
-
2487
-	/*</nth-pseudo-selectors>*/
2488
-
2489
-	/*<of-type-pseudo-selectors>*/
2490
-
2491
-	'first-of-type': function(node){
2492
-		var nodeName = node.nodeName;
2493
-		while ((node = node.previousSibling)) if (node.nodeName == nodeName) return false;
2494
-		return true;
2495
-	},
2496
-
2497
-	'last-of-type': function(node){
2498
-		var nodeName = node.nodeName;
2499
-		while ((node = node.nextSibling)) if (node.nodeName == nodeName) return false;
2500
-		return true;
2501
-	},
2502
-
2503
-	'only-of-type': function(node){
2504
-		var prev = node, nodeName = node.nodeName;
2505
-		while ((prev = prev.previousSibling)) if (prev.nodeName == nodeName) return false;
2506
-		var next = node;
2507
-		while ((next = next.nextSibling)) if (next.nodeName == nodeName) return false;
2508
-		return true;
2509
-	},
2510
-
2511
-	/*</of-type-pseudo-selectors>*/
2512
-
2513
-	// custom pseudos
2514
-
2515
-	'enabled': function(node){
2516
-		return !node.disabled;
2517
-	},
2518
-
2519
-	'disabled': function(node){
2520
-		return node.disabled;
2521
-	},
2522
-
2523
-	'checked': function(node){
2524
-		return node.checked || node.selected;
2525
-	},
2526
-
2527
-	'focus': function(node){
2528
-		return this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, 'tabindex'));
2529
-	},
2530
-
2531
-	'root': function(node){
2532
-		return (node === this.root);
2533
-	},
2534
-
2535
-	'selected': function(node){
2536
-		return node.selected;
2537
-	}
2538
-
2539
-	/*</pseudo-selectors>*/
2540
-};
2541
-
2542
-for (var p in pseudos) local['pseudo:' + p] = pseudos[p];
2543
-
2544
-// attributes methods
2545
-
2546
-local.attributeGetters = {
2547
-
2548
-	'class': function(){
2549
-		return this.getAttribute('class') || this.className;
2550
-	},
2551
-
2552
-	'for': function(){
2553
-		return ('htmlFor' in this) ? this.htmlFor : this.getAttribute('for');
2554
-	},
2555
-
2556
-	'href': function(){
2557
-		return ('href' in this) ? this.getAttribute('href', 2) : this.getAttribute('href');
2558
-	},
2559
-
2560
-	'style': function(){
2561
-		return (this.style) ? this.style.cssText : this.getAttribute('style');
2562
-	},
2563
-
2564
-	'tabindex': function(){
2565
-		var attributeNode = this.getAttributeNode('tabindex');
2566
-		return (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null;
2567
-	},
2568
-
2569
-	'type': function(){
2570
-		return this.getAttribute('type');
2571
-	}
2572
-
2573
-};
2574
-
2575
-// Slick
2576
-
2577
-var Slick = local.Slick = (this.Slick || {});
2578
-
2579
-Slick.version = '1.1.5';
2580
-
2581
-// Slick finder
2582
-
2583
-Slick.search = function(context, expression, append){
2584
-	return local.search(context, expression, append);
2585
-};
2586
-
2587
-Slick.find = function(context, expression){
2588
-	return local.search(context, expression, null, true);
2589
-};
2590
-
2591
-// Slick containment checker
2592
-
2593
-Slick.contains = function(container, node){
2594
-	local.setDocument(container);
2595
-	return local.contains(container, node);
2596
-};
2597
-
2598
-// Slick attribute getter
2599
-
2600
-Slick.getAttribute = function(node, name){
2601
-	return local.getAttribute(node, name);
2602
-};
2603
-
2604
-// Slick matcher
2605
-
2606
-Slick.match = function(node, selector){
2607
-	if (!(node && selector)) return false;
2608
-	if (!selector || selector === node) return true;
2609
-	local.setDocument(node);
2610
-	return local.matchNode(node, selector);
2611
-};
2612
-
2613
-// Slick attribute accessor
2614
-
2615
-Slick.defineAttributeGetter = function(name, fn){
2616
-	local.attributeGetters[name] = fn;
2617
-	return this;
2618
-};
2619
-
2620
-Slick.lookupAttributeGetter = function(name){
2621
-	return local.attributeGetters[name];
2622
-};
2623
-
2624
-// Slick pseudo accessor
2625
-
2626
-Slick.definePseudo = function(name, fn){
2627
-	local['pseudo:' + name] = function(node, argument){
2628
-		return fn.call(node, argument);
2629
-	};
2630
-	return this;
2631
-};
2632
-
2633
-Slick.lookupPseudo = function(name){
2634
-	var pseudo = local['pseudo:' + name];
2635
-	if (pseudo) return function(argument){
2636
-		return pseudo.call(this, argument);
2637
-	};
2638
-	return null;
2639
-};
2640
-
2641
-// Slick overrides accessor
2642
-
2643
-Slick.override = function(regexp, fn){
2644
-	local.override(regexp, fn);
2645
-	return this;
2646
-};
2647
-
2648
-Slick.isXML = local.isXML;
2649
-
2650
-Slick.uidOf = function(node){
2651
-	return local.getUIDHTML(node);
2652
-};
2653
-
2654
-if (!this.Slick) this.Slick = Slick;
2655
-
2656
-}).apply(/*<CommonJS>*/(typeof exports != 'undefined') ? exports : /*</CommonJS>*/this);
2657
-
2658
-
2659
-/*
2660
-
2661
-name: Element
2662
-
2663
-description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.
2664
-
2665
-license: MIT-style license.
2666
-
2667
-requires: [Window, Document, Array, String, Function, Number, Slick.Parser, Slick.Finder]
2668
-
2669
-provides: [Element, Elements, $, $$, Iframe, Selectors]
2670
-
2671
-...
2672
-*/
2673
-
2674
-var Element = function(tag, props){
2675
-	var konstructor = Element.Constructors[tag];
2676
-	if (konstructor) return konstructor(props);
2677
-	if (typeof tag != 'string') return document.id(tag).set(props);
2678
-
2679
-	if (!props) props = {};
2680
-
2681
-	if (!(/^[\w-]+$/).test(tag)){
2682
-		var parsed = Slick.parse(tag).expressions[0][0];
2683
-		tag = (parsed.tag == '*') ? 'div' : parsed.tag;
2684
-		if (parsed.id && props.id == null) props.id = parsed.id;
2685
-
2686
-		var attributes = parsed.attributes;
2687
-		if (attributes) for (var i = 0, l = attributes.length; i < l; i++){
2688
-			var attr = attributes[i];
2689
-			if (attr.value != null && attr.operator == '=' && props[attr.key] == null)
2690
-				props[attr.key] = attr.value;
2691
-		}
2692
-
2693
-		if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' ');
2694
-	}
2695
-
2696
-	return document.newElement(tag, props);
2697
-};
2698
-
2699
-if (Browser.Element) Element.prototype = Browser.Element.prototype;
2700
-
2701
-new Type('Element', Element).mirror(function(name){
2702
-	if (Array.prototype[name]) return;
2703
-
2704
-	var obj = {};
2705
-	obj[name] = function(){
2706
-		var results = [], args = arguments, elements = true;
2707
-		for (var i = 0, l = this.length; i < l; i++){
2708
-			var element = this[i], result = results[i] = element[name].apply(element, args);
2709
-			elements = (elements && typeOf(result) == 'element');
2710
-		}
2711
-		return (elements) ? new Elements(results) : results;
2712
-	};
2713
-
2714
-	Elements.implement(obj);
2715
-});
2716
-
2717
-if (!Browser.Element){
2718
-	Element.parent = Object;
2719
-
2720
-	Element.Prototype = {'$family': Function.from('element').hide()};
2721
-
2722
-	Element.mirror(function(name, method){
2723
-		Element.Prototype[name] = method;
2724
-	});
2725
-}
2726
-
2727
-Element.Constructors = {};
2728
-
2729
-
2730
-
2731
-var IFrame = new Type('IFrame', function(){
2732
-	var params = Array.link(arguments, {
2733
-		properties: Type.isObject,
2734
-		iframe: function(obj){
2735
-			return (obj != null);
2736
-		}
2737
-	});
2738
-
2739
-	var props = params.properties || {}, iframe;
2740
-	if (params.iframe) iframe = document.id(params.iframe);
2741
-	var onload = props.onload || function(){};
2742
-	delete props.onload;
2743
-	props.id = props.name = [props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + String.uniqueID()].pick();
2744
-	iframe = new Element(iframe || 'iframe', props);
2745
-
2746
-	var onLoad = function(){
2747
-		onload.call(iframe.contentWindow);
2748
-	};
2749
-
2750
-	if (window.frames[props.id]) onLoad();
2751
-	else iframe.addListener('load', onLoad);
2752
-	return iframe;
2753
-});
2754
-
2755
-var Elements = this.Elements = function(nodes){
2756
-	if (nodes && nodes.length){
2757
-		var uniques = {}, node;
2758
-		for (var i = 0; node = nodes[i++];){
2759
-			var uid = Slick.uidOf(node);
2760
-			if (!uniques[uid]){
2761
-				uniques[uid] = true;
2762
-				this.push(node);
2763
-			}
2764
-		}
2765
-	}
2766
-};
2767
-
2768
-Elements.prototype = {length: 0};
2769
-Elements.parent = Array;
2770
-
2771
-new Type('Elements', Elements).implement({
2772
-
2773
-	filter: function(filter, bind){
2774
-		if (!filter) return this;
2775
-		return new Elements(Array.filter(this, (typeOf(filter) == 'string') ? function(item){
2776
-			return item.match(filter);
2777
-		} : filter, bind));
2778
-	}.protect(),
2779
-
2780
-	push: function(){
2781
-		var length = this.length;
2782
-		for (var i = 0, l = arguments.length; i < l; i++){
2783
-			var item = document.id(arguments[i]);
2784
-			if (item) this[length++] = item;
2785
-		}
2786
-		return (this.length = length);
2787
-	}.protect(),
2788
-
2789
-	unshift: function(){
2790
-		var items = [];
2791
-		for (var i = 0, l = arguments.length; i < l; i++){
2792
-			var item = document.id(arguments[i]);
2793
-			if (item) items.push(item);
2794
-		}
2795
-		return Array.prototype.unshift.apply(this, items);
2796
-	}.protect(),
2797
-
2798
-	concat: function(){
2799
-		var newElements = new Elements(this);
2800
-		for (var i = 0, l = arguments.length; i < l; i++){
2801
-			var item = arguments[i];
2802
-			if (Type.isEnumerable(item)) newElements.append(item);
2803
-			else newElements.push(item);
2804
-		}
2805
-		return newElements;
2806
-	}.protect(),
2807
-
2808
-	append: function(collection){
2809
-		for (var i = 0, l = collection.length; i < l; i++) this.push(collection[i]);
2810
-		return this;
2811
-	}.protect(),
2812
-
2813
-	empty: function(){
2814
-		while (this.length) delete this[--this.length];
2815
-		return this;
2816
-	}.protect()
2817
-
2818
-});
2819
-
2820
-
2821
-
2822
-(function(){
2823
-
2824
-// FF, IE
2825
-var splice = Array.prototype.splice, object = {'0': 0, '1': 1, length: 2};
2826
-
2827
-splice.call(object, 1, 1);
2828
-if (object[1] == 1) Elements.implement('splice', function(){
2829
-	var length = this.length;
2830
-	splice.apply(this, arguments);
2831
-	while (length >= this.length) delete this[length--];
2832
-	return this;
2833
-}.protect());
2834
-
2835
-Elements.implement(Array.prototype);
2836
-
2837
-Array.mirror(Elements);
2838
-
2839
-/*<ltIE8>*/
2840
-var createElementAcceptsHTML;
2841
-try {
2842
-	var x = document.createElement('<input name=x>');
2843
-	createElementAcceptsHTML = (x.name == 'x');
2844
-} catch(e){}
2845
-
2846
-var escapeQuotes = function(html){
2847
-	return ('' + html).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
2848
-};
2849
-/*</ltIE8>*/
2850
-
2851
-Document.implement({
2852
-
2853
-	newElement: function(tag, props){
2854
-		if (props && props.checked != null) props.defaultChecked = props.checked;
2855
-		/*<ltIE8>*/// Fix for readonly name and type properties in IE < 8
2856
-		if (createElementAcceptsHTML && props){
2857
-			tag = '<' + tag;
2858
-			if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"';
2859
-			if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"';
2860
-			tag += '>';
2861
-			delete props.name;
2862
-			delete props.type;
2863
-		}
2864
-		/*</ltIE8>*/
2865
-		return this.id(this.createElement(tag)).set(props);
2866
-	}
2867
-
2868
-});
2869
-
2870
-})();
2871
-
2872
-Document.implement({
2873
-
2874
-	newTextNode: function(text){
2875
-		return this.createTextNode(text);
2876
-	},
2877
-
2878
-	getDocument: function(){
2879
-		return this;
2880
-	},
2881
-
2882
-	getWindow: function(){
2883
-		return this.window;
2884
-	},
2885
-
2886
-	id: (function(){
2887
-
2888
-		var types = {
2889
-
2890
-			string: function(id, nocash, doc){
2891
-				id = Slick.find(doc, '#' + id.replace(/(\W)/g, '\\$1'));
2892
-				return (id) ? types.element(id, nocash) : null;
2893
-			},
2894
-
2895
-			element: function(el, nocash){
2896
-				$uid(el);
2897
-				if (!nocash && !el.$family && !(/^(?:object|embed)$/i).test(el.tagName)){
2898
-					Object.append(el, Element.Prototype);
2899
-				}
2900
-				return el;
2901
-			},
2902
-
2903
-			object: function(obj, nocash, doc){
2904
-				if (obj.toElement) return types.element(obj.toElement(doc), nocash);
2905
-				return null;
2906
-			}
2907
-
2908
-		};
2909
-
2910
-		types.textnode = types.whitespace = types.window = types.document = function(zero){
2911
-			return zero;
2912
-		};
2913
-
2914
-		return function(el, nocash, doc){
2915
-			if (el && el.$family && el.uid) return el;
2916
-			var type = typeOf(el);
2917
-			return (types[type]) ? types[type](el, nocash, doc || document) : null;
2918
-		};
2919
-
2920
-	})()
2921
-
2922
-});
2923
-
2924
-if (window.$ == null) Window.implement('$', function(el, nc){
2925
-	return document.id(el, nc, this.document);
2926
-});
2927
-
2928
-Window.implement({
2929
-
2930
-	getDocument: function(){
2931
-		return this.document;
2932
-	},
2933
-
2934
-	getWindow: function(){
2935
-		return this;
2936
-	}
2937
-
2938
-});
2939
-
2940
-[Document, Element].invoke('implement', {
2941
-
2942
-	getElements: function(expression){
2943
-		return Slick.search(this, expression, new Elements);
2944
-	},
2945
-
2946
-	getElement: function(expression){
2947
-		return document.id(Slick.find(this, expression));
2948
-	}
2949
-
2950
-});
2951
-
2952
-
2953
-
2954
-if (window.$$ == null) Window.implement('$$', function(selector){
2955
-	if (arguments.length == 1){
2956
-		if (typeof selector == 'string') return Slick.search(this.document, selector, new Elements);
2957
-		else if (Type.isEnumerable(selector)) return new Elements(selector);
2958
-	}
2959
-	return new Elements(arguments);
2960
-});
2961
-
2962
-(function(){
2963
-
2964
-var collected = {}, storage = {};
2965
-var formProps = {input: 'checked', option: 'selected', textarea: 'value'};
2966
-
2967
-var get = function(uid){
2968
-	return (storage[uid] || (storage[uid] = {}));
2969
-};
2970
-
2971
-var clean = function(item){
2972
-	var uid = item.uid;
2973
-	if (item.removeEvents) item.removeEvents();
2974
-	if (item.clearAttributes) item.clearAttributes();
2975
-	if (uid != null){
2976
-		delete collected[uid];
2977
-		delete storage[uid];
2978
-	}
2979
-	return item;
2980
-};
2981
-
2982
-var camels = ['defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly',
2983
-	'rowSpan', 'tabIndex', 'useMap'
2984
-];
2985
-var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readOnly', 'multiple', 'selected',
2986
-	'noresize', 'defer', 'defaultChecked'
2987
-];
2988
- var attributes = {
2989
-	'html': 'innerHTML',
2990
-	'class': 'className',
2991
-	'for': 'htmlFor',
2992
-	'text': (function(){
2993
-		var temp = document.createElement('div');
2994
-		return (temp.textContent == null) ? 'innerText' : 'textContent';
2995
-	})()
2996
-};
2997
-var readOnly = ['type'];
2998
-var expandos = ['value', 'defaultValue'];
2999
-var uriAttrs = /^(?:href|src|usemap)$/i;
3000
-
3001
-bools = bools.associate(bools);
3002
-camels = camels.associate(camels.map(String.toLowerCase));
3003
-readOnly = readOnly.associate(readOnly);
3004
-
3005
-Object.append(attributes, expandos.associate(expandos));
3006
-
3007
-var inserters = {
3008
-
3009
-	before: function(context, element){
3010
-		var parent = element.parentNode;
3011
-		if (parent) parent.insertBefore(context, element);
3012
-	},
3013
-
3014
-	after: function(context, element){
3015
-		var parent = element.parentNode;
3016
-		if (parent) parent.insertBefore(context, element.nextSibling);
3017
-	},
3018
-
3019
-	bottom: function(context, element){
3020
-		element.appendChild(context);
3021
-	},
3022
-
3023
-	top: function(context, element){
3024
-		element.insertBefore(context, element.firstChild);
3025
-	}
3026
-
3027
-};
3028
-
3029
-inserters.inside = inserters.bottom;
3030
-
3031
-
3032
-
3033
-var injectCombinator = function(expression, combinator){
3034
-	if (!expression) return combinator;
3035
-
3036
-	expression = Object.clone(Slick.parse(expression));
3037
-
3038
-	var expressions = expression.expressions;
3039
-	for (var i = expressions.length; i--;)
3040
-		expressions[i][0].combinator = combinator;
3041
-
3042
-	return expression;
3043
-};
3044
-
3045
-Element.implement({
3046
-
3047
-	set: function(prop, value){
3048
-		var property = Element.Properties[prop];
3049
-		(property && property.set) ? property.set.call(this, value) : this.setProperty(prop, value);
3050
-	}.overloadSetter(),
3051
-
3052
-	get: function(prop){
3053
-		var property = Element.Properties[prop];
3054
-		return (property && property.get) ? property.get.apply(this) : this.getProperty(prop);
3055
-	}.overloadGetter(),
3056
-
3057
-	erase: function(prop){
3058
-		var property = Element.Properties[prop];
3059
-		(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
3060
-		return this;
3061
-	},
3062
-
3063
-	setProperty: function(attribute, value){
3064
-		attribute = camels[attribute] || attribute;
3065
-		if (value == null) return this.removeProperty(attribute);
3066
-		var key = attributes[attribute];
3067
-		(key) ? this[key] = value :
3068
-			(bools[attribute]) ? this[attribute] = !!value : this.setAttribute(attribute, '' + value);
3069
-		return this;
3070
-	},
3071
-
3072
-	setProperties: function(attributes){
3073
-		for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
3074
-		return this;
3075
-	},
3076
-
3077
-	getProperty: function(attribute){
3078
-		attribute = camels[attribute] || attribute;
3079
-		var key = attributes[attribute] || readOnly[attribute];
3080
-		return (key) ? this[key] :
3081
-			(bools[attribute]) ? !!this[attribute] :
3082
-			(uriAttrs.test(attribute) ? this.getAttribute(attribute, 2) :
3083
-			(key = this.getAttributeNode(attribute)) ? key.nodeValue : null) || null;
3084
-	},
3085
-
3086
-	getProperties: function(){
3087
-		var args = Array.from(arguments);
3088
-		return args.map(this.getProperty, this).associate(args);
3089
-	},
3090
-
3091
-	removeProperty: function(attribute){
3092
-		attribute = camels[attribute] || attribute;
3093
-		var key = attributes[attribute];
3094
-		(key) ? this[key] = '' :
3095
-			(bools[attribute]) ? this[attribute] = false : this.removeAttribute(attribute);
3096
-		return this;
3097
-	},
3098
-
3099
-	removeProperties: function(){
3100
-		Array.each(arguments, this.removeProperty, this);
3101
-		return this;
3102
-	},
3103
-
3104
-	hasClass: function(className){
3105
-		return this.className.clean().contains(className, ' ');
3106
-	},
3107
-
3108
-	addClass: function(className){
3109
-		if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
3110
-		return this;
3111
-	},
3112
-
3113
-	removeClass: function(className){
3114
-		this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
3115
-		return this;
3116
-	},
3117
-
3118
-	toggleClass: function(className, force){
3119
-		if (force == null) force = !this.hasClass(className);
3120
-		return (force) ? this.addClass(className) : this.removeClass(className);
3121
-	},
3122
-
3123
-	adopt: function(){
3124
-		var parent = this, fragment, elements = Array.flatten(arguments), length = elements.length;
3125
-		if (length > 1) parent = fragment = document.createDocumentFragment();
3126
-
3127
-		for (var i = 0; i < length; i++){
3128
-			var element = document.id(elements[i], true);
3129
-			if (element) parent.appendChild(element);
3130
-		}
3131
-
3132
-		if (fragment) this.appendChild(fragment);
3133
-
3134
-		return this;
3135
-	},
3136
-
3137
-	appendText: function(text, where){
3138
-		return this.grab(this.getDocument().newTextNode(text), where);
3139
-	},
3140
-
3141
-	grab: function(el, where){
3142
-		inserters[where || 'bottom'](document.id(el, true), this);
3143
-		return this;
3144
-	},
3145
-
3146
-	inject: function(el, where){
3147
-		inserters[where || 'bottom'](this, document.id(el, true));
3148
-		return this;
3149
-	},
3150
-
3151
-	replaces: function(el){
3152
-		el = document.id(el, true);
3153
-		el.parentNode.replaceChild(this, el);
3154
-		return this;
3155
-	},
3156
-
3157
-	wraps: function(el, where){
3158
-		el = document.id(el, true);
3159
-		return this.replaces(el).grab(el, where);
3160
-	},
3161
-
3162
-	getPrevious: function(expression){
3163
-		return document.id(Slick.find(this, injectCombinator(expression, '!~')));
3164
-	},
3165
-
3166
-	getAllPrevious: function(expression){
3167
-		return Slick.search(this, injectCombinator(expression, '!~'), new Elements);
3168
-	},
3169
-
3170
-	getNext: function(expression){
3171
-		return document.id(Slick.find(this, injectCombinator(expression, '~')));
3172
-	},
3173
-
3174
-	getAllNext: function(expression){
3175
-		return Slick.search(this, injectCombinator(expression, '~'), new Elements);
3176
-	},
3177
-
3178
-	getFirst: function(expression){
3179
-		return document.id(Slick.search(this, injectCombinator(expression, '>'))[0]);
3180
-	},
3181
-
3182
-	getLast: function(expression){
3183
-		return document.id(Slick.search(this, injectCombinator(expression, '>')).getLast());
3184
-	},
3185
-
3186
-	getParent: function(expression){
3187
-		return document.id(Slick.find(this, injectCombinator(expression, '!')));
3188
-	},
3189
-
3190
-	getParents: function(expression){
3191
-		return Slick.search(this, injectCombinator(expression, '!'), new Elements);
3192
-	},
3193
-
3194
-	getSiblings: function(expression){
3195
-		return Slick.search(this, injectCombinator(expression, '~~'), new Elements);
3196
-	},
3197
-
3198
-	getChildren: function(expression){
3199
-		return Slick.search(this, injectCombinator(expression, '>'), new Elements);
3200
-	},
3201
-
3202
-	getWindow: function(){
3203
-		return this.ownerDocument.window;
3204
-	},
3205
-
3206
-	getDocument: function(){
3207
-		return this.ownerDocument;
3208
-	},
3209
-
3210
-	getElementById: function(id){
3211
-		return document.id(Slick.find(this, '#' + ('' + id).replace(/(\W)/g, '\\$1')));
3212
-	},
3213
-
3214
-	getSelected: function(){
3215
-		this.selectedIndex; // Safari 3.2.1
3216
-		return new Elements(Array.from(this.options).filter(function(option){
3217
-			return option.selected;
3218
-		}));
3219
-	},
3220
-
3221
-	toQueryString: function(){
3222
-		var queryString = [];
3223
-		this.getElements('input, select, textarea').each(function(el){
3224
-			var type = el.type;
3225
-			if (!el.name || el.disabled || type == 'submit' || type == 'reset' || type == 'file' || type == 'image') return;
3226
-
3227
-			var value = (el.get('tag') == 'select') ? el.getSelected().map(function(opt){
3228
-				// IE
3229
-				return document.id(opt).get('value');
3230
-			}) : ((type == 'radio' || type == 'checkbox') && !el.checked) ? null : el.get('value');
3231
-
3232
-			Array.from(value).each(function(val){
3233
-				if (typeof val != 'undefined') queryString.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(val));
3234
-			});
3235
-		});
3236
-		return queryString.join('&');
3237
-	},
3238
-
3239
-	destroy: function(){
3240
-		var children = clean(this).getElementsByTagName('*');
3241
-		Array.each(children, clean);
3242
-		Element.dispose(this);
3243
-		return null;
3244
-	},
3245
-
3246
-	empty: function(){
3247
-		Array.from(this.childNodes).each(Element.dispose);
3248
-		return this;
3249
-	},
3250
-
3251
-	dispose: function(){
3252
-		return (this.parentNode) ? this.parentNode.removeChild(this) : this;
3253
-	},
3254
-
3255
-	match: function(expression){
3256
-		return !expression || Slick.match(this, expression);
3257
-	}
3258
-
3259
-});
3260
-
3261
-var cleanClone = function(node, element, keepid){
3262
-	if (!keepid) node.setAttributeNode(document.createAttribute('id'));
3263
-	if (node.clearAttributes){
3264
-		node.clearAttributes();
3265
-		node.mergeAttributes(element);
3266
-		node.removeAttribute('uid');
3267
-		if (node.options){
3268
-			var no = node.options, eo = element.options;
3269
-			for (var i = no.length; i--;) no[i].selected = eo[i].selected;
3270
-		}
3271
-	}
3272
-
3273
-	var prop = formProps[element.tagName.toLowerCase()];
3274
-	if (prop && element[prop]) node[prop] = element[prop];
3275
-};
3276
-
3277
-Element.implement('clone', function(contents, keepid){
3278
-	contents = contents !== false;
3279
-	var clone = this.cloneNode(contents), i;
3280
-
3281
-	if (contents){
3282
-		var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
3283
-		for (i = ce.length; i--;) cleanClone(ce[i], te[i], keepid);
3284
-	}
3285
-
3286
-	cleanClone(clone, this, keepid);
3287
-
3288
-	if (Browser.ie){
3289
-		var co = clone.getElementsByTagName('object'), to = this.getElementsByTagName('object');
3290
-		for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML;
3291
-	}
3292
-	return document.id(clone);
3293
-});
3294
-
3295
-var contains = {contains: function(element){
3296
-	return Slick.contains(this, element);
3297
-}};
3298
-
3299
-if (!document.contains) Document.implement(contains);
3300
-if (!document.createElement('div').contains) Element.implement(contains);
3301
-
3302
-
3303
-
3304
-[Element, Window, Document].invoke('implement', {
3305
-
3306
-	addListener: function(type, fn){
3307
-		if (type == 'unload'){
3308
-			var old = fn, self = this;
3309
-			fn = function(){
3310
-				self.removeListener('unload', fn);
3311
-				old();
3312
-			};
3313
-		} else {
3314
-			collected[$uid(this)] = this;
3315
-		}
3316
-		if (this.addEventListener) this.addEventListener(type, fn, !!arguments[2]);
3317
-		else this.attachEvent('on' + type, fn);
3318
-		return this;
3319
-	},
3320
-
3321
-	removeListener: function(type, fn){
3322
-		if (this.removeEventListener) this.removeEventListener(type, fn, !!arguments[2]);
3323
-		else this.detachEvent('on' + type, fn);
3324
-		return this;
3325
-	},
3326
-
3327
-	retrieve: function(property, dflt){
3328
-		var storage = get($uid(this)), prop = storage[property];
3329
-		if (dflt != null && prop == null) prop = storage[property] = dflt;
3330
-		return prop != null ? prop : null;
3331
-	},
3332
-
3333
-	store: function(property, value){
3334
-		var storage = get($uid(this));
3335
-		storage[property] = value;
3336
-		return this;
3337
-	},
3338
-
3339
-	eliminate: function(property){
3340
-		var storage = get($uid(this));
3341
-		delete storage[property];
3342
-		return this;
3343
-	}
3344
-
3345
-});
3346
-
3347
-// IE purge
3348
-if (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){
3349
-	Object.each(collected, clean);
3350
-	if (window.CollectGarbage) CollectGarbage();
3351
-});
3352
-
3353
-})();
3354
-
3355
-Element.Properties = {};
3356
-
3357
-
3358
-
3359
-Element.Properties.style = {
3360
-
3361
-	set: function(style){
3362
-		this.style.cssText = style;
3363
-	},
3364
-
3365
-	get: function(){
3366
-		return this.style.cssText;
3367
-	},
3368
-
3369
-	erase: function(){
3370
-		this.style.cssText = '';
3371
-	}
3372
-
3373
-};
3374
-
3375
-Element.Properties.tag = {
3376
-
3377
-	get: function(){
3378
-		return this.tagName.toLowerCase();
3379
-	}
3380
-
3381
-};
3382
-
3383
-(function(maxLength){
3384
-	if (maxLength != null) Element.Properties.maxlength = Element.Properties.maxLength = {
3385
-		get: function(){
3386
-			var maxlength = this.getAttribute('maxLength');
3387
-			return maxlength == maxLength ? null : maxlength;
3388
-		}
3389
-	};
3390
-})(document.createElement('input').getAttribute('maxLength'));
3391
-
3392
-Element.Properties.html = (function(){
3393
-
3394
-	var tableTest = Function.attempt(function(){
3395
-		var table = document.createElement('table');
3396
-		table.innerHTML = '<tr><td></td></tr>';
3397
-	});
3398
-
3399
-	var wrapper = document.createElement('div');
3400
-
3401
-	var translations = {
3402
-		table: [1, '<table>', '</table>'],
3403
-		select: [1, '<select>', '</select>'],
3404
-		tbody: [2, '<table><tbody>', '</tbody></table>'],
3405
-		tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
3406
-	};
3407
-	translations.thead = translations.tfoot = translations.tbody;
3408
-
3409
-	var html = {
3410
-		set: function(){
3411
-			var html = Array.flatten(arguments).join('');
3412
-			var wrap = (!tableTest && translations[this.get('tag')]);
3413
-			if (wrap){
3414
-				var first = wrapper;
3415
-				first.innerHTML = wrap[1] + html + wrap[2];
3416
-				for (var i = wrap[0]; i--;) first = first.firstChild;
3417
-				this.empty().adopt(first.childNodes);
3418
-			} else {
3419
-				this.innerHTML = html;
3420
-			}
3421
-		}
3422
-	};
3423
-
3424
-	html.erase = html.set;
3425
-
3426
-	return html;
3427
-})();
3428
-
3429
-
3430
-/*
3431
-
3432
-name: Element.Style
3433
-
3434
-description: Contains methods for interacting with the styles of Elements in a fashionable way.
3435
-
3436
-license: MIT-style license.
3437
-
3438
-requires: Element
3439
-
3440
-provides: Element.Style
3441
-
3442
-...
3443
-*/
3444
-
3445
-(function(){
3446
-
3447
-var html = document.html;
3448
-
3449
-Element.Properties.styles = {set: function(styles){
3450
-	this.setStyles(styles);
3451
-}};
3452
-
3453
-var hasOpacity = (html.style.opacity != null);
3454
-var reAlpha = /alpha\(opacity=([\d.]+)\)/i;
3455
-
3456
-var setOpacity = function(element, opacity){
3457
-	if (!element.currentStyle || !element.currentStyle.hasLayout) element.style.zoom = 1;
3458
-	if (hasOpacity){
3459
-		element.style.opacity = opacity;
3460
-	} else {
3461
-		opacity = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
3462
-		var filter = element.style.filter || element.getComputedStyle('filter') || '';
3463
-		element.style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity;
3464
-	}
3465
-};
3466
-
3467
-Element.Properties.opacity = {
3468
-
3469
-	set: function(opacity){
3470
-		var visibility = this.style.visibility;
3471
-		if (opacity == 0 && visibility != 'hidden') this.style.visibility = 'hidden';
3472
-		else if (opacity != 0 && visibility != 'visible') this.style.visibility = 'visible';
3473
-
3474
-		setOpacity(this, opacity);
3475
-	},
3476
-
3477
-	get: (hasOpacity) ? function(){
3478
-		var opacity = this.style.opacity || this.getComputedStyle('opacity');
3479
-		return (opacity == '') ? 1 : opacity;
3480
-	} : function(){
3481
-		var opacity, filter = (this.style.filter || this.getComputedStyle('filter'));
3482
-		if (filter) opacity = filter.match(reAlpha);
3483
-		return (opacity == null || filter == null) ? 1 : (opacity[1] / 100);
3484
-	}
3485
-
3486
-};
3487
-
3488
-var floatName = (html.style.cssFloat == null) ? 'styleFloat' : 'cssFloat';
3489
-
3490
-Element.implement({
3491
-
3492
-	getComputedStyle: function(property){
3493
-		if (this.currentStyle) return this.currentStyle[property.camelCase()];
3494
-		var defaultView = Element.getDocument(this).defaultView,
3495
-			computed = defaultView ? defaultView.getComputedStyle(this, null) : null;
3496
-		return (computed) ? computed.getPropertyValue((property == floatName) ? 'float' : property.hyphenate()) : null;
3497
-	},
3498
-
3499
-	setOpacity: function(value){
3500
-		setOpacity(this, value);
3501
-		return this;
3502
-	},
3503
-
3504
-	getOpacity: function(){
3505
-		return this.get('opacity');
3506
-	},
3507
-
3508
-	setStyle: function(property, value){
3509
-		switch (property){
3510
-			case 'opacity': return this.set('opacity', parseFloat(value));
3511
-			case 'float': property = floatName;
3512
-		}
3513
-		property = property.camelCase();
3514
-		if (typeOf(value) != 'string'){
3515
-			var map = (Element.Styles[property] || '@').split(' ');
3516
-			value = Array.from(value).map(function(val, i){
3517
-				if (!map[i]) return '';
3518
-				return (typeOf(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
3519
-			}).join(' ');
3520
-		} else if (value == String(Number(value))){
3521
-			value = Math.round(value);
3522
-		}
3523
-		this.style[property] = value;
3524
-		return this;
3525
-	},
3526
-
3527
-	getStyle: function(property){
3528
-		switch (property){
3529
-			case 'opacity': return this.get('opacity');
3530
-			case 'float': property = floatName;
3531
-		}
3532
-		property = property.camelCase();
3533
-		var result = this.style[property];
3534
-		if (!result || property == 'zIndex'){
3535
-			result = [];
3536
-			for (var style in Element.ShortStyles){
3537
-				if (property != style) continue;
3538
-				for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
3539
-				return result.join(' ');
3540
-			}
3541
-			result = this.getComputedStyle(property);
3542
-		}
3543
-		if (result){
3544
-			result = String(result);
3545
-			var color = result.match(/rgba?\([\d\s,]+\)/);
3546
-			if (color) result = result.replace(color[0], color[0].rgbToHex());
3547
-		}
3548
-		if (Browser.opera || (Browser.ie && isNaN(parseFloat(result)))){
3549
-			if ((/^(height|width)$/).test(property)){
3550
-				var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
3551
-				values.each(function(value){
3552
-					size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
3553
-				}, this);
3554
-				return this['offset' + property.capitalize()] - size + 'px';
3555
-			}
3556
-			if (Browser.opera && String(result).indexOf('px') != -1) return result;
3557
-			if ((/^border(.+)Width|margin|padding/).test(property)) return '0px';
3558
-		}
3559
-		return result;
3560
-	},
3561
-
3562
-	setStyles: function(styles){
3563
-		for (var style in styles) this.setStyle(style, styles[style]);
3564
-		return this;
3565
-	},
3566
-
3567
-	getStyles: function(){
3568
-		var result = {};
3569
-		Array.flatten(arguments).each(function(key){
3570
-			result[key] = this.getStyle(key);
3571
-		}, this);
3572
-		return result;
3573
-	}
3574
-
3575
-});
3576
-
3577
-Element.Styles = {
3578
-	left: '@px', top: '@px', bottom: '@px', right: '@px',
3579
-	width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
3580
-	backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
3581
-	fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
3582
-	margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
3583
-	borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
3584
-	zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
3585
-};
3586
-
3587
-
3588
-
3589
-Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};
3590
-
3591
-['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
3592
-	var Short = Element.ShortStyles;
3593
-	var All = Element.Styles;
3594
-	['margin', 'padding'].each(function(style){
3595
-		var sd = style + direction;
3596
-		Short[style][sd] = All[sd] = '@px';
3597
-	});
3598
-	var bd = 'border' + direction;
3599
-	Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
3600
-	var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
3601
-	Short[bd] = {};
3602
-	Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
3603
-	Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
3604
-	Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
3605
-});
3606
-
3607
-}).call(this);
3608
-
3609
-
3610
-/*
3611
-
3612
-name: Element.Event
3613
-
3614
-description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events.
3615
-
3616
-license: MIT-style license.
3617
-
3618
-requires: [Element, Event]
3619
-
3620
-provides: Element.Event
3621
-
3622
-...
3623
-*/
3624
-
3625
-(function(){
3626
-
3627
-Element.Properties.events = {set: function(events){
3628
-	this.addEvents(events);
3629
-}};
3630
-
3631
-[Element, Window, Document].invoke('implement', {
3632
-
3633
-	addEvent: function(type, fn){
3634
-		var events = this.retrieve('events', {});
3635
-		if (!events[type]) events[type] = {keys: [], values: []};
3636
-		if (events[type].keys.contains(fn)) return this;
3637
-		events[type].keys.push(fn);
3638
-		var realType = type,
3639
-			custom = Element.Events[type],
3640
-			condition = fn,
3641
-			self = this;
3642
-		if (custom){
3643
-			if (custom.onAdd) custom.onAdd.call(this, fn);
3644
-			if (custom.condition){
3645
-				condition = function(event){
3646
-					if (custom.condition.call(this, event)) return fn.call(this, event);
3647
-					return true;
3648
-				};
3649
-			}
3650
-			realType = custom.base || realType;
3651
-		}
3652
-		var defn = function(){
3653
-			return fn.call(self);
3654
-		};
3655
-		var nativeEvent = Element.NativeEvents[realType];
3656
-		if (nativeEvent){
3657
-			if (nativeEvent == 2){
3658
-				defn = function(event){
3659
-					event = new Event(event, self.getWindow());
3660
-					if (condition.call(self, event) === false) event.stop();
3661
-				};
3662
-			}
3663
-			this.addListener(realType, defn, arguments[2]);
3664
-		}
3665
-		events[type].values.push(defn);
3666
-		return this;
3667
-	},
3668
-
3669
-	removeEvent: function(type, fn){
3670
-		var events = this.retrieve('events');
3671
-		if (!events || !events[type]) return this;
3672
-		var list = events[type];
3673
-		var index = list.keys.indexOf(fn);
3674
-		if (index == -1) return this;
3675
-		var value = list.values[index];
3676
-		delete list.keys[index];
3677
-		delete list.values[index];
3678
-		var custom = Element.Events[type];
3679
-		if (custom){
3680
-			if (custom.onRemove) custom.onRemove.call(this, fn);
3681
-			type = custom.base || type;
3682
-		}
3683
-		return (Element.NativeEvents[type]) ? this.removeListener(type, value, arguments[2]) : this;
3684
-	},
3685
-
3686
-	addEvents: function(events){
3687
-		for (var event in events) this.addEvent(event, events[event]);
3688
-		return this;
3689
-	},
3690
-
3691
-	removeEvents: function(events){
3692
-		var type;
3693
-		if (typeOf(events) == 'object'){
3694
-			for (type in events) this.removeEvent(type, events[type]);
3695
-			return this;
3696
-		}
3697
-		var attached = this.retrieve('events');
3698
-		if (!attached) return this;
3699
-		if (!events){
3700
-			for (type in attached) this.removeEvents(type);
3701
-			this.eliminate('events');
3702
-		} else if (attached[events]){
3703
-			attached[events].keys.each(function(fn){
3704
-				this.removeEvent(events, fn);
3705
-			}, this);
3706
-			delete attached[events];
3707
-		}
3708
-		return this;
3709
-	},
3710
-
3711
-	fireEvent: function(type, args, delay){
3712
-		var events = this.retrieve('events');
3713
-		if (!events || !events[type]) return this;
3714
-		args = Array.from(args);
3715
-
3716
-		events[type].keys.each(function(fn){
3717
-			if (delay) fn.delay(delay, this, args);
3718
-			else fn.apply(this, args);
3719
-		}, this);
3720
-		return this;
3721
-	},
3722
-
3723
-	cloneEvents: function(from, type){
3724
-		from = document.id(from);
3725
-		var events = from.retrieve('events');
3726
-		if (!events) return this;
3727
-		if (!type){
3728
-			for (var eventType in events) this.cloneEvents(from, eventType);
3729
-		} else if (events[type]){
3730
-			events[type].keys.each(function(fn){
3731
-				this.addEvent(type, fn);
3732
-			}, this);
3733
-		}
3734
-		return this;
3735
-	}
3736
-
3737
-});
3738
-
3739
-Element.NativeEvents = {
3740
-	click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
3741
-	mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
3742
-	mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
3743
-	keydown: 2, keypress: 2, keyup: 2, //keyboard
3744
-	orientationchange: 2, // mobile
3745
-	touchstart: 2, touchmove: 2, touchend: 2, touchcancel: 2, // touch
3746
-	gesturestart: 2, gesturechange: 2, gestureend: 2, // gesture
3747
-	focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
3748
-	load: 2, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
3749
-	error: 1, abort: 1, scroll: 1 //misc
3750
-};
3751
-
3752
-var check = function(event){
3753
-	var related = event.relatedTarget;
3754
-	if (related == null) return true;
3755
-	if (!related) return false;
3756
-	return (related != this && related.prefix != 'xul' && typeOf(this) != 'document' && !this.contains(related));
3757
-};
3758
-
3759
-Element.Events = {
3760
-
3761
-	mouseenter: {
3762
-		base: 'mouseover',
3763
-		condition: check
3764
-	},
3765
-
3766
-	mouseleave: {
3767
-		base: 'mouseout',
3768
-		condition: check
3769
-	},
3770
-
3771
-	mousewheel: {
3772
-		base: (Browser.firefox) ? 'DOMMouseScroll' : 'mousewheel'
3773
-	}
3774
-
3775
-};
3776
-
3777
-
3778
-
3779
-}).call(this);
3780
-
3781
-
3782
-/*
3783
-
3784
-name: Element.Dimensions
3785
-
3786
-description: Contains methods to work with size, scroll, or positioning of Elements and the window object.
3787
-
3788
-license: MIT-style license.
3789
-
3790
-credits:
3791
-  - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
3792
-  - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).
3793
-
3794
-requires: [Element, Element.Style]
3795
-
3796
-provides: [Element.Dimensions]
3797
-
3798
-...
3799
-*/
3800
-
3801
-(function(){
3802
-
3803
-var element = document.createElement('div'),
3804
-	child = document.createElement('div');
3805
-element.style.height = '0';
3806
-element.appendChild(child);
3807
-var brokenOffsetParent = (child.offsetParent === element);
3808
-element = child = null;
3809
-
3810
-var isOffset = function(el){
3811
-	return styleString(el, 'position') != 'static' || isBody(el);
3812
-};
3813
-
3814
-var isOffsetStatic = function(el){
3815
-	return isOffset(el) || (/^(?:table|td|th)$/i).test(el.tagName);
3816
-};
3817
-
3818
-Element.implement({
3819
-
3820
-	scrollTo: function(x, y){
3821
-		if (isBody(this)){
3822
-			this.getWindow().scrollTo(x, y);
3823
-		} else {
3824
-			this.scrollLeft = x;
3825
-			this.scrollTop = y;
3826
-		}
3827
-		return this;
3828
-	},
3829
-
3830
-	getSize: function(){
3831
-		if (isBody(this)) return this.getWindow().getSize();
3832
-		return {x: this.offsetWidth, y: this.offsetHeight};
3833
-	},
3834
-
3835
-	getScrollSize: function(){
3836
-		if (isBody(this)) return this.getWindow().getScrollSize();
3837
-		return {x: this.scrollWidth, y: this.scrollHeight};
3838
-	},
3839
-
3840
-	getScroll: function(){
3841
-		if (isBody(this)) return this.getWindow().getScroll();
3842
-		return {x: this.scrollLeft, y: this.scrollTop};
3843
-	},
3844
-
3845
-	getScrolls: function(){
3846
-		var element = this.parentNode, position = {x: 0, y: 0};
3847
-		while (element && !isBody(element)){
3848
-			position.x += element.scrollLeft;
3849
-			position.y += element.scrollTop;
3850
-			element = element.parentNode;
3851
-		}
3852
-		return position;
3853
-	},
3854
-
3855
-	getOffsetParent: brokenOffsetParent ? function(){
3856
-		var element = this;
3857
-		if (isBody(element) || styleString(element, 'position') == 'fixed') return null;
3858
-
3859
-		var isOffsetCheck = (styleString(element, 'position') == 'static') ? isOffsetStatic : isOffset;
3860
-		while ((element = element.parentNode)){
3861
-			if (isOffsetCheck(element)) return element;
3862
-		}
3863
-		return null;
3864
-	} : function(){
3865
-		var element = this;
3866
-		if (isBody(element) || styleString(element, 'position') == 'fixed') return null;
3867
-
3868
-		try {
3869
-			return element.offsetParent;
3870
-		} catch(e) {}
3871
-		return null;
3872
-	},
3873
-
3874
-	getOffsets: function(){
3875
-		if (this.getBoundingClientRect && !Browser.Platform.ios){
3876
-			var bound = this.getBoundingClientRect(),
3877
-				html = document.id(this.getDocument().documentElement),
3878
-				htmlScroll = html.getScroll(),
3879
-				elemScrolls = this.getScrolls(),
3880
-				isFixed = (styleString(this, 'position') == 'fixed');
3881
-
3882
-			return {
3883
-				x: bound.left.toInt() + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,
3884
-				y: bound.top.toInt()  + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop
3885
-			};
3886
-		}
3887
-
3888
-		var element = this, position = {x: 0, y: 0};
3889
-		if (isBody(this)) return position;
3890
-
3891
-		while (element && !isBody(element)){
3892
-			position.x += element.offsetLeft;
3893
-			position.y += element.offsetTop;
3894
-
3895
-			if (Browser.firefox){
3896
-				if (!borderBox(element)){
3897
-					position.x += leftBorder(element);
3898
-					position.y += topBorder(element);
3899
-				}
3900
-				var parent = element.parentNode;
3901
-				if (parent && styleString(parent, 'overflow') != 'visible'){
3902
-					position.x += leftBorder(parent);
3903
-					position.y += topBorder(parent);
3904
-				}
3905
-			} else if (element != this && Browser.safari){
3906
-				position.x += leftBorder(element);
3907
-				position.y += topBorder(element);
3908
-			}
3909
-
3910
-			element = element.offsetParent;
3911
-		}
3912
-		if (Browser.firefox && !borderBox(this)){
3913
-			position.x -= leftBorder(this);
3914
-			position.y -= topBorder(this);
3915
-		}
3916
-		return position;
3917
-	},
3918
-
3919
-	getPosition: function(relative){
3920
-		if (isBody(this)) return {x: 0, y: 0};
3921
-		var offset = this.getOffsets(),
3922
-			scroll = this.getScrolls();
3923
-		var position = {
3924
-			x: offset.x - scroll.x,
3925
-			y: offset.y - scroll.y
3926
-		};
3927
-
3928
-		if (relative && (relative = document.id(relative))){
3929
-			var relativePosition = relative.getPosition();
3930
-			return {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)};
3931
-		}
3932
-		return position;
3933
-	},
3934
-
3935
-	getCoordinates: function(element){
3936
-		if (isBody(this)) return this.getWindow().getCoordinates();
3937
-		var position = this.getPosition(element),
3938
-			size = this.getSize();
3939
-		var obj = {
3940
-			left: position.x,
3941
-			top: position.y,
3942
-			width: size.x,
3943
-			height: size.y
3944
-		};
3945
-		obj.right = obj.left + obj.width;
3946
-		obj.bottom = obj.top + obj.height;
3947
-		return obj;
3948
-	},
3949
-
3950
-	computePosition: function(obj){
3951
-		return {
3952
-			left: obj.x - styleNumber(this, 'margin-left'),
3953
-			top: obj.y - styleNumber(this, 'margin-top')
3954
-		};
3955
-	},
3956
-
3957
-	setPosition: function(obj){
3958
-		return this.setStyles(this.computePosition(obj));
3959
-	}
3960
-
3961
-});
3962
-
3963
-
3964
-[Document, Window].invoke('implement', {
3965
-
3966
-	getSize: function(){
3967
-		var doc = getCompatElement(this);
3968
-		return {x: doc.clientWidth, y: doc.clientHeight};
3969
-	},
3970
-
3971
-	getScroll: function(){
3972
-		var win = this.getWindow(), doc = getCompatElement(this);
3973
-		return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
3974
-	},
3975
-
3976
-	getScrollSize: function(){
3977
-		var doc = getCompatElement(this),
3978
-			min = this.getSize(),
3979
-			body = this.getDocument().body;
3980
-
3981
-		return {x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)};
3982
-	},
3983
-
3984
-	getPosition: function(){
3985
-		return {x: 0, y: 0};
3986
-	},
3987
-
3988
-	getCoordinates: function(){
3989
-		var size = this.getSize();
3990
-		return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
3991
-	}
3992
-
3993
-});
3994
-
3995
-// private methods
3996
-
3997
-var styleString = Element.getComputedStyle;
3998
-
3999
-function styleNumber(element, style){
4000
-	return styleString(element, style).toInt() || 0;
4001
-}
4002
-
4003
-function borderBox(element){
4004
-	return styleString(element, '-moz-box-sizing') == 'border-box';
4005
-}
4006
-
4007
-function topBorder(element){
4008
-	return styleNumber(element, 'border-top-width');
4009
-}
4010
-
4011
-function leftBorder(element){
4012
-	return styleNumber(element, 'border-left-width');
4013
-}
4014
-
4015
-function isBody(element){
4016
-	return (/^(?:body|html)$/i).test(element.tagName);
4017
-}
4018
-
4019
-function getCompatElement(element){
4020
-	var doc = element.getDocument();
4021
-	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
4022
-}
4023
-
4024
-}).call(this);
4025
-
4026
-//aliases
4027
-Element.alias({position: 'setPosition'}); //compatability
4028
-
4029
-[Window, Document, Element].invoke('implement', {
4030
-
4031
-	getHeight: function(){
4032
-		return this.getSize().y;
4033
-	},
4034
-
4035
-	getWidth: function(){
4036
-		return this.getSize().x;
4037
-	},
4038
-
4039
-	getScrollTop: function(){
4040
-		return this.getScroll().y;
4041
-	},
4042
-
4043
-	getScrollLeft: function(){
4044
-		return this.getScroll().x;
4045
-	},
4046
-
4047
-	getScrollHeight: function(){
4048
-		return this.getScrollSize().y;
4049
-	},
4050
-
4051
-	getScrollWidth: function(){
4052
-		return this.getScrollSize().x;
4053
-	},
4054
-
4055
-	getTop: function(){
4056
-		return this.getPosition().y;
4057
-	},
4058
-
4059
-	getLeft: function(){
4060
-		return this.getPosition().x;
4061
-	}
4062
-
4063
-});
4064
-
4065
-
4066
-/*
4067
-
4068
-name: Fx
4069
-
4070
-description: Contains the basic animation logic to be extended by all other Fx Classes.
4071
-
4072
-license: MIT-style license.
4073
-
4074
-requires: [Chain, Events, Options]
4075
-
4076
-provides: Fx
4077
-
4078
-...
4079
-*/
4080
-
4081
-(function(){
4082
-
4083
-var Fx = this.Fx = new Class({
4084
-
4085
-	Implements: [Chain, Events, Options],
4086
-
4087
-	options: {
4088
-		/*
4089
-		onStart: nil,
4090
-		onCancel: nil,
4091
-		onComplete: nil,
4092
-		*/
4093
-		fps: 60,
4094
-		unit: false,
4095
-		duration: 500,
4096
-		frames: null,
4097
-		frameSkip: true,
4098
-		link: 'ignore'
4099
-	},
4100
-
4101
-	initialize: function(options){
4102
-		this.subject = this.subject || this;
4103
-		this.setOptions(options);
4104
-	},
4105
-
4106
-	getTransition: function(){
4107
-		return function(p){
4108
-			return -(Math.cos(Math.PI * p) - 1) / 2;
4109
-		};
4110
-	},
4111
-
4112
-	step: function(now){
4113
-		if (this.options.frameSkip){
4114
-			var diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval;
4115
-			this.time = now;
4116
-			this.frame += frames;
4117
-		} else {
4118
-			this.frame++;
4119
-		}
4120
-
4121
-		if (this.frame < this.frames){
4122
-			var delta = this.transition(this.frame / this.frames);
4123
-			this.set(this.compute(this.from, this.to, delta));
4124
-		} else {
4125
-			this.frame = this.frames;
4126
-			this.set(this.compute(this.from, this.to, 1));
4127
-			this.stop();
4128
-		}
4129
-	},
4130
-
4131
-	set: function(now){
4132
-		return now;
4133
-	},
4134
-
4135
-	compute: function(from, to, delta){
4136
-		return Fx.compute(from, to, delta);
4137
-	},
4138
-
4139
-	check: function(){
4140
-		if (!this.isRunning()) return true;
4141
-		switch (this.options.link){
4142
-			case 'cancel': this.cancel(); return true;
4143
-			case 'chain': this.chain(this.caller.pass(arguments, this)); return false;
4144
-		}
4145
-		return false;
4146
-	},
4147
-
4148
-	start: function(from, to){
4149
-		if (!this.check(from, to)) return this;
4150
-		this.from = from;
4151
-		this.to = to;
4152
-		this.frame = (this.options.frameSkip) ? 0 : -1;
4153
-		this.time = null;
4154
-		this.transition = this.getTransition();
4155
-		var frames = this.options.frames, fps = this.options.fps, duration = this.options.duration;
4156
-		this.duration = Fx.Durations[duration] || duration.toInt();
4157
-		this.frameInterval = 1000 / fps;
4158
-		this.frames = frames || Math.round(this.duration / this.frameInterval);
4159
-		this.fireEvent('start', this.subject);
4160
-		pushInstance.call(this, fps);
4161
-		return this;
4162
-	},
4163
-
4164
-	stop: function(){
4165
-		if (this.isRunning()){
4166
-			this.time = null;
4167
-			pullInstance.call(this, this.options.fps);
4168
-			if (this.frames == this.frame){
4169
-				this.fireEvent('complete', this.subject);
4170
-				if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
4171
-			} else {
4172
-				this.fireEvent('stop', this.subject);
4173
-			}
4174
-		}
4175
-		return this;
4176
-	},
4177
-
4178
-	cancel: function(){
4179
-		if (this.isRunning()){
4180
-			this.time = null;
4181
-			pullInstance.call(this, this.options.fps);
4182
-			this.frame = this.frames;
4183
-			this.fireEvent('cancel', this.subject).clearChain();
4184
-		}
4185
-		return this;
4186
-	},
4187
-
4188
-	pause: function(){
4189
-		if (this.isRunning()){
4190
-			this.time = null;
4191
-			pullInstance.call(this, this.options.fps);
4192
-		}
4193
-		return this;
4194
-	},
4195
-
4196
-	resume: function(){
4197
-		if ((this.frame < this.frames) && !this.isRunning()) pushInstance.call(this, this.options.fps);
4198
-		return this;
4199
-	},
4200
-
4201
-	isRunning: function(){
4202
-		var list = instances[this.options.fps];
4203
-		return list && list.contains(this);
4204
-	}
4205
-
4206
-});
4207
-
4208
-Fx.compute = function(from, to, delta){
4209
-	return (to - from) * delta + from;
4210
-};
4211
-
4212
-Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};
4213
-
4214
-// global timers
4215
-
4216
-var instances = {}, timers = {};
4217
-
4218
-var loop = function(){
4219
-	var now = Date.now();
4220
-	for (var i = this.length; i--;){
4221
-		var instance = this[i];
4222
-		if (instance) instance.step(now);
4223
-	}
4224
-};
4225
-
4226
-var pushInstance = function(fps){
4227
-	var list = instances[fps] || (instances[fps] = []);
4228
-	list.push(this);
4229
-	if (!timers[fps]) timers[fps] = loop.periodical(Math.round(1000 / fps), list);
4230
-};
4231
-
4232
-var pullInstance = function(fps){
4233
-	var list = instances[fps];
4234
-	if (list){
4235
-		list.erase(this);
4236
-		if (!list.length && timers[fps]){
4237
-			delete instances[fps];
4238
-			timers[fps] = clearInterval(timers[fps]);
4239
-		}
4240
-	}
4241
-};
4242
-
4243
-}).call(this);
4244
-
4245
-
4246
-/*
4247
-
4248
-name: Fx.CSS
4249
-
4250
-description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.
4251
-
4252
-license: MIT-style license.
4253
-
4254
-requires: [Fx, Element.Style]
4255
-
4256
-provides: Fx.CSS
4257
-
4258
-...
4259
-*/
4260
-
4261
-Fx.CSS = new Class({
4262
-
4263
-	Extends: Fx,
4264
-
4265
-	//prepares the base from/to object
4266
-
4267
-	prepare: function(element, property, values){
4268
-		values = Array.from(values);
4269
-		if (values[1] == null){
4270
-			values[1] = values[0];
4271
-			values[0] = element.getStyle(property);
4272
-		}
4273
-		var parsed = values.map(this.parse);
4274
-		return {from: parsed[0], to: parsed[1]};
4275
-	},
4276
-
4277
-	//parses a value into an array
4278
-
4279
-	parse: function(value){
4280
-		value = Function.from(value)();
4281
-		value = (typeof value == 'string') ? value.split(' ') : Array.from(value);
4282
-		return value.map(function(val){
4283
-			val = String(val);
4284
-			var found = false;
4285
-			Object.each(Fx.CSS.Parsers, function(parser, key){
4286
-				if (found) return;
4287
-				var parsed = parser.parse(val);
4288
-				if (parsed || parsed === 0) found = {value: parsed, parser: parser};
4289
-			});
4290
-			found = found || {value: val, parser: Fx.CSS.Parsers.String};
4291
-			return found;
4292
-		});
4293
-	},
4294
-
4295
-	//computes by a from and to prepared objects, using their parsers.
4296
-
4297
-	compute: function(from, to, delta){
4298
-		var computed = [];
4299
-		(Math.min(from.length, to.length)).times(function(i){
4300
-			computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
4301
-		});
4302
-		computed.$family = Function.from('fx:css:value');
4303
-		return computed;
4304
-	},
4305
-
4306
-	//serves the value as settable
4307
-
4308
-	serve: function(value, unit){
4309
-		if (typeOf(value) != 'fx:css:value') value = this.parse(value);
4310
-		var returned = [];
4311
-		value.each(function(bit){
4312
-			returned = returned.concat(bit.parser.serve(bit.value, unit));
4313
-		});
4314
-		return returned;
4315
-	},
4316
-
4317
-	//renders the change to an element
4318
-
4319
-	render: function(element, property, value, unit){
4320
-		element.setStyle(property, this.serve(value, unit));
4321
-	},
4322
-
4323
-	//searches inside the page css to find the values for a selector
4324
-
4325
-	search: function(selector){
4326
-		if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
4327
-		var to = {}, selectorTest = new RegExp('^' + selector.escapeRegExp() + '$');
4328
-		Array.each(document.styleSheets, function(sheet, j){
4329
-			var href = sheet.href;
4330
-			if (href && href.contains('://') && !href.contains(document.domain)) return;
4331
-			var rules = sheet.rules || sheet.cssRules;
4332
-			Array.each(rules, function(rule, i){
4333
-				if (!rule.style) return;
4334
-				var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
4335
-					return m.toLowerCase();
4336
-				}) : null;
4337
-				if (!selectorText || !selectorTest.test(selectorText)) return;
4338
-				Object.each(Element.Styles, function(value, style){
4339
-					if (!rule.style[style] || Element.ShortStyles[style]) return;
4340
-					value = String(rule.style[style]);
4341
-					to[style] = ((/^rgb/).test(value)) ? value.rgbToHex() : value;
4342
-				});
4343
-			});
4344
-		});
4345
-		return Fx.CSS.Cache[selector] = to;
4346
-	}
4347
-
4348
-});
4349
-
4350
-Fx.CSS.Cache = {};
4351
-
4352
-Fx.CSS.Parsers = {
4353
-
4354
-	Color: {
4355
-		parse: function(value){
4356
-			if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
4357
-			return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
4358
-		},
4359
-		compute: function(from, to, delta){
4360
-			return from.map(function(value, i){
4361
-				return Math.round(Fx.compute(from[i], to[i], delta));
4362
-			});
4363
-		},
4364
-		serve: function(value){
4365
-			return value.map(Number);
4366
-		}
4367
-	},
4368
-
4369
-	Number: {
4370
-		parse: parseFloat,
4371
-		compute: Fx.compute,
4372
-		serve: function(value, unit){
4373
-			return (unit) ? value + unit : value;
4374
-		}
4375
-	},
4376
-
4377
-	String: {
4378
-		parse: Function.from(false),
4379
-		compute: function(zero, one){
4380
-			return one;
4381
-		},
4382
-		serve: function(zero){
4383
-			return zero;
4384
-		}
4385
-	}
4386
-
4387
-};
4388
-
4389
-
4390
-
4391
-
4392
-/*
4393
-
4394
-name: Fx.Tween
4395
-
4396
-description: Formerly Fx.Style, effect to transition any CSS property for an element.
4397
-
4398
-license: MIT-style license.
4399
-
4400
-requires: Fx.CSS
4401
-
4402
-provides: [Fx.Tween, Element.fade, Element.highlight]
4403
-
4404
-...
4405
-*/
4406
-
4407
-Fx.Tween = new Class({
4408
-
4409
-	Extends: Fx.CSS,
4410
-
4411
-	initialize: function(element, options){
4412
-		this.element = this.subject = document.id(element);
4413
-		this.parent(options);
4414
-	},
4415
-
4416
-	set: function(property, now){
4417
-		if (arguments.length == 1){
4418
-			now = property;
4419
-			property = this.property || this.options.property;
4420
-		}
4421
-		this.render(this.element, property, now, this.options.unit);
4422
-		return this;
4423
-	},
4424
-
4425
-	start: function(property, from, to){
4426
-		if (!this.check(property, from, to)) return this;
4427
-		var args = Array.flatten(arguments);
4428
-		this.property = this.options.property || args.shift();
4429
-		var parsed = this.prepare(this.element, this.property, args);
4430
-		return this.parent(parsed.from, parsed.to);
4431
-	}
4432
-
4433
-});
4434
-
4435
-Element.Properties.tween = {
4436
-
4437
-	set: function(options){
4438
-		this.get('tween').cancel().setOptions(options);
4439
-		return this;
4440
-	},
4441
-
4442
-	get: function(){
4443
-		var tween = this.retrieve('tween');
4444
-		if (!tween){
4445
-			tween = new Fx.Tween(this, {link: 'cancel'});
4446
-			this.store('tween', tween);
4447
-		}
4448
-		return tween;
4449
-	}
4450
-
4451
-};
4452
-
4453
-Element.implement({
4454
-
4455
-	tween: function(property, from, to){
4456
-		this.get('tween').start(arguments);
4457
-		return this;
4458
-	},
4459
-
4460
-	fade: function(how){
4461
-		var fade = this.get('tween'), o = 'opacity', toggle;
4462
-		how = [how, 'toggle'].pick();
4463
-		switch (how){
4464
-			case 'in': fade.start(o, 1); break;
4465
-			case 'out': fade.start(o, 0); break;
4466
-			case 'show': fade.set(o, 1); break;
4467
-			case 'hide': fade.set(o, 0); break;
4468
-			case 'toggle':
4469
-				var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
4470
-				fade.start(o, (flag) ? 0 : 1);
4471
-				this.store('fade:flag', !flag);
4472
-				toggle = true;
4473
-			break;
4474
-			default: fade.start(o, arguments);
4475
-		}
4476
-		if (!toggle) this.eliminate('fade:flag');
4477
-		return this;
4478
-	},
4479
-
4480
-	highlight: function(start, end){
4481
-		if (!end){
4482
-			end = this.retrieve('highlight:original', this.getStyle('background-color'));
4483
-			end = (end == 'transparent') ? '#fff' : end;
4484
-		}
4485
-		var tween = this.get('tween');
4486
-		tween.start('background-color', start || '#ffff88', end).chain(function(){
4487
-			this.setStyle('background-color', this.retrieve('highlight:original'));
4488
-			tween.callChain();
4489
-		}.bind(this));
4490
-		return this;
4491
-	}
4492
-
4493
-});
4494
-
4495
-
4496
-/*
4497
-
4498
-name: Fx.Morph
4499
-
4500
-description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.
4501
-
4502
-license: MIT-style license.
4503
-
4504
-requires: Fx.CSS
4505
-
4506
-provides: Fx.Morph
4507
-
4508
-...
4509
-*/
4510
-
4511
-Fx.Morph = new Class({
4512
-
4513
-	Extends: Fx.CSS,
4514
-
4515
-	initialize: function(element, options){
4516
-		this.element = this.subject = document.id(element);
4517
-		this.parent(options);
4518
-	},
4519
-
4520
-	set: function(now){
4521
-		if (typeof now == 'string') now = this.search(now);
4522
-		for (var p in now) this.render(this.element, p, now[p], this.options.unit);
4523
-		return this;
4524
-	},
4525
-
4526
-	compute: function(from, to, delta){
4527
-		var now = {};
4528
-		for (var p in from) now[p] = this.parent(from[p], to[p], delta);
4529
-		return now;
4530
-	},
4531
-
4532
-	start: function(properties){
4533
-		if (!this.check(properties)) return this;
4534
-		if (typeof properties == 'string') properties = this.search(properties);
4535
-		var from = {}, to = {};
4536
-		for (var p in properties){
4537
-			var parsed = this.prepare(this.element, p, properties[p]);
4538
-			from[p] = parsed.from;
4539
-			to[p] = parsed.to;
4540
-		}
4541
-		return this.parent(from, to);
4542
-	}
4543
-
4544
-});
4545
-
4546
-Element.Properties.morph = {
4547
-
4548
-	set: function(options){
4549
-		this.get('morph').cancel().setOptions(options);
4550
-		return this;
4551
-	},
4552
-
4553
-	get: function(){
4554
-		var morph = this.retrieve('morph');
4555
-		if (!morph){
4556
-			morph = new Fx.Morph(this, {link: 'cancel'});
4557
-			this.store('morph', morph);
4558
-		}
4559
-		return morph;
4560
-	}
4561
-
4562
-};
4563
-
4564
-Element.implement({
4565
-
4566
-	morph: function(props){
4567
-		this.get('morph').start(props);
4568
-		return this;
4569
-	}
4570
-
4571
-});
4572
-
4573
-
4574
-/*
4575
-
4576
-name: Fx.Transitions
4577
-
4578
-description: Contains a set of advanced transitions to be used with any of the Fx Classes.
4579
-
4580
-license: MIT-style license.
4581
-
4582
-credits:
4583
-  - Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified and optimized to be used with MooTools.
4584
-
4585
-requires: Fx
4586
-
4587
-provides: Fx.Transitions
4588
-
4589
-...
4590
-*/
4591
-
4592
-Fx.implement({
4593
-
4594
-	getTransition: function(){
4595
-		var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
4596
-		if (typeof trans == 'string'){
4597
-			var data = trans.split(':');
4598
-			trans = Fx.Transitions;
4599
-			trans = trans[data[0]] || trans[data[0].capitalize()];
4600
-			if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
4601
-		}
4602
-		return trans;
4603
-	}
4604
-
4605
-});
4606
-
4607
-Fx.Transition = function(transition, params){
4608
-	params = Array.from(params);
4609
-	var easeIn = function(pos){
4610
-		return transition(pos, params);
4611
-	};
4612
-	return Object.append(easeIn, {
4613
-		easeIn: easeIn,
4614
-		easeOut: function(pos){
4615
-			return 1 - transition(1 - pos, params);
4616
-		},
4617
-		easeInOut: function(pos){
4618
-			return (pos <= 0.5 ? transition(2 * pos, params) : (2 - transition(2 * (1 - pos), params))) / 2;
4619
-		}
4620
-	});
4621
-};
4622
-
4623
-Fx.Transitions = {
4624
-
4625
-	linear: function(zero){
4626
-		return zero;
4627
-	}
4628
-
4629
-};
4630
-
4631
-
4632
-
4633
-Fx.Transitions.extend = function(transitions){
4634
-	for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
4635
-};
4636
-
4637
-Fx.Transitions.extend({
4638
-
4639
-	Pow: function(p, x){
4640
-		return Math.pow(p, x && x[0] || 6);
4641
-	},
4642
-
4643
-	Expo: function(p){
4644
-		return Math.pow(2, 8 * (p - 1));
4645
-	},
4646
-
4647
-	Circ: function(p){
4648
-		return 1 - Math.sin(Math.acos(p));
4649
-	},
4650
-
4651
-	Sine: function(p){
4652
-		return 1 - Math.cos(p * Math.PI / 2);
4653
-	},
4654
-
4655
-	Back: function(p, x){
4656
-		x = x && x[0] || 1.618;
4657
-		return Math.pow(p, 2) * ((x + 1) * p - x);
4658
-	},
4659
-
4660
-	Bounce: function(p){
4661
-		var value;
4662
-		for (var a = 0, b = 1; 1; a += b, b /= 2){
4663
-			if (p >= (7 - 4 * a) / 11){
4664
-				value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
4665
-				break;
4666
-			}
4667
-		}
4668
-		return value;
4669
-	},
4670
-
4671
-	Elastic: function(p, x){
4672
-		return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x && x[0] || 1) / 3);
4673
-	}
4674
-
4675
-});
4676
-
4677
-['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
4678
-	Fx.Transitions[transition] = new Fx.Transition(function(p){
4679
-		return Math.pow(p, i + 2);
4680
-	});
4681
-});
4682
-
4683
-
4684
-/*
4685
-
4686
-name: Request
4687
-
4688
-description: Powerful all purpose Request Class. Uses XMLHTTPRequest.
4689
-
4690
-license: MIT-style license.
4691
-
4692
-requires: [Object, Element, Chain, Events, Options, Browser]
4693
-
4694
-provides: Request
4695
-
4696
-...
4697
-*/
4698
-
4699
-(function(){
4700
-
4701
-var empty = function(){},
4702
-	progressSupport = ('onprogress' in new Browser.Request);
4703
-
4704
-var Request = this.Request = new Class({
4705
-
4706
-	Implements: [Chain, Events, Options],
4707
-
4708
-	options: {/*
4709
-		onRequest: function(){},
4710
-		onLoadstart: function(event, xhr){},
4711
-		onProgress: function(event, xhr){},
4712
-		onComplete: function(){},
4713
-		onCancel: function(){},
4714
-		onSuccess: function(responseText, responseXML){},
4715
-		onFailure: function(xhr){},
4716
-		onException: function(headerName, value){},
4717
-		onTimeout: function(){},
4718
-		user: '',
4719
-		password: '',*/
4720
-		url: '',
4721
-		data: '',
4722
-		headers: {
4723
-			'X-Requested-With': 'XMLHttpRequest',
4724
-			'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
4725
-		},
4726
-		async: true,
4727
-		format: false,
4728
-		method: 'post',
4729
-		link: 'ignore',
4730
-		isSuccess: null,
4731
-		emulation: true,
4732
-		urlEncoded: true,
4733
-		encoding: 'utf-8',
4734
-		evalScripts: false,
4735
-		evalResponse: false,
4736
-		timeout: 0,
4737
-		noCache: false
4738
-	},
4739
-
4740
-	initialize: function(options){
4741
-		this.xhr = new Browser.Request();
4742
-		this.setOptions(options);
4743
-		this.headers = this.options.headers;
4744
-	},
4745
-
4746
-	onStateChange: function(){
4747
-		var xhr = this.xhr;
4748
-		if (xhr.readyState != 4 || !this.running) return;
4749
-		this.running = false;
4750
-		this.status = 0;
4751
-		Function.attempt(function(){
4752
-			var status = xhr.status;
4753
-			this.status = (status == 1223) ? 204 : status;
4754
-		}.bind(this));
4755
-		xhr.onreadystatechange = empty;
4756
-		if (progressSupport) xhr.onprogress = xhr.onloadstart = empty;
4757
-		clearTimeout(this.timer);
4758
-
4759
-		this.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML};
4760
-		if (this.options.isSuccess.call(this, this.status))
4761
-			this.success(this.response.text, this.response.xml);
4762
-		else
4763
-			this.failure();
4764
-	},
4765
-
4766
-	isSuccess: function(){
4767
-		var status = this.status;
4768
-		return (status >= 200 && status < 300);
4769
-	},
4770
-
4771
-	isRunning: function(){
4772
-		return !!this.running;
4773
-	},
4774
-
4775
-	processScripts: function(text){
4776
-		if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return Browser.exec(text);
4777
-		return text.stripScripts(this.options.evalScripts);
4778
-	},
4779
-
4780
-	success: function(text, xml){
4781
-		this.onSuccess(this.processScripts(text), xml);
4782
-	},
4783
-
4784
-	onSuccess: function(){
4785
-		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
4786
-	},
4787
-
4788
-	failure: function(){
4789
-		this.onFailure();
4790
-	},
4791
-
4792
-	onFailure: function(){
4793
-		this.fireEvent('complete').fireEvent('failure', this.xhr);
4794
-	},
4795
-
4796
-	loadstart: function(event){
4797
-		this.fireEvent('loadstart', [event, this.xhr]);
4798
-	},
4799
-
4800
-	progress: function(event){
4801
-		this.fireEvent('progress', [event, this.xhr]);
4802
-	},
4803
-
4804
-	timeout: function(){
4805
-		this.fireEvent('timeout', this.xhr);
4806
-	},
4807
-
4808
-	setHeader: function(name, value){
4809
-		this.headers[name] = value;
4810
-		return this;
4811
-	},
4812
-
4813
-	getHeader: function(name){
4814
-		return Function.attempt(function(){
4815
-			return this.xhr.getResponseHeader(name);
4816
-		}.bind(this));
4817
-	},
4818
-
4819
-	check: function(){
4820
-		if (!this.running) return true;
4821
-		switch (this.options.link){
4822
-			case 'cancel': this.cancel(); return true;
4823
-			case 'chain': this.chain(this.caller.pass(arguments, this)); return false;
4824
-		}
4825
-		return false;
4826
-	},
4827
-
4828
-	send: function(options){
4829
-		if (!this.check(options)) return this;
4830
-
4831
-		this.options.isSuccess = this.options.isSuccess || this.isSuccess;
4832
-		this.running = true;
4833
-
4834
-		var type = typeOf(options);
4835
-		if (type == 'string' || type == 'element') options = {data: options};
4836
-
4837
-		var old = this.options;
4838
-		options = Object.append({data: old.data, url: old.url, method: old.method}, options);
4839
-		var data = options.data, url = String(options.url), method = options.method.toLowerCase();
4840
-
4841
-		switch (typeOf(data)){
4842
-			case 'element': data = document.id(data).toQueryString(); break;
4843
-			case 'object': case 'hash': data = Object.toQueryString(data);
4844
-		}
4845
-
4846
-		if (this.options.format){
4847
-			var format = 'format=' + this.options.format;
4848
-			data = (data) ? format + '&' + data : format;
4849
-		}
4850
-
4851
-		if (this.options.emulation && !['get', 'post'].contains(method)){
4852
-			var _method = '_method=' + method;
4853
-			data = (data) ? _method + '&' + data : _method;
4854
-			method = 'post';
4855
-		}
4856
-
4857
-		if (this.options.urlEncoded && ['post', 'put'].contains(method)){
4858
-			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
4859
-			this.headers['Content-type'] = 'application/x-www-form-urlencoded' + encoding;
4860
-		}
4861
-
4862
-		if (!url) url = document.location.pathname;
4863
-
4864
-		var trimPosition = url.lastIndexOf('/');
4865
-		if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);
4866
-
4867
-		if (this.options.noCache)
4868
-			url += (url.contains('?') ? '&' : '?') + String.uniqueID();
4869
-
4870
-		if (data && method == 'get'){
4871
-			url += (url.contains('?') ? '&' : '?') + data;
4872
-			data = null;
4873
-		}
4874
-
4875
-		var xhr = this.xhr;
4876
-		if (progressSupport){
4877
-			xhr.onloadstart = this.loadstart.bind(this);
4878
-			xhr.onprogress = this.progress.bind(this);
4879
-		}
4880
-
4881
-		xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password);
4882
-		if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true;
4883
-
4884
-		xhr.onreadystatechange = this.onStateChange.bind(this);
4885
-
4886
-		Object.each(this.headers, function(value, key){
4887
-			try {
4888
-				xhr.setRequestHeader(key, value);
4889
-			} catch (e){
4890
-				this.fireEvent('exception', [key, value]);
4891
-			}
4892
-		}, this);
4893
-
4894
-		this.fireEvent('request');
4895
-		xhr.send(data);
4896
-		if (!this.options.async) this.onStateChange();
4897
-		if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this);
4898
-		return this;
4899
-	},
4900
-
4901
-	cancel: function(){
4902
-		if (!this.running) return this;
4903
-		this.running = false;
4904
-		var xhr = this.xhr;
4905
-		xhr.abort();
4906
-		clearTimeout(this.timer);
4907
-		xhr.onreadystatechange = empty;
4908
-		if (progressSupport) xhr.onprogress = xhr.onloadstart = empty;
4909
-		this.xhr = new Browser.Request();
4910
-		this.fireEvent('cancel');
4911
-		return this;
4912
-	}
4913
-
4914
-});
4915
-
4916
-var methods = {};
4917
-['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
4918
-	methods[method] = function(data){
4919
-		var object = {
4920
-			method: method
4921
-		};
4922
-		if (data != null) object.data = data;
4923
-		return this.send(object);
4924
-	};
4925
-});
4926
-
4927
-Request.implement(methods);
4928
-
4929
-Element.Properties.send = {
4930
-
4931
-	set: function(options){
4932
-		var send = this.get('send').cancel();
4933
-		send.setOptions(options);
4934
-		return this;
4935
-	},
4936
-
4937
-	get: function(){
4938
-		var send = this.retrieve('send');
4939
-		if (!send){
4940
-			send = new Request({
4941
-				data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
4942
-			});
4943
-			this.store('send', send);
4944
-		}
4945
-		return send;
4946
-	}
4947
-
4948
-};
4949
-
4950
-Element.implement({
4951
-
4952
-	send: function(url){
4953
-		var sender = this.get('send');
4954
-		sender.send({data: this, url: url || sender.options.url});
4955
-		return this;
4956
-	}
4957
-
4958
-});
4959
-
4960
-})();
4961
-
4962
-/*
4963
-
4964
-name: Request.HTML
4965
-
4966
-description: Extends the basic Request Class with additional methods for interacting with HTML responses.
4967
-
4968
-license: MIT-style license.
4969
-
4970
-requires: [Element, Request]
4971
-
4972
-provides: Request.HTML
4973
-
4974
-...
4975
-*/
4976
-
4977
-Request.HTML = new Class({
4978
-
4979
-	Extends: Request,
4980
-
4981
-	options: {
4982
-		update: false,
4983
-		append: false,
4984
-		evalScripts: true,
4985
-		filter: false,
4986
-		headers: {
4987
-			Accept: 'text/html, application/xml, text/xml, */*'
4988
-		}
4989
-	},
4990
-
4991
-	success: function(text){
4992
-		var options = this.options, response = this.response;
4993
-
4994
-		response.html = text.stripScripts(function(script){
4995
-			response.javascript = script;
4996
-		});
4997
-
4998
-		var match = response.html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
4999
-		if (match) response.html = match[1];
5000
-		var temp = new Element('div').set('html', response.html);
5001
-
5002
-		response.tree = temp.childNodes;
5003
-		response.elements = temp.getElements('*');
5004
-
5005
-		if (options.filter) response.tree = response.elements.filter(options.filter);
5006
-		if (options.update) document.id(options.update).empty().set('html', response.html);
5007
-		else if (options.append) document.id(options.append).adopt(temp.getChildren());
5008
-		if (options.evalScripts) Browser.exec(response.javascript);
5009
-
5010
-		this.onSuccess(response.tree, response.elements, response.html, response.javascript);
5011
-	}
5012
-
5013
-});
5014
-
5015
-Element.Properties.load = {
5016
-
5017
-	set: function(options){
5018
-		var load = this.get('load').cancel();
5019
-		load.setOptions(options);
5020
-		return this;
5021
-	},
5022
-
5023
-	get: function(){
5024
-		var load = this.retrieve('load');
5025
-		if (!load){
5026
-			load = new Request.HTML({data: this, link: 'cancel', update: this, method: 'get'});
5027
-			this.store('load', load);
5028
-		}
5029
-		return load;
5030
-	}
5031
-
5032
-};
5033
-
5034
-Element.implement({
5035
-
5036
-	load: function(){
5037
-		this.get('load').send(Array.link(arguments, {data: Type.isObject, url: Type.isString}));
5038
-		return this;
5039
-	}
5040
-
5041
-});
5042
-
5043
-
5044
-/*
5045
-
5046
-name: JSON
5047
-
5048
-description: JSON encoder and decoder.
5049
-
5050
-license: MIT-style license.
5051
-
5052
-See Also: <http://www.json.org/>
5053
-
5054
-requires: [Array, String, Number, Function]
5055
-
5056
-provides: JSON
5057
-
5058
-...
5059
-*/
5060
-
5061
-if (typeof JSON == 'undefined') this.JSON = {};
5062
-
5063
-
5064
-
5065
-(function(){
5066
-
5067
-var special = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'};
5068
-
5069
-var escape = function(chr){
5070
-	return special[chr] || '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4);
5071
-};
5072
-
5073
-JSON.validate = function(string){
5074
-	string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
5075
-					replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
5076
-					replace(/(?:^|:|,)(?:\s*\[)+/g, '');
5077
-
5078
-	return (/^[\],:{}\s]*$/).test(string);
5079
-};
5080
-
5081
-JSON.encode = JSON.stringify ? function(obj){
5082
-	return JSON.stringify(obj);
5083
-} : function(obj){
5084
-	if (obj && obj.toJSON) obj = obj.toJSON();
5085
-
5086
-	switch (typeOf(obj)){
5087
-		case 'string':
5088
-			return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"';
5089
-		case 'array':
5090
-			return '[' + obj.map(JSON.encode).clean() + ']';
5091
-		case 'object': case 'hash':
5092
-			var string = [];
5093
-			Object.each(obj, function(value, key){
5094
-				var json = JSON.encode(value);
5095
-				if (json) string.push(JSON.encode(key) + ':' + json);
5096
-			});
5097
-			return '{' + string + '}';
5098
-		case 'number': case 'boolean': return '' + obj;
5099
-		case 'null': return 'null';
5100
-	}
5101
-
5102
-	return null;
5103
-};
5104
-
5105
-JSON.decode = function(string, secure){
5106
-	if (!string || typeOf(string) != 'string') return null;
5107
-
5108
-	if (secure || JSON.secure){
5109
-		if (JSON.parse) return JSON.parse(string);
5110
-		if (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.');
5111
-	}
5112
-
5113
-	return eval('(' + string + ')');
5114
-};
5115
-
5116
-}).call(this);
5117
-
5118
-
5119
-/*
5120
-
5121
-name: Request.JSON
5122
-
5123
-description: Extends the basic Request Class with additional methods for sending and receiving JSON data.
5124
-
5125
-license: MIT-style license.
5126
-
5127
-requires: [Request, JSON]
5128
-
5129
-provides: Request.JSON
5130
-
5131
-...
5132
-*/
5133
-
5134
-Request.JSON = new Class({
5135
-
5136
-	Extends: Request,
5137
-
5138
-	options: {
5139
-		/*onError: function(text, error){},*/
5140
-		secure: true
5141
-	},
5142
-
5143
-	initialize: function(options){
5144
-		this.parent(options);
5145
-		Object.append(this.headers, {
5146
-			'Accept': 'application/json',
5147
-			'X-Request': 'JSON'
5148
-		});
5149
-	},
5150
-
5151
-	success: function(text){
5152
-		var json;
5153
-		try {
5154
-			json = this.response.json = JSON.decode(text, this.options.secure);
5155
-		} catch (error){
5156
-			this.fireEvent('error', [text, error]);
5157
-			return;
5158
-		}
5159
-		if (json == null) this.onFailure();
5160
-		else this.onSuccess(json, text);
5161
-	}
5162
-
5163
-});
5164
-
5165
-
5166
-/*
5167
-
5168
-name: Cookie
5169
-
5170
-description: Class for creating, reading, and deleting browser Cookies.
5171
-
5172
-license: MIT-style license.
5173
-
5174
-credits:
5175
-  - Based on the functions by Peter-Paul Koch (http://quirksmode.org).
5176
-
5177
-requires: [Options, Browser]
5178
-
5179
-provides: Cookie
5180
-
5181
-...
5182
-*/
5183
-
5184
-var Cookie = new Class({
5185
-
5186
-	Implements: Options,
5187
-
5188
-	options: {
5189
-		path: '/',
5190
-		domain: false,
5191
-		duration: false,
5192
-		secure: false,
5193
-		document: document,
5194
-		encode: true
5195
-	},
5196
-
5197
-	initialize: function(key, options){
5198
-		this.key = key;
5199
-		this.setOptions(options);
5200
-	},
5201
-
5202
-	write: function(value){
5203
-		if (this.options.encode) value = encodeURIComponent(value);
5204
-		if (this.options.domain) value += '; domain=' + this.options.domain;
5205
-		if (this.options.path) value += '; path=' + this.options.path;
5206
-		if (this.options.duration){
5207
-			var date = new Date();
5208
-			date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
5209
-			value += '; expires=' + date.toGMTString();
5210
-		}
5211
-		if (this.options.secure) value += '; secure';
5212
-		this.options.document.cookie = this.key + '=' + value;
5213
-		return this;
5214
-	},
5215
-
5216
-	read: function(){
5217
-		var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
5218
-		return (value) ? decodeURIComponent(value[1]) : null;
5219
-	},
5220
-
5221
-	dispose: function(){
5222
-		new Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write('');
5223
-		return this;
5224
-	}
5225
-
5226
-});
5227
-
5228
-Cookie.write = function(key, value, options){
5229
-	return new Cookie(key, options).write(value);
5230
-};
5231
-
5232
-Cookie.read = function(key){
5233
-	return new Cookie(key).read();
5234
-};
5235
-
5236
-Cookie.dispose = function(key, options){
5237
-	return new Cookie(key, options).dispose();
5238
-};
5239
-
5240
-
5241
-/*
5242
-
5243
-name: DOMReady
5244
-
5245
-description: Contains the custom event domready.
5246
-
5247
-license: MIT-style license.
5248
-
5249
-requires: [Browser, Element, Element.Event]
5250
-
5251
-provides: [DOMReady, DomReady]
5252
-
5253
-...
5254
-*/
5255
-
5256
-(function(window, document){
5257
-
5258
-var ready,
5259
-	loaded,
5260
-	checks = [],
5261
-	shouldPoll,
5262
-	timer,
5263
-	isFramed = true;
5264
-
5265
-// Thanks to Rich Dougherty <http://www.richdougherty.com/>
5266
-try {
5267
-	isFramed = window.frameElement != null;
5268
-} catch(e){}
5269
-
5270
-var domready = function(){
5271
-	clearTimeout(timer);
5272
-	if (ready) return;
5273
-	Browser.loaded = ready = true;
5274
-	document.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check);
5275
-
5276
-	document.fireEvent('domready');
5277
-	window.fireEvent('domready');
5278
-};
5279
-
5280
-var check = function(){
5281
-	for (var i = checks.length; i--;) if (checks[i]()){
5282
-		domready();
5283
-		return true;
5284
-	}
5285
-
5286
-	return false;
5287
-};
5288
-
5289
-var poll = function(){
5290
-	clearTimeout(timer);
5291
-	if (!check()) timer = setTimeout(poll, 10);
5292
-};
5293
-
5294
-document.addListener('DOMContentLoaded', domready);
5295
-
5296
-// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/
5297
-var testElement = document.createElement('div');
5298
-if (testElement.doScroll && !isFramed){
5299
-	checks.push(function(){
5300
-		try {
5301
-			testElement.doScroll();
5302
-			return true;
5303
-		} catch (e){}
5304
-
5305
-		return false;
5306
-	});
5307
-	shouldPoll = true;
5308
-}
5309
-
5310
-if (document.readyState) checks.push(function(){
5311
-	var state = document.readyState;
5312
-	return (state == 'loaded' || state == 'complete');
5313
-});
5314
-
5315
-if ('onreadystatechange' in document) document.addListener('readystatechange', check);
5316
-else shouldPoll = true;
5317
-
5318
-if (shouldPoll) poll();
5319
-
5320
-Element.Events.domready = {
5321
-	onAdd: function(fn){
5322
-		if (ready) fn.call(this);
5323
-	}
5324
-};
5325
-
5326
-// Make sure that domready fires before load
5327
-Element.Events.load = {
5328
-	base: 'load',
5329
-	onAdd: function(fn){
5330
-		if (loaded && this == window) fn.call(this);
5331
-	},
5332
-	condition: function(){
5333
-		if (this == window){
5334
-			domready();
5335
-			delete Element.Events.load;
5336
-		}
5337
-
5338
-		return true;
5339
-	}
5340
-};
5341
-
5342
-// This is based on the custom load event
5343
-window.addEvent('load', function(){
5344
-	loaded = true;
5345
-});
5346
-
5347
-})(window, document);
5348
-
5349
-
5350
-/*
5351
-
5352
-name: Swiff
5353
-
5354
-description: Wrapper for embedding SWF movies. Supports External Interface Communication.
5355
-
5356
-license: MIT-style license.
5357
-
5358
-credits:
5359
-  - Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.
5360
-
5361
-requires: [Options, Object, Element]
5362
-
5363
-provides: Swiff
5364
-
5365
-...
5366
-*/
5367
-
5368
-(function(){
5369
-
5370
-var Swiff = this.Swiff = new Class({
5371
-
5372
-	Implements: Options,
5373
-
5374
-	options: {
5375
-		id: null,
5376
-		height: 1,
5377
-		width: 1,
5378
-		container: null,
5379
-		properties: {},
5380
-		params: {
5381
-			quality: 'high',
5382
-			allowScriptAccess: 'always',
5383
-			wMode: 'window',
5384
-			swLiveConnect: true
5385
-		},
5386
-		callBacks: {},
5387
-		vars: {}
5388
-	},
5389
-
5390
-	toElement: function(){
5391
-		return this.object;
5392
-	},
5393
-
5394
-	initialize: function(path, options){
5395
-		this.instance = 'Swiff_' + String.uniqueID();
5396
-
5397
-		this.setOptions(options);
5398
-		options = this.options;
5399
-		var id = this.id = options.id || this.instance;
5400
-		var container = document.id(options.container);
5401
-
5402
-		Swiff.CallBacks[this.instance] = {};
5403
-
5404
-		var params = options.params, vars = options.vars, callBacks = options.callBacks;
5405
-		var properties = Object.append({height: options.height, width: options.width}, options.properties);
5406
-
5407
-		var self = this;
5408
-
5409
-		for (var callBack in callBacks){
5410
-			Swiff.CallBacks[this.instance][callBack] = (function(option){
5411
-				return function(){
5412
-					return option.apply(self.object, arguments);
5413
-				};
5414
-			})(callBacks[callBack]);
5415
-			vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
5416
-		}
5417
-
5418
-		params.flashVars = Object.toQueryString(vars);
5419
-		if (Browser.ie){
5420
-			properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
5421
-			params.movie = path;
5422
-		} else {
5423
-			properties.type = 'application/x-shockwave-flash';
5424
-		}
5425
-		properties.data = path;
5426
-
5427
-		var build = '<object id="' + id + '"';
5428
-		for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
5429
-		build += '>';
5430
-		for (var param in params){
5431
-			if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
5432
-		}
5433
-		build += '</object>';
5434
-		this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
5435
-	},
5436
-
5437
-	replaces: function(element){
5438
-		element = document.id(element, true);
5439
-		element.parentNode.replaceChild(this.toElement(), element);
5440
-		return this;
5441
-	},
5442
-
5443
-	inject: function(element){
5444
-		document.id(element, true).appendChild(this.toElement());
5445
-		return this;
5446
-	},
5447
-
5448
-	remote: function(){
5449
-		return Swiff.remote.apply(Swiff, [this.toElement()].append(arguments));
5450
-	}
5451
-
5452
-});
5453
-
5454
-Swiff.CallBacks = {};
5455
-
5456
-Swiff.remote = function(obj, fn){
5457
-	var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
5458
-	return eval(rs);
5459
-};
5460
-
5461
-}).call(this);
5462
-
5463
-
... ...
@@ -1,76 +0,0 @@
1
-window.addEvent('domready', function() {
2
-  codeblocks = $$('div.highlight');
3
-  codeblocks.each(addExpander);
4
-});
5
-
6
-window.addEvents({
7
-  domready: function(){
8
-    if(twitter_user){
9
-      new Request.Twitter(twitter_user, {
10
-        include_replies: false,
11
-        data: { count: 3 },
12
-        onSuccess: function(tweets){
13
-          $('tweets').empty();
14
-          for (var i = tweets.length; i--; ){
15
-            new Element('li', {
16
-              'class': 'tweet'
17
-              }).adopt(
18
-              new Element('p', { 'html': tweets[i].text+' ' }).adopt(
19
-                new Element('a', {
20
-                  'href': 'http://twitter.com/'+twitter_user+'/status/'+tweets[i].id_str,
21
-                  'text': new Date(tweets[i].created_at).timeDiffInWords()
22
-                }))
23
-            ).inject('tweets', 'top');
24
-          }
25
-        }
26
-      }).send();
27
-    }
28
-    $$('#recent_posts time').each(function(date){
29
-      date.set('text', new Date(date.get('text')).timeDiffInWords());
30
-    });
31
-  },
32
-});
33
-
34
-
35
-function addExpander(div){
36
-  new Element('span',{
37
-		html: 'expand &raquo;',
38
-		'class': 'pre_expander',
39
-    'events': {
40
-      'click': function(){
41
-        toggleExpander(this);
42
-      }
43
-    }
44
-	}).inject(div, 'top');
45
-}
46
-function toggleExpander(expander){
47
-  var html = '';
48
-  var expanderPos = expander.getPosition().y;
49
-  if($('page').toggleClass('expanded').hasClass('expanded'))
50
-    html = '&laquo; contract';
51
-  else
52
-    html = 'expand &raquo;';
53
-  $$('div.highlight span.pre_expander').each(function(span){
54
-      span.set('html',html);
55
-  });
56
-  fixScroll(expander, expanderPos);
57
-}
58
-function fixScroll(el, position){
59
-  pos = el.getPosition().y - position;
60
-  window.scrollTo(window.getScroll().x ,window.getScroll().y + pos);
61
-}
62
-function enableCompressedLayout(codeblocks){
63
-  if(!codeblocks.length) return;
64
-  new Element('span',{
65
-		html: 'Collapse layout',
66
-		'id': 'collapser',
67
-    'events': {
68
-      'click': function(){
69
-        if($('page').toggleClass('collapsed').hasClass('collapsed'))
70
-          this.set('html','Expand layout');
71
-        else
72
-          this.set('html','Collapse layout');
73
-      }
74
-    }
75
-	}).inject($('main'), 'top');
76
-}
... ...
@@ -26,7 +26,7 @@ function Pinboard_Linkroll() {
26 26
       var str = this.format_item(item);
27 27
       lines.push(str);
28 28
     }
29
-    $(linkroll).set('html', lines.join("\n"));
29
+    document.getElementById(linkroll).innerHTML = lines.join("\n");
30 30
   }
31 31
   this.cook = function(v) {
32 32
     return v.replace('<', '&lt;').replace('>', '&gt>');
... ...
@@ -1,52 +1,70 @@
1
-Request.Twitter = new Class({
1
+/* http://www.JSON.org/json2.js 2009-09-29 Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. See http://www.JSON.org/js.html */
2
+if(!this.JSON){this.JSON={}}(function(){function l(c){return c<10?'0'+c:c}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(c){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+l(this.getUTCMonth()+1)+'-'+l(this.getUTCDate())+'T'+l(this.getUTCHours())+':'+l(this.getUTCMinutes())+':'+l(this.getUTCSeconds())+'Z':null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(c){return this.valueOf()}}var o=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,p=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,h,m,r={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},j;function q(a){p.lastIndex=0;return p.test(a)?'"'+a.replace(p,function(c){var f=r[c];return typeof f==='string'?f:'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function n(c,f){var a,e,d,i,k=h,g,b=f[c];if(b&&typeof b==='object'&&typeof b.toJSON==='function'){b=b.toJSON(c)}if(typeof j==='function'){b=j.call(f,c,b)}switch(typeof b){case'string':return q(b);case'number':return isFinite(b)?String(b):'null';case'boolean':case'null':return String(b);case'object':if(!b){return'null'}h+=m;g=[];if(Object.prototype.toString.apply(b)==='[object Array]'){i=b.length;for(a=0;a<i;a+=1){g[a]=n(a,b)||'null'}d=g.length===0?'[]':h?'[\n'+h+g.join(',\n'+h)+'\n'+k+']':'['+g.join(',')+']';h=k;return d}if(j&&typeof j==='object'){i=j.length;for(a=0;a<i;a+=1){e=j[a];if(typeof e==='string'){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}else{for(e in b){if(Object.hasOwnProperty.call(b,e)){d=n(e,b);if(d){g.push(q(e)+(h?': ':':')+d)}}}}d=g.length===0?'{}':h?'{\n'+h+g.join(',\n'+h)+'\n'+k+'}':'{'+g.join(',')+'}';h=k;return d}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(c,f,a){var e;h='';m='';if(typeof a==='number'){for(e=0;e<a;e+=1){m+=' '}}else if(typeof a==='string'){m=a}j=f;if(f&&typeof f!=='function'&&(typeof f!=='object'||typeof f.length!=='number')){throw new Error('JSON.stringify');}return n('',{'':c})}}if(typeof JSON.parse!=='function'){JSON.parse=function(i,k){var g;function b(c,f){var a,e,d=c[f];if(d&&typeof d==='object'){for(a in d){if(Object.hasOwnProperty.call(d,a)){e=b(d,a);if(e!==undefined){d[a]=e}else{delete d[a]}}}}return k.call(c,f,d)}o.lastIndex=0;if(o.test(i)){i=i.replace(o,function(c){return'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(i.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){g=eval('('+i+')');return typeof k==='function'?b({'':g},''):g}throw new SyntaxError('JSON.parse');}}}());
2 3
 
3
-  Extends: Request.JSONP,
4
+// jXHR.js (JSON-P XHR) | v0.1 (c) Kyle Simpson | MIT License
5
+(function(c){var b=c.setTimeout,d=c.document,a=0;c.jXHR=function(){var e,g,n,h,m=null;function l(){try{h.parentNode.removeChild(h)}catch(o){}}function k(){g=false;e="";l();h=null;i(0)}function f(p){try{m.onerror.call(m,p,e)}catch(o){throw new Error(p)}}function j(){if((this.readyState&&this.readyState!=="complete"&&this.readyState!=="loaded")||g){return}this.onload=this.onreadystatechange=null;g=true;if(m.readyState!==4){f("Script failed to load ["+e+"].")}l()}function i(o,p){p=p||[];m.readyState=o;if(typeof m.onreadystatechange==="function"){m.onreadystatechange.apply(m,p)}}m={onerror:null,onreadystatechange:null,readyState:0,open:function(p,o){k();internal_callback="cb"+(a++);(function(q){c.jXHR[q]=function(){try{i.call(m,4,arguments)}catch(r){m.readyState=-1;f("Script failed to run ["+e+"].")}c.jXHR[q]=null}})(internal_callback);e=o.replace(/=\?/,"=jXHR."+internal_callback);i(1)},send:function(){b(function(){h=d.createElement("script");h.setAttribute("type","text/javascript");h.onload=h.onreadystatechange=function(){j.call(h)};h.setAttribute("src",e);d.getElementsByTagName("head")[0].appendChild(h)},0);i(2)},setRequestHeader:function(){},getResponseHeader:function(){return""},getAllResponseHeaders:function(){return[]}};k();return m}})(window);
4 6
 
5
-  options: {
6
-    linkify: true,
7
-    url: 'http://twitter.com/statuses/user_timeline/{term}.json',
8
-    include_replies: true,
9
-    data: {
10
-      count: 5,
11
-      trim_user: true
7
+function getTwitterFeed(success, user, count, replies) {
8
+  feed = new jXHR();
9
+  feed.onerror = function (msg,url) { alert(msg); }
10
+  feed.onreadystatechange = function(data){
11
+    if (feed.readyState === 4) {
12
+      var tweets = new Array();
13
+      for (i in data){
14
+        if(tweets.length < count){
15
+          if(replies || data[i].in_reply_to_user_id == null){
16
+            tweets.push(data[i]);
17
+          }
18
+        }
19
+      }
20
+      success(tweets);
12 21
     }
13
-  },
22
+  };
23
+  feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+parseInt(count)+25+"&callback=?");
24
+  feed.send();
25
+}
14 26
 
15
-  initialize: function(term, options){
16
-    this.parent(options);
17
-    if(this.options.include_replies == false){
18
-      this.options.count = this.options.data.count
19
-      this.options.data.count += 30; // adds 30 tweets to request for filtering
20
-    }
21
-    this.options.url = this.options.url.substitute({term: term});
22
-    console.log(this.options.url);
23
-  },
24
-
25
-  success: function(args, index){
26
-    if(!this.options.include_replies){
27
-      args[0] = args[0].filter(function(item, index, array){
28
-        return item.in_reply_to_screen_name == null;
29
-      });
30
-      if(args[0].length > this.options.count){ args[0].length = this.options.count; }
31
-    }
32
-    var data = args[0];
33
-
34
-    if (this.options.linkify) data.each(function(tweet){
35
-      tweet.text = this.linkify(tweet.text);
36
-    }, this);
37
-
38
-    if (data[0]) this.options.data.since_id = data[0].id; // keep subsequent calls newer
39
-
40
-    this.parent(args, index);
41
-  },
27
+getTwitterFeed(showTwitterFeed, twitter_user, tweet_count, show_replies);
42 28
 
43
-  linkify: function(text){
44
-    // modified from TwitterGitter by David Walsh (davidwalsh.name)
45
-    // courtesy of Jeremy Parrish (rrish.org)
46
-    return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
47
-    .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
48
-      .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
29
+function showTwitterFeed(tweets){
30
+  var timeline = document.getElementById('tweets');
31
+  timeline.innerHTML='';
32
+  for (t in tweets){
33
+    timeline.innerHTML+='<li>'+'<p>'+linkifyTweet(tweets[t].text)+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'">'+prettyDate(tweets[t].created_at)+'</a></p>'+'</li>';
49 34
   }
35
+}
36
+function linkifyTweet(text){
37
+  return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
38
+    .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
39
+    .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
40
+}
50 41
 
51
-});
52
-
42
+function prettyDate(date_str){
43
+  var time_formats = [
44
+    [60, 'just now', 1], // 60
45
+    [120, '1 min', '1 minute from now'], // 60*2
46
+    [3600, 'mins', 60], // 60*60, 60
47
+    [7200, '1 hour', '1 hour from now'], // 60*60*2
48
+    [86400, 'hours', 3600], // 60*60*24, 60*60
49
+    [172800, '1 day', 'tomorrow'], // 60*60*24*2
50
+    [2903040000, 'days', 86400], // 60*60*24*7, 60*60*24
51
+  ];
52
+  var time = ('' + date_str).replace(/-/g,"/").replace(/[TZ]/g," ").replace(/^\s\s*/, '').replace(/\s\s*$/, '');
53
+  if(time.substr(time.length-4,1)==".") time =time.substr(0,time.length-4);
54
+  var seconds = (new Date - new Date(time)) / 1000;
55
+  var token = 'ago', list_choice = 1;
56
+  if (seconds < 0) {
57
+    seconds = Math.abs(seconds);
58
+    token = 'from now';
59
+    list_choice = 2;
60
+  }
61
+  var i = 0, format;
62
+  while (format = time_formats[i++])
63
+    if (seconds < format[0]) {
64
+      if (typeof format[2] == 'string')
65
+        return format[list_choice];
66
+      else
67
+        return Math.floor(seconds / format[2]) + ' ' + format[1];
68
+    }
69
+    return time;
70
+};
53 71
deleted file mode 100644
... ...
@@ -1,17 +0,0 @@
1
-@import "compass";
2
-@import "compass/layout";
3
-
4
-@include global-reset;
5
-
6
-@include reset-html5;
7
-
8
-/* SASS mixins */
9
-//@import "library/typography";
10
-
11
-/* primary SASS */
12
-//@import "theme";
13
-//@import "typography";
14
-@import "themes/classic/style";
15
-
16
-/* specific SASS */
17
-//@import "partials";
18 1
deleted file mode 100644
... ...
@@ -1,13 +0,0 @@
1
-@import "partials/shared";
2
-@import "partials/syntax";
3
-@import "partials/search";
4
-@import "partials/sidebar";
5
-@import "partials/twitter";
6
-
7
-/* layout partials */
8
-@import "partials/header";
9
-@import "partials/navigation";
10
-@import "partials/page";
11
-@import "partials/sidebar";
12
-@import "partials/blog";
13
-@import "partials/footer";
14 1
deleted file mode 100644
... ...
@@ -1,4 +0,0 @@
1
-@import "core/layout";
2
-@import "core/theme";
3
-@import "core/typography";
4
-//@import "partials";
5 1
deleted file mode 100644
... ...
@@ -1,91 +0,0 @@
1
-$page-pad: 40px;
2
-$min-width: 320px;
3
-$max-width: 1440px;
4
-$sidebar-width: 320px;
5
-$sidebar-pad: 30px;
6
-$default-border-radius: 4px;
7
-
8
-//html { background-color: $body_bg; }
9
-
10
-//body { color: $body_color; }
11
-
12
-//a {
13
-  //color: $link_color;
14
-  //&:hover, &:focus {
15
-    //color: saturate(darken($link_color, 15), 20); }
16
-  //&:visited {
17
-    //color: darken(adjust_hue($link_color, 70), 10); } }
18
-
19
-.group { @include pie-clearfix; }
20
-
21
-.inner-wrap {
22
-  position: relative;
23
-  margin: 0 auto;
24
-  padding: 0 $page_pad;
25
-  max-width: $max-width;
26
-  @extend .group;
27
-}
28
-
29
-.core-layout { > div { @extend .inner-wrap; } }
30
-
31
-body { > header, > nav, > footer {
32
-    @extend .core-layout;
33
-    min-width: $min-width;
34
-  }
35
-}
36
-
37
-#page {
38
-  @extend .group;
39
-  padding: 0;
40
-  max-width: $max-width + $page-pad*2;
41
-  margin: 0 auto;
42
-  > div {
43
-    @extend .group;
44
-    //min-width: 480px;
45
-    margin-right: $sidebar-width;
46
-    > aside {
47
-      float: left;
48
-      width: $sidebar-width - $sidebar-pad*2;
49
-      margin: 0 -100% 0 0;
50
-      padding: $sidebar-pad;
51
-    }
52
-  }
53
-}
54
-
55
-#main {
56
-  float: left;
57
-  width: 100%;
58
-  padding-top: 25px;
59
-  padding-bottom: 25px;
60
-  > * {
61
-    padding-right: $page-pad;
62
-    padding-left: $page-pad;
63
-  }
64
-}
65
-
66
-@media (min-device-width:1024px) and (max-width:800px),
67
-       screen and (max-device-width:480px), (max-device-width:480px) and (orientation:landscape),
68
-       (min-device-width:481px) and (max-device-width:1024px) and (orientation:portrait) {
69
-  #page > div { margin-right: 0;
70
-    #main { float: none; }
71
-    > aside { margin: 0; float: none; }
72
-  }
73
-  page > div > aside { float: none; }
74
-  body { > header, > nav, > footer { > div { padding: 0 15px; }}}
75
-  #main > * { padding-left: 15px; padding-right: 15px; }
76
-}
77
-
78
-@media only screen and (min-device-width: 320px) and (max-device-width: 480px) {
79
-  body { > header, > nav, > footer { > div { padding: 0 10px; }}}
80
-  #main > * { padding-left: 10px; padding-right: 10px; }
81
-  #page > div { margin: none; > aside { float: none; }}
82
-}
83
-
84
-//*{
85
-    //transition: width .5s;
86
-    //-moz-transition: width .5s;
87
-    //-webkit-transition: margin .5s;
88
-//}
89
-
90
-
91
-//#search { left: $page-width + $sidebar-margin - $sidebar-width; }
92 1
deleted file mode 100644
... ...
@@ -1,45 +0,0 @@
1
-// Link Colors
2
-$link_color: lighten(#165b94, 0.3);
3
-
4
-// Main Section Colors
5
-$body_color: #333333;
6
-$light_text: #999999;
7
-$body_bg: #323232;
8
-
9
-$header_bg: #323232;
10
-$header_border: #181818;
11
-$title_color: #dddddd;
12
-
13
-$nav_color: #555555;
14
-$nav_color_hover: black;
15
-$nav_bg: #e8e8e8;
16
-$nav_border_top: white;
17
-$nav_border_bottom: #aaaaaa;
18
-$nav_border_left: #cccccc;
19
-$nav_border_right: white;
20
-
21
-$sidebar_bg: #f2f2f2;
22
-$sidebar_border: #d5d5d5;
23
-
24
-// Blog
25
-$article_border: #eeeeee;
26
-$main_bg: #fff;
27
-
28
-$footer_color: #999999;
29
-$footer_bg: #444444;
30
-
31
-// Form Colors
32
-$fieldset_bg: #ececec;
33
-$fieldset_border: #c3c3c3;
34
-
35
-$textinput_color: #333333;
36
-$textinput_bg: #f4f4f4;
37
-$textinput_bg_focus: #fefeee;
38
-
39
-$textinput_border_top: #aaaaaa;
40
-$textinput_border_bottom: #c6c6c6;
41
-$textinput_border_left: #c3c3c3;
42
-$textinput_border_right: #c3c3c3;
43
-$textinput_border_focus: #989898;
44
-
45
-$twitter_topic: #888888;
46 1
deleted file mode 100644
... ...
@@ -1,159 +0,0 @@
1
-$type-border: #ddd;
2
-$type-color-light: #555;
3
-$type-color: #000;
4
-$blockquote: $type-border !default; //darken($type-border, 20) !default;
5
-
6
-
7
-// Fonts
8
-@include font-face("Adelle", font-files("adellebasic_bold-webfont.woff", woff, "adellebasic_bold-webfont.ttf", truetype, "adellebasic_bold-webfont.svg#webfontKykxqSyz", svg), $eot: "adellebasic_bold-webfont.eot" );
9
-.heading-font { font-family: Adelle, "Helvetica Neue", Helvetica, Arial, sans; }
10
-
11
-body > header h1 {
12
-  font-size: 3em;
13
-  @extend .heading-font;
14
-  line-height: 1.2em;
15
-  margin-bottom: 0.6667em;
16
-}
17
-
18
-
19
-body {
20
-  font-size: 1em;
21
-  line-height: 1.5em;
22
-  color: $type-color;
23
-  font-family: Georgia, Times, serif;
24
-}
25
-
26
-article {
27
-  margin-bottom: 1.5em;
28
-  padding-bottom: 1.5em;
29
-  padding-top: 1em;
30
-  + article { border-top: 3px solid $type-color-light; }
31
-  &:last-child { border-bottom: none; }
32
-  h2 {
33
-    padding-top: 0.8em;
34
-    border-top: 3px double $type-border;
35
-  }
36
-  .author, time { text-transform: uppercase; }
37
-  .updated { font-size: .8em; color: $type-color-light; }
38
-  time span {
39
-    font-size: .7em;
40
-    line-height: 0;
41
-    position: relative;
42
-    top: -.4em;
43
-  }
44
-  header {
45
-    p {
46
-      padding: 0 0 1.5em;
47
-      font-size: .8em;
48
-      color: $type-color-light;
49
-      font-family: Palatino, Times, "Times New Roman";
50
-      //margin-top: -1.2em;
51
-      //border: {
52
-        top-width: 1px;
53
-        //bottom-width: 1px;
54
-        //style: dashed;
55
-        //color: $type-border;
56
-      //}
57
-    }
58
-  }
59
-}
60
-
61
-#{headings()}{
62
-  @extend .heading-font; font-weight: normal;
63
-  line-height: 1em;
64
-  text-rendering: optimizelegibility;
65
-}
66
-h1 {
67
-  font-size: 2.6em;
68
-  margin-bottom: 0.6667em;
69
-}
70
-h2, section h1 {
71
-  font-size: 1.8em;
72
-  margin-bottom: 0.6667em;
73
-}
74
-h3, section h2, section section h1 {
75
-  font-size: 1.6em;
76
-  margin-bottom: 0.875em;
77
-}
78
-h4, section h3, section section h2, section section section h1 {
79
-  font-size: 1.3em;
80
-  margin-bottom: 0.875em;
81
-}
82
-h5, section h4, section section h3 {
83
-  font-size: 1.1em;
84
-  margin-bottom: 0.75em;
85
-}
86
-h6, section h5, section section h4, section section section h3 {
87
-  font-size: 1em;
88
-  margin-bottom: 0.5em;
89
-}
90
-p, blockquote, ul, ol { margin-bottom: 1.5em; }
91
-
92
-ul{ list-style-type: disc; }
93
-
94
-ol{ list-style-type: decimal; ol { list-style-type: lower-alpha; } }
95
-ul ul, ol ol { margin-left: 1.75em; }
96
-
97
-li { margin-bottom: .5em; }
98
-
99
-strong { font-weight: bold; }
100
-
101
-em { font-style: italic; }
102
-
103
-sup, sub { font-size: 0.8em; position: relative;  display: inline-block; }
104
-sup { top: -.5em; }
105
-sub { bottom: -.5em; }
106
-
107
-q { font-style: italic;
108
-  &:before { content: "\201C"; }
109
-  &:after { content: "\201D"; }
110
-}
111
-
112
-em, dfn { font-style: italic; }
113
-
114
-strong, dfn { font-weight: bold; }
115
-
116
-del, s { text-decoration: line-through; }
117
-
118
-abbr, acronym { border-bottom: 1px dotted; cursor: help; }
119
-
120
-pre, code, tt { @extend .mono-font; }
121
-
122
-sub, sup { line-height: 0; }
123
-
124
-hr { margin-bottom: 0.2em; }
125
-
126
-small { font-size: .8em; }
127
-
128
-big { font-size: 1.2em; }
129
-
130
-blockquote {
131
-  $bq-margin: 2em;
132
-  font-style: italic;
133
-  position: relative;
134
-  margin-left: $bq-margin;
135
-  > p {
136
-    &:first-child:before {
137
-      content: "\201C";
138
-      position: absolute;
139
-      top: 0.1em;
140
-      left: -.7em;
141
-      font-size: 3em;
142
-      color: $blockquote;
143
-    }
144
-    &:last-child:after {
145
-      content: "\201D";
146
-      position: relative;
147
-      top: 0.3em;
148
-      line-height: 0;
149
-      font-size: 2em;
150
-      color: $blockquote;
151
-    }
152
-  }
153
-  + p > cite {
154
-    margin-left: $bq-margin;
155
-    text-align: right;
156
-    &:before { content: '– '; color: $type-color-light; }
157
-    a { font-style: italic; }
158
-  }
159
-}
160 1
deleted file mode 100644
... ...
@@ -1,23 +0,0 @@
1
-article {
2
-  h2 {
3
-    padding-top: 0;
4
-    margin-bottom: 0.1em; }
5
-  .title {
6
-    text-decoration: none;
7
-    &:hover {
8
-      text-decoration: underline; } }
9
-  .entry {
10
-    border-bottom: 1px solid $article-border;
11
-    &:first-child {
12
-      padding-top: 0; } }
13
-  #disqus_thread { }
14
-  .meta {
15
-    border-bottom: 1px dashed #dddddd;
16
-    text-transform: uppercase;
17
-    color: #777777;
18
-    padding: 8px 0 5px;
19
-    margin-bottom: 1.5em;
20
-    font-size: 75%;
21
-    letter-spacing: 1px; }
22
-  .footer {
23
-    padding-top: 15px; } }
24 1
deleted file mode 100644
... ...
@@ -1,11 +0,0 @@
1
-footer {
2
-  @include background(linear-gradient(darken($body-bg, 5), $body-bg));
3
-  //color: $footer-color;
4
-  //border-top: 10px solid $footer-bg;
5
-  padding: 15px 0;
6
-  position: relative;
7
-  z-index: 2;
8
-  a {
9
-    color: #dddddd;
10
-    &:hover {
11
-      color: white; } } }
12 1
deleted file mode 100644
... ...
@@ -1,11 +0,0 @@
1
-body > header {
2
-  background-color: $header_bg;
3
-  border-bottom: 1px solid $header_border;
4
-  padding: 25px 0;
5
-  h1 {
6
-    display: inline-block;
7
-    margin: 0;
8
-    a, a:visited {
9
-      font-weight: normal;
10
-      color: $title_color;
11
-      text-decoration: none; } } }
12 1
deleted file mode 100644
... ...
@@ -1,30 +0,0 @@
1
-#nav {
2
-  @extend .group;
3
-  position: relative;
4
-  z-index: 1;
5
-  background-color: $nav-bg;
6
-  @include background-image(linear-gradient(#fcfcfc, #f4f4f4 0.3, #dddddd));
7
-  border: {
8
-    top: 1px solid $nav-border-top;
9
-    bottom: 1px solid $nav-border-bottom; };
10
-  ul {
11
-    position: relative;
12
-    @include horizontal-list;
13
-    margin: 0 auto;
14
-    padding: 6px 0;
15
-    li {
16
-      padding: 0 15px;
17
-      border-left: 1px solid $nav-border-left;
18
-      border-right: 1px solid $nav-border-right;
19
-      &:first-child {
20
-        border-left: none;
21
-        padding-left: 0; }
22
-      &:last-child {
23
-        border-right: 0; }
24
-      a {
25
-        display: inline-block;
26
-        color: $nav-color;
27
-        line-height: 150%;
28
-        text-decoration: none;
29
-        &:hover {
30
-          color: $nav-color-hover; } } } } }
31 1
deleted file mode 100644
... ...
@@ -1,8 +0,0 @@
1
-body {
2
-  background-color: $sidebar_bg;
3
-}
4
-
5
-#page > div {
6
-  background-color: $main_bg; border-right: 1px solid $sidebar_border;
7
-  @include box-shadow(rgba(#000, .1) 0 0 18px);
8
-}
9 1
deleted file mode 100644
... ...
@@ -1,19 +0,0 @@
1
-#search {
2
-  position: absolute;
3
-  top: 30%;
4
-  form {
5
-    background: image-url("search_bg.png") no-repeat;
6
-    padding: 0;
7
-    height: 28px;
8
-    width: 218px; }
9
-  #q {
10
-    background: none;
11
-    position: relative;
12
-    top: 1px;
13
-    width: 160px;
14
-    margin-left: 30px;
15
-    font-size: 15px;
16
-    border: none;
17
-    color: #aaaaaa;
18
-    &:focus {
19
-      outline: none; } } }
20 1
deleted file mode 100644
... ...
@@ -1,12 +0,0 @@
1
-#collapser {
2
-  display: block;
3
-  cursor: pointer;
4
-  background: #f8f8f8;
5
-  color: #888888;
6
-  padding: 5px 10px;
7
-  font-size: 10px;
8
-  line-height: 150%;
9
-  cursor: pointer;
10
-  position: absolute;
11
-  top: 0;
12
-  right: 0; }
13 1
deleted file mode 100644
... ...
@@ -1,38 +0,0 @@
1
-.subscribe a {
2
-  display: inline-block;
3
-  padding-left: 28px;
4
-  background: image-url("rss.png") left top no-repeat; }
5
-#sidebar {
6
-  line-height: 1.45em;
7
-  font-size: 90%;
8
-  h3 {
9
-    margin: 20px -15px 10px;
10
-    padding: 12px 15px;
11
-    background: white;
12
-    border-bottom: 1px solid #e5e5e5;
13
-    border-top: 1px solid #e5e5e5;
14
-    &:first-child {
15
-      margin-top: 0; } } }
16
-
17
-#twitter, #delicious {
18
-  @include border-radius;
19
-  background: #f8f8f8;
20
-  border: 1px solid #eeeeee;
21
-  padding: 5px 0;
22
-  ul {
23
-    list-style-type: none;
24
-    margin: 0; }
25
-  li {
26
-    margin: 0 15px;
27
-    padding: 10px 0 0;
28
-    border-bottom: #dddddd 1px dashed;
29
-    &:last-child {
30
-      border-bottom: 0; } } }
31
-
32
-#delicious {
33
-  p {
34
-    font-style: italic; }
35
-  li {
36
-    color: #666666;
37
-    font-style: normal;
38
-    padding-bottom: 8px; } }
39 1
deleted file mode 100644
... ...
@@ -1,279 +0,0 @@
1
-.code_window {
2
-  @include border-top-radius(5px);
3
-  @include border-bottom-radius(2px);
4
-  background: #aaaaaa image-url("code_bg.png") top repeat-x;
5
-  position: relative;
6
-  margin: 0.3em 0 1.3em;
7
-  padding: 0 3px 3px;
8
-  font-size: 14px;
9
-  border: 1px solid #898989;
10
-  border-top-color: #cbcbcb;
11
-  border-left-color: #a5a5a5;
12
-  border-right-color: #a5a5a5;
13
-  em {
14
-    text-align: center;
15
-    text-shadow: #cccccc 1px 1px 1px;
16
-    display: block;
17
-    padding: 1px 0;
18
-    color: #333333;
19
-    font-style: normal; }
20
-  .highlight {
21
-    margin: 0; } }
22
-
23
-pre {
24
-  color: #cccccc;
25
-  font-size: 13px;
26
-  background: #222222;
27
-  line-height: 1.5em;
28
-  border: #aaaaaa 1px solid;
29
-  overflow-x: auto;
30
-  overflow-y: hidden;
31
-  padding: 25px 20px;
32
-  .lineno {
33
-    color: #888888;
34
-    background: #e3e3e3;
35
-    display: inline-block;
36
-    padding: 0 0 0 10px;
37
-    &:first-child {
38
-      padding-top: 15px;
39
-      display: inline-block; } } }
40
-
41
-.highlight {
42
-  position: relative;
43
-  .pre_expander {
44
-    font-size: 10px;
45
-    text-align: right;
46
-    padding: 4px 8px;
47
-    line-height: 150%;
48
-    position: absolute;
49
-    cursor: pointer;
50
-    top: 2px;
51
-    right: 2px;
52
-    @include border-bottom-left-radius;
53
-    display: block;
54
-    color: #777777;
55
-    background: #333333;
56
-    &:hover {
57
-      background: #444444;
58
-      color: #cccccc; } } }
59
-
60
-// based on: http://github.com/mojombo/tpw/raw/master/css/syntax.css
61
-.editor {
62
-  background: rgb(0, 22, 41);
63
-  line-height: 1.25; }
64
-
65
-pre.console {
66
-  background-color: black;
67
-  color: lighten(green, 25);
68
-  letter-spacing: 1px;
69
-  padding: 0.5em;
70
-  .prompt {
71
-    color: lighten(navy, 50);
72
-    &:before {
73
-      color: white;
74
-      content: "["; }
75
-    &:after {
76
-      color: white;
77
-      content: "]"; } }
78
-  .stdin {
79
-    font-weight: bold;
80
-    color: lighten(green, 75); } }
81
-
82
-.highlight {
83
-  padding: 0 0 0.1em;
84
-  color: white;
85
-  // Comment
86
-  .c {
87
-    color: #999988;
88
-    font-style: italic; }
89
-  // Error
90
-  .err {
91
-    color: #a61717;
92
-    background-color: #e3d2d2; }
93
-  // Name
94
-  .n {
95
-    color: white; }
96
-  // Keyword
97
-  .k {
98
-    color: rgb(255, 157, 0); }
99
-  // Paren
100
-  .p {
101
-    color: darken(#ff9d00, 33); }
102
-  // Operator
103
-  .o {
104
-    color: rgb(255, 157, 0); }
105
-  // Comment.Multiline
106
-  .cm {
107
-    color: #999988;
108
-    font-style: italic; }
109
-  // Comment.Preproc
110
-  .cp {
111
-    color: #999999; }
112
-  // Comment.Single
113
-  .c1 {
114
-    color: #999988;
115
-    font-style: italic; }
116
-  // Comment.Special
117
-  .cs {
118
-    color: #999999;
119
-    font-style: italic; }
120
-  // Generic.Deleted
121
-  .gd {
122
-    color: black;
123
-    background-color: #ffdddd; }
124
-  // Generic.Deleted.Specific
125
-  .gd .x {
126
-    color: black;
127
-    background-color: #ffaaaa; }
128
-  // Generic.Emph
129
-  .ge {
130
-    font-style: italic; }
131
-  // Generic.Error
132
-  .gr {
133
-    color: #aa0000; }
134
-  // Generic.Heading
135
-  .gh {
136
-    color: #999999; }
137
-  // Generic.Inserted
138
-  .gi {
139
-    color: black;
140
-    background-color: #ddffdd; }
141
-  // Generic.Inserted.Specific
142
-  .gi .x {
143
-    color: black;
144
-    background-color: #aaffaa; }
145
-  // Generic.Output
146
-  .go {
147
-    color: #888888; }
148
-  // Generic.Prompt
149
-  .gp {
150
-    color: #555555; }
151
-  // Generic.Strong
152
-  .gs {
153
-    color: white; }
154
-  // Generic.Subheading
155
-  .gu {
156
-    color: #aaaaaa; }
157
-  // Generic.Traceback
158
-  .gt {
159
-    color: #aa0000; }
160
-  // Keyword.Constant
161
-  .kc {
162
-    color: white; }
163
-  // Keyword.Declaration
164
-  .kd {
165
-    color: white; }
166
-  // Keyword.Pseudo
167
-  .kp {
168
-    color: white; }
169
-  // Keyword.Reserved
170
-  .kr {
171
-    color: white; }
172
-  // Keyword.Type
173
-  .kt {
174
-    color: #445588; }
175
-  // Literal.Number
176
-  .m {
177
-    color: rgb(255, 98, 140); }
178
-  // Literal.String
179
-  .s {
180
-    color: #dd1144; }
181
-  // Name.Attribute
182
-  .na {
183
-    color: teal; }
184
-  // Name.Builtin
185
-  .nb {
186
-    color: darken(rgb(128, 255, 187), 20); }
187
-  // Name.Class
188
-  .nc {
189
-    color: darken(rgb(128, 255, 187), 20); }
190
-  // Name.Constant
191
-  .no {
192
-    color: rgb(128, 255, 187); }
193
-  // Name.Entity
194
-  .ni {
195
-    color: purple; }
196
-  // Name.Exception
197
-  .ne {
198
-    color: rgb(255, 221, 0); }
199
-  // Name.Function
200
-  .nf {
201
-    color: rgb(255, 221, 0); }
202
-  // Name.Namespace
203
-  .nn {
204
-    color: #555555; }
205
-  // Name.Tag
206
-  .nt {
207
-    color: white; }
208
-  // Name.Variable
209
-  .nv {
210
-    color: teal; }
211
-  // Operator.Word
212
-  .ow {
213
-    color: white; }
214
-  // Text.Whitespace
215
-  .w {
216
-    color: #bbbbbb; }
217
-  // Literal.Number
218
-  .nl {
219
-    color: rgb(255, 98, 140); }
220
-  // Literal.Number.Float
221
-  .mf {
222
-    color: rgb(255, 98, 140); }
223
-  // Literal.Number.Hex
224
-  .mh {
225
-    color: rgb(255, 98, 140); }
226
-  // Literal.Number.Integer
227
-  .mi {
228
-    color: rgb(255, 98, 140); }
229
-  // Literal.Number.Oct
230
-  .mo {
231
-    color: rgb(255, 98, 140); }
232
-  // Literal.String.Backtick
233
-  .sb {
234
-    color: rgb(58, 217, 0); }
235
-  // Literal.String.Char
236
-  .sc {
237
-    color: rgb(58, 217, 0); }
238
-  // Literal.String.Doc
239
-  .sd {
240
-    color: rgb(58, 217, 0); }
241
-  // Literal.String.Double
242
-  .s2 {
243
-    color: rgb(58, 217, 0); }
244
-  // Literal.String.Escape
245
-  .se {
246
-    color: rgb(58, 217, 0); }
247
-  // Literal.String.Heredoc
248
-  .sh {
249
-    color: rgb(58, 217, 0); }
250
-  // Literal.String.Interpol
251
-  .si {
252
-    color: rgb(158, 255, 128); }
253
-  // Literal.String.Other
254
-  .sx {
255
-    color: rgb(58, 217, 0); }
256
-  // Literal.String.Regex
257
-  .sr {
258
-    color: #009926; }
259
-  // Literal.String.Single
260
-  .s1 {
261
-    color: rgb(58, 217, 0); }
262
-  // Literal.String.Symbol
263
-  .ss {
264
-    color: rgb(255, 98, 140); }
265
-  // Name.Builtin.Pseudo
266
-  .bp {
267
-    color: #999999; }
268
-  // Name.Variable.Class
269
-  .vc {
270
-    color: teal; }
271
-  // Name.Variable.Global
272
-  .vg {
273
-    color: teal; }
274
-  // Name.Variable.Instance
275
-  .vi {
276
-    color: teal; }
277
-  // Literal.Number.Integer.Long
278
-  .il {
279
-    color: rgb(255, 98, 140); } }
280 1
deleted file mode 100644
... ...
@@ -1,15 +0,0 @@
1
-#twitter {
2
-  p {
3
-    padding-bottom: 10px;
4
-    a.topic {
5
-      color: $twitter_topic; } }
6
-  .meta {
7
-    color: $light_text;
8
-    font-size: 80%;
9
-    display: block;
10
-    padding: 8px 0 0;
11
-    a {
12
-      color: inherit;
13
-      text-decoration: none;
14
-      &:hover {
15
-        text-decoration: underline; } } } }
... ...
@@ -1,6 +1,7 @@
1 1
 ---
2
-layout: default
3
-title: Typography Debug
2
+layout: page
3
+title: Typography Testing
4
+no_sidebar: true
4 5
 ---
5 6
 
6 7
 %h1 Level 01 Heading
... ...
@@ -35,7 +36,7 @@ title: Typography Debug
35 35
 %p
36 36
   %abbr(title="For The Win!") FTW!
37 37
 %p
38
-  
38
+
39 39
 %h3 Unordered lists
40 40
 %ul
41 41
   %li Lorem ipsum dolor sit amet
... ...
@@ -48,7 +49,7 @@ title: Typography Debug
48 48
   %li Consectetur adipisicing elit
49 49
   %li Sed do eiusmod tempor incididunt ut labore
50 50
   %li Et dolore magna aliqua
51
-  
51
+
52 52
 %h3 Blockquotes
53 53
 %blockquote
54 54
   %p
... ...
@@ -113,4 +114,4 @@ title: Typography Debug
113 113
 %tt
114 114
   &lt;tt&gt;
115 115
   Pellentesque tempor, dui ut ultrices viverra, neque urna blandit nisi, id accumsan dolor est vitae risus.
116
-%hr
117 116
\ No newline at end of file
117
+%hr