[xml/sgml-commit] r1839 - in /packages/w3c-markup-validator/trunk: debian/ htdocs/ htdocs/config/ htdocs/dev/tests/ htdocs/docs/ htdocs/images/ htdocs/scripts/ htdocs/source/ htdocs/style/ httpd/cgi-bin/ httpd/conf/ misc/ misc/bundle/ misc/bundle/lib/Bundle/W3C/ share/templates/en_US/

periapt-guest at users.alioth.debian.org periapt-guest at users.alioth.debian.org
Mon Mar 14 10:47:06 UTC 2011


Author: periapt-guest
Date: Mon Mar 14 10:47:03 2011
New Revision: 1839

URL: http://svn.debian.org/wsvn/debian-xml-sgml/?sc=1&rev=1839
Log:
New upstream release

Added:
    packages/w3c-markup-validator/trunk/htdocs/base.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/docs.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/handheld.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/images/opensource-55x48.png   (with props)
    packages/w3c-markup-validator/trunk/htdocs/navbar.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/print.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/results.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js
    packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5-core-nc.js
    packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5.1-more.js
    packages/w3c-markup-validator/trunk/htdocs/style/base.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/style/results.css.gz   (with props)
    packages/w3c-markup-validator/trunk/htdocs/tips.css.gz   (with props)
    packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_fault.tmpl
Removed:
    packages/w3c-markup-validator/trunk/htdocs/scripts/mootools.js
    packages/w3c-markup-validator/trunk/htdocs/xml-results.css
    packages/w3c-markup-validator/trunk/htdocs/xml-results.xsl
Modified:
    packages/w3c-markup-validator/trunk/debian/changelog
    packages/w3c-markup-validator/trunk/htdocs/base.css
    packages/w3c-markup-validator/trunk/htdocs/config/validator.conf
    packages/w3c-markup-validator/trunk/htdocs/detailed-form.html
    packages/w3c-markup-validator/trunk/htdocs/detailed-form_directinput.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/bogus-fpi.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/colons.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-frameset.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-strict.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-transitional.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/iso-html.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/long-lines.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/nonSGML-chars.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/trailing-nul.html
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml-basic10.xhtml
    packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml1-strict.html
    packages/w3c-markup-validator/trunk/htdocs/docs.css
    packages/w3c-markup-validator/trunk/htdocs/docs/api.html
    packages/w3c-markup-validator/trunk/htdocs/docs/errors.html
    packages/w3c-markup-validator/trunk/htdocs/docs/help.html
    packages/w3c-markup-validator/trunk/htdocs/docs/install.html
    packages/w3c-markup-validator/trunk/htdocs/docs/install_win.html
    packages/w3c-markup-validator/trunk/htdocs/docs/users.html
    packages/w3c-markup-validator/trunk/htdocs/favelets.html
    packages/w3c-markup-validator/trunk/htdocs/footer.html
    packages/w3c-markup-validator/trunk/htdocs/handheld.css
    packages/w3c-markup-validator/trunk/htdocs/header.html
    packages/w3c-markup-validator/trunk/htdocs/navbar.css
    packages/w3c-markup-validator/trunk/htdocs/no_referer.asis
    packages/w3c-markup-validator/trunk/htdocs/print.css
    packages/w3c-markup-validator/trunk/htdocs/results.css
    packages/w3c-markup-validator/trunk/htdocs/scripts/w3c-validator.js
    packages/w3c-markup-validator/trunk/htdocs/source/index.html
    packages/w3c-markup-validator/trunk/htdocs/style/base.css
    packages/w3c-markup-validator/trunk/htdocs/style/results.css
    packages/w3c-markup-validator/trunk/htdocs/tips.css
    packages/w3c-markup-validator/trunk/htdocs/whatsnew.html
    packages/w3c-markup-validator/trunk/httpd/cgi-bin/check
    packages/w3c-markup-validator/trunk/httpd/cgi-bin/sendfeedback.pl
    packages/w3c-markup-validator/trunk/httpd/conf/httpd.conf
    packages/w3c-markup-validator/trunk/misc/bundle/META.yml
    packages/w3c-markup-validator/trunk/misc/bundle/Makefile.PL
    packages/w3c-markup-validator/trunk/misc/bundle/SIGNATURE
    packages/w3c-markup-validator/trunk/misc/bundle/lib/Bundle/W3C/Validator.pm
    packages/w3c-markup-validator/trunk/misc/docs_errors.pl
    packages/w3c-markup-validator/trunk/misc/w3c-markup-validator.spec
    packages/w3c-markup-validator/trunk/share/templates/en_US/earl_xml.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/error_messages.cfg
    packages/w3c-markup-validator/trunk/share/templates/en_US/footer.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/header.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/opt_show_tidy.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/result.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/soap_output.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/soap_warnings.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/table.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_output.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_warnings.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/valid.tmpl
    packages/w3c-markup-validator/trunk/share/templates/en_US/warnings.tmpl

Modified: packages/w3c-markup-validator/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/debian/changelog?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/debian/changelog (original)
+++ packages/w3c-markup-validator/trunk/debian/changelog Mon Mar 14 10:47:03 2011
@@ -1,3 +1,9 @@
+w3c-markup-validator (1.2-1) UNRELEASED; urgency=low
+
+  * New upstream release
+
+ -- Nicholas Bamber <nicholas at periapt.co.uk>  Mon, 14 Mar 2011 10:30:01 +0000
+
 w3c-markup-validator (1.1-2) unstable; urgency=low
 
   * Releasing to unstable 

Modified: packages/w3c-markup-validator/trunk/htdocs/base.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/base.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/base.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/base.css Mon Mar 14 10:47:03 2011
@@ -1,16 +1,16 @@
-/*
+/*!
    Base Style Sheet for the W3C Markup Validation Service.
 
    Copyright 2000-2006 W3C (MIT, INRIA, Keio). All Rights Reserved.
    See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
 */
 
- at import url("results.css"); /* CSS for validation results. */
- at import url("navbar.css");  /* CSS for navigation menu. */
- at import url("tips.css");    /* CSS for Quality Tips. */
- at import url("docs.css");    /* CSS for the Documentation. */
- at import url("print.css") print;
- at import url("handheld.css") handheld;
+ at import url("results"); /* CSS for validation results. */
+ at import url("navbar");  /* CSS for navigation menu. */
+ at import url("tips");    /* CSS for Quality Tips. */
+ at import url("docs");    /* CSS for the Documentation. */
+ at import url("print") print;
+ at import url("handheld") handheld;
 
 
 /* Special Notices */

Added: packages/w3c-markup-validator/trunk/htdocs/base.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/base.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/base.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/config/validator.conf
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/config/validator.conf?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/config/validator.conf (original)
+++ packages/w3c-markup-validator/trunk/htdocs/config/validator.conf Mon Mar 14 10:47:03 2011
@@ -3,7 +3,7 @@
 #
 # See 'perldoc Config::General' for the syntax, and be aware that the
 # 'SplitPolicy' is 'equalsign', ie. keys and values are separated by '\s*=\s*',
-# and that 'InterPolateVars' is in effect.
+# 'InterPolateVars' and 'AutoTrue' are on, and 'CComments' is off.
 #
 
 #
@@ -33,7 +33,7 @@
   # are always cached in memory.
   #Cache = validator
 
-  # configuration file for HTML Tidy Module, if available
+  # configuration file for HTML::Tidy Module, if available
   TidyConf = $Base/htdocs/config/tidy.conf
 
   <SGML>
@@ -78,10 +78,6 @@
 #
 # Email address of the maintainer of this service.
 Maintainer = www-validator at w3.org
-
-#
-# The "Home Page" for the service.  Make sure this ends with a slash.
-Home Page = http://validator.w3.org/
 
 # Localization
 # only English available for now

Modified: packages/w3c-markup-validator/trunk/htdocs/detailed-form.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/detailed-form.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/detailed-form.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/detailed-form.html Mon Mar 14 10:47:03 2011
@@ -23,7 +23,7 @@
 </tr>
 <tr>
         <td><input id="<!--#echo var="fieldset_id" -->-ss" name="ss" type="checkbox" value="1" /><label title="Show Page Source" for="<!--#echo var="fieldset_id" -->-ss">Show Source</label></td>
-        <td colspan="2"><input id="<!--#echo var="fieldset_id" -->-st" name="st" type="checkbox" value="1" /><label for="<!--#echo var="fieldset_id" -->-st">Clean up Markup with HTML Tidy</label>
+        <td colspan="2"><input id="<!--#echo var="fieldset_id" -->-st" name="st" type="checkbox" value="1" /><label for="<!--#echo var="fieldset_id" -->-st">Clean up Markup with HTML-Tidy</label>
         </td>
         
 

Modified: packages/w3c-markup-validator/trunk/htdocs/detailed-form_directinput.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/detailed-form_directinput.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/detailed-form_directinput.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/detailed-form_directinput.html Mon Mar 14 10:47:03 2011
@@ -20,7 +20,7 @@
 </tr>
 <tr>
         <td><input id="<!--#echo var="fieldset_id" -->-ss" name="ss" type="checkbox" value="1" /><label title="Show Page Source" for="<!--#echo var="fieldset_id" -->-ss">Show Source</label></td>
-        <td colspan="2"><input id="<!--#echo var="fieldset_id" -->-st" name="st" type="checkbox" value="1" /><label for="<!--#echo var="fieldset_id" -->-st">Clean up Markup with HTML Tidy</label>
+        <td colspan="2"><input id="<!--#echo var="fieldset_id" -->-st" name="st" type="checkbox" value="1" /><label for="<!--#echo var="fieldset_id" -->-st">Clean up Markup with HTML-Tidy</label>
         </td>
         
 

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/bogus-fpi.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/bogus-fpi.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/bogus-fpi.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/bogus-fpi.html Mon Mar 14 10:47:03 2011
@@ -19,7 +19,7 @@
 <hr>
 
 <address>
-  <a href="http://validator.w3.org/check/referer">valid HTML</a><br>
+  <a href="http://validator.w3.org/check?uri=referer">valid HTML</a><br>
   <a href="../../feedback.html">Gerald Oskoboiny</A>
 </address>
 

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/colons.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/colons.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/colons.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/colons.html Mon Mar 14 10:47:03 2011
@@ -4,7 +4,7 @@
   <head>
     <title>XHTML 1.0 Strict with chars in the range 0x80-0x9B</title>
     <link rev="made" href="mailto:gerald at w3.org" />
-    <link rel="stylesheet" type="text/css" href="../../base.css" />
+    <link rel="stylesheet" type="text/css" href="../../base" />
   </head>
 
   <body>
@@ -15,7 +15,7 @@
     <p>This element uses an undeclared namespace prefix on only the end tag.</none:p>
     <none:p>This element uses an undeclared namespace prefix on only the start tag.</p>
     <address>
-      <a href="http://validator.w3.org/check/referer"><img
+      <a href="http://validator.w3.org/check?uri=referer"><img
 	 src="http://validator.w3.org/images/vxhtml10" height="31" width="88"
 	 alt="Valid XHTML 1.0!" /></a>
       <a href="/feedback.html">Webmaster</a>

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-frameset.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-frameset.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-frameset.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-frameset.html Mon Mar 14 10:47:03 2011
@@ -23,7 +23,7 @@
 <hr>
 
 <address>
-  <a href="http://validator.w3.org/check/referer">valid HTML</a><br>
+  <a href="http://validator.w3.org/check?uri=referer">valid HTML</a><br>
   <a href="../../feedback.html">Gerald Oskoboiny</A>
 </address>
 

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-strict.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-strict.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-strict.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-strict.html Mon Mar 14 10:47:03 2011
@@ -19,7 +19,7 @@
 <hr>
 
 <address>
-  <a href="http://validator.w3.org/check/referer">valid HTML</a><br>
+  <a href="http://validator.w3.org/check?uri=referer">valid HTML</a><br>
   <a href="../../feedback.html">Gerald Oskoboiny</A>
 </address>
 

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-transitional.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-transitional.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-transitional.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/html40-transitional.html Mon Mar 14 10:47:03 2011
@@ -19,7 +19,7 @@
 <hr>
 
 <address>
-  <a href="http://validator.w3.org/check/referer">valid HTML</a><br>
+  <a href="http://validator.w3.org/check?uri=referer">valid HTML</a><br>
   <a href="../../feedback.html">Gerald Oskoboiny</A>
 </address>
 

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/iso-html.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/iso-html.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/iso-html.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/iso-html.html Mon Mar 14 10:47:03 2011
@@ -21,7 +21,7 @@
 
 <div>
 <address>
-  <a href="http://validator.w3.org/check/referer">valid HTML</a><br>
+  <a href="http://validator.w3.org/check?uri=referer">valid HTML</a><br>
   <a href="/feedback.html">Gerald Oskoboiny</A>
 </address>
 </div>

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/long-lines.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/long-lines.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/long-lines.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/long-lines.html Mon Mar 14 10:47:03 2011
@@ -36,7 +36,7 @@
 		<p>
 			<a href="?method=topten&amp;user=me&amp;pass=fuck the millennium">TopTen</a> <a href="?method=showunbekannte&amp;user=me&amp;pass=fuck the millennium">Unbekannte</a> <a href="?method=new&amp;user=me&amp;pass=fuck the millennium">Neu</a>
 		</p>
-		<table class="footer"><tr><td align="left"><a href="mailto:webmaster at informatiklexikon.de">webmaster</a></td><td align="center">Einträge:<br />345</td><td align="center">&#169; Copyright 2000-2001 Christian Wolfgang Hujer.<br />Alle Rechte vorbehalten. All rights reserved.</td><td align="center"><a href="">logout</a></td><td align="right"><a href="http://validator.w3.org/check/referer"><img alt="Valid XHTML 1.0!" class="now" height="31" src="http://www.w3.org/Icons/valid-xhtml10" width="88" /></a><br /><a href="http://jigsaw.w3.org/css-validator/validator?uri=http://www.informatiklexikon.de/lexikon.css"><img alt="Valid CSS!" class="now" height="31" src="http://jigsaw.w3.org/css-validator/images/vcss" width="88" /></a></td></tr></table>
+		<table class="footer"><tr><td align="left"><a href="mailto:webmaster at informatiklexikon.de">webmaster</a></td><td align="center">Einträge:<br />345</td><td align="center">&#169; Copyright 2000-2001 Christian Wolfgang Hujer.<br />Alle Rechte vorbehalten. All rights reserved.</td><td align="center"><a href="">logout</a></td><td align="right"><a href="http://validator.w3.org/check?uri=referer"><img alt="Valid XHTML 1.0!" class="now" height="31" src="http://www.w3.org/Icons/valid-xhtml10" width="88" /></a><br /><a href="http://jigsaw.w3.org/css-validator/validator?uri=http://www.informatiklexikon.de/lexikon.css"><img alt="Valid CSS!" class="now" height="31" src="http://jigsaw.w3.org/css-validator/images/vcss" width="88" /></a></td></tr></table>
 	</body>
 </html>
 

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/nonSGML-chars.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/nonSGML-chars.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/nonSGML-chars.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/nonSGML-chars.html Mon Mar 14 10:47:03 2011
@@ -4,7 +4,7 @@
   <head>
     <title>XHTML 1.0 Strict with chars in the range 0x80-0x9B</title>
     <link rev="made" href="mailto:gerald at w3.org" />
-    <link rel="stylesheet" type="text/css" href="../../base.css" />
+    <link rel="stylesheet" type="text/css" href="../../base" />
   </head>
 
   <body>
@@ -17,7 +17,7 @@
     <p>Baz! &#x80; Baz!</p>
     <hr />
     <address>
-      <a href="http://validator.w3.org/check/referer"><img
+      <a href="http://validator.w3.org/check?uri=referer"><img
 	 src="http://validator.w3.org/images/vxhtml10" height="31" width="88"
 	 alt="Valid XHTML 1.0!" /></a>
       <a href="../../feedback.html">Webmaster</a>

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/trailing-nul.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/trailing-nul.html?rev=1839&op=diff
==============================================================================
Binary files - no diff available.

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml-basic10.xhtml
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml-basic10.xhtml?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml-basic10.xhtml (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml-basic10.xhtml Mon Mar 14 10:47:03 2011
@@ -18,7 +18,7 @@
 </p>
 
 <address>
-  <a href="http://validator.w3.org/check/referer">valid HTML</a><br />
+  <a href="http://validator.w3.org/check?uri=referer">valid HTML</a><br />
   <a href="../../feedback.html">Gerald Oskoboiny</a>
 </address>
 

Modified: packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml1-strict.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml1-strict.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml1-strict.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/dev/tests/xhtml1-strict.html Mon Mar 14 10:47:03 2011
@@ -21,7 +21,7 @@
 <hr />
 
 <address>
-  <a href="http://validator.w3.org/check/referer">valid HTML</a><br />
+  <a href="http://validator.w3.org/check?uri=referer">valid HTML</a><br />
   <a href="../../feedback.html">Gerald Oskoboiny</a>
 </address>
 

Modified: packages/w3c-markup-validator/trunk/htdocs/docs.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/docs.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/docs.css Mon Mar 14 10:47:03 2011
@@ -1,4 +1,4 @@
-/*
+/*!
    Documentation Style Sheet for the W3C Markup Validation Service.
  
    Copyright 2003 W3C (MIT, INRIA, Keio). All Rights Reserved.

Added: packages/w3c-markup-validator/trunk/htdocs/docs.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/docs.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/docs/api.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs/api.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/docs/api.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/docs/api.html Mon Mar 14 10:47:03 2011
@@ -35,8 +35,13 @@
 
 <h3 id="requestformat">Validation Request Format</h3>
 
-<p>Below is a table of the parameter you can use to send a query to the W3C Markup Validator.</p>
-<p>If you want to use W3c's public validation server, use the parameters below
+<p>
+  Below is a table of the parameter you can use to send a query to the W3C
+  Markup Validator. All parameter values except data in
+  <code>uploaded_file</code> are expected to be encoded in the UTF-8 character
+  encoding.
+</p>
+<p>If you want to use W3C's public validation server, use the parameters below
  in conjunction with the following base URI:<br />
 <kbd>http://validator.w3.org/check</kbd> <br />
 (replace with the address of your own server if you want to call a private instance of the validator)</p>
@@ -64,8 +69,7 @@
 </tr>
 <tr>
   <th>fragment</th>
-  <td>The source of the document to validate. Full documents only. 
-  At the moment, will only work if data is sent with the UTF-8 encoding.</td>
+  <td>The source of the document to validate. Full documents only.</td>
   <td>None, but either this parameter, or <code>uri</code>,
   or <code>uploaded_file</code> must be given.</td>
 </tr>

Modified: packages/w3c-markup-validator/trunk/htdocs/docs/errors.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs/errors.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/docs/errors.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/docs/errors.html Mon Mar 14 10:47:03 2011
@@ -74,7 +74,7 @@
         <dt id="ve-47">47: end of document in prolog</dt>
         <dd><div class="ve mid-47">
   <p>
-      This error may appear when the validator receives an empty document. Please make sure that the document you are uploading is not empty, and <a href="http://validator.w3.org/feedback.html">report</a> any discrepancy.
+      This error may appear when the validator receives an empty document. Please make sure that the document you are uploading is not empty, and <a href="<!--#echo var="relroot" -->feedback.html">report</a> any discrepancy.
   </p>
 </div>
 	<p>
@@ -272,7 +272,7 @@
     </p>
     <p>
       If this error occurred in a script section of your document, you should probably
-      read this <a href="http://validator.w3.org/docs/help.html#faq-javascript">FAQ entry</a>.
+      read this <a href="<!--#echo var="relroot" -->docs/help.html#faq-javascript">FAQ entry</a>.
     </p>
   </div>
 	<p>
@@ -357,7 +357,7 @@
       check that they are both allowed in the chosen document type, and/or
       use CSS instead of this attribute. If you received this error when using the 
       &lt;embed&gt; element to incorporate flash media in a Web page, see the 
-      <a href="http://validator.w3.org/docs/help.html#faq-flash">FAQ item on valid flash</a>.
+      <a href="<!--#echo var="relroot" -->docs/help.html#faq-flash">FAQ item on valid flash</a>.
     </p>
   </div>
 	<p>
@@ -622,7 +622,7 @@
         <dt id="ve-187">187: no document type declaration; will parse without validation</dt>
         <dd><div class="ve mid-187">
     <p>The document type could not be determined, because the document had no correct DOCTYPE declaration. The document does not look like HTML, therefore automatic fallback could not be performed, and the document was only checked against basic markup syntax.</p>
-    <p>Learn <a href="http://validator.w3.org/docs/help.html#faq-doctype">how to add a doctype to your document</a> 
+    <p>Learn <a href="<!--#echo var="relroot" -->docs/help.html#faq-doctype">how to add a doctype to your document</a> 
     from our <acronym title="Frequently Asked Questions">FAQ</acronym>, or use the validator's
     <code>Document Type</code> option to validate your document against a specific Document Type.</p>
   </div>

Modified: packages/w3c-markup-validator/trunk/htdocs/docs/help.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs/help.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/docs/help.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/docs/help.html Mon Mar 14 10:47:03 2011
@@ -67,6 +67,7 @@
 	  <ol>
 	    <li><a href="#icon-usage">My document is valid, can I use your "valid" icon?</a></li>
 	    <li><a href="#icon-list">Is there a list of all available icons somewhere?</a></li>
+	    <li><a href="#icon-https">Why do I see warnings about "insecure items" when viewing my page after including the icon?</a></li>
 	    <li><a href="#icon-license">License and Guidelines for usage of the "valid" icons</a></li>
 	    <li><a href="#icon-deriv">Can I modify the existing icons to create my own?</a></li>
 	    <li><a href="#icon-invalidpage">I saw the "valid" icon displayed on a site but the page is invalid. What should I do?</a></li>
@@ -100,7 +101,7 @@
 		and the validator accepted it!</a>
 	</li>
 	<li>
-		<a href="#faq-referer">/check/referer does not work</a> or the validator says it does not support 
+		<a href="#faq-referer">/check?uri=referer does not work</a> or the validator says it does not support 
 		my <a href="#faq-referer">"undefined" URL scheme</a>
 	</li>
 	<li><a href="#faq-batchvalidation">Can the validator check all the pages in my site in one batch?</a></li>
@@ -325,8 +326,19 @@
       </p>
 
     <h4 id="cleanup">I don't want error messages, I want you to clean up my page!</h4>
-       <p>The Markup Validator can not do this for you. You may want to have a look
-	at tools such as <a href="http://tidy.sourceforge.net">HTML Tidy</a>.</p>
+      <p>
+        Have a look at tools such as
+        <a href="http://tidy.sourceforge.net/">HTML Tidy</a> and
+        <a href="http://www.tidyp.com/">tidyp</a>. When selected, the
+        "Clean up Markup with HTML-Tidy" option will output a "cleaned"
+        version of the input document in case it was not valid, done with
+        <a href="http://search.cpan.org/dist/HTML-Tidy/">HTML-Tidy</a>, using
+        the Markup Validator's default HTML-Tidy configuration. Note that there
+        are no guarantees about the validity or other aspects of that output,
+        and there are many options to configure in these tools that may result
+        in better clean up than the Validator's default options for your
+        document, so you may want to try out them locally.
+      </p>
 
     <h4 id="icon">"valid" icons</h4>
   <h5 id="icon-usage">My document is valid, can I use your "valid" icon?</h5>
@@ -345,13 +357,26 @@
   </p>
   <pre>
    &lt;p&gt;
-      &lt;a href="http://validator.w3.org/check/referer"&gt;&lt;img
+      &lt;a href="http://validator.w3.org/check?uri=referer"&gt;&lt;img
           src="http://www.w3.org/Icons/valid-xhtml10"
           alt="Valid XHTML 1.0!" height="31" width="88" /&gt;&lt;/a&gt;
     &lt;/p&gt;
   </pre>
   <h5 id="icon-list">Is there a list of all available icons somewhere?</h5>
   <p>The <a href="http://www.w3.org/QA/Tools/Icons">full list of "valid" icons</a> is available on the W3C website.</p>
+
+  <h5 id="icon-https">Why do I see warnings about "insecure items" when viewing my page after including the icon?</h5>
+  <p>
+    Many browsers display this warning when viewing documents transferred over
+    a secure protocol such as HTTPS if the documents contain items that are
+    transferred over a non-secure protocol such as unencrypted HTTP. As W3C
+    does not currently provide the "valid" icons over HTTPS, you may want to
+    copy and serve the icons from a HTTPS enabled server elsewhere and link to
+    those copies instead of the W3C originals in your documents that are
+    transferred over a secure protocol to avoid this warning. See also HTTPS
+    related documentation in the <a href="#faq-referer">"/check?uri=referer"
+      FAQ entry</a>.
+  </p>
 
   <h5 id="icon-license">License and Guidelines for usage of the "valid" icons</h5>
   <p>Web content providers are granted the right to use the "W3C valid" logo
@@ -499,7 +524,7 @@
 	<a href="http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.7">is not recommended</a>.
       </p>
 
-    <h4 id="faq-referer">/check/referer does not work - or - the validator says it does not support 
+    <h4 id="faq-referer">/check?uri=referer does not work - or - the validator says it does not support 
     my "undefined" URL scheme</h4>
 
       <p>Browsers and other Web agents usually send information about the page they come from, in a 
@@ -512,15 +537,26 @@
       find what the URL of the document to validate is, and gives the same error message as when it is
       given a type of URL it does not understand.</p>
 
+      <p>
+        Also, requests to non-secure HTTP resources from links in documents
+        transferred with a secure protocol such as HTTPS should not include
+        referrer information
+        <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3">per the HTTP/1.1 specification</a>.
+        As the validator at validator.w3.org is currently not available over
+        HTTPS, this referrer feature will not work reliably for documents
+        transferred over secure protocols (usually <code>https</code> URLs)
+        with it.
+      </p>
+
       <p><strong>How to fix</strong>:</p>
       <ul>
 	<li>Check that it is indeed the <code>Referer</code> issue. The validator should have redirected you to
-	<code>http://validator.w3.org/check?uri=</code>. Otherwise, check the address you have given the validator.</li>
+	<code>http://validator.w3.org/check?uri=<em>your_url_here</em></code>. Otherwise, check the address you have given the validator.</li>
 	<li>The validator can not fix this issue. You will have to (ask your administrator to) reconfigure
 	whichever zealous software is stripping this referrer info.</li>
-	<li>If you have a link on your page using the "/check/referer" feature, you could replace them with the
-	a link to the validator without this feature, e.g. <code>http://validator.w3.org/check?uri=http://www.example.com</code></li>
-	<li>If you have no control over the page or annoying software, simply append the address of the page you wanted validated
+	<li>If you have a link on your page using the "/check?uri=referer" feature, you could replace them with the
+	a link to the validator without this feature, e.g. <code>http://validator.w3.org/check?uri=http%3A%2F%2Fwww.example.com</code></li>
+	<li>If you have no control over the page or annoying software, or your page's URL is a <code>https</code> one, simply append the address of the page you wanted validated (URI encoded)
 	to the <code>http://validator.w3.org/check?uri=</code> address.</li>
      </ul>
   <h4 id="faq-batchvalidation">Can the validator check all the pages in my site in one batch?</h4>

Modified: packages/w3c-markup-validator/trunk/htdocs/docs/install.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs/install.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/docs/install.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/docs/install.html Mon Mar 14 10:47:03 2011
@@ -119,7 +119,7 @@
 	 above.</p>
 
       <dl>
-        <dt><a href="http://search.cpan.org/dist/CGI.pm/">CGI.pm</a> &gt;= 2.81</dt>
+        <dt><a href="http://search.cpan.org/dist/CGI.pm/">CGI.pm</a> &gt;= 3.40</dt>
         <dd>
           The all-singing, all-dancing,
           everything-<em>and</em>-the-kitchen-sink, Perl CGI library. This
@@ -174,7 +174,7 @@
         <dd>
           Interface to the <a href="#install-prereq-sp">OpenSP parser</a>.
         </dd>
-        <dt><a href="http://search.cpan.org/dist/URI/">URI</a></dt>
+        <dt><a href="http://search.cpan.org/dist/URI/">URI</a> &gt;= 1.53</dt>
         <dd>
           Library to handle URIs and escaping special characters in them.
         </dd>
@@ -229,14 +229,14 @@
                 Unpack the two archives of the validator and sgml-lib into a
                 temporary directory, and copy the directories
                 <code>htdocs</code>, <code>httpd/cgi-bin</code>, and
-                <code>share</code> from <code>validator-<em>X.X.X</em></code>
+                <code>share</code> from <code>validator-<em>X.Y</em></code>
                 into <code>[validatorpath]</code>.
               </p>
 <pre>
 # tar zxvf validator.tar.gz 
 # tar zxvf sgml-lib.tar.gz 
 # mkdir /usr/local/validator
-# cd validator-1.0
+# cd validator-<em>X.Y</em>
 # mv htdocs share httpd/cgi-bin /usr/local/validator
 </pre>
               <p>
@@ -306,7 +306,7 @@
 		        <dd>
 		          The validator's <strong>main configuration file</strong>. This will
 		          generally be the only file you need to edit. It sets various parameters, such as:
-		          the address of the maintainer, the URL for the "Home Page", various file paths and locations,
+		          the address of the maintainer, various file paths and locations,
 		          whether the <a href="api.html">API</a> is enabled, etc.
 		        </dd>
 		        <dt>charset.cfg</dt>
@@ -427,6 +427,12 @@
    pages for the validator.</p><p>  You may also edit the Style Sheets (in the same directory), 
    especially <code>base.css</code> You may however want to avoid editing the other CSS files too 
    heavily, there is a risk you could make the output of the validator unusable.</p>
+   <p>
+     If you edit any *.css or *.js files, make sure that you update the gzipped
+     versions of the edited files as well if they're installed and content
+     negotiation for them is enabled in your setup (both are usually true if
+     the validator was installed following these instructions).
+   </p>
 </div>
     
     <div id="credits" class="stb">

Modified: packages/w3c-markup-validator/trunk/htdocs/docs/install_win.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs/install_win.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/docs/install_win.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/docs/install_win.html Mon Mar 14 10:47:03 2011
@@ -164,6 +164,13 @@
 
     &lt;Directory &quot;C:/www/validator/htdocs&quot;&gt;
         Options ExecCGI Includes Indexes MultiViews
+        AddEncoding x-gzip .gz
+        &lt;Files *.js.gz&gt;
+            ForceType application/javascript
+        &lt;/Files&gt;
+        &lt;Files *.css.gz&gt;
+            ForceType text/css
+        &lt;/Files&gt;
         AllowOverride None
         Order deny,allow
         Allow from localhost
@@ -257,8 +264,6 @@
   is declared. Notice that slashes are used here instead of 
   windows-like back slashes.</p>
 
-<p>The option <code>Home Page</code> has to be changed to the URL of 
-  the validator, http://validator.example.org/ in our case.</p>
 <p>The last option that has to be modified is Allow Private 
   <code>IPs = { no | yes }</code>. It must be set to
   &quot;yes&quot;. Otherwise, you cannot validate files 
@@ -292,7 +297,7 @@
   # Location of template files
   Templates = $Base/share/templates
 
-  # configuration file for HTML Tidy Module, if available
+  # configuration file for HTML::Tidy Module, if available
   TidyConf = $Base/htdocs/config/tidy.conf
 
   &lt;SGML&gt;
@@ -337,10 +342,6 @@
 #
 # Email address of the maintainer of this service.
 Maintainer = www-validator at w3.org
-
-#
-# The &quot;Home Page&quot; for the service.  Make sure this ends with a slash.
-Home Page = http://validator.example.org/
 
 # Localization
 # only English available for now

Modified: packages/w3c-markup-validator/trunk/htdocs/docs/users.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/docs/users.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/docs/users.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/docs/users.html Mon Mar 14 10:47:03 2011
@@ -54,10 +54,12 @@
   <div id="Introduction" class="stb">
     <h3>Introduction</h3>
     <p>
-      The W3C Markup Validation Service is a web gateway to a well known SGML
-      parser called SP. SP will take your HTML and compare it to a set of
-      objective syntax rules called a "DTD", a Document Type Definition. This
-      way you can be sure your HTML is really valid and not just that it
+      The W3C Markup Validation Service is a web gateway to SGML and XML parsers,
+      and various other specialized validation services. The underlying
+      implementations will take your document and compare it to a set of
+      objective syntax rules for the submitted document.  For example for HTML
+      documents this set of rules is called a "DTD", a Document Type Definition.
+      This way you can be sure your HTML is really valid and not just that it
       conforms to some random programmer's idea of "nice" HTML. Note that valid
       HTML does not guarantee that your pages will work OK in all browsers.
       Most of them are severely broken and you may need to find alternate ways
@@ -65,13 +67,13 @@
     </p>
     <p>
       When you send an URL to the W3C Markup Validation Service, it will fetch
-      that URL and feed it to the SGML parser. If you upload a file it'll get
-      fed directly into the SGML parser. We then take the output from the SGML
-      parser and format it nicely as HTML and send it back to your web browser.
+      that URL and feed it to the underlying parsers. If you upload a file it'll
+      get fed directly into the parsers. We then take the output produced by the
+      parsers and format it nicely as HTML and send it back to your web browser.
     </p>
     <p>
       The W3C Markup Validation Service is not generating the error messages -
-      they are all generated by the underlying Parser - but it is appending
+      they are all generated by the underlying parsers - but it is appending
       short explanations and suggested fixes for each error. We provide a
       <a href="../feedback.html#errormsg">feedback channel</a> for users to
       suggest better explanations and more accurate solutions.
@@ -85,12 +87,11 @@
       Validator CGI program. The home page is
       &lt;<a href="http://validator.w3.org/">http://validator.w3.org/</a>&gt;
       at the moment (and for the foreseeable future) and the CGI program can be
-      reached at
-      &lt;<a href="http://validator.w3.org/check">http://validator.w3.org/check</a>&gt;.
-    </p>
-    <p>
-      If you call the CGI program with extra path info matching "/referer"
-      (i.e. &lt;<a href="http://validator.w3.org/check/referer">http://validator.w3.org/check/referer</a>&gt;)
+      reached at &lt;http://validator.w3.org/check&gt;.
+    </p>
+    <p>
+      If you call the CGI program with the "uri=referer" query string parameter
+      (i.e. &lt;<a href="http://validator.w3.org/check?uri=referer">http://validator.w3.org/check?uri=referer</a>&gt;)
       it will fetch the referring document and validate that. This means that
       if you embed a link to that URL in your pages, following on that link
       will send you the validation results for that page.
@@ -110,6 +111,10 @@
       &lt;<a href="http://validator.w3.org/check?uri=http%3A%2F%2Fwww.example.com%2F;ss=1;outline=1">http://validator.w3.org/check?uri=http%3A%2F%2Fwww.example.com%2F;ss=1;outline=1</a>&gt;
       will validate the example.com home page with "Show Source", and "Outline"
       on, but "Verbose" off.
+    </p>
+    <p>
+      All parameter values should be encoded in the UTF-8 character encoding
+      (before URI escaping them).
     </p>
     <p>
       You may also see these separated by ampersands, but this usage is

Modified: packages/w3c-markup-validator/trunk/htdocs/favelets.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/favelets.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/favelets.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/favelets.html Mon Mar 14 10:47:03 2011
@@ -2,6 +2,7 @@
 --><!--#set var="relroot" value="./"
 --><!--#include virtual="header.html" -->
 
+  <div class="doc">
     <div><a id="skip" name="skip"></a>
       <h2><a href="http://favelets.com/">Favelets</a>
           For The Validator</h2>
@@ -46,33 +47,34 @@
       </div>
       <div>
         <dl>
-          <dt>"<a href="javascript:void(window.location='http://validator.w3.org/check?uri='+escape(window.location))"
+          <dt>"<a href="javascript:void(window.location='http://validator.w3.org/check?uri='+encodeURIComponent(window.location))"
                  title="Validate This Page">Validate <em>This</em> Page</a>"</dt>
           <dd>
             This is the basic "Validate This Page" <a href="http://favelets.com/">Favelet</a>.
             It simply submits the URL for the currently viewed page to the
             Validator for processing. Results appear in the same window.
           </dd>
-          <dt>"<a href="javascript:window.open('http://validator.w3.org/check?uri='+escape(window.location));void%200"
+          <dt>"<a href="javascript:window.open('http://validator.w3.org/check?uri='+encodeURIComponent(window.location));void%200"
                  title="Validate This Page In New Window">Validate <em>This</em> Page In New Window</a>"</dt>
           <dd>
             Like the last <a href="http://favelets.com/">Favelet</a>, this also
             submits the URL of the current page to the Validator for processing,
             but this version will show the results in a new window.
           </dd>
-          <dt>"<a href="javascript:void(q=prompt('Validate%20Page:',''));if(q)void(window.location='http://validator.w3.org/check?uri='+escape(q))"
+          <dt>"<a href="javascript:void(q=prompt('Validate%20Page:',''));if(q)void(window.location='http://validator.w3.org/check?uri='+encodeURIComponent(q))"
                  title="Validate Page...">Validate Page...</a>"</dt>
           <dd>
             Puts up a dialog with a text entry field where you can type in the
             URL of a page you would like to Validate. The results appear in the
             current window.
           </dd>
-          <dt>"<a href="javascript:void(q=prompt('Validate%20Page:',''));if(q)window.open('http://validator.w3.org/check?uri='+escape(q));void%200"
+          <dt>"<a href="javascript:void(q=prompt('Validate%20Page:',''));if(q)window.open('http://validator.w3.org/check?uri='+encodeURIComponent(q));void%200"
                  title="Validate Page In New Window...">Validate Page In New Window...</a>"</dt>
           <dd>Same as above but shows results in a new window.</dd>
         </dl>
       </div>
     </div>
+  </div>
 
 <!--#include virtual="footer.html" -->
   </body>

Modified: packages/w3c-markup-validator/trunk/htdocs/footer.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/footer.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/footer.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/footer.html Mon Mar 14 10:47:03 2011
@@ -8,16 +8,16 @@
 
 <div id="footer">
 		<p id="activity_logos">
-      <a href="http://www.w3.org/Status" title="W3C's Open Source, bringing you free Web quality tools and more"><img src="http://www.w3.org/Icons/WWW/w3c_home_nb" alt="W3C" /><img src="http://www.opensource.org/trademarks/opensource/web/opensource-55x48.jpg" alt="Open-Source" title="We are building certified Open Source/Free Software. - see www.opensource.org" /></a>
+      <a href="http://www.w3.org/Status" title="W3C's Open Source, bringing you free Web quality tools and more"><img src="http://www.w3.org/Icons/WWW/w3c_home_nb" alt="W3C" width="72" height="47" /><img src="<!--#echo var="relroot" -->images/opensource-55x48.png" alt="Open-Source" title="We are building certified Open Source/Free Software. - see www.opensource.org" width="55" height="48" /></a>
          </p>
 
 		<p id="support_logo">
 			<a href="http://www.w3.org/QA/Tools/Donate">
-			<img src="http://www.w3.org/QA/Tools/I_heart_validator" alt="I heart Validator logo" title=" Validators Donation Program" />
+			<img src="http://www.w3.org/QA/Tools/I_heart_validator" alt="I heart Validator logo" title=" Validators Donation Program" width="80" height="15" />
 			</a>
 		</p>
     <p id="version_info">
-      This service runs the W3C Markup Validator, <a href="<!--#echo var="relroot" -->whatsnew.html#v11"><abbr title="version">v</abbr>1.1</a>. 
+      This service runs the W3C Markup Validator, <a href="<!--#echo var="relroot" -->whatsnew.html#v12"><abbr title="version">v</abbr>1.2</a>. 
     </p>
 
 		<p class="copyright">

Modified: packages/w3c-markup-validator/trunk/htdocs/handheld.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/handheld.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/handheld.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/handheld.css Mon Mar 14 10:47:03 2011
@@ -1,3 +1,10 @@
+/*!
+   Handheld Style Sheet for the W3C Markup Validation Service.
+
+   Copyright 2005 W3C (MIT, INRIA, Keio). All Rights Reserved.
+   See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
+*/
+
 @media handheld { 
 /* should not be necessary to wrap this way, but safer is better */
 

Added: packages/w3c-markup-validator/trunk/htdocs/handheld.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/handheld.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/handheld.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/header.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/header.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/header.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/header.html Mon Mar 14 10:47:03 2011
@@ -1,6 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <!--#if expr="$QUERY_STRING = /(^|[;&])debug(=[^0]?)?(\b|$)/"
+    --><!--#set var="debug" value="1" --><!--#endif -->
   <head>
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
     <title><!--#echo var="title" --></title>
@@ -8,12 +10,15 @@
     <link rel="shortcut icon" href="http://www.w3.org/2008/site/images/favicon.ico" type="image/x-icon" />
     <link rev="start" href="<!--#echo var="relroot" -->" title="Home Page" />
     <style type="text/css" media="all">
-      @import "<!--#echo var="relroot" -->style/base.css";
+      @import "<!--#echo var="relroot" -->style/base";
     </style>
-    <!--#if expr="$includeJS = 1" -->
-    <script type="text/javascript" src="scripts/mootools.js"></script>
+    <!--#if expr="$includeJS = 1" --><!--#if expr="$debug = 1" -->
+    <script type="text/javascript" src="scripts/mootools-1.2.5-core-nc.js"></script>
+    <script type="text/javascript" src="scripts/mootools-1.2.5.1-more.js"></script>
     <script type="text/javascript" src="scripts/w3c-validator.js"></script>
-    <!--#endif -->    
+    <!--#else -->
+    <script type="text/javascript" src="scripts/combined"></script>
+    <!--#endif --><!--#endif -->    
     <meta name="keywords" content="HTML, HyperText Markup Language, Validation,
       W3C Markup Validation Service" />
     <meta name="description" content="W3C's easy-to-use
@@ -21,13 +26,12 @@
     <!--#if expr="$feeds = 1" -->
     <link rel="alternate" type="application/atom+xml" href="http://www.w3.org/QA/Tools/validator-whatsnew.atom" />
     <!--#endif -->
-
   </head>
 
   <body>
    <div id="banner">
     <h1 id="title">
-      <a href="http://www.w3.org/"><img alt="W3C" width="110" height="61" id="logo" src="<!--#echo var="relroot" -->images/no_w3c.png" /></a>
+      <a href="http://www.w3.org/"><img alt="W3C" width="110" height="61" id="logo" src="<!--#echo var="relroot" -->images/w3c.png" /></a>
 			<a href="<!--#echo var="relroot" -->"><span>Markup Validation Service</span></a>
       </h1>
       <p id="tagline">Check the markup (HTML, XHTML, …) of Web documents</p>

Added: packages/w3c-markup-validator/trunk/htdocs/images/opensource-55x48.png
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/images/opensource-55x48.png?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/images/opensource-55x48.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/navbar.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/navbar.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/navbar.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/navbar.css Mon Mar 14 10:47:03 2011
@@ -1,4 +1,4 @@
-/*
+/*!
    Navigation Style Sheet for the W3C Markup Validation Service.
 
    Copyright 2000-2006 W3C (MIT, INRIA, Keio). All Rights Reserved.

Added: packages/w3c-markup-validator/trunk/htdocs/navbar.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/navbar.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/navbar.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/no_referer.asis
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/no_referer.asis?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/no_referer.asis (original)
+++ packages/w3c-markup-validator/trunk/htdocs/no_referer.asis Mon Mar 14 10:47:03 2011
@@ -10,8 +10,8 @@
 		<title>Validation Results - W3C Markup Validator</title>
     <link rev="made" href="mailto:www-validator at w3.org" />
     <link rev="start" href="./" title="Home Page" />
-    <style type="text/css" media="all">@import "/style/base.css";
-            @import "./style/results.css";</style>
+    <style type="text/css" media="all">@import "./style/base";
+            @import "./style/results";</style>
 
     <meta name="keywords" content="HTML, HyperText Markup Language, Validation,
       W3C Markup Validation Service" />

Modified: packages/w3c-markup-validator/trunk/htdocs/print.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/print.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/print.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/print.css Mon Mar 14 10:47:03 2011
@@ -1,3 +1,10 @@
+/*!
+   Print Style Sheet for the W3C Markup Validation Service.
+
+   Copyright 2004-2005 W3C (MIT, INRIA, Keio). All Rights Reserved.
+   See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
+*/
+
 @media print 
 /* should not be necessary to wrap this way, but safer is better */
 {

Added: packages/w3c-markup-validator/trunk/htdocs/print.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/print.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/print.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/results.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/results.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/results.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/results.css Mon Mar 14 10:47:03 2011
@@ -1,4 +1,9 @@
-/* style sheet for the validator's results page          */
+/*!
+   Results Style Sheet for the W3C Markup Validation Service.
+
+   Copyright 1999-2010 W3C (MIT, INRIA, Keio). All Rights Reserved.
+   See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
+*/
 
 .input {
   color: black;

Added: packages/w3c-markup-validator/trunk/htdocs/results.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/results.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/results.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js?rev=1839&op=file
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js (added)
+++ packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js Mon Mar 14 10:47:03 2011
@@ -1,0 +1,31 @@
+/*!
+---
+
+name: Core
+
+description: The core of MooTools, contains all the base functions and the Native and Hash implementations. Required by all the other scripts.
+
+license: MIT-style license.
+
+copyright: Copyright (c) 2006-2008 [Valerio Proietti](http://mad4milk.net/).
+
+authors: The MooTools production team (http://mootools.net/developers/)
+
+inspiration:
+  - 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)
+  - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
+
+provides: [MooTools, Native, Hash.base, Array.each, $util]
+
+...
+*/
+var MooTools={version:"1.2.5",build:"008d8f0f2fcc2044e54fdd3635341aaab274e757"};var Native=function(l){l=l||{};var a=l.name;var j=l.legacy;var b=l.protect;var c=l.implement;var i=l.generics;var g=l.initialize;var h=l.afterImplement||function(){};var d=g||j;i=i!==false;d.constructor=Native;d.$family={name:"native"};if(j&&g){d.prototype=j.prototype}d.prototype.constructor=d;if(a){var f=a.toLowerCase();d.prototype.$family={name:f};Native.typize(d,f)}var k=function(o,m,p,n){if(!b||n||!o.prototype[m]){o.prototype[m]=p}if(i){Native.genericize(o,m,b)}h.call(o,m,p);return o};d.alias=function(o,m,q){if(typeof o=="string"){var p=this.prototype[o];if((o=p)){return k(this,m,o,q)}}for(var n in o){this.alias(n,o[n],m)}return this};d.implement=function(n,m,q){if(typeof n=="string"){return k(this,n,m,q)}for(var o in n){k(this,o,n[o],m)}return this};if(c){d.implement(c)}return d};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments);return b.prototype[c].apply(d.shift(),d)}}};Native.implement=function(d,c){for(var b=0,a=d.length;b<a;b++){d[b].implement(c)}};Native.typize=function(a,b){if(!a.type){a.type=function(c){return($type(c)===b)}}};(function(){var a={Array:Array,Date:Date,Function:Function,Number:Number,RegExp:RegExp,String:String};for(var j in a){new Native({name:j,initialize:a[j],protect:true})}var d={"boolean":Boolean,"native":Native,object:Object};for(var c in d){Native.typize(d[c],c)}var h={Array:["concat","indexOf","join","lastIndexOf","pop","push","reverse","shift","slice","sort","splice","toString","unshift","valueOf"],String:["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]};for(var f in h){for(var b=h[f].length;b--;){Native.genericize(a[f],h[f][b],true)}}})();var Hash=new Native({name:"Hash",initialize:function(a){if($type(a)=="hash"){a=$unlink(a.getClean())}for(var b in a){this[b]=a[b]}return this}});Hash.implement({forEach:function(b,c){for(var a in this){if(this.hasOwnProperty(a)){b.call(c,this[a],a,this)}}},getClean:function(){var b={};for(var a in this){if(this.hasOwnProperty(a)){b[a]=this[a]}}return b},getLength:function(){var b=0;for(var a in this){if(this.hasOwnProperty(a)){b++}}return b}});Hash.alias("forEach","each");Array.implement({forEach:function(c,d){for(var b=0,a=this.length;b<a;b++){c.call(d,this[b],b,this)}}});Array.alias("forEach","each");function $A(b){if(b.item){var a=b.length,c=new Array(a);while(a--){c[a]=b[a]}return c}return Array.prototype.slice.call(b)}function $arguments(a){return function(){return arguments[a]}}function $chk(a){return !!(a||a===0)}function $clear(a){clearTimeout(a);clearInterval(a);return null}function $defined(a){return(a!=undefined)}function $each(c,b,d){var a=$type(c);((a=="arguments"||a=="collection"||a=="array")?Array:Hash).each(c,b,d)}function $empty(){}function $extend(c,a){for(var b in (a||{})){c[b]=a[b]}return c}function $H(a){return new Hash(a)}function $lambda(a){return($type(a)=="function")?a:function(){return a}}function $merge(){var a=Array.slice(arguments);a.unshift({});return $mixin.apply(null,a)}function $mixin(f){for(var d=1,a=arguments.length;d<a;d++){var b=arguments[d];if($type(b)!="object"){continue}for(var c in b){var h=b[c],g=f[c];f[c]=(g&&$type(h)=="object"&&$type(g)=="object")?$mixin(g,h):$unlink(h)}}return f}function $pick(){for(var b=0,a=arguments.length;b<a;b++){if(arguments[b]!=undefined){return arguments[b]}}return null}function $random(b,a){return Math.floor(Math.random()*(a-b+1)+b)}function $splat(b){var a=$type(b);return(a)?((a!="array"&&a!="arguments")?[b]:b):[]}var $time=Date.now||function(){return +new Date};function $try(){for(var b=0,a=arguments.length;b<a;b++){try{return arguments[b]()}catch(c){}}return null}function $type(a){if(a==undefined){return false}if(a.$family){return(a.$family.name=="number"&&!isFinite(a))?false:a.$family.name}if(a.nodeName){switch(a.nodeType){case 1:return"element";case 3:return(/\S/).test(a.nodeValue)?"textnode":"whitespace"}}else{if(typeof a.length=="number"){if(a.callee){return"arguments"}else{if(a.item){return"collection"}}}}return typeof a}function $unlink(c){var b;switch($type(c)){case"object":b={};for(var f in c){b[f]=$unlink(c[f])}break;case"hash":b=new Hash(c);break;case"array":b=[];for(var d=0,a=c.length;d<a;d++){b[d]=$unlink(c[d])}break;default:return c}return b}Array.implement({every:function(c,d){for(var b=0,a=this.length;b<a;b++){if(!c.call(d,this[b],b,this)){return false}}return true},filter:function(d,f){var c=[];for(var b=0,a=this.length;b<a;b++){if(d.call(f,this[b],b,this)){c.push(this[b])}}return c},clean:function(){return this.filter($defined)},indexOf:function(c,d){var a=this.length;for(var b=(d<0)?Math.max(0,a+d):d||0;b<a;b++){if(this[b]===c){return b}}return -1},map:function(d,f){var c=[];for(var b=0,a=this.length;b<a;b++){c[b]=d.call(f,this[b],b,this)}return c},some:function(c,d){for(var b=0,a=this.length;b<a;b++){if(c.call(d,this[b],b,this)){return true}}return false},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a]}return d},link:function(c){var a={};for(var f=0,b=this.length;f<b;f++){for(var d in c){if(c[d](this[f])){a[d]=this[f];delete c[d];break}}}return a},contains:function(a,b){return this.indexOf(a,b)!=-1},extend:function(c){for(var b=0,a=c.length;b<a;b++){this.push(c[b])}return this},getLast:function(){return(this.length)?this[this.length-1]:null},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null},include:function(a){if(!this.contains(a)){this.push(a)}return this},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b])}return this},erase:function(b){for(var a=this.length;a--;a){if(this[a]===b){this.splice(a,1)}}return this},empty:function(){this.length=0;return this},flatten:function(){var d=[];for(var b=0,a=this.length;b<a;b++){var c=$type(this[b]);if(!c){continue}d=d.concat((c=="array"||c=="collection"||c=="arguments")?Array.flatten(this[b]):this[b])}return d},hexToRgb:function(b){if(this.length!=3){return null}var a=this.map(function(c){if(c.length==1){c+=c}return c.toInt(16)});return(b)?a:"rgb("+a+")"},rgbToHex:function(d){if(this.length<3){return null}if(this.length==4&&this[3]==0&&!d){return"transparent"}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);b.push((c.length==1)?"0"+c:c)}return(d)?b:"#"+b.join("")}});String.implement({test:function(a,b){return((typeof a=="string")?new RegExp(a,b):a).test(this)},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:this.indexOf(a)>-1},trim:function(){return this.replace(/^\s+|\s+$/g,"")},clean:function(){return this.replace(/\s+/g," ").trim()},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase()})},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase())})},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase()})},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},toInt:function(a){return parseInt(this,a||10)},toFloat:function(){return parseFloat(this)},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null},stripScripts:function(b){var a="";var c=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return""});if(b===true){$exec(a)}else{if($type(b)=="function"){b(a,c)}}return c},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1)}return(a[c]!=undefined)?a[c]:""})}});try{delete Function.prototype.bind}catch(e){}Function.implement({extend:function(a){for(var b in a){this[b]=a[b]}return this},create:function(b){var a=this;b=b||{};return function(d){var c=b.arguments;c=(c!=undefined)?$splat(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c)}var f=function(){return a.apply(b.bind||null,c)};if(b.delay){return setTimeout(f,b.delay)}if(b.periodical){return setInterval(f,b.periodical)}if(b.attempt){return $try(f)}return f()}},run:function(a,b){return this.apply(b,$splat(a))},pass:function(a,b){return this.create({bind:b,arguments:a})},bind:function(b,a){return this.create({bind:b,arguments:a})},bindWithEvent:function(b,a){return this.create({bind:b,arguments:a,event:true})},attempt:function(a,b){return this.create({bind:b,arguments:a,attempt:true})()},delay:function(b,c,a){return this.create({bind:c,arguments:a,delay:b})()},periodical:function(c,b,a){return this.create({bind:b,arguments:a,periodical:c})()}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this))},round:function(a){a=Math.pow(10,a||0);return Math.round(this*a)/a},times:function(b,c){for(var a=0;a<this;a++){b.call(c,a,this)}},toFloat:function(){return parseFloat(this)},toInt:function(a){return parseInt(this,a||10)}});Number.alias("times","each");(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat($A(arguments)))}}});Number.implement(a)})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a}}return null},hasValue:function(a){return(Hash.keyOf(this,a)!==null)},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c)},this);return this},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c)},this);return this},erase:function(a){if(this.hasOwnProperty(a)){delete this[a]}return this},get:function(a){return(this.hasOwnProperty(a))?this[a]:null},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b}return this},empty:function(){Hash.each(this,function(b,a){delete this[a]},this);return this},include:function(a,b){if(this[a]==undefined){this[a]=b}return this},map:function(b,c){var a=new Hash;Hash.each(this,function(f,d){a.set(d,b.call(c,f,d,this))},this);return a},filter:function(b,c){var a=new Hash;Hash.each(this,function(f,d){if(b.call(c,f,d,this)){a.set(d,f)}},this);return a},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false}}return true},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true}}return false},getKeys:function(){var a=[];Hash.each(this,function(c,b){a.push(b)});return a},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b)});return a},toQueryString:function(a){var b=[];Hash.each(this,function(g,f){if(a){f=a+"["+f+"]"}var d;switch($type(g)){case"object":d=Hash.toQueryString(g,f);break;case"array":var c={};g.each(function(j,h){c[h]=j});d=Hash.toQueryString(c,f);break;default:d=f+"="+encodeURIComponent(g)}if(g!=undefined){b.push(d)}});return b.join("&")}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});function Class(b){if(b instanceof Function){b={initialize:b}}var a=function(){Object.reset(this);if(a._prototyping){return this}this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c}.extend(this);a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a}Function.prototype.protect=function(){this._protected=true;return this};Object.reset=function(a,c){if(c==null){for(var f in a){Object.reset(a,f)}return a}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]);break}return a};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a},wrap:function(a,b,c){if(c._origin){c=c._origin}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.')}var f=this.caller,g=this._current;this.caller=g;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=g;this.caller=f;return d}.extend({_owner:a,_origin:c,_name:b})}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var f in a){this.implement(f,a[f])}return this}var g=Class.Mutators[a];if(g){d=g.call(this,d);if(d==null){return this}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a];if($type(b)=="object"){$mixin(b,d)}else{c[a]=$unlink(d)}break;case"array":c[a]=$unlink(d);break;default:c[a]=d}return this}});Class.Mutators={Extends:function(a){this.parent=a;this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.')}return c.apply(this,arguments)}.protect())},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b)}this.implement(b)},this)}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false},clearChain:function(){this.$chain.empty();return this}});var Events=new Class({$events:{},addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[];this.$events[c].include(b);if(a){b.internal=true}}return this},addEvents:function(a){for(var b in a){this.addEvent(b,a[b])}return this},fireEvent:function(c,b,a){c=Events.removeOn(c);if(!this.$events||!this.$events[c]){return this}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})()},this);return this},removeEvent:function(b,a){b=Events.removeOn(b);if(!this.$events[b]){return this}if(!a.internal){this.$events[b].erase(a)}return this},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d])}return this}if(c){c=Events.removeOn(c)}for(d in this.$events){if(c&&c!=d){continue}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a])}}return this}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase()})};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue}this.addEvent(a,this.options[a]);delete this.options[a]}return this}});var Browser=$merge({Engine:{name:"unknown",version:0},Platform:{name:(window.orientation!=undefined)?"ipod":(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime),query:!!(document.querySelector)},Plugins:{},Engines:{presto:function(){return(!window.opera)?false:((arguments.callee.caller)?960:((document.getElementsByClassName)?950:925))},trident:function(){return(!window.ActiveXObject)?false:((window.XMLHttpRequest)?((document.querySelectorAll)?6:5):4)},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419)},gecko:function(){return(!document.getBoxObjectFor&&window.mozInnerScreenX==null)?false:((document.getElementsByClassName)?19:18)}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;Browser.detect=function(){for(var b in this.Engines){var a=this.Engines[b]();if(a){this.Engine={name:b,version:a};this.Engine[b]=this.Engine[b+a]=true;break}}return{name:b,version:a}};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var a=($try(function(){return navigator.plugins["Shockwave Flash"].description},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")})||"0 r0").match(/\d+/g);return{version:parseInt(a[0]||0+"."+a[1],10)||0,build:parseInt(a[2],10)||0}})();function $exec(b){if(!b){return b}if(window.execScript){window.execScript(b)}else{var a=document.createElement("script");a.setAttribute("type","text/javascript");a[(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerText":"text"]=b;document.head.appendChild(a);document.head.removeChild(a)}return b}Native.UID=1;var $uid=(Browser.Engine.trident)?function(a){return(a.uid||(a.uid=[Native.UID++]))[0]}:function(a){return a.uid||(a.uid=Native.UID++)};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(a){$uid(a);if(!a.Element){a.Element=$empty;if(Browser.Engine.webkit){a.document.createElement("iframe")}a.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{}}a.document.window=a;return $extend(a,Window.Prototype)},afterImplement:function(b,a){window[b]=Window.Prototype[b]=a}});Window.Prototype={$family:{name:"window"}};new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(a){$uid(a);a.head=a.getElementsByTagName("head")[0];a.html=a.getElementsByTagName("html")[0];if(Browser.Engine.trident&&Browser.Engine.version<=4){$try(function(){a.execCommand("BackgroundImageCache",false,true)})}if(Browser.Engine.trident){a.window.attachEvent("onunload",function(){a.window.detachEvent("onunload",arguments.callee);a.head=a.html=a.window=null})}return $extend(a,Document.Prototype)},afterImplement:function(b,a){document[b]=Document.Prototype[b]=a}});Document.Prototype={$family:{name:"document"}};new Document(document);var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a);if(c){return c(b)}if(typeof a=="string"){return document.newElement(a,b)}return document.id(a).set(b)},afterImplement:function(a,b){Element.Prototype[a]=b;if(Array[a]){return}Elements.implement(a,function(){var c=[],h=true;for(var f=0,d=this.length;f<d;f++){var g=this[f][a].apply(this[f],arguments);c.push(g);if(h){h=($type(g)=="element")}}return(h)?new Elements(c):c})}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var g=Array.link(arguments,{properties:Object.type,iframe:$defined});var d=g.properties||{};var c=document.id(g.iframe);var f=d.onload||$empty;delete d.onload;d.id=d.name=$pick(d.id,d.name,c?(c.id||c.name):"IFrame_"+$time());c=new Element(c||"iframe",d);var b=function(){var h=$try(function(){return c.contentWindow.location.host});if(!h||h==window.location.host){var i=new Window(c.contentWindow);new Document(c.contentWindow.document);$extend(i.Element.prototype,Element.Prototype)}f.call(c.contentWindow,c.contentWindow.document)};var a=$try(function(){return c.contentWindow});((a&&a.document.body)||window.frames[d.id])?b():c.addListener("load",b);return c}});var Elements=new Native({initialize:function(g,b){b=$extend({ddup:true,cash:true},b);g=g||[];if(b.ddup||b.cash){var h={},f=[];for(var c=0,a=g.length;c<a;c++){var d=document.id(g[c],!b.cash);if(b.ddup){if(h[d.uid]){continue}h[d.uid]=true}if(d){f.push(d)}}g=f}return(b.cash)?$extend(g,this):g}});Elements.implement({filter:function(a,b){if(!a){return this}return new Elements(Array.filter(this,(typeof a=="string")?function(c){return c.match(a)}:a,b))}});(function(){var d;try{var a=document.createElement("<input name=x>");d=(a.name=="x")}catch(b){}var c=function(f){return(""+f).replace(/&/g,"&amp;").replace(/"/g,"&quot;")};Document.implement({newElement:function(f,g){if(g&&g.checked!=null){g.defaultChecked=g.checked}if(d&&g){f="<"+f;if(g.name){f+=' name="'+c(g.name)+'"'}if(g.type){f+=' type="'+c(g.type)+'"'}f+=">";delete g.name;delete g.type}return this.id(this.createElement(f)).set(g)},newTextNode:function(f){return this.createTextNode(f)},getDocument:function(){return this},getWindow:function(){return this.window},id:(function(){var f={string:function(i,h,g){i=g.getElementById(i);return(i)?f.element(i,h):null},element:function(g,j){$uid(g);if(!j&&!g.$family&&!(/^object|embed$/i).test(g.tagName)){var h=Element.Prototype;for(var i in h){g[i]=h[i]}}return g},object:function(h,i,g){if(h.toElement){return f.element(h.toElement(g),i)}return null}};f.textnode=f.whitespace=f.window=f.document=$arguments(0);return function(h,j,i){if(h&&h.$family&&h.uid){return h}var g=$type(h);return(f[g])?f[g](h,j,i||document):null}})()})})();if(window.$==null){Window.implement({$:function(a,b){return document.id(a,b,this.document)}})}Window.implement({$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a)}var g=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d<b;d++){var f=c[d];switch($type(f)){case"element":g.push(f);break;case"string":g.extend(this.document.getElements(f,true))}}return new Elements(g)},getDocument:function(){return this.document},getWindow:function(){return this}});Native.implement([Element,Document],{getElement:function(a,b){return document.id(this.getElements(a,true)[0]||null,b)},getElements:function(a,d){a=a.split(",");var c=[];var b=(a.length>1);a.each(function(f){var g=this.getElementsByTagName(f.trim());(b)?c.extend(g):c=g},this);return new Elements(c,{ddup:b,cash:!d})}});(function(){var i={},g={};var j={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"};var c=function(m){return(g[m]||(g[m]={}))};var h=function(o,m){if(!o){return}var n=o.uid;if(m!==true){m=false}if(Browser.Engine.trident){if(o.clearAttributes){var r=m&&o.cloneNode(false);o.clearAttributes();if(r){o.mergeAttributes(r)}}else{if(o.removeEvents){o.removeEvents()}}if((/object/i).test(o.tagName)){for(var q in o){if(typeof o[q]=="function"){o[q]=$empty}}Element.dispose(o)}}if(!n){return}i[n]=g[n]=null};var d=function(){Hash.each(i,h);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(h)}if(window.CollectGarbage){CollectGarbage()}i=g=null};var k=function(o,m,t,n,q,s){var p=o[t||m];var r=[];while(p){if(p.nodeType==1&&(!n||Element.match(p,n))){if(!q){return document.id(p,s)}r.push(p)}p=p[m]}return(q)?new Elements(r,{ddup:false,cash:!s}):null};var f={html:"innerHTML","class":"className","for":"htmlFor",defaultValue:"defaultValue",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"};var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var l=["value","type","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"];b=b.associate(b);Hash.extend(f,b);Hash.extend(f,l.associate(l.map(String.toLowerCase)));var a={before:function(n,m){if(m.parentNode){m.parentNode.insertBefore(n,m)}},after:function(n,m){if(!m.parentNode){return}var o=m.nextSibling;(o)?m.parentNode.insertBefore(n,o):m.parentNode.appendChild(n)},bottom:function(n,m){m.appendChild(n)},top:function(n,m){var o=m.firstChild;(o)?m.insertBefore(n,o):m.appendChild(n)}};a.inside=a.bottom;Hash.each(a,function(m,n){n=n.capitalize();Element.implement("inject"+n,function(o){m(this,document.id(o,true));return this});Element.implement("grab"+n,function(o){m(document.id(o,true),this);return this})});Element.implement({set:function(q,n){switch($type(q)){case"object":for(var o in q){this.set(o,q[o])}break;case"string":var m=Element.Properties.get(q);(m&&m.set)?m.set.apply(this,Array.slice(arguments,1)):this.setProperty(q,n)}return this},get:function(n){var m=Element.Properties.get(n);return(m&&m.get)?m.get.apply(this,Array.slice(arguments,1)):this.getProperty(n)},erase:function(n){var m=Element.Properties.get(n);(m&&m.erase)?m.erase.apply(this):this.removeProperty(n);return this},setProperty:function(n,o){var m=f[n];if(o==undefined){return this.removeProperty(n)}if(m&&b[n]){o=!!o}(m)?this[m]=o:this.setAttribute(n,""+o);return this},setProperties:function(m){for(var n in m){this.setProperty(n,m[n])}return this},getProperty:function(n){var m=f[n];var o=(m)?this[m]:this.getAttribute(n,2);return(b[n])?!!o:(m)?o:o||null},getProperties:function(){var m=$A(arguments);return m.map(this.getProperty,this).associate(m)},removeProperty:function(n){var m=f[n];(m)?this[m]=(m&&b[n])?false:"":this.removeAttribute(n);return this},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this},hasClass:function(m){return this.className.contains(m," ")},addClass:function(m){if(!this.hasClass(m)){this.className=(this.className+" "+m).clean()}return this},removeClass:function(m){this.className=this.className.replace(new RegExp("(^|\\s)"+m+"(?:\\s|$)"),"$1");return this},toggleClass:function(m){return this.hasClass(m)?this.removeClass(m):this.addClass(m)},adopt:function(){Array.flatten(arguments).each(function(m){m=document.id(m,true);if(m){this.appendChild(m)}},this);return this},appendText:function(n,m){return this.grab(this.getDocument().newTextNode(n),m)},grab:function(n,m){a[m||"bottom"](document.id(n,true),this);return this},inject:function(n,m){a[m||"bottom"](this,document.id(n,true));return this},replaces:function(m){m=document.id(m,true);m.parentNode.replaceChild(this,m);return this},wraps:function(n,m){n=document.id(n,true);return this.replaces(n).grab(n,m)},getPrevious:function(m,n){return k(this,"previousSibling",null,m,false,n)},getAllPrevious:function(m,n){return k(this,"previousSibling",null,m,true,n)},getNext:function(m,n){return k(this,"nextSibling",null,m,false,n)},getAllNext:function(m,n){return k(this,"nextSibling",null,m,true,n)},getFirst:function(m,n){return k(this,"nextSibling","firstChild",m,false,n)},getLast:function(m,n){return k(this,"previousSibling","lastChild",m,false,n)},getParent:function(m,n){return k(this,"parentNode",null,m,false,n)},getParents:function(m,n){return k(this,"parentNode",null,m,true,n)},getSiblings:function(m,n){return this.getParent().getChildren(m,n).erase(this)},getChildren:function(m,n){return k(this,"nextSibling","firstChild",m,true,n)},getWindow:function(){return this.ownerDocument.window},getDocument:function(){return this.ownerDocument},getElementById:function(p,o){var n=this.ownerDocument.getElementById(p);if(!n){return null}for(var m=n.parentNode;m!=this;m=m.parentNode){if(!m){return null}}return document.id(n,o)},getSelected:function(){return new Elements($A(this.options).filter(function(m){return m.selected}))},getComputedStyle:function(n){if(this.currentStyle){return this.currentStyle[n.camelCase()]}var m=this.getDocument().defaultView.getComputedStyle(this,null);return(m)?m.getPropertyValue([n.hyphenate()]):null},toQueryString:function(){var m=[];this.getElements("input, select, textarea",true).each(function(n){if(!n.name||n.disabled||n.type=="submit"||n.type=="reset"||n.type=="file"){return}var o=(n.tagName.toLowerCase()=="select")?Element.getSelected(n).map(function(p){return p.value}):((n.type=="radio"||n.type=="checkbox")&&!n.checked)?null:n.value;$splat(o).each(function(p){if(typeof p!="undefined"){m.push(n.name+"="+encodeURIComponent(p))}})});return m.join("&")},clone:function(p,m){p=p!==false;var s=this.cloneNode(p);var o=function(w,v){if(!m){w.removeAttribute("id")}if(Browser.Engine.trident){w.clearAttributes();w.mergeAttributes(v);w.removeAttribute("uid");if(w.options){var x=w.options,t=v.options;for(var u=x.length;u--;){x[u].selected=t[u].selected}}}var y=j[v.tagName.toLowerCase()];if(y&&v[y]){w[y]=v[y]}};if(p){var q=s.getElementsByTagName("*"),r=this.getElementsByTagName("*");for(var n=q.length;n--;){o(q[n],r[n])}}o(s,this);return document.id(s)},destroy:function(){Element.empty(this);Element.dispose(this);h(this,true);return null},empty:function(){$A(this.childNodes).each(function(m){Element.destroy(m)});return this},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this},hasChild:function(m){m=document.id(m,true);if(!m){return false}if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(m.tagName)).contains(m)}return(this.contains)?(this!=m&&this.contains(m)):!!(this.compareDocumentPosition(m)&16)},match:function(m){return(!m||(m==this)||(Element.get(this,"tag")==m))}});Native.implement([Element,Window,Document],{addListener:function(p,o){if(p=="unload"){var m=o,n=this;o=function(){n.removeListener("unload",o);m()}}else{i[this.uid]=this}if(this.addEventListener){this.addEventListener(p,o,false)}else{this.attachEvent("on"+p,o)}return this},removeListener:function(n,m){if(this.removeEventListener){this.removeEventListener(n,m,false)}else{this.detachEvent("on"+n,m)}return this},retrieve:function(n,m){var p=c(this.uid),o=p[n];if(m!=undefined&&o==undefined){o=p[n]=m}return $pick(o)},store:function(n,m){var o=c(this.uid);o[n]=m;return this},eliminate:function(m){var n=c(this.uid);delete n[m];return this}});window.addListener("unload",d)})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a},get:function(){return this.style.cssText},erase:function(){this.style.cssText=""}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase()}};Element.Properties.html=(function(){var c=document.createElement("div");var a={table:[1,"<table>","</table>"],select:[1,"<select>","</select>"],tbody:[2,"<table><tbody>","</tbody></table>"],tr:[3,"<table><tbody><tr>","</tr></tbody></table>"]};a.thead=a.tfoot=a.tbody;var b={set:function(){var f=Array.flatten(arguments).join("");var g=Browser.Engine.trident&&a[this.get("tag")];if(g){var h=c;h.innerHTML=g[1]+f+g[2];for(var d=g[0];d--;){h=h.firstChild}this.empty().adopt(h.childNodes)}else{this.innerHTML=f}}};b.erase=b.set;return b})();if(Browser.Engine.webkit&&Browser.Engine.version<420){Element.Properties.text={get:function(){if(this.innerText){return this.innerText}var a=this.ownerDocument.newElement("div",{html:this.innerHTML}).inject(this.ownerDocument.body);var b=a.innerText;a.destroy();return b}}}(function(){Element.implement({scrollTo:function(i,j){if(b(this)){this.getWindow().scrollTo(i,j)}else{this.scrollLeft=i;this.scrollTop=j}return this},getSize:function(){if(b(this)){return this.getWindow().getSize()}return{x:this.offsetWidth,y:this.offsetHeight}},getScrollSize:function(){if(b(this)){return this.getWindow().getScrollSize()}return{x:this.scrollWidth,y:this.scrollHeight}},getScroll:function(){if(b(this)){return this.getWindow().getScroll()}return{x:this.scrollLeft,y:this.scrollTop}},getScrolls:function(){var j=this,i={x:0,y:0};while(j&&!b(j)){i.x+=j.scrollLeft;i.y+=j.scrollTop;j=j.parentNode}return i},getOffsetParent:function(){var i=this;if(b(i)){return null}if(!Browser.Engine.trident){return i.offsetParent}while((i=i.parentNode)&&!b(i)){if(d(i,"position")!="static"){return i}}return null},getOffsets:function(){if(this.getBoundingClientRect){var k=this.getBoundingClientRect(),n=document.id(this.getDocument().documentElement),q=n.getScroll(),l=this.getScrolls(),j=this.getScroll(),i=(d(this,"position")=="fixed");return{x:k.left.toInt()+l.x-j.x+((i)?0:q.x)-n.clientLeft,y:k.top.toInt()+l.y-j.y+((i)?0:q.y)-n.clientTop}}var m=this,o={x:0,y:0};if(b(this)){return o}while(m&&!b(m)){o.x+=m.offsetLeft;o.y+=m.offsetTop;if(Browser.Engine.gecko){if(!g(m)){o.x+=c(m);o.y+=h(m)}var p=m.parentNode;if(p&&d(p,"overflow")!="visible"){o.x+=c(p);o.y+=h(p)}}else{if(m!=this&&Browser.Engine.webkit){o.x+=c(m);o.y+=h(m)}}m=m.offsetParent}if(Browser.Engine.gecko&&!g(this)){o.x-=c(this);o.y-=h(this)}return o},getPosition:function(l){if(b(this)){return{x:0,y:0}}var m=this.getOffsets(),j=this.getScrolls();var i={x:m.x-j.x,y:m.y-j.y};var k=(l&&(l=document.id(l)))?l.getPosition():{x:0,y:0};return{x:i.x-k.x,y:i.y-k.y}},getCoordinates:function(k){if(b(this)){return this.getWindow().getCoordinates()}var i=this.getPosition(k),j=this.getSize();var l={left:i.x,top:i.y,width:j.x,height:j.y};l.right=l.left+l.width;l.bottom=l.top+l.height;return l},computePosition:function(i){return{left:i.x-f(this,"margin-left"),top:i.y-f(this,"margin-top")}},setPosition:function(i){return this.setStyles(this.computePosition(i))}});Native.implement([Document,Window],{getSize:function(){if(Browser.Engine.presto||Browser.Engine.webkit){var j=this.getWindow();return{x:j.innerWidth,y:j.innerHeight}}var i=a(this);return{x:i.clientWidth,y:i.clientHeight}},getScroll:function(){var j=this.getWindow(),i=a(this);return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop}},getScrollSize:function(){var j=a(this),i=this.getSize();return{x:Math.max(j.scrollWidth,i.x),y:Math.max(j.scrollHeight,i.y)}},getPosition:function(){return{x:0,y:0}},getCoordinates:function(){var i=this.getSize();return{top:0,left:0,bottom:i.y,right:i.x,height:i.y,width:i.x}}});var d=Element.getComputedStyle;function f(i,j){return d(i,j).toInt()||0}function g(i){return d(i,"-moz-box-sizing")=="border-box"}function h(i){return f(i,"border-top-width")}function c(i){return f(i,"border-left-width")}function b(i){return(/^(?:body|html)$/i).test(i.tagName)}function a(i){var j=i.getDocument();return(!j.compatMode||j.compatMode=="CSS1Compat")?j.html:j.body}})();Element.alias("setPosition","position");Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y},getWidth:function(){return this.getSize().x},getScrollTop:function(){return this.getScroll().y},getScrollLeft:function(){return this.getScroll().x},getScrollHeight:function(){return this.getScrollSize().y},getScrollWidth:function(){return this.getScrollSize().x},getTop:function(){return this.getPosition().y},getLeft:function(){return this.getPosition().x}});var Event=new Native({name:"Event",initialize:function(a,g){g=g||window;var l=g.document;a=a||g.event;if(a.$extended){return a}this.$extended=true;var k=a.type;var h=a.target||a.srcElement;while(h&&h.nodeType==3){h=h.parentNode}if(k.test(/key/)){var b=a.which||a.keyCode;var n=Event.Keys.keyOf(b);if(k=="keydown"){var d=b-111;if(d>0&&d<13){n="f"+d}}n=n||String.fromCharCode(b).toLowerCase()}else{if(k.match(/(click|mouse|menu)/i)){l=(!l.compatMode||l.compatMode=="CSS1Compat")?l.html:l.body;var j={x:a.pageX||a.clientX+l.scrollLeft,y:a.pageY||a.clientY+l.scrollTop};var c={x:(a.pageX)?a.pageX-g.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-g.pageYOffset:a.clientY};if(k.match(/DOMMouseScroll|mousewheel/)){var i=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3}var f=(a.which==3)||(a.button==2);var m=null;if(k.match(/over|out/)){switch(k){case"mouseover":m=a.relatedTarget||a.fromElement;break;case"mouseout":m=a.relatedTarget||a.toElement}if(!(function(){while(m&&m.nodeType==3){m=m.parentNode}return true}).create({attempt:Browser.Engine.gecko})()){m=false}}}}return $extend(this,{event:a,type:k,page:j,client:c,rightClick:f,wheel:i,relatedTarget:m,target:h,code:b,key:n,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey})}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault()},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation()}else{this.event.cancelBubble=true}return this},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault()}else{this.event.returnValue=false}return this}});Element.Properties.events={set:function(a){this.addEvents(a)}};Native.implement([Element,Window,Document],{addEvent:function(f,h){var i=this.retrieve("events",{});i[f]=i[f]||{keys:[],values:[]};if(i[f].keys.contains(h)){return this}i[f].keys.push(h);var g=f,a=Element.Events.get(f),c=h,j=this;if(a){if(a.onAdd){a.onAdd.call(this,h)}if(a.condition){c=function(k){if(a.condition.call(this,k)){return h.call(this,k)}return true}}g=a.base||g}var d=function(){return h.call(j)};var b=Element.NativeEvents[g];if(b){if(b==2){d=function(k){k=new Event(k,j.getWindow());if(c.call(j,k)===false){k.stop()}}}this.addListener(g,d)}i[f].values.push(d);return this},removeEvent:function(c,b){var a=this.retrieve("events");if(!a||!a[c]){return this}var g=a[c].keys.indexOf(b);if(g==-1){return this}a[c].keys.splice(g,1);var f=a[c].values.splice(g,1)[0];var d=Element.Events.get(c);if(d){if(d.onRemove){d.onRemove.call(this,b)}c=d.base||c}return(Element.NativeEvents[c])?this.removeListener(c,f):this},addEvents:function(a){for(var b in a){this.addEvent(b,a[b])}return this},removeEvents:function(a){var c;if($type(a)=="object"){for(c in a){this.removeEvent(c,a[c])}return this}var b=this.retrieve("events");if(!b){return this}if(!a){for(c in b){this.removeEvents(c)}this.eliminate("events")}else{if(b[a]){while(b[a].keys[0]){this.removeEvent(a,b[a].keys[0])}b[a]=null}}return this},fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this}c[d].keys.each(function(f){f.create({bind:this,delay:a,"arguments":b})()},this);return this},cloneEvents:function(d,a){d=document.id(d);var c=d.retrieve("events");if(!c){return this}if(!a){for(var b in c){this.cloneEvents(d,b)}}else{if(c[a]){c[a].keys.each(function(f){this.addEvent(a,f)},this)}}return this}});try{if(typeof HTMLElement!="undefined"){HTMLElement.prototype.fireEvent=Element.prototype.fireEvent}}catch(e){}Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true}if(c===false){return false}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c))};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}})})();Element.Properties.styles={set:function(a){this.setStyles(a)}};Element.Properties.opacity={set:function(a,b){if(!b){if(a==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"}}else{if(this.style.visibility!="visible"){this.style.visibility="visible"}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1}if(Browser.Engine.trident){this.style.filter=(a==1)?"":"alpha(opacity="+a*100+")"}this.style.opacity=a;this.store("opacity",a)},get:function(){return this.retrieve("opacity",1)}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true)},getOpacity:function(){return this.get("opacity")},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat"}b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(f,d){if(!c[d]){return""}return($type(f)=="number")?c[d].replace("@",Math.round(f)):f}).join(" ")}else{if(a==String(Number(a))){a=Math.round(a)}}this.style[b]=a;return this},getStyle:function(h){switch(h){case"opacity":return this.get("opacity");case"float":h=(Browser.Engine.trident)?"styleFloat":"cssFloat"}h=h.camelCase();var a=this.style[h];if(!$chk(a)){a=[];for(var g in Element.ShortStyles){if(h!=g){continue}for(var f in Element.ShortStyles[g]){a.push(this.getStyle(f))}return a.join(" ")}a=this.getComputedStyle(h)}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/);if(c){a=a.replace(c[0],c[0].rgbToHex())}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a,10)))){if(h.test(/^(height|width)$/)){var b=(h=="width")?["left","right"]:["top","bottom"],d=0;b.each(function(i){d+=this.getStyle("border-"+i+"-width").toInt()+this.getStyle("padding-"+i).toInt()},this);return this["offset"+h.capitalize()]-d+"px"}if((Browser.Engine.presto)&&String(a).test("px")){return a}if(h.test(/(border(.+)Width|margin|padding)/)){return"0px"}}return a},setStyles:function(b){for(var a in b){this.setStyle(a,b[a])}return this},getStyles:function(){var a={};Array.flatten(arguments).each(function(b){a[b]=this.getStyle(b)},this);return a}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(h){var g=Element.ShortStyles;var b=Element.Styles;["margin","padding"].each(function(i){var j=i+h;g[i][j]=b[j]="@px"});var f="border"+h;g.border[f]=b[f]="@px @ rgb(@, @, @)";var d=f+"Width",a=f+"Style",c=f+"Color";g[f]={};g.borderWidth[d]=g[f][d]=b[d]="@px";g.borderStyle[a]=g[f][a]=b[a]="@";g.borderColor[c]=g[f][c]=b[c]="rgb(@, @, @)"});var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore"},initialize:function(a){this.subject=this.subject||this;this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel"}},getTransition:function(){return function(a){return -(Math.cos(Math.PI*a)-1)/2}},step:function(){var a=$time();if(a<this.time+this.options.duration){var b=this.transition((a-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,b))}else{this.set(this.compute(this.from,this.to,1));this.complete()}},set:function(a){return a},compute:function(c,b,a){return Fx.compute(c,b,a)},check:function(){if(!this.timer){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false}return false},start:function(b,a){if(!this.check(b,a)){return this}this.from=b;this.to=a;this.time=0;this.transition=this.getTransition();this.startTimer();this.onStart();return this},complete:function(){if(this.stopTimer()){this.onComplete()}return this},cancel:function(){if(this.stopTimer()){this.onCancel()}return this},onStart:function(){this.fireEvent("start",this.subject)},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject)}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain()},pause:function(){this.stopTimer();return this},resume:function(){this.startTimer();return this},stopTimer:function(){if(!this.timer){return false}this.time=$time()-this.time;this.timer=$clear(this.timer);return true},startTimer:function(){if(this.timer){return false}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true}});Fx.compute=function(c,b,a){return(b-c)*a+c};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(d,f,b){b=$splat(b);var c=b[1];if(!$chk(c)){b[1]=b[0];b[0]=d.getStyle(f)}var a=b.map(this.parse);return{from:a[0],to:a[1]}},parse:function(a){a=$lambda(a)();a=(typeof a=="string")?a.split(" "):$splat(a);return a.map(function(c){c=String(c);var b=false;Fx.CSS.Parsers.each(function(g,f){if(b){return}var d=g.parse(c);if($chk(d)){b={value:d,parser:g}}});b=b||{value:c,parser:Fx.CSS.Parsers.String};return b})},compute:function(d,c,b){var a=[];(Math.min(d.length,c.length)).times(function(f){a.push({value:d[f].parser.compute(d[f].value,c[f].value,b),parser:d[f].parser})});a.$family={name:"fx:css:value"};return a},serve:function(c,b){if($type(c)!="fx:css:value"){c=this.parse(c)}var a=[];c.each(function(d){a=a.concat(d.parser.serve(d.value,b))});return a},render:function(a,d,c,b){a.setStyle(d,this.serve(c,b))},search:function(a){if(Fx.CSS.Cache[a]){return Fx.CSS.Cache[a]}var b={};Array.each(document.styleSheets,function(f,d){var c=f.href;if(c&&c.contains("://")&&!c.contains(document.domain)){return}var g=f.rules||f.cssRules;Array.each(g,function(k,h){if(!k.style){return}var j=(k.selectorText)?k.selectorText.replace(/^\w+/,function(i){return i.toLowerCase()}):null;if(!j||!j.test("^"+a+"$")){return}Element.Styles.each(function(l,i){if(!k.style[i]||Element.ShortStyles[i]){return}l=String(k.style[i]);b[i]=(l.test(/^rgb/))?l.rgbToHex():l})})});return Fx.CSS.Cache[a]=b}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(a){if(a.match(/^#[0-9a-f]{3,6}$/i)){return a.hexToRgb(true)}return((a=a.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[a[1],a[2],a[3]]:false},compute:function(c,b,a){return c.map(function(f,d){return Math.round(Fx.compute(c[d],b[d],a))})},serve:function(a){return a.map(Number)}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(b,a){return(a)?b+a:b}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a)},set:function(a){if(typeof a=="string"){a=this.search(a)}for(var b in a){this.render(this.element,b,a[b],this.options.unit)}return this},compute:function(f,d,c){var a={};for(var b in f){a[b]=this.parent(f[b],d[b],c)}return a},start:function(b){if(!this.check(b)){return this}if(typeof b=="string"){b=this.search(b)}var f={},d={};for(var c in b){var a=this.prepare(this.element,c,b[c]);f[c]=a.from;d[c]=a.to}return this.parent(f,d)}});Element.Properties.morph={set:function(a){var b=this.retrieve("morph");if(b){b.cancel()}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},a))},get:function(a){if(a||!this.retrieve("morph")){if(a||!this.retrieve("morph:options")){this.set("morph",a)}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")))}return this.retrieve("morph")}};Element.implement({morph:function(a){this.get("morph").start(a);return this}});Fx.implement({getTransition:function(){var a=this.options.transition||Fx.Transitions.Sine.easeInOut;if(typeof a=="string"){var b=a.split(":");a=Fx.Transitions;a=a[b[0]]||a[b[0].capitalize()];if(b[1]){a=a["ease"+b[1].capitalize()+(b[2]?b[2].capitalize():"")]}}return a}});Fx.Transition=function(b,a){a=$splat(a);return $extend(b,{easeIn:function(c){return b(c,a)},easeOut:function(c){return 1-b(1-c,a)},easeInOut:function(c){return(c<=0.5)?b(2*c,a)/2:(2-b(2*(1-c),a))/2}})};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(a){for(var b in a){Fx.Transitions[b]=new Fx.Transition(a[b])}};Fx.Transitions.extend({Pow:function(b,a){return Math.pow(b,a[0]||6)},Expo:function(a){return Math.pow(2,8*(a-1))},Circ:function(a){return 1-Math.sin(Math.acos(a))},Sine:function(a){return 1-Math.sin((1-a)*Math.PI/2)},Back:function(b,a){a=a[0]||1.618;return Math.pow(b,2)*((a+1)*b-a)},Bounce:function(g){var f;for(var d=0,c=1;1;d+=c,c/=2){if(g>=(7-4*d)/11){f=c*c-Math.pow((11-6*d-11*g)/4,2);break}}return f},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a[0]||1)/3)}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,[a+2])})});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a)},set:function(b,a){if(arguments.length==1){a=b;b=this.property||this.options.property}this.render(this.element,b,a,this.options.unit);return this},start:function(c,f,d){if(!this.check(c,f,d)){return this}var b=Array.flatten(arguments);this.property=this.options.property||b.shift();var a=this.prepare(this.element,this.property,b);return this.parent(a.from,a.to)}});Element.Properties.tween={set:function(a){var b=this.retrieve("tween");if(b){b.cancel()}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},a))},get:function(a){if(a||!this.retrieve("tween")){if(a||!this.retrieve("tween:options")){this.set("tween",a)}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")))}return this.retrieve("tween")}};Element.implement({tween:function(a,c,b){this.get("tween").start(arguments);return this},fade:function(c){var f=this.get("tween"),d="opacity",a;c=$pick(c,"toggle");switch(c){case"in":f.start(d,1);break;case"out":f.start(d,0);break;case"show":f.set(d,1);break;case"hide":f.set(d,0);break;case"toggle":var b=this.retrieve("fade:flag",this.get("opacity")==1);f.start(d,(b)?0:1);this.store("fade:flag",!b);a=true;break;default:f.start(d,arguments)}if(!a){this.eliminate("fade:flag")}return this},highlight:function(c,a){if(!a){a=this.retrieve("highlight:original",this.getStyle("background-color"));a=(a=="transparent")?"#fff":a}var b=this.get("tween");b.start("background-color",c||"#ffff88",a).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));b.callChain()}.bind(this));return this}});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false,noCache:false},initialize:function(a){this.xhr=new Browser.Request();this.setOptions(a);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers)},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status}.bind(this));this.xhr.onreadystatechange=$empty;if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml)}else{this.response={text:null,xml:null};this.failure()}},isSuccess:function(){return((this.status>=200)&&(this.status<300))},processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a)}return a.stripScripts(this.options.evalScripts)},success:function(b,a){this.onSuccess(this.processScripts(b),a)},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain()},failure:function(){this.onFailure()},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr)},setHeader:function(a,b){this.headers.set(a,b);return this},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a)}.bind(this))},check:function(){if(!this.running){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false}return false},send:function(l){if(!this.check(l)){return this}this.running=true;var j=$type(l);if(j=="string"||j=="element"){l={data:l}}var d=this.options;l=$extend({data:d.data,url:d.url,method:d.method},l);var h=l.data,b=String(l.url),a=l.method.toLowerCase();switch($type(h)){case"element":h=document.id(h).toQueryString();break;case"object":case"hash":h=Hash.toQueryString(h)}if(this.options.format){var k="format="+this.options.format;h=(h)?k+"&"+h:k}if(this.options.emulation&&!["get","post"].contains(a)){var i="_method="+a;h=(h)?i+"&"+h:i;a="post"}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+c)}if(this.options.noCache){var g="noCache="+new Date().getTime();h=(h)?g+"&"+h:g}var f=b.lastIndexOf("/");if(f>-1&&(f=b.indexOf("#"))>-1){b=b.substr(0,f)}if(h&&a=="get"){b=b+(b.contains("?")?"&":"?")+h;h=null}this.xhr.open(a.toUpperCase(),b,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(n,m){try{this.xhr.setRequestHeader(m,n)}catch(o){this.fireEvent("exception",[m,n])}},this);this.fireEvent("request");this.xhr.send(h);if(!this.options.async){this.onStateChange()}return this},cancel:function(){if(!this.running){return this}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this}});(function(){var a={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(c,{method:b}))}});Request.implement(a)})();Element.Properties.send={set:function(a){var b=this.retrieve("send");if(b){b.cancel()}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},a))},get:function(a){if(a||!this.retrieve("send")){if(a||!this.retrieve("send:options")){this.set("send",a)}this.store("send",new Request(this.retrieve("send:options")))}return this.retrieve("send")}};Element.implement({send:function(a){var b=this.get("send");b.send({data:this,url:a||b.options.url});return this}});Request.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false},processHTML:function(c){var b=c.match(/<body[^>]*>([\s\S]*?)<\/body>/i);c=(b)?b[1]:c;var a=new Element("div");return $try(function(){var d="<root>"+c+"</root>",h;if(Browser.Engine.trident){h=new ActiveXObject("Microsoft.XMLDOM");h.async=false;h.loadXML(d)}else{h=new DOMParser().parseFromString(d,"text/xml")}d=h.getElementsByTagName("root")[0];if(!d){return null}for(var g=0,f=d.childNodes.length;g<f;g++){var j=Element.clone(d.childNodes[g],true,true);if(j){a.grab(j)}}return a})||a.set("html",c)},success:function(d){var c=this.options,b=this.response;b.html=d.stripScripts(function(f){b.javascript=f});var a=this.processHTML(b.html);b.tree=a.childNodes;b.elements=a.getElements("*");if(c.filter){b.tree=b.elements.filter(c.filter)}if(c.update){document.id(c.update).empty().set("html",b.html)}else{if(c.append){document.id(c.append).adopt(a.getChildren())}}if(c.evalScripts){$exec(b.javascript)}this.onSuccess(b.tree,b.elements,b.html,b.javascript)}});Element.Properties.load={set:function(a){var b=this.retrieve("load");if(b){b.cancel()}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},a))},get:function(a){if(a||!this.retrieve("load")){if(a||!this.retrieve("load:options")){this.set("load",a)}this.store("load",new Request.HTML(this.retrieve("load:options")))}return this.retrieve("load")}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));return this}});var JSON=new Hash(this.JSON&&{stringify:JSON.stringify,parse:JSON.parse}).extend({$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(a){return JSON.$specialChars[a]||"\\u00"+Math.floor(a.charCodeAt()/16).toString(16)+(a.charCodeAt()%16).toString(16)},encode:function(b){switch($type(b)){case"string":return'"'+b.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(b.map(JSON.encode).clean())+"]";case"object":case"hash":var a=[];Hash.each(b,function(f,d){var c=JSON.encode(f);if(c){a.push(JSON.encode(d)+":"+c)}});return"{"+a+"}";case"number":case"boolean":return String(b);case false:return"null"}return null},decode:function(string,secure){if($type(string)!="string"||!string.length){return null}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null}return eval("("+string+")")}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);this.headers.extend({Accept:"application/json","X-Request":"JSON"})},success:function(a){this.response.json=JSON.decode(a,this.options.secure);this.onSuccess(this.response.json,a)}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(b,a){this.key=b;this.setOptions(a)},write:function(b){b=encodeURIComponent(b);if(this.options.domain){b+="; domain="+this.options.domain}if(this.options.path){b+="; path="+this.options.path}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString()}if(this.options.secure){b+="; secure"}this.options.document.cookie=this.key+"="+b;return this},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");return(a)?decodeURIComponent(a[1]):null},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this}});Cookie.write=function(b,c,a){return new Cookie(b,a).write(c)};Cookie.read=function(a){return new Cookie(a).read()};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose()};Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this)}}};(function(){var b=function(){if(Browser.loaded){return}Browser.loaded=true;window.fireEvent("domready");document.fireEvent("domready")};window.addEvent("load",b);if(Browser.Engine.trident){var a=document.createElement("div");(function(){($try(function(){a.doScroll();return document.id(a).inject(document.body).set("html","temp").dispose()}))?b():arguments.callee.delay(50)})()}else{if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50)})()}else{document.addEvent("DOMContentLoaded",b)}}})();Native.implement([Document,Element],{getElements:function(j,h){j=j.split(",");var c,f={};for(var d=0,b=j.length;d<b;d++){var a=j[d],g=Selectors.Utils.search(this,a,f);if(d!=0&&g.item){g=$A(g)}c=(d==0)?g:(c.item)?$A(c).concat(g):c.concat(g)}return new Elements(c,{ddup:(j.length>1),cash:!h})}});Element.implement({match:function(b){if(!b||(b==this)){return true}var d=Selectors.Utils.parseTagAndID(b);var a=d[0],f=d[1];if(!Selectors.Filters.byID(this,f)||!Selectors.Filters.byTag(this,a)){return false}var c=Selectors.Utils.parseSelector(b);return(c)?Selectors.Utils.filter(this,c,{}):true}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(b,c){if(!c){return true}var a=$uid(b);if(!c[a]){return c[a]=true}return false},parseNthArgument:function(i){if(Selectors.Cache.nth[i]){return Selectors.Cache.nth[i]}var f=i.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!f){return false}var h=parseInt(f[1],10);var d=(h||h===0)?h:1;var g=f[2]||false;var c=parseInt(f[3],10)||0;if(d!=0){c--;while(c<1){c+=d}while(c>=d){c-=d}}else{d=c;g="index"}switch(g){case"n":f={a:d,b:c,special:"n"};break;case"odd":f={a:2,b:0,special:"n"};break;case"even":f={a:2,b:1,special:"n"};break;case"first":f={a:0,special:"index"};break;case"last":f={special:"last-child"};break;case"only":f={special:"only-child"};break;default:f={a:(d-1),special:"index"}}return Selectors.Cache.nth[i]=f},parseSelector:function(f){if(Selectors.Cache.parsed[f]){return Selectors.Cache.parsed[f]}var d,i={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(f))){var j=d[1],h=d[2],g=d[3],b=d[5],c=d[6],k=d[7];if(j){i.classes.push(j)}else{if(c){var a=Selectors.Pseudo.get(c);if(a){i.pseudos.push({parser:a,argument:k})}else{i.attributes.push({name:c,operator:"=",value:k})}}else{if(h){i.attributes.push({name:h,operator:g,value:b})}}}}if(!i.classes.length){delete i.classes}if(!i.attributes.length){delete i.attributes}if(!i.pseudos.length){delete i.pseudos}if(!i.classes&&!i.attributes&&!i.pseudos){i=null}return Selectors.Cache.parsed[f]=i},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false]},filter:function(g,c,f){var d;if(c.classes){for(d=c.classes.length;d--;d){var h=c.classes[d];if(!Selectors.Filters.byClass(g,h)){return false}}}if(c.attributes){for(d=c.attributes.length;d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(g,b.name,b.operator,b.value)){return false}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d];if(!Selectors.Filters.byPseudo(g,a.parser,a.argument,f)){return false}}}return true},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true);return(c&&Selectors.Filters.byTag(c,a))?[c]:[]}else{return b.getElementsByTagName(a)}},search:function(p,o,u){var b=[];var c=o.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j);return":)"+i}).split(":)");var q,f,B;for(var A=0,w=c.length;A<w;A++){var z=c[A];if(A==0&&Selectors.RegExps.quick.test(z)){q=p.getElementsByTagName(z);continue}var a=b[A-1];var r=Selectors.Utils.parseTagAndID(z);var C=r[0],s=r[1];if(A==0){q=Selectors.Utils.getByTagAndID(p,C,s)}else{var d={},h=[];for(var y=0,x=q.length;y<x;y++){h=Selectors.Getters[a](h,q[y],C,s,d)}q=h}var g=Selectors.Utils.parseSelector(z);if(g){f=[];for(var v=0,t=q.length;v<t;v++){B=q[v];if(Selectors.Utils.filter(B,g,u)){f.push(B)}}q=f}}return q}};Selectors.Getters={" ":function(j,h,k,a,f){var d=Selectors.Utils.getByTagAndID(h,k,a);for(var c=0,b=d.length;c<b;c++){var g=d[c];if(Selectors.Utils.chk(g,f)){j.push(g)}}return j},">":function(j,h,k,a,g){var c=Selectors.Utils.getByTagAndID(h,k,a);for(var f=0,d=c.length;f<d;f++){var b=c[f];if(b.parentNode==h&&Selectors.Utils.chk(b,g)){j.push(b)}}return j},"+":function(c,b,a,f,d){while((b=b.nextSibling)){if(b.nodeType==1){if(Selectors.Utils.chk(b,d)&&Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,f)){c.push(b)}break}}return c},"~":function(c,b,a,f,d){while((b=b.nextSibling)){if(b.nodeType==1){if(!Selectors.Utils.chk(b,d)){break}if(Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,f)){c.push(b)}}}return c}};Selectors.Filters={byTag:function(b,a){return(a=="*"||(b.tagName&&b.tagName.toLowerCase()==a))},byID:function(a,b){return(!b||(a.id&&a.id==b))},byClass:function(b,a){return(b.className&&b.className.contains&&b.className.contains(a," "))},byPseudo:function(a,d,c,b){return d.call(a,c,b)},byAttribute:function(c,d,b,f){var a=Element.prototype.getProperty.call(c,d);if(!a){return(b=="!=")}if(!b||f==undefined){return true}switch(b){case"=":return(a==f);case"*=":return(a.contains(f));case"^=":return(a.substr(0,f.length)==f);case"$=":return(a.substr(a.length-f.length)==f);case"!=":return(a!=f);case"~=":return a.contains(f," ");case"|=":return a.contains(f,"-")}return false}};Selectors.Pseudo=new Hash({checked:function(){return this.checked},empty:function(){return !(this.innerText||this.textContent||"").length},not:function(a){return !Element.match(this,a)},contains:function(a){return(this.innerText||this.textContent||"").contains(a)},"first-child":function(){return Selectors.Pseudo.index.call(this,0)},"last-child":function(){var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false}}return true},"only-child":function(){var b=this;while((b=b.previousSibling)){if(b.nodeType==1){return false}}var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false}}return true},"nth-child":function(h,f){h=(h==undefined)?"n":h;var c=Selectors.Utils.parseNthArgument(h);if(c.special!="n"){return Selectors.Pseudo[c.special].call(this,c.a,f)}var g=0;f.positions=f.positions||{};var d=$uid(this);if(!f.positions[d]){var b=this;while((b=b.previousSibling)){if(b.nodeType!=1){continue}g++;var a=f.positions[$uid(b)];if(a!=undefined){g=a+g;break}}f.positions[d]=g}return(f.positions[d]%c.a==c.b)},index:function(a){var b=this,c=0;while((b=b.previousSibling)){if(b.nodeType==1&&++c>a){return false}}return(c==a)},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a)},odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a)},selected:function(){return this.selected},enabled:function(){return(this.disabled===false)}});var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object},initialize:function(m,n){this.instance="Swiff_"+$time();this.setOptions(n);n=this.options;var b=this.id=n.id||this.instance;var a=document.id(n.container);Swiff.CallBacks[this.instance]={};var f=n.params,h=n.vars,g=n.callBacks;var i=$extend({height:n.height,width:n.width},n.properties);var l=this;for(var d in g){Swiff.CallBacks[this.instance][d]=(function(o){return function(){return o.apply(l.object,arguments)}})(g[d]);h[d]="Swiff.CallBacks."+this.instance+"."+d}f.flashVars=Hash.toQueryString(h);if(Browser.Engine.trident){i.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";f.movie=m}else{i.type="application/x-shockwave-flash";i.data=m}var k='<object id="'+b+'"';for(var j in i){k+=" "+j+'="'+i[j]+'"'}k+=">";for(var c in f){if(f[c]){k+='<param name="'+c+'" value="'+f[c]+'" />'}}k+="</object>";this.object=((a)?a.empty():new Element("div")).set("html",k).firstChild},replaces:function(a){a=document.id(a,true);a.parentNode.replaceChild(this.toElement(),a);return this},inject:function(a){document.id(a,true).appendChild(this.toElement());return this},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments))}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");return eval(rs)};/*!
+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.
+*/
+MooTools.More={version:"1.2.5.1",build:"254884f2b83651bf95260eed5c6cceb838e22d8e"};Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical",wrapper:false,hideOverflow:true,resetHeight:false},initialize:function(b,a){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);if(this.open&&this.options.resetHeight){this.wrapper.setStyle("height","")}if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper)}},true);this.element=this.subject=document.id(b);this.parent(a);var d=this.element.retrieve("wrapper");var c=this.element.getStyles("margin","position","overflow");if(this.options.hideOverflow){c=$extend(c,{overflow:"hidden"})}if(this.options.wrapper){d=document.id(this.options.wrapper).setStyles(c)}this.wrapper=d||new Element("div",{styles:c}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);this.now=[];this.open=true},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight},horizontal:function(){this.margin="margin-left";this.layout="width";this.offset=this.element.offsetWidth},set:function(a){this.element.setStyle(this.margin,a[0]);this.wrapper.setStyle(this.layout,a[1]);return this},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a)})},start:function(b,e){if(!this.check(b,e)){return this}this[e||this.options.mode]();var d=this.element.getStyle(this.margin).toInt();var c=this.wrapper.getStyle(this.layout).toInt();var a=[[d,c],[0,this.offset]];var g=[[d,c],[-this.offset,0]];var f;switch(b){case"in":f=a;break;case"out":f=g;break;case"toggle":f=(c==0)?a:g}return this.parent(f[0],f[1])},slideIn:function(a){return this.start("in",a)},slideOut:function(a){return this.start("out",a)},hide:function(a){this[a||this.options.mode]();this.open=false;return this.set([-this.offset,0])},show:function(a){this[a||this.options.mode]();this.open=true;return this.set([0,this.offset])},toggle:function(a){return this.start("toggle",a)}});Element.Properties.slide={set:function(b){var a=this.retrieve("slide");if(a){a.cancel()}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},b))},get:function(a){if(a||!this.retrieve("slide")){if(a||!this.retrieve("slide:options")){this.set("slide",a)}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")))}return this.retrieve("slide")}};Element.implement({slide:function(d,e){d=d||"toggle";var b=this.get("slide"),a;switch(d){case"hide":b.hide(e);break;case"show":b.show(e);break;case"toggle":var c=this.retrieve("slide:flag",b.open);b[c?"slideOut":"slideIn"](e);this.store("slide:flag",!c);a=true;break;default:b.start(d,e)}if(!a){this.eliminate("slide:flag")}return this}});/*!
+   JavaScript for the W3C Markup Validation Service.
+
+   Copyright 2007-2010 W3C (MIT, INRIA, Keio). All Rights Reserved.
+   See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
+*/
+var W3C={start:function(){W3C.Legends=$$("legend.toggletext");W3C.LegendImage=$$(".toggleicon");W3C.Options=$$("div.options");W3C.TabSet=$("tabset_tabs");W3C.Tabs=W3C.TabSet.getElements("li");W3C.TabLinks=W3C.TabSet.getElements("a");W3C.Sections=$$("fieldset.tabset_content");W3C.Submits=$$("input[type=submit]");W3C.Forms=$$("form");W3C.Submits.each(function(e,a){var d=e.value;e.setStyle("display","none");var c=new Element("a",{"class":"submit",href:"#"});var b=new Element("span").set("text",d).inject(c);c.injectAfter(e).addEvent("click",function(f){new Event(f).stop();W3C.Forms[a].submit()})});W3C.SectionFx=[];W3C.OptionsFx=[];W3C.Options.each(function(b,a){W3C.OptionsFx[a]=new Fx.Slide(b,{wait:false,duration:180});W3C.OptionsFx[a].addEvent("onComplete",function(){if(this.element.getStyle("margin-top").toInt()==0){this.wrapper.setStyle("height","auto")}else{this.element.setStyle("display","none")}})});W3C.Legends.each(function(e,c){var a=W3C.Sections[c].id.replace(/-/g,"_");var b="+with_options";var d=W3C.Options[c];var f=e.getFirst();f.addEvent("click",function(g){d.setStyle("display","block");var h=(d.getStyle("margin-top").toInt()==0);W3C.setHash((h)?a:a+b);new Event(g).stop();W3C.refreshOptionLinks(!h,c)})});W3C.Tabs.each(function(a,b){var c=a.getFirst();c.href=c.original="#"+c.href.split("#")[1].replace(/-/g,"_");a.addEvent("click",function(){W3C.updateLocation();W3C.displaySection(b)})});W3C.updateLocation();W3C.refreshOptionLinks(W3C.WithOptions);W3C.Sections.each(function(c,b){var a=c.id.replace(/-/g,"_");W3C.SectionFx[b]=new Fx.Tween(c,{property:"opacity",link:"cancel",duration:220});c.setStyle("display","none");if(W3C.Location[0]&&a.contains(W3C.Location[0].replace(/-/g,"_"))){W3C.displaySection(b,true);W3C.Located=true}});if(!W3C.Located){W3C.displaySection(0,true)}if(window.ie){$$("legend").setStyle("margin-left","-0.4em")}},updateLocation:function(){W3C.Location=window.location.hash.replace("#","").split("+");W3C.WithOptions=(W3C.Location[1]&&W3C.Location[1].contains("with_options"))},refreshOptionLinks:function(b,a){if(!b){W3C.LegendImage.each(function(d,c){d.setProperties({src:"./images/arrow-closed.png",alt:"Show "});d.removeClass("toggled")});if($chk(a)){W3C.OptionsFx[a].slideOut()}W3C.Legends.removeClass("toggled")}else{W3C.LegendImage.each(function(d,c){d.setProperties({src:"./images/arrow-open.png",alt:"Hide "});d.addClass("toggled");if($chk(a)){W3C.OptionsFx[a].slideIn()}W3C.Legends.addClass("toggled");W3C.Legends.each(function(g,f){var h=g.getFirst();var e=h.getProperty("href").replace("+with_options","");h.setProperty("href",e)})})}W3C.TabLinks.each(function(c){c.href=(b)?c.original+"+with_options":c.original})},displaySection:function(b,a){W3C.Sections.each(function(d,c){var e=d.getStyle("display")=="block";if(c==b){if(e){return}W3C.Sections[c].setStyles({opacity:a?1:0,display:"block"});if(!a){W3C.SectionFx[c].start(1)}if(W3C.WithOptions){W3C.OptionsFx[c].show().fireEvent("onComplete")}else{W3C.OptionsFx[c].hide()}}else{if(!e){return}W3C.Sections[c].setStyles({display:"none",opacity:0})}});W3C.Tabs.each(function(d,c){if(c==b){d.addClass("selected")}else{d.removeClass("selected")}})},setHash:function(a){if(window.webkit419){W3C.FakeForm=W3C.FakeForm||new Element("form",{method:"get"}).injectInside(document.body);W3C.FakeForm.setProperty("action","#"+a).submit()}else{window.location.hash=a}}};window.addEvent("domready",W3C.start);

Added: packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/scripts/combined.js.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5-core-nc.js
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5-core-nc.js?rev=1839&op=file
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5-core-nc.js (added)
+++ packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5-core-nc.js Mon Mar 14 10:47:03 2011
@@ -1,0 +1,4288 @@
+/*!
+---
+
+name: Core
+
+description: The core of MooTools, contains all the base functions and the Native and Hash implementations. Required by all the other scripts.
+
+license: MIT-style license.
+
+copyright: Copyright (c) 2006-2008 [Valerio Proietti](http://mad4milk.net/).
+
+authors: The MooTools production team (http://mootools.net/developers/)
+
+inspiration:
+  - 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)
+  - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
+
+provides: [MooTools, Native, Hash.base, Array.each, $util]
+
+...
+*/
+
+var MooTools = {
+	'version': '1.2.5',
+	'build': '008d8f0f2fcc2044e54fdd3635341aaab274e757'
+};
+
+var Native = function(options){
+	options = options || {};
+	var name = options.name;
+	var legacy = options.legacy;
+	var protect = options.protect;
+	var methods = options.implement;
+	var generics = options.generics;
+	var initialize = options.initialize;
+	var afterImplement = options.afterImplement || function(){};
+	var object = initialize || legacy;
+	generics = generics !== false;
+
+	object.constructor = Native;
+	object.$family = {name: 'native'};
+	if (legacy && initialize) object.prototype = legacy.prototype;
+	object.prototype.constructor = object;
+
+	if (name){
+		var family = name.toLowerCase();
+		object.prototype.$family = {name: family};
+		Native.typize(object, family);
+	}
+
+	var add = function(obj, name, method, force){
+		if (!protect || force || !obj.prototype[name]) obj.prototype[name] = method;
+		if (generics) Native.genericize(obj, name, protect);
+		afterImplement.call(obj, name, method);
+		return obj;
+	};
+
+	object.alias = function(a1, a2, a3){
+		if (typeof a1 == 'string'){
+			var pa1 = this.prototype[a1];
+			if ((a1 = pa1)) return add(this, a2, a1, a3);
+		}
+		for (var a in a1) this.alias(a, a1[a], a2);
+		return this;
+	};
+
+	object.implement = function(a1, a2, a3){
+		if (typeof a1 == 'string') return add(this, a1, a2, a3);
+		for (var p in a1) add(this, p, a1[p], a2);
+		return this;
+	};
+
+	if (methods) object.implement(methods);
+
+	return object;
+};
+
+Native.genericize = function(object, property, check){
+	if ((!check || !object[property]) && typeof object.prototype[property] == 'function') object[property] = function(){
+		var args = Array.prototype.slice.call(arguments);
+		return object.prototype[property].apply(args.shift(), args);
+	};
+};
+
+Native.implement = function(objects, properties){
+	for (var i = 0, l = objects.length; i < l; i++) objects[i].implement(properties);
+};
+
+Native.typize = function(object, family){
+	if (!object.type) object.type = function(item){
+		return ($type(item) === family);
+	};
+};
+
+(function(){
+	var natives = {'Array': Array, 'Date': Date, 'Function': Function, 'Number': Number, 'RegExp': RegExp, 'String': String};
+	for (var n in natives) new Native({name: n, initialize: natives[n], protect: true});
+
+	var types = {'boolean': Boolean, 'native': Native, 'object': Object};
+	for (var t in types) Native.typize(types[t], t);
+
+	var generics = {
+		'Array': ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"],
+		'String': ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"]
+	};
+	for (var g in generics){
+		for (var i = generics[g].length; i--;) Native.genericize(natives[g], generics[g][i], true);
+	}
+})();
+
+var Hash = new Native({
+
+	name: 'Hash',
+
+	initialize: function(object){
+		if ($type(object) == 'hash') object = $unlink(object.getClean());
+		for (var key in object) this[key] = object[key];
+		return this;
+	}
+
+});
+
+Hash.implement({
+
+	forEach: function(fn, bind){
+		for (var key in this){
+			if (this.hasOwnProperty(key)) fn.call(bind, this[key], key, this);
+		}
+	},
+
+	getClean: function(){
+		var clean = {};
+		for (var key in this){
+			if (this.hasOwnProperty(key)) clean[key] = this[key];
+		}
+		return clean;
+	},
+
+	getLength: function(){
+		var length = 0;
+		for (var key in this){
+			if (this.hasOwnProperty(key)) length++;
+		}
+		return length;
+	}
+
+});
+
+Hash.alias('forEach', 'each');
+
+Array.implement({
+
+	forEach: function(fn, bind){
+		for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this);
+	}
+
+});
+
+Array.alias('forEach', 'each');
+
+function $A(iterable){
+	if (iterable.item){
+		var l = iterable.length, array = new Array(l);
+		while (l--) array[l] = iterable[l];
+		return array;
+	}
+	return Array.prototype.slice.call(iterable);
+};
+
+function $arguments(i){
+	return function(){
+		return arguments[i];
+	};
+};
+
+function $chk(obj){
+	return !!(obj || obj === 0);
+};
+
+function $clear(timer){
+	clearTimeout(timer);
+	clearInterval(timer);
+	return null;
+};
+
+function $defined(obj){
+	return (obj != undefined);
+};
+
+function $each(iterable, fn, bind){
+	var type = $type(iterable);
+	((type == 'arguments' || type == 'collection' || type == 'array') ? Array : Hash).each(iterable, fn, bind);
+};
+
+function $empty(){};
+
+function $extend(original, extended){
+	for (var key in (extended || {})) original[key] = extended[key];
+	return original;
+};
+
+function $H(object){
+	return new Hash(object);
+};
+
+function $lambda(value){
+	return ($type(value) == 'function') ? value : function(){
+		return value;
+	};
+};
+
+function $merge(){
+	var args = Array.slice(arguments);
+	args.unshift({});
+	return $mixin.apply(null, args);
+};
+
+function $mixin(mix){
+	for (var i = 1, l = arguments.length; i < l; i++){
+		var object = arguments[i];
+		if ($type(object) != 'object') continue;
+		for (var key in object){
+			var op = object[key], mp = mix[key];
+			mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $mixin(mp, op) : $unlink(op);
+		}
+	}
+	return mix;
+};
+
+function $pick(){
+	for (var i = 0, l = arguments.length; i < l; i++){
+		if (arguments[i] != undefined) return arguments[i];
+	}
+	return null;
+};
+
+function $random(min, max){
+	return Math.floor(Math.random() * (max - min + 1) + min);
+};
+
+function $splat(obj){
+	var type = $type(obj);
+	return (type) ? ((type != 'array' && type != 'arguments') ? [obj] : obj) : [];
+};
+
+var $time = Date.now || function(){
+	return +new Date;
+};
+
+function $try(){
+	for (var i = 0, l = arguments.length; i < l; i++){
+		try {
+			return arguments[i]();
+		} catch(e){}
+	}
+	return null;
+};
+
+function $type(obj){
+	if (obj == undefined) return false;
+	if (obj.$family) return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name;
+	if (obj.nodeName){
+		switch (obj.nodeType){
+			case 1: return 'element';
+			case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
+		}
+	} else if (typeof obj.length == 'number'){
+		if (obj.callee) return 'arguments';
+		else if (obj.item) return 'collection';
+	}
+	return typeof obj;
+};
+
+function $unlink(object){
+	var unlinked;
+	switch ($type(object)){
+		case 'object':
+			unlinked = {};
+			for (var p in object) unlinked[p] = $unlink(object[p]);
+		break;
+		case 'hash':
+			unlinked = new Hash(object);
+		break;
+		case 'array':
+			unlinked = [];
+			for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
+		break;
+		default: return object;
+	}
+	return unlinked;
+};
+
+
+/*
+---
+
+name: Array
+
+description: Contains Array Prototypes like each, contains, and erase.
+
+license: MIT-style license.
+
+requires: [$util, Array.each]
+
+provides: Array
+
+...
+*/
+
+Array.implement({
+
+	every: function(fn, bind){
+		for (var i = 0, l = this.length; i < l; i++){
+			if (!fn.call(bind, this[i], i, this)) return false;
+		}
+		return true;
+	},
+
+	filter: function(fn, bind){
+		var results = [];
+		for (var i = 0, l = this.length; i < l; i++){
+			if (fn.call(bind, this[i], i, this)) results.push(this[i]);
+		}
+		return results;
+	},
+
+	clean: function(){
+		return this.filter($defined);
+	},
+
+	indexOf: function(item, from){
+		var len = this.length;
+		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
+			if (this[i] === item) return i;
+		}
+		return -1;
+	},
+
+	map: function(fn, bind){
+		var results = [];
+		for (var i = 0, l = this.length; i < l; i++) results[i] = fn.call(bind, this[i], i, this);
+		return results;
+	},
+
+	some: function(fn, bind){
+		for (var i = 0, l = this.length; i < l; i++){
+			if (fn.call(bind, this[i], i, this)) return true;
+		}
+		return false;
+	},
+
+	associate: function(keys){
+		var obj = {}, length = Math.min(this.length, keys.length);
+		for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
+		return obj;
+	},
+
+	link: function(object){
+		var result = {};
+		for (var i = 0, l = this.length; i < l; i++){
+			for (var key in object){
+				if (object[key](this[i])){
+					result[key] = this[i];
+					delete object[key];
+					break;
+				}
+			}
+		}
+		return result;
+	},
+
+	contains: function(item, from){
+		return this.indexOf(item, from) != -1;
+	},
+
+	extend: function(array){
+		for (var i = 0, j = array.length; i < j; i++) this.push(array[i]);
+		return this;
+	},
+	
+	getLast: function(){
+		return (this.length) ? this[this.length - 1] : null;
+	},
+
+	getRandom: function(){
+		return (this.length) ? this[$random(0, this.length - 1)] : null;
+	},
+
+	include: function(item){
+		if (!this.contains(item)) this.push(item);
+		return this;
+	},
+
+	combine: function(array){
+		for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
+		return this;
+	},
+
+	erase: function(item){
+		for (var i = this.length; i--; i){
+			if (this[i] === item) this.splice(i, 1);
+		}
+		return this;
+	},
+
+	empty: function(){
+		this.length = 0;
+		return this;
+	},
+
+	flatten: function(){
+		var array = [];
+		for (var i = 0, l = this.length; i < l; i++){
+			var type = $type(this[i]);
+			if (!type) continue;
+			array = array.concat((type == 'array' || type == 'collection' || type == 'arguments') ? Array.flatten(this[i]) : this[i]);
+		}
+		return array;
+	},
+
+	hexToRgb: function(array){
+		if (this.length != 3) return null;
+		var rgb = this.map(function(value){
+			if (value.length == 1) value += value;
+			return value.toInt(16);
+		});
+		return (array) ? rgb : 'rgb(' + rgb + ')';
+	},
+
+	rgbToHex: function(array){
+		if (this.length < 3) return null;
+		if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
+		var hex = [];
+		for (var i = 0; i < 3; i++){
+			var bit = (this[i] - 0).toString(16);
+			hex.push((bit.length == 1) ? '0' + bit : bit);
+		}
+		return (array) ? hex : '#' + hex.join('');
+	}
+
+});
+
+
+/*
+---
+
+name: String
+
+description: Contains String Prototypes like camelCase, capitalize, test, and toInt.
+
+license: MIT-style license.
+
+requires: Native
+
+provides: String
+
+...
+*/
+
+String.implement({
+
+	test: function(regex, params){
+		return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this);
+	},
+
+	contains: function(string, separator){
+		return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
+	},
+
+	trim: function(){
+		return this.replace(/^\s+|\s+$/g, '');
+	},
+
+	clean: function(){
+		return this.replace(/\s+/g, ' ').trim();
+	},
+
+	camelCase: function(){
+		return this.replace(/-\D/g, function(match){
+			return match.charAt(1).toUpperCase();
+		});
+	},
+
+	hyphenate: function(){
+		return this.replace(/[A-Z]/g, function(match){
+			return ('-' + match.charAt(0).toLowerCase());
+		});
+	},
+
+	capitalize: function(){
+		return this.replace(/\b[a-z]/g, function(match){
+			return match.toUpperCase();
+		});
+	},
+
+	escapeRegExp: function(){
+		return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
+	},
+
+	toInt: function(base){
+		return parseInt(this, base || 10);
+	},
+
+	toFloat: function(){
+		return parseFloat(this);
+	},
+
+	hexToRgb: function(array){
+		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
+		return (hex) ? hex.slice(1).hexToRgb(array) : null;
+	},
+
+	rgbToHex: function(array){
+		var rgb = this.match(/\d{1,3}/g);
+		return (rgb) ? rgb.rgbToHex(array) : null;
+	},
+
+	stripScripts: function(option){
+		var scripts = '';
+		var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
+			scripts += arguments[1] + '\n';
+			return '';
+		});
+		if (option === true) $exec(scripts);
+		else if ($type(option) == 'function') option(scripts, text);
+		return text;
+	},
+
+	substitute: function(object, regexp){
+		return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
+			if (match.charAt(0) == '\\') return match.slice(1);
+			return (object[name] != undefined) ? object[name] : '';
+		});
+	}
+
+});
+
+
+/*
+---
+
+name: Function
+
+description: Contains Function Prototypes like create, bind, pass, and delay.
+
+license: MIT-style license.
+
+requires: [Native, $util]
+
+provides: Function
+
+...
+*/
+
+try {
+	delete Function.prototype.bind;
+} catch(e){}
+
+Function.implement({
+
+	extend: function(properties){
+		for (var property in properties) this[property] = properties[property];
+		return this;
+	},
+
+	create: function(options){
+		var self = this;
+		options = options || {};
+		return function(event){
+			var args = options.arguments;
+			args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0);
+			if (options.event) args = [event || window.event].extend(args);
+			var returns = function(){
+				return self.apply(options.bind || null, args);
+			};
+			if (options.delay) return setTimeout(returns, options.delay);
+			if (options.periodical) return setInterval(returns, options.periodical);
+			if (options.attempt) return $try(returns);
+			return returns();
+		};
+	},
+
+	run: function(args, bind){
+		return this.apply(bind, $splat(args));
+	},
+
+	pass: function(args, bind){
+		return this.create({bind: bind, arguments: args});
+	},
+
+	bind: function(bind, args){
+		return this.create({bind: bind, arguments: args});
+	},
+
+	bindWithEvent: function(bind, args){
+		return this.create({bind: bind, arguments: args, event: true});
+	},
+
+	attempt: function(args, bind){
+		return this.create({bind: bind, arguments: args, attempt: true})();
+	},
+
+	delay: function(delay, bind, args){
+		return this.create({bind: bind, arguments: args, delay: delay})();
+	},
+
+	periodical: function(periodical, bind, args){
+		return this.create({bind: bind, arguments: args, periodical: periodical})();
+	}
+
+});
+
+
+/*
+---
+
+name: Number
+
+description: Contains Number Prototypes like limit, round, times, and ceil.
+
+license: MIT-style license.
+
+requires: [Native, $util]
+
+provides: Number
+
+...
+*/
+
+Number.implement({
+
+	limit: function(min, max){
+		return Math.min(max, Math.max(min, this));
+	},
+
+	round: function(precision){
+		precision = Math.pow(10, precision || 0);
+		return Math.round(this * precision) / precision;
+	},
+
+	times: function(fn, bind){
+		for (var i = 0; i < this; i++) fn.call(bind, i, this);
+	},
+
+	toFloat: function(){
+		return parseFloat(this);
+	},
+
+	toInt: function(base){
+		return parseInt(this, base || 10);
+	}
+
+});
+
+Number.alias('times', 'each');
+
+(function(math){
+	var methods = {};
+	math.each(function(name){
+		if (!Number[name]) methods[name] = function(){
+			return Math[name].apply(null, [this].concat($A(arguments)));
+		};
+	});
+	Number.implement(methods);
+})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);
+
+
+/*
+---
+
+name: Hash
+
+description: Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects.
+
+license: MIT-style license.
+
+requires: Hash.base
+
+provides: Hash
+
+...
+*/
+
+Hash.implement({
+
+	has: Object.prototype.hasOwnProperty,
+
+	keyOf: function(value){
+		for (var key in this){
+			if (this.hasOwnProperty(key) && this[key] === value) return key;
+		}
+		return null;
+	},
+
+	hasValue: function(value){
+		return (Hash.keyOf(this, value) !== null);
+	},
+
+	extend: function(properties){
+		Hash.each(properties || {}, function(value, key){
+			Hash.set(this, key, value);
+		}, this);
+		return this;
+	},
+
+	combine: function(properties){
+		Hash.each(properties || {}, function(value, key){
+			Hash.include(this, key, value);
+		}, this);
+		return this;
+	},
+
+	erase: function(key){
+		if (this.hasOwnProperty(key)) delete this[key];
+		return this;
+	},
+
+	get: function(key){
+		return (this.hasOwnProperty(key)) ? this[key] : null;
+	},
+
+	set: function(key, value){
+		if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
+		return this;
+	},
+
+	empty: function(){
+		Hash.each(this, function(value, key){
+			delete this[key];
+		}, this);
+		return this;
+	},
+
+	include: function(key, value){
+		if (this[key] == undefined) this[key] = value;
+		return this;
+	},
+
+	map: function(fn, bind){
+		var results = new Hash;
+		Hash.each(this, function(value, key){
+			results.set(key, fn.call(bind, value, key, this));
+		}, this);
+		return results;
+	},
+
+	filter: function(fn, bind){
+		var results = new Hash;
+		Hash.each(this, function(value, key){
+			if (fn.call(bind, value, key, this)) results.set(key, value);
+		}, this);
+		return results;
+	},
+
+	every: function(fn, bind){
+		for (var key in this){
+			if (this.hasOwnProperty(key) && !fn.call(bind, this[key], key)) return false;
+		}
+		return true;
+	},
+
+	some: function(fn, bind){
+		for (var key in this){
+			if (this.hasOwnProperty(key) && fn.call(bind, this[key], key)) return true;
+		}
+		return false;
+	},
+
+	getKeys: function(){
+		var keys = [];
+		Hash.each(this, function(value, key){
+			keys.push(key);
+		});
+		return keys;
+	},
+
+	getValues: function(){
+		var values = [];
+		Hash.each(this, function(value){
+			values.push(value);
+		});
+		return values;
+	},
+
+	toQueryString: function(base){
+		var queryString = [];
+		Hash.each(this, function(value, key){
+			if (base) key = base + '[' + key + ']';
+			var result;
+			switch ($type(value)){
+				case 'object': result = Hash.toQueryString(value, key); break;
+				case 'array':
+					var qs = {};
+					value.each(function(val, i){
+						qs[i] = val;
+					});
+					result = Hash.toQueryString(qs, key);
+				break;
+				default: result = key + '=' + encodeURIComponent(value);
+			}
+			if (value != undefined) queryString.push(result);
+		});
+
+		return queryString.join('&');
+	}
+
+});
+
+Hash.alias({keyOf: 'indexOf', hasValue: 'contains'});
+
+
+/*
+---
+
+name: Class
+
+description: Contains the Class Function for easily creating, extending, and implementing reusable Classes.
+
+license: MIT-style license.
+
+requires: [$util, Native, Array, String, Function, Number, Hash]
+
+provides: Class
+
+...
+*/
+
+function Class(params){
+	
+	if (params instanceof Function) params = {initialize: params};
+	
+	var newClass = function(){
+		Object.reset(this);
+		if (newClass._prototyping) return this;
+		this._current = $empty;
+		var value = (this.initialize) ? this.initialize.apply(this, arguments) : this;
+		delete this._current; delete this.caller;
+		return value;
+	}.extend(this);
+	
+	newClass.implement(params);
+	
+	newClass.constructor = Class;
+	newClass.prototype.constructor = newClass;
+
+	return newClass;
+
+};
+
+Function.prototype.protect = function(){
+	this._protected = true;
+	return this;
+};
+
+Object.reset = function(object, key){
+		
+	if (key == null){
+		for (var p in object) Object.reset(object, p);
+		return object;
+	}
+	
+	delete object[key];
+	
+	switch ($type(object[key])){
+		case 'object':
+			var F = function(){};
+			F.prototype = object[key];
+			var i = new F;
+			object[key] = Object.reset(i);
+		break;
+		case 'array': object[key] = $unlink(object[key]); break;
+	}
+	
+	return object;
+	
+};
+
+new Native({name: 'Class', initialize: Class}).extend({
+
+	instantiate: function(F){
+		F._prototyping = true;
+		var proto = new F;
+		delete F._prototyping;
+		return proto;
+	},
+	
+	wrap: function(self, key, method){
+		if (method._origin) method = method._origin;
+		
+		return function(){
+			if (method._protected && this._current == null) throw new Error('The method "' + key + '" cannot be called.');
+			var caller = this.caller, current = this._current;
+			this.caller = current; this._current = arguments.callee;
+			var result = method.apply(this, arguments);
+			this._current = current; this.caller = caller;
+			return result;
+		}.extend({_owner: self, _origin: method, _name: key});
+
+	}
+	
+});
+
+Class.implement({
+	
+	implement: function(key, value){
+		
+		if ($type(key) == 'object'){
+			for (var p in key) this.implement(p, key[p]);
+			return this;
+		}
+		
+		var mutator = Class.Mutators[key];
+		
+		if (mutator){
+			value = mutator.call(this, value);
+			if (value == null) return this;
+		}
+		
+		var proto = this.prototype;
+
+		switch ($type(value)){
+			
+			case 'function':
+				if (value._hidden) return this;
+				proto[key] = Class.wrap(this, key, value);
+			break;
+			
+			case 'object':
+				var previous = proto[key];
+				if ($type(previous) == 'object') $mixin(previous, value);
+				else proto[key] = $unlink(value);
+			break;
+			
+			case 'array':
+				proto[key] = $unlink(value);
+			break;
+			
+			default: proto[key] = value;
+
+		}
+		
+		return this;
+
+	}
+	
+});
+
+Class.Mutators = {
+	
+	Extends: function(parent){
+
+		this.parent = parent;
+		this.prototype = Class.instantiate(parent);
+
+		this.implement('parent', function(){
+			var name = this.caller._name, previous = this.caller._owner.parent.prototype[name];
+			if (!previous) throw new Error('The method "' + name + '" has no parent.');
+			return previous.apply(this, arguments);
+		}.protect());
+
+	},
+
+	Implements: function(items){
+		$splat(items).each(function(item){
+			if (item instanceof Function) item = Class.instantiate(item);
+			this.implement(item);
+		}, this);
+
+	}
+	
+};
+
+
+/*
+---
+
+name: Class.Extras
+
+description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.
+
+license: MIT-style license.
+
+requires: Class
+
+provides: [Chain, Events, Options, Class.Extras]
+
+...
+*/
+
+var Chain = new Class({
+
+	$chain: [],
+
+	chain: function(){
+		this.$chain.extend(Array.flatten(arguments));
+		return this;
+	},
+
+	callChain: function(){
+		return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
+	},
+
+	clearChain: function(){
+		this.$chain.empty();
+		return this;
+	}
+
+});
+
+var Events = new Class({
+
+	$events: {},
+
+	addEvent: function(type, fn, internal){
+		type = Events.removeOn(type);
+		if (fn != $empty){
+			this.$events[type] = this.$events[type] || [];
+			this.$events[type].include(fn);
+			if (internal) fn.internal = true;
+		}
+		return this;
+	},
+
+	addEvents: function(events){
+		for (var type in events) this.addEvent(type, events[type]);
+		return this;
+	},
+
+	fireEvent: function(type, args, delay){
+		type = Events.removeOn(type);
+		if (!this.$events || !this.$events[type]) return this;
+		this.$events[type].each(function(fn){
+			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
+		}, this);
+		return this;
+	},
+
+	removeEvent: function(type, fn){
+		type = Events.removeOn(type);
+		if (!this.$events[type]) return this;
+		if (!fn.internal) this.$events[type].erase(fn);
+		return this;
+	},
+
+	removeEvents: function(events){
+		var type;
+		if ($type(events) == 'object'){
+			for (type in events) this.removeEvent(type, events[type]);
+			return this;
+		}
+		if (events) events = Events.removeOn(events);
+		for (type in this.$events){
+			if (events && events != type) continue;
+			var fns = this.$events[type];
+			for (var i = fns.length; i--; i) this.removeEvent(type, fns[i]);
+		}
+		return this;
+	}
+
+});
+
+Events.removeOn = function(string){
+	return string.replace(/^on([A-Z])/, function(full, first){
+		return first.toLowerCase();
+	});
+};
+
+var Options = new Class({
+
+	setOptions: function(){
+		this.options = $merge.run([this.options].extend(arguments));
+		if (!this.addEvent) return this;
+		for (var option in this.options){
+			if ($type(this.options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
+			this.addEvent(option, this.options[option]);
+			delete this.options[option];
+		}
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+name: Browser
+
+description: The Browser Core. Contains Browser initialization, Window and Document, and the Browser Hash.
+
+license: MIT-style license.
+
+requires: [Native, $util]
+
+provides: [Browser, Window, Document, $exec]
+
+...
+*/
+
+var Browser = $merge({
+
+	Engine: {name: 'unknown', version: 0},
+
+	Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},
+
+	Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},
+
+	Plugins: {},
+
+	Engines: {
+
+		presto: function(){
+			return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
+		},
+
+		trident: function(){
+			return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4);
+		},
+
+		webkit: function(){
+			return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
+		},
+
+		gecko: function(){
+			return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18);
+		}
+
+	}
+
+}, Browser || {});
+
+Browser.Platform[Browser.Platform.name] = true;
+
+Browser.detect = function(){
+
+	for (var engine in this.Engines){
+		var version = this.Engines[engine]();
+		if (version){
+			this.Engine = {name: engine, version: version};
+			this.Engine[engine] = this.Engine[engine + version] = true;
+			break;
+		}
+	}
+
+	return {name: engine, version: version};
+
+};
+
+Browser.detect();
+
+Browser.Request = function(){
+	return $try(function(){
+		return new XMLHttpRequest();
+	}, function(){
+		return new ActiveXObject('MSXML2.XMLHTTP');
+	}, function(){
+		return new ActiveXObject('Microsoft.XMLHTTP');
+	});
+};
+
+Browser.Features.xhr = !!(Browser.Request());
+
+Browser.Plugins.Flash = (function(){
+	var version = ($try(function(){
+		return navigator.plugins['Shockwave Flash'].description;
+	}, function(){
+		return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
+	}) || '0 r0').match(/\d+/g);
+	return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0};
+})();
+
+function $exec(text){
+	if (!text) return text;
+	if (window.execScript){
+		window.execScript(text);
+	} else {
+		var script = document.createElement('script');
+		script.setAttribute('type', 'text/javascript');
+		script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
+		document.head.appendChild(script);
+		document.head.removeChild(script);
+	}
+	return text;
+};
+
+Native.UID = 1;
+
+var $uid = (Browser.Engine.trident) ? function(item){
+	return (item.uid || (item.uid = [Native.UID++]))[0];
+} : function(item){
+	return item.uid || (item.uid = Native.UID++);
+};
+
+var Window = new Native({
+
+	name: 'Window',
+
+	legacy: (Browser.Engine.trident) ? null: window.Window,
+
+	initialize: function(win){
+		$uid(win);
+		if (!win.Element){
+			win.Element = $empty;
+			if (Browser.Engine.webkit) win.document.createElement("iframe"); //fixes safari 2
+			win.Element.prototype = (Browser.Engine.webkit) ? window["[[DOMElement.prototype]]"] : {};
+		}
+		win.document.window = win;
+		return $extend(win, Window.Prototype);
+	},
+
+	afterImplement: function(property, value){
+		window[property] = Window.Prototype[property] = value;
+	}
+
+});
+
+Window.Prototype = {$family: {name: 'window'}};
+
+new Window(window);
+
+var Document = new Native({
+
+	name: 'Document',
+
+	legacy: (Browser.Engine.trident) ? null: window.Document,
+
+	initialize: function(doc){
+		$uid(doc);
+		doc.head = doc.getElementsByTagName('head')[0];
+		doc.html = doc.getElementsByTagName('html')[0];
+		if (Browser.Engine.trident && Browser.Engine.version <= 4) $try(function(){
+			doc.execCommand("BackgroundImageCache", false, true);
+		});
+		if (Browser.Engine.trident) doc.window.attachEvent('onunload', function(){
+			doc.window.detachEvent('onunload', arguments.callee);
+			doc.head = doc.html = doc.window = null;
+		});
+		return $extend(doc, Document.Prototype);
+	},
+
+	afterImplement: function(property, value){
+		document[property] = Document.Prototype[property] = value;
+	}
+
+});
+
+Document.Prototype = {$family: {name: 'document'}};
+
+new Document(document);
+
+
+/*
+---
+
+name: Element
+
+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.
+
+license: MIT-style license.
+
+requires: [Window, Document, Array, String, Function, Number, Hash]
+
+provides: [Element, Elements, $, $$, Iframe]
+
+...
+*/
+
+var Element = new Native({
+
+	name: 'Element',
+
+	legacy: window.Element,
+
+	initialize: function(tag, props){
+		var konstructor = Element.Constructors.get(tag);
+		if (konstructor) return konstructor(props);
+		if (typeof tag == 'string') return document.newElement(tag, props);
+		return document.id(tag).set(props);
+	},
+
+	afterImplement: function(key, value){
+		Element.Prototype[key] = value;
+		if (Array[key]) return;
+		Elements.implement(key, function(){
+			var items = [], elements = true;
+			for (var i = 0, j = this.length; i < j; i++){
+				var returns = this[i][key].apply(this[i], arguments);
+				items.push(returns);
+				if (elements) elements = ($type(returns) == 'element');
+			}
+			return (elements) ? new Elements(items) : items;
+		});
+	}
+
+});
+
+Element.Prototype = {$family: {name: 'element'}};
+
+Element.Constructors = new Hash;
+
+var IFrame = new Native({
+
+	name: 'IFrame',
+
+	generics: false,
+
+	initialize: function(){
+		var params = Array.link(arguments, {properties: Object.type, iframe: $defined});
+		var props = params.properties || {};
+		var iframe = document.id(params.iframe);
+		var onload = props.onload || $empty;
+		delete props.onload;
+		props.id = props.name = $pick(props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + $time());
+		iframe = new Element(iframe || 'iframe', props);
+		var onFrameLoad = function(){
+			var host = $try(function(){
+				return iframe.contentWindow.location.host;
+			});
+			if (!host || host == window.location.host){
+				var win = new Window(iframe.contentWindow);
+				new Document(iframe.contentWindow.document);
+				$extend(win.Element.prototype, Element.Prototype);
+			}
+			onload.call(iframe.contentWindow, iframe.contentWindow.document);
+		};
+		var contentWindow = $try(function(){
+			return iframe.contentWindow;
+		});
+		((contentWindow && contentWindow.document.body) || window.frames[props.id]) ? onFrameLoad() : iframe.addListener('load', onFrameLoad);
+		return iframe;
+	}
+
+});
+
+var Elements = new Native({
+
+	initialize: function(elements, options){
+		options = $extend({ddup: true, cash: true}, options);
+		elements = elements || [];
+		if (options.ddup || options.cash){
+			var uniques = {}, returned = [];
+			for (var i = 0, l = elements.length; i < l; i++){
+				var el = document.id(elements[i], !options.cash);
+				if (options.ddup){
+					if (uniques[el.uid]) continue;
+					uniques[el.uid] = true;
+				}
+				if (el) returned.push(el);
+			}
+			elements = returned;
+		}
+		return (options.cash) ? $extend(elements, this) : elements;
+	}
+
+});
+
+Elements.implement({
+
+	filter: function(filter, bind){
+		if (!filter) return this;
+		return new Elements(Array.filter(this, (typeof filter == 'string') ? function(item){
+			return item.match(filter);
+		} : filter, bind));
+	}
+
+});
+
+(function(){
+
+/*<ltIE8>*/
+var createElementAcceptsHTML;
+try {
+	var x = document.createElement('<input name=x>');
+	createElementAcceptsHTML = (x.name == 'x');
+} catch(e){}
+
+var escapeQuotes = function(html){
+	return ('' + html).replace(/&/g,'&amp;').replace(/"/g,'&quot;');
+};
+/*</ltIE8>*/
+
+Document.implement({
+
+	newElement: function(tag, props){
+		if (props && props.checked != null) props.defaultChecked = props.checked;
+		/*<ltIE8>*/// Fix for readonly name and type properties in IE < 8
+		if (createElementAcceptsHTML && props){
+			tag = '<' + tag;
+			if (props.name) tag += ' name="' + escapeQuotes(props.name) + '"';
+			if (props.type) tag += ' type="' + escapeQuotes(props.type) + '"';
+			tag += '>';
+			delete props.name;
+			delete props.type;
+		}
+		/*</ltIE8>*/
+		return this.id(this.createElement(tag)).set(props);
+	},
+
+	newTextNode: function(text){
+		return this.createTextNode(text);
+	},
+
+	getDocument: function(){
+		return this;
+	},
+
+	getWindow: function(){
+		return this.window;
+	},
+	
+	id: (function(){
+		
+		var types = {
+
+			string: function(id, nocash, doc){
+				id = doc.getElementById(id);
+				return (id) ? types.element(id, nocash) : null;
+			},
+			
+			element: function(el, nocash){
+				$uid(el);
+				if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){
+					var proto = Element.Prototype;
+					for (var p in proto) el[p] = proto[p];
+				};
+				return el;
+			},
+			
+			object: function(obj, nocash, doc){
+				if (obj.toElement) return types.element(obj.toElement(doc), nocash);
+				return null;
+			}
+			
+		};
+
+		types.textnode = types.whitespace = types.window = types.document = $arguments(0);
+		
+		return function(el, nocash, doc){
+			if (el && el.$family && el.uid) return el;
+			var type = $type(el);
+			return (types[type]) ? types[type](el, nocash, doc || document) : null;
+		};
+
+	})()
+
+});
+
+})();
+
+if (window.$ == null) Window.implement({
+	$: function(el, nc){
+		return document.id(el, nc, this.document);
+	}
+});
+
+Window.implement({
+
+	$$: function(selector){
+		if (arguments.length == 1 && typeof selector == 'string') return this.document.getElements(selector);
+		var elements = [];
+		var args = Array.flatten(arguments);
+		for (var i = 0, l = args.length; i < l; i++){
+			var item = args[i];
+			switch ($type(item)){
+				case 'element': elements.push(item); break;
+				case 'string': elements.extend(this.document.getElements(item, true));
+			}
+		}
+		return new Elements(elements);
+	},
+
+	getDocument: function(){
+		return this.document;
+	},
+
+	getWindow: function(){
+		return this;
+	}
+
+});
+
+Native.implement([Element, Document], {
+
+	getElement: function(selector, nocash){
+		return document.id(this.getElements(selector, true)[0] || null, nocash);
+	},
+
+	getElements: function(tags, nocash){
+		tags = tags.split(',');
+		var elements = [];
+		var ddup = (tags.length > 1);
+		tags.each(function(tag){
+			var partial = this.getElementsByTagName(tag.trim());
+			(ddup) ? elements.extend(partial) : elements = partial;
+		}, this);
+		return new Elements(elements, {ddup: ddup, cash: !nocash});
+	}
+
+});
+
+(function(){
+
+var collected = {}, storage = {};
+var props = {input: 'checked', option: 'selected', textarea: (Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerHTML' : 'value'};
+
+var get = function(uid){
+	return (storage[uid] || (storage[uid] = {}));
+};
+
+var clean = function(item, retain){
+	if (!item) return;
+	var uid = item.uid;
+	if (retain !== true) retain = false;
+	if (Browser.Engine.trident){
+		if (item.clearAttributes){
+			var clone = retain && item.cloneNode(false);
+			item.clearAttributes();
+			if (clone) item.mergeAttributes(clone);
+		} else if (item.removeEvents){
+			item.removeEvents();
+		}
+		if ((/object/i).test(item.tagName)){
+			for (var p in item){
+				if (typeof item[p] == 'function') item[p] = $empty;
+			}
+			Element.dispose(item);
+		}
+	}	
+	if (!uid) return;
+	collected[uid] = storage[uid] = null;
+};
+
+var purge = function(){
+	Hash.each(collected, clean);
+	if (Browser.Engine.trident) $A(document.getElementsByTagName('object')).each(clean);
+	if (window.CollectGarbage) CollectGarbage();
+	collected = storage = null;
+};
+
+var walk = function(element, walk, start, match, all, nocash){
+	var el = element[start || walk];
+	var elements = [];
+	while (el){
+		if (el.nodeType == 1 && (!match || Element.match(el, match))){
+			if (!all) return document.id(el, nocash);
+			elements.push(el);
+		}
+		el = el[walk];
+	}
+	return (all) ? new Elements(elements, {ddup: false, cash: !nocash}) : null;
+};
+
+var attributes = {
+	'html': 'innerHTML',
+	'class': 'className',
+	'for': 'htmlFor',
+	'defaultValue': 'defaultValue',
+	'text': (Browser.Engine.trident || (Browser.Engine.webkit && Browser.Engine.version < 420)) ? 'innerText' : 'textContent'
+};
+var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
+var camels = ['value', 'type', 'defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', 'rowSpan', 'tabIndex', 'useMap'];
+
+bools = bools.associate(bools);
+
+Hash.extend(attributes, bools);
+Hash.extend(attributes, camels.associate(camels.map(String.toLowerCase)));
+
+var inserters = {
+
+	before: function(context, element){
+		if (element.parentNode) element.parentNode.insertBefore(context, element);
+	},
+
+	after: function(context, element){
+		if (!element.parentNode) return;
+		var next = element.nextSibling;
+		(next) ? element.parentNode.insertBefore(context, next) : element.parentNode.appendChild(context);
+	},
+
+	bottom: function(context, element){
+		element.appendChild(context);
+	},
+
+	top: function(context, element){
+		var first = element.firstChild;
+		(first) ? element.insertBefore(context, first) : element.appendChild(context);
+	}
+
+};
+
+inserters.inside = inserters.bottom;
+
+Hash.each(inserters, function(inserter, where){
+
+	where = where.capitalize();
+
+	Element.implement('inject' + where, function(el){
+		inserter(this, document.id(el, true));
+		return this;
+	});
+
+	Element.implement('grab' + where, function(el){
+		inserter(document.id(el, true), this);
+		return this;
+	});
+
+});
+
+Element.implement({
+
+	set: function(prop, value){
+		switch ($type(prop)){
+			case 'object':
+				for (var p in prop) this.set(p, prop[p]);
+				break;
+			case 'string':
+				var property = Element.Properties.get(prop);
+				(property && property.set) ? property.set.apply(this, Array.slice(arguments, 1)) : this.setProperty(prop, value);
+		}
+		return this;
+	},
+
+	get: function(prop){
+		var property = Element.Properties.get(prop);
+		return (property && property.get) ? property.get.apply(this, Array.slice(arguments, 1)) : this.getProperty(prop);
+	},
+
+	erase: function(prop){
+		var property = Element.Properties.get(prop);
+		(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
+		return this;
+	},
+
+	setProperty: function(attribute, value){
+		var key = attributes[attribute];
+		if (value == undefined) return this.removeProperty(attribute);
+		if (key && bools[attribute]) value = !!value;
+		(key) ? this[key] = value : this.setAttribute(attribute, '' + value);
+		return this;
+	},
+
+	setProperties: function(attributes){
+		for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
+		return this;
+	},
+
+	getProperty: function(attribute){
+		var key = attributes[attribute];
+		var value = (key) ? this[key] : this.getAttribute(attribute, 2);
+		return (bools[attribute]) ? !!value : (key) ? value : value || null;
+	},
+
+	getProperties: function(){
+		var args = $A(arguments);
+		return args.map(this.getProperty, this).associate(args);
+	},
+
+	removeProperty: function(attribute){
+		var key = attributes[attribute];
+		(key) ? this[key] = (key && bools[attribute]) ? false : '' : this.removeAttribute(attribute);
+		return this;
+	},
+
+	removeProperties: function(){
+		Array.each(arguments, this.removeProperty, this);
+		return this;
+	},
+
+	hasClass: function(className){
+		return this.className.contains(className, ' ');
+	},
+
+	addClass: function(className){
+		if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
+		return this;
+	},
+
+	removeClass: function(className){
+		this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
+		return this;
+	},
+
+	toggleClass: function(className){
+		return this.hasClass(className) ? this.removeClass(className) : this.addClass(className);
+	},
+
+	adopt: function(){
+		Array.flatten(arguments).each(function(element){
+			element = document.id(element, true);
+			if (element) this.appendChild(element);
+		}, this);
+		return this;
+	},
+
+	appendText: function(text, where){
+		return this.grab(this.getDocument().newTextNode(text), where);
+	},
+
+	grab: function(el, where){
+		inserters[where || 'bottom'](document.id(el, true), this);
+		return this;
+	},
+
+	inject: function(el, where){
+		inserters[where || 'bottom'](this, document.id(el, true));
+		return this;
+	},
+
+	replaces: function(el){
+		el = document.id(el, true);
+		el.parentNode.replaceChild(this, el);
+		return this;
+	},
+
+	wraps: function(el, where){
+		el = document.id(el, true);
+		return this.replaces(el).grab(el, where);
+	},
+
+	getPrevious: function(match, nocash){
+		return walk(this, 'previousSibling', null, match, false, nocash);
+	},
+
+	getAllPrevious: function(match, nocash){
+		return walk(this, 'previousSibling', null, match, true, nocash);
+	},
+
+	getNext: function(match, nocash){
+		return walk(this, 'nextSibling', null, match, false, nocash);
+	},
+
+	getAllNext: function(match, nocash){
+		return walk(this, 'nextSibling', null, match, true, nocash);
+	},
+
+	getFirst: function(match, nocash){
+		return walk(this, 'nextSibling', 'firstChild', match, false, nocash);
+	},
+
+	getLast: function(match, nocash){
+		return walk(this, 'previousSibling', 'lastChild', match, false, nocash);
+	},
+
+	getParent: function(match, nocash){
+		return walk(this, 'parentNode', null, match, false, nocash);
+	},
+
+	getParents: function(match, nocash){
+		return walk(this, 'parentNode', null, match, true, nocash);
+	},
+	
+	getSiblings: function(match, nocash){
+		return this.getParent().getChildren(match, nocash).erase(this);
+	},
+
+	getChildren: function(match, nocash){
+		return walk(this, 'nextSibling', 'firstChild', match, true, nocash);
+	},
+
+	getWindow: function(){
+		return this.ownerDocument.window;
+	},
+
+	getDocument: function(){
+		return this.ownerDocument;
+	},
+
+	getElementById: function(id, nocash){
+		var el = this.ownerDocument.getElementById(id);
+		if (!el) return null;
+		for (var parent = el.parentNode; parent != this; parent = parent.parentNode){
+			if (!parent) return null;
+		}
+		return document.id(el, nocash);
+	},
+
+	getSelected: function(){
+		return new Elements($A(this.options).filter(function(option){
+			return option.selected;
+		}));
+	},
+
+	getComputedStyle: function(property){
+		if (this.currentStyle) return this.currentStyle[property.camelCase()];
+		var computed = this.getDocument().defaultView.getComputedStyle(this, null);
+		return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null;
+	},
+
+	toQueryString: function(){
+		var queryString = [];
+		this.getElements('input, select, textarea', true).each(function(el){
+			if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
+			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
+				return opt.value;
+			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
+			$splat(value).each(function(val){
+				if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
+			});
+		});
+		return queryString.join('&');
+	},
+
+	clone: function(contents, keepid){
+		contents = contents !== false;
+		var clone = this.cloneNode(contents);
+		var clean = function(node, element){
+			if (!keepid) node.removeAttribute('id');
+			if (Browser.Engine.trident){
+				node.clearAttributes();
+				node.mergeAttributes(element);
+				node.removeAttribute('uid');
+				if (node.options){
+					var no = node.options, eo = element.options;
+					for (var j = no.length; j--;) no[j].selected = eo[j].selected;
+				}
+			}
+			var prop = props[element.tagName.toLowerCase()];
+			if (prop && element[prop]) node[prop] = element[prop];
+		};
+
+		if (contents){
+			var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
+			for (var i = ce.length; i--;) clean(ce[i], te[i]);
+		}
+
+		clean(clone, this);
+		return document.id(clone);
+	},
+
+	destroy: function(){
+		Element.empty(this);
+		Element.dispose(this);
+		clean(this, true);
+		return null;
+	},
+
+	empty: function(){
+		$A(this.childNodes).each(function(node){
+			Element.destroy(node);
+		});
+		return this;
+	},
+
+	dispose: function(){
+		return (this.parentNode) ? this.parentNode.removeChild(this) : this;
+	},
+
+	hasChild: function(el){
+		el = document.id(el, true);
+		if (!el) return false;
+		if (Browser.Engine.webkit && Browser.Engine.version < 420) return $A(this.getElementsByTagName(el.tagName)).contains(el);
+		return (this.contains) ? (this != el && this.contains(el)) : !!(this.compareDocumentPosition(el) & 16);
+	},
+
+	match: function(tag){
+		return (!tag || (tag == this) || (Element.get(this, 'tag') == tag));
+	}
+
+});
+
+Native.implement([Element, Window, Document], {
+
+	addListener: function(type, fn){
+		if (type == 'unload'){
+			var old = fn, self = this;
+			fn = function(){
+				self.removeListener('unload', fn);
+				old();
+			};
+		} else {
+			collected[this.uid] = this;
+		}
+		if (this.addEventListener) this.addEventListener(type, fn, false);
+		else this.attachEvent('on' + type, fn);
+		return this;
+	},
+
+	removeListener: function(type, fn){
+		if (this.removeEventListener) this.removeEventListener(type, fn, false);
+		else this.detachEvent('on' + type, fn);
+		return this;
+	},
+
+	retrieve: function(property, dflt){
+		var storage = get(this.uid), prop = storage[property];
+		if (dflt != undefined && prop == undefined) prop = storage[property] = dflt;
+		return $pick(prop);
+	},
+
+	store: function(property, value){
+		var storage = get(this.uid);
+		storage[property] = value;
+		return this;
+	},
+
+	eliminate: function(property){
+		var storage = get(this.uid);
+		delete storage[property];
+		return this;
+	}
+
+});
+
+window.addListener('unload', purge);
+
+})();
+
+Element.Properties = new Hash;
+
+Element.Properties.style = {
+
+	set: function(style){
+		this.style.cssText = style;
+	},
+
+	get: function(){
+		return this.style.cssText;
+	},
+
+	erase: function(){
+		this.style.cssText = '';
+	}
+
+};
+
+Element.Properties.tag = {
+
+	get: function(){
+		return this.tagName.toLowerCase();
+	}
+
+};
+
+Element.Properties.html = (function(){
+	var wrapper = document.createElement('div');
+
+	var translations = {
+		table: [1, '<table>', '</table>'],
+		select: [1, '<select>', '</select>'],
+		tbody: [2, '<table><tbody>', '</tbody></table>'],
+		tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
+	};
+	translations.thead = translations.tfoot = translations.tbody;
+
+	var html = {
+		set: function(){
+			var html = Array.flatten(arguments).join('');
+			var wrap = Browser.Engine.trident && translations[this.get('tag')];
+			if (wrap){
+				var first = wrapper;
+				first.innerHTML = wrap[1] + html + wrap[2];
+				for (var i = wrap[0]; i--;) first = first.firstChild;
+				this.empty().adopt(first.childNodes);
+			} else {
+				this.innerHTML = html;
+			}
+		}
+	};
+
+	html.erase = html.set;
+
+	return html;
+})();
+
+if (Browser.Engine.webkit && Browser.Engine.version < 420) Element.Properties.text = {
+	get: function(){
+		if (this.innerText) return this.innerText;
+		var temp = this.ownerDocument.newElement('div', {html: this.innerHTML}).inject(this.ownerDocument.body);
+		var text = temp.innerText;
+		temp.destroy();
+		return text;
+	}
+};
+
+
+/*
+---
+
+name: Element.Dimensions
+
+description: Contains methods to work with size, scroll, or positioning of Elements and the window object.
+
+license: MIT-style license.
+
+credits:
+  - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
+  - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).
+
+requires: Element
+
+provides: Element.Dimensions
+
+...
+*/
+
+(function(){
+
+Element.implement({
+
+	scrollTo: function(x, y){
+		if (isBody(this)){
+			this.getWindow().scrollTo(x, y);
+		} else {
+			this.scrollLeft = x;
+			this.scrollTop = y;
+		}
+		return this;
+	},
+
+	getSize: function(){
+		if (isBody(this)) return this.getWindow().getSize();
+		return {x: this.offsetWidth, y: this.offsetHeight};
+	},
+
+	getScrollSize: function(){
+		if (isBody(this)) return this.getWindow().getScrollSize();
+		return {x: this.scrollWidth, y: this.scrollHeight};
+	},
+
+	getScroll: function(){
+		if (isBody(this)) return this.getWindow().getScroll();
+		return {x: this.scrollLeft, y: this.scrollTop};
+	},
+
+	getScrolls: function(){
+		var element = this, position = {x: 0, y: 0};
+		while (element && !isBody(element)){
+			position.x += element.scrollLeft;
+			position.y += element.scrollTop;
+			element = element.parentNode;
+		}
+		return position;
+	},
+
+	getOffsetParent: function(){
+		var element = this;
+		if (isBody(element)) return null;
+		if (!Browser.Engine.trident) return element.offsetParent;
+		while ((element = element.parentNode) && !isBody(element)){
+			if (styleString(element, 'position') != 'static') return element;
+		}
+		return null;
+	},
+
+	getOffsets: function(){
+		if (this.getBoundingClientRect){
+			var bound = this.getBoundingClientRect(),
+				html = document.id(this.getDocument().documentElement),
+				htmlScroll = html.getScroll(),
+				elemScrolls = this.getScrolls(),
+				elemScroll = this.getScroll(),
+				isFixed = (styleString(this, 'position') == 'fixed');
+
+			return {
+				x: bound.left.toInt() + elemScrolls.x - elemScroll.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,
+				y: bound.top.toInt()  + elemScrolls.y - elemScroll.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop
+			};
+		}
+
+		var element = this, position = {x: 0, y: 0};
+		if (isBody(this)) return position;
+
+		while (element && !isBody(element)){
+			position.x += element.offsetLeft;
+			position.y += element.offsetTop;
+
+			if (Browser.Engine.gecko){
+				if (!borderBox(element)){
+					position.x += leftBorder(element);
+					position.y += topBorder(element);
+				}
+				var parent = element.parentNode;
+				if (parent && styleString(parent, 'overflow') != 'visible'){
+					position.x += leftBorder(parent);
+					position.y += topBorder(parent);
+				}
+			} else if (element != this && Browser.Engine.webkit){
+				position.x += leftBorder(element);
+				position.y += topBorder(element);
+			}
+
+			element = element.offsetParent;
+		}
+		if (Browser.Engine.gecko && !borderBox(this)){
+			position.x -= leftBorder(this);
+			position.y -= topBorder(this);
+		}
+		return position;
+	},
+
+	getPosition: function(relative){
+		if (isBody(this)) return {x: 0, y: 0};
+		var offset = this.getOffsets(),
+				scroll = this.getScrolls();
+		var position = {
+			x: offset.x - scroll.x,
+			y: offset.y - scroll.y
+		};
+		var relativePosition = (relative && (relative = document.id(relative))) ? relative.getPosition() : {x: 0, y: 0};
+		return {x: position.x - relativePosition.x, y: position.y - relativePosition.y};
+	},
+
+	getCoordinates: function(element){
+		if (isBody(this)) return this.getWindow().getCoordinates();
+		var position = this.getPosition(element),
+				size = this.getSize();
+		var obj = {
+			left: position.x,
+			top: position.y,
+			width: size.x,
+			height: size.y
+		};
+		obj.right = obj.left + obj.width;
+		obj.bottom = obj.top + obj.height;
+		return obj;
+	},
+
+	computePosition: function(obj){
+		return {
+			left: obj.x - styleNumber(this, 'margin-left'),
+			top: obj.y - styleNumber(this, 'margin-top')
+		};
+	},
+
+	setPosition: function(obj){
+		return this.setStyles(this.computePosition(obj));
+	}
+
+});
+
+
+Native.implement([Document, Window], {
+
+	getSize: function(){
+		if (Browser.Engine.presto || Browser.Engine.webkit){
+			var win = this.getWindow();
+			return {x: win.innerWidth, y: win.innerHeight};
+		}
+		var doc = getCompatElement(this);
+		return {x: doc.clientWidth, y: doc.clientHeight};
+	},
+
+	getScroll: function(){
+		var win = this.getWindow(), doc = getCompatElement(this);
+		return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
+	},
+
+	getScrollSize: function(){
+		var doc = getCompatElement(this), min = this.getSize();
+		return {x: Math.max(doc.scrollWidth, min.x), y: Math.max(doc.scrollHeight, min.y)};
+	},
+
+	getPosition: function(){
+		return {x: 0, y: 0};
+	},
+
+	getCoordinates: function(){
+		var size = this.getSize();
+		return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
+	}
+
+});
+
+// private methods
+
+var styleString = Element.getComputedStyle;
+
+function styleNumber(element, style){
+	return styleString(element, style).toInt() || 0;
+};
+
+function borderBox(element){
+	return styleString(element, '-moz-box-sizing') == 'border-box';
+};
+
+function topBorder(element){
+	return styleNumber(element, 'border-top-width');
+};
+
+function leftBorder(element){
+	return styleNumber(element, 'border-left-width');
+};
+
+function isBody(element){
+	return (/^(?:body|html)$/i).test(element.tagName);
+};
+
+function getCompatElement(element){
+	var doc = element.getDocument();
+	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
+};
+
+})();
+
+//aliases
+Element.alias('setPosition', 'position'); //compatability
+
+Native.implement([Window, Document, Element], {
+
+	getHeight: function(){
+		return this.getSize().y;
+	},
+
+	getWidth: function(){
+		return this.getSize().x;
+	},
+
+	getScrollTop: function(){
+		return this.getScroll().y;
+	},
+
+	getScrollLeft: function(){
+		return this.getScroll().x;
+	},
+
+	getScrollHeight: function(){
+		return this.getScrollSize().y;
+	},
+
+	getScrollWidth: function(){
+		return this.getScrollSize().x;
+	},
+
+	getTop: function(){
+		return this.getPosition().y;
+	},
+
+	getLeft: function(){
+		return this.getPosition().x;
+	}
+
+});
+
+
+/*
+---
+
+name: Event
+
+description: Contains the Event Class, to make the event object cross-browser.
+
+license: MIT-style license.
+
+requires: [Window, Document, Hash, Array, Function, String]
+
+provides: Event
+
+...
+*/
+
+var Event = new Native({
+
+	name: 'Event',
+
+	initialize: function(event, win){
+		win = win || window;
+		var doc = win.document;
+		event = event || win.event;
+		if (event.$extended) return event;
+		this.$extended = true;
+		var type = event.type;
+		var target = event.target || event.srcElement;
+		while (target && target.nodeType == 3) target = target.parentNode;
+
+		if (type.test(/key/)){
+			var code = event.which || event.keyCode;
+			var key = Event.Keys.keyOf(code);
+			if (type == 'keydown'){
+				var fKey = code - 111;
+				if (fKey > 0 && fKey < 13) key = 'f' + fKey;
+			}
+			key = key || String.fromCharCode(code).toLowerCase();
+		} else if (type.match(/(click|mouse|menu)/i)){
+			doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
+			var page = {
+				x: event.pageX || event.clientX + doc.scrollLeft,
+				y: event.pageY || event.clientY + doc.scrollTop
+			};
+			var client = {
+				x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX,
+				y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY
+			};
+			if (type.match(/DOMMouseScroll|mousewheel/)){
+				var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
+			}
+			var rightClick = (event.which == 3) || (event.button == 2);
+			var related = null;
+			if (type.match(/over|out/)){
+				switch (type){
+					case 'mouseover': related = event.relatedTarget || event.fromElement; break;
+					case 'mouseout': related = event.relatedTarget || event.toElement;
+				}
+				if (!(function(){
+					while (related && related.nodeType == 3) related = related.parentNode;
+					return true;
+				}).create({attempt: Browser.Engine.gecko})()) related = false;
+			}
+		}
+
+		return $extend(this, {
+			event: event,
+			type: type,
+
+			page: page,
+			client: client,
+			rightClick: rightClick,
+
+			wheel: wheel,
+
+			relatedTarget: related,
+			target: target,
+
+			code: code,
+			key: key,
+
+			shift: event.shiftKey,
+			control: event.ctrlKey,
+			alt: event.altKey,
+			meta: event.metaKey
+		});
+	}
+
+});
+
+Event.Keys = new Hash({
+	'enter': 13,
+	'up': 38,
+	'down': 40,
+	'left': 37,
+	'right': 39,
+	'esc': 27,
+	'space': 32,
+	'backspace': 8,
+	'tab': 9,
+	'delete': 46
+});
+
+Event.implement({
+
+	stop: function(){
+		return this.stopPropagation().preventDefault();
+	},
+
+	stopPropagation: function(){
+		if (this.event.stopPropagation) this.event.stopPropagation();
+		else this.event.cancelBubble = true;
+		return this;
+	},
+
+	preventDefault: function(){
+		if (this.event.preventDefault) this.event.preventDefault();
+		else this.event.returnValue = false;
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+name: Element.Event
+
+description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events.
+
+license: MIT-style license.
+
+requires: [Element, Event]
+
+provides: Element.Event
+
+...
+*/
+
+Element.Properties.events = {set: function(events){
+	this.addEvents(events);
+}};
+
+Native.implement([Element, Window, Document], {
+
+	addEvent: function(type, fn){
+		var events = this.retrieve('events', {});
+		events[type] = events[type] || {'keys': [], 'values': []};
+		if (events[type].keys.contains(fn)) return this;
+		events[type].keys.push(fn);
+		var realType = type, custom = Element.Events.get(type), condition = fn, self = this;
+		if (custom){
+			if (custom.onAdd) custom.onAdd.call(this, fn);
+			if (custom.condition){
+				condition = function(event){
+					if (custom.condition.call(this, event)) return fn.call(this, event);
+					return true;
+				};
+			}
+			realType = custom.base || realType;
+		}
+		var defn = function(){
+			return fn.call(self);
+		};
+		var nativeEvent = Element.NativeEvents[realType];
+		if (nativeEvent){
+			if (nativeEvent == 2){
+				defn = function(event){
+					event = new Event(event, self.getWindow());
+					if (condition.call(self, event) === false) event.stop();
+				};
+			}
+			this.addListener(realType, defn);
+		}
+		events[type].values.push(defn);
+		return this;
+	},
+
+	removeEvent: function(type, fn){
+		var events = this.retrieve('events');
+		if (!events || !events[type]) return this;
+		var pos = events[type].keys.indexOf(fn);
+		if (pos == -1) return this;
+		events[type].keys.splice(pos, 1);
+		var value = events[type].values.splice(pos, 1)[0];
+		var custom = Element.Events.get(type);
+		if (custom){
+			if (custom.onRemove) custom.onRemove.call(this, fn);
+			type = custom.base || type;
+		}
+		return (Element.NativeEvents[type]) ? this.removeListener(type, value) : this;
+	},
+
+	addEvents: function(events){
+		for (var event in events) this.addEvent(event, events[event]);
+		return this;
+	},
+
+	removeEvents: function(events){
+		var type;
+		if ($type(events) == 'object'){
+			for (type in events) this.removeEvent(type, events[type]);
+			return this;
+		}
+		var attached = this.retrieve('events');
+		if (!attached) return this;
+		if (!events){
+			for (type in attached) this.removeEvents(type);
+			this.eliminate('events');
+		} else if (attached[events]){
+			while (attached[events].keys[0]) this.removeEvent(events, attached[events].keys[0]);
+			attached[events] = null;
+		}
+		return this;
+	},
+
+	fireEvent: function(type, args, delay){
+		var events = this.retrieve('events');
+		if (!events || !events[type]) return this;
+		events[type].keys.each(function(fn){
+			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
+		}, this);
+		return this;
+	},
+
+	cloneEvents: function(from, type){
+		from = document.id(from);
+		var fevents = from.retrieve('events');
+		if (!fevents) return this;
+		if (!type){
+			for (var evType in fevents) this.cloneEvents(from, evType);
+		} else if (fevents[type]){
+			fevents[type].keys.each(function(fn){
+				this.addEvent(type, fn);
+			}, this);
+		}
+		return this;
+	}
+
+});
+
+// IE9
+try {
+	if (typeof HTMLElement != 'undefined')
+		HTMLElement.prototype.fireEvent = Element.prototype.fireEvent;
+} catch(e){}
+
+Element.NativeEvents = {
+	click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
+	mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
+	mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
+	keydown: 2, keypress: 2, keyup: 2, //keyboard
+	focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
+	load: 1, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
+	error: 1, abort: 1, scroll: 1 //misc
+};
+
+(function(){
+
+var $check = function(event){
+	var related = event.relatedTarget;
+	if (related == undefined) return true;
+	if (related === false) return false;
+	return ($type(this) != 'document' && related != this && related.prefix != 'xul' && !this.hasChild(related));
+};
+
+Element.Events = new Hash({
+
+	mouseenter: {
+		base: 'mouseover',
+		condition: $check
+	},
+
+	mouseleave: {
+		base: 'mouseout',
+		condition: $check
+	},
+
+	mousewheel: {
+		base: (Browser.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel'
+	}
+
+});
+
+})();
+
+
+/*
+---
+
+name: Element.Style
+
+description: Contains methods for interacting with the styles of Elements in a fashionable way.
+
+license: MIT-style license.
+
+requires: Element
+
+provides: Element.Style
+
+...
+*/
+
+Element.Properties.styles = {set: function(styles){
+	this.setStyles(styles);
+}};
+
+Element.Properties.opacity = {
+
+	set: function(opacity, novisibility){
+		if (!novisibility){
+			if (opacity == 0){
+				if (this.style.visibility != 'hidden') this.style.visibility = 'hidden';
+			} else {
+				if (this.style.visibility != 'visible') this.style.visibility = 'visible';
+			}
+		}
+		if (!this.currentStyle || !this.currentStyle.hasLayout) this.style.zoom = 1;
+		if (Browser.Engine.trident) this.style.filter = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
+		this.style.opacity = opacity;
+		this.store('opacity', opacity);
+	},
+
+	get: function(){
+		return this.retrieve('opacity', 1);
+	}
+
+};
+
+Element.implement({
+
+	setOpacity: function(value){
+		return this.set('opacity', value, true);
+	},
+
+	getOpacity: function(){
+		return this.get('opacity');
+	},
+
+	setStyle: function(property, value){
+		switch (property){
+			case 'opacity': return this.set('opacity', parseFloat(value));
+			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
+		}
+		property = property.camelCase();
+		if ($type(value) != 'string'){
+			var map = (Element.Styles.get(property) || '@').split(' ');
+			value = $splat(value).map(function(val, i){
+				if (!map[i]) return '';
+				return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
+			}).join(' ');
+		} else if (value == String(Number(value))){
+			value = Math.round(value);
+		}
+		this.style[property] = value;
+		return this;
+	},
+
+	getStyle: function(property){
+		switch (property){
+			case 'opacity': return this.get('opacity');
+			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
+		}
+		property = property.camelCase();
+		var result = this.style[property];
+		if (!$chk(result)){
+			result = [];
+			for (var style in Element.ShortStyles){
+				if (property != style) continue;
+				for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
+				return result.join(' ');
+			}
+			result = this.getComputedStyle(property);
+		}
+		if (result){
+			result = String(result);
+			var color = result.match(/rgba?\([\d\s,]+\)/);
+			if (color) result = result.replace(color[0], color[0].rgbToHex());
+		}
+		if (Browser.Engine.presto || (Browser.Engine.trident && !$chk(parseInt(result, 10)))){
+			if (property.test(/^(height|width)$/)){
+				var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
+				values.each(function(value){
+					size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
+				}, this);
+				return this['offset' + property.capitalize()] - size + 'px';
+			}
+			if ((Browser.Engine.presto) && String(result).test('px')) return result;
+			if (property.test(/(border(.+)Width|margin|padding)/)) return '0px';
+		}
+		return result;
+	},
+
+	setStyles: function(styles){
+		for (var style in styles) this.setStyle(style, styles[style]);
+		return this;
+	},
+
+	getStyles: function(){
+		var result = {};
+		Array.flatten(arguments).each(function(key){
+			result[key] = this.getStyle(key);
+		}, this);
+		return result;
+	}
+
+});
+
+Element.Styles = new Hash({
+	left: '@px', top: '@px', bottom: '@px', right: '@px',
+	width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
+	backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
+	fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
+	margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
+	borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
+	zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
+});
+
+Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};
+
+['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
+	var Short = Element.ShortStyles;
+	var All = Element.Styles;
+	['margin', 'padding'].each(function(style){
+		var sd = style + direction;
+		Short[style][sd] = All[sd] = '@px';
+	});
+	var bd = 'border' + direction;
+	Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
+	var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
+	Short[bd] = {};
+	Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
+	Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
+	Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
+});
+
+
+/*
+---
+
+name: Fx
+
+description: Contains the basic animation logic to be extended by all other Fx Classes.
+
+license: MIT-style license.
+
+requires: [Chain, Events, Options]
+
+provides: Fx
+
+...
+*/
+
+var Fx = new Class({
+
+	Implements: [Chain, Events, Options],
+
+	options: {
+		/*
+		onStart: $empty,
+		onCancel: $empty,
+		onComplete: $empty,
+		*/
+		fps: 50,
+		unit: false,
+		duration: 500,
+		link: 'ignore'
+	},
+
+	initialize: function(options){
+		this.subject = this.subject || this;
+		this.setOptions(options);
+		this.options.duration = Fx.Durations[this.options.duration] || this.options.duration.toInt();
+		var wait = this.options.wait;
+		if (wait === false) this.options.link = 'cancel';
+	},
+
+	getTransition: function(){
+		return function(p){
+			return -(Math.cos(Math.PI * p) - 1) / 2;
+		};
+	},
+
+	step: function(){
+		var time = $time();
+		if (time < this.time + this.options.duration){
+			var delta = this.transition((time - this.time) / this.options.duration);
+			this.set(this.compute(this.from, this.to, delta));
+		} else {
+			this.set(this.compute(this.from, this.to, 1));
+			this.complete();
+		}
+	},
+
+	set: function(now){
+		return now;
+	},
+
+	compute: function(from, to, delta){
+		return Fx.compute(from, to, delta);
+	},
+
+	check: function(){
+		if (!this.timer) return true;
+		switch (this.options.link){
+			case 'cancel': this.cancel(); return true;
+			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
+		}
+		return false;
+	},
+
+	start: function(from, to){
+		if (!this.check(from, to)) return this;
+		this.from = from;
+		this.to = to;
+		this.time = 0;
+		this.transition = this.getTransition();
+		this.startTimer();
+		this.onStart();
+		return this;
+	},
+
+	complete: function(){
+		if (this.stopTimer()) this.onComplete();
+		return this;
+	},
+
+	cancel: function(){
+		if (this.stopTimer()) this.onCancel();
+		return this;
+	},
+
+	onStart: function(){
+		this.fireEvent('start', this.subject);
+	},
+
+	onComplete: function(){
+		this.fireEvent('complete', this.subject);
+		if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
+	},
+
+	onCancel: function(){
+		this.fireEvent('cancel', this.subject).clearChain();
+	},
+
+	pause: function(){
+		this.stopTimer();
+		return this;
+	},
+
+	resume: function(){
+		this.startTimer();
+		return this;
+	},
+
+	stopTimer: function(){
+		if (!this.timer) return false;
+		this.time = $time() - this.time;
+		this.timer = $clear(this.timer);
+		return true;
+	},
+
+	startTimer: function(){
+		if (this.timer) return false;
+		this.time = $time() - this.time;
+		this.timer = this.step.periodical(Math.round(1000 / this.options.fps), this);
+		return true;
+	}
+
+});
+
+Fx.compute = function(from, to, delta){
+	return (to - from) * delta + from;
+};
+
+Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};
+
+
+/*
+---
+
+name: Fx.CSS
+
+description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.
+
+license: MIT-style license.
+
+requires: [Fx, Element.Style]
+
+provides: Fx.CSS
+
+...
+*/
+
+Fx.CSS = new Class({
+
+	Extends: Fx,
+
+	//prepares the base from/to object
+
+	prepare: function(element, property, values){
+		values = $splat(values);
+		var values1 = values[1];
+		if (!$chk(values1)){
+			values[1] = values[0];
+			values[0] = element.getStyle(property);
+		}
+		var parsed = values.map(this.parse);
+		return {from: parsed[0], to: parsed[1]};
+	},
+
+	//parses a value into an array
+
+	parse: function(value){
+		value = $lambda(value)();
+		value = (typeof value == 'string') ? value.split(' ') : $splat(value);
+		return value.map(function(val){
+			val = String(val);
+			var found = false;
+			Fx.CSS.Parsers.each(function(parser, key){
+				if (found) return;
+				var parsed = parser.parse(val);
+				if ($chk(parsed)) found = {value: parsed, parser: parser};
+			});
+			found = found || {value: val, parser: Fx.CSS.Parsers.String};
+			return found;
+		});
+	},
+
+	//computes by a from and to prepared objects, using their parsers.
+
+	compute: function(from, to, delta){
+		var computed = [];
+		(Math.min(from.length, to.length)).times(function(i){
+			computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
+		});
+		computed.$family = {name: 'fx:css:value'};
+		return computed;
+	},
+
+	//serves the value as settable
+
+	serve: function(value, unit){
+		if ($type(value) != 'fx:css:value') value = this.parse(value);
+		var returned = [];
+		value.each(function(bit){
+			returned = returned.concat(bit.parser.serve(bit.value, unit));
+		});
+		return returned;
+	},
+
+	//renders the change to an element
+
+	render: function(element, property, value, unit){
+		element.setStyle(property, this.serve(value, unit));
+	},
+
+	//searches inside the page css to find the values for a selector
+
+	search: function(selector){
+		if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
+		var to = {};
+		Array.each(document.styleSheets, function(sheet, j){
+			var href = sheet.href;
+			if (href && href.contains('://') && !href.contains(document.domain)) return;
+			var rules = sheet.rules || sheet.cssRules;
+			Array.each(rules, function(rule, i){
+				if (!rule.style) return;
+				var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
+					return m.toLowerCase();
+				}) : null;
+				if (!selectorText || !selectorText.test('^' + selector + '$')) return;
+				Element.Styles.each(function(value, style){
+					if (!rule.style[style] || Element.ShortStyles[style]) return;
+					value = String(rule.style[style]);
+					to[style] = (value.test(/^rgb/)) ? value.rgbToHex() : value;
+				});
+			});
+		});
+		return Fx.CSS.Cache[selector] = to;
+	}
+
+});
+
+Fx.CSS.Cache = {};
+
+Fx.CSS.Parsers = new Hash({
+
+	Color: {
+		parse: function(value){
+			if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
+			return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
+		},
+		compute: function(from, to, delta){
+			return from.map(function(value, i){
+				return Math.round(Fx.compute(from[i], to[i], delta));
+			});
+		},
+		serve: function(value){
+			return value.map(Number);
+		}
+	},
+
+	Number: {
+		parse: parseFloat,
+		compute: Fx.compute,
+		serve: function(value, unit){
+			return (unit) ? value + unit : value;
+		}
+	},
+
+	String: {
+		parse: $lambda(false),
+		compute: $arguments(1),
+		serve: $arguments(0)
+	}
+
+});
+
+
+/*
+---
+
+name: Fx.Morph
+
+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.
+
+license: MIT-style license.
+
+requires: Fx.CSS
+
+provides: Fx.Morph
+
+...
+*/
+
+Fx.Morph = new Class({
+
+	Extends: Fx.CSS,
+
+	initialize: function(element, options){
+		this.element = this.subject = document.id(element);
+		this.parent(options);
+	},
+
+	set: function(now){
+		if (typeof now == 'string') now = this.search(now);
+		for (var p in now) this.render(this.element, p, now[p], this.options.unit);
+		return this;
+	},
+
+	compute: function(from, to, delta){
+		var now = {};
+		for (var p in from) now[p] = this.parent(from[p], to[p], delta);
+		return now;
+	},
+
+	start: function(properties){
+		if (!this.check(properties)) return this;
+		if (typeof properties == 'string') properties = this.search(properties);
+		var from = {}, to = {};
+		for (var p in properties){
+			var parsed = this.prepare(this.element, p, properties[p]);
+			from[p] = parsed.from;
+			to[p] = parsed.to;
+		}
+		return this.parent(from, to);
+	}
+
+});
+
+Element.Properties.morph = {
+
+	set: function(options){
+		var morph = this.retrieve('morph');
+		if (morph) morph.cancel();
+		return this.eliminate('morph').store('morph:options', $extend({link: 'cancel'}, options));
+	},
+
+	get: function(options){
+		if (options || !this.retrieve('morph')){
+			if (options || !this.retrieve('morph:options')) this.set('morph', options);
+			this.store('morph', new Fx.Morph(this, this.retrieve('morph:options')));
+		}
+		return this.retrieve('morph');
+	}
+
+};
+
+Element.implement({
+
+	morph: function(props){
+		this.get('morph').start(props);
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+name: Fx.Transitions
+
+description: Contains a set of advanced transitions to be used with any of the Fx Classes.
+
+license: MIT-style license.
+
+credits: Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified and optimized to be used with MooTools.
+
+requires: Fx
+
+provides: Fx.Transitions
+
+...
+*/
+
+Fx.implement({
+
+	getTransition: function(){
+		var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
+		if (typeof trans == 'string'){
+			var data = trans.split(':');
+			trans = Fx.Transitions;
+			trans = trans[data[0]] || trans[data[0].capitalize()];
+			if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
+		}
+		return trans;
+	}
+
+});
+
+Fx.Transition = function(transition, params){
+	params = $splat(params);
+	return $extend(transition, {
+		easeIn: function(pos){
+			return transition(pos, params);
+		},
+		easeOut: function(pos){
+			return 1 - transition(1 - pos, params);
+		},
+		easeInOut: function(pos){
+			return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2;
+		}
+	});
+};
+
+Fx.Transitions = new Hash({
+
+	linear: $arguments(0)
+
+});
+
+Fx.Transitions.extend = function(transitions){
+	for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
+};
+
+Fx.Transitions.extend({
+
+	Pow: function(p, x){
+		return Math.pow(p, x[0] || 6);
+	},
+
+	Expo: function(p){
+		return Math.pow(2, 8 * (p - 1));
+	},
+
+	Circ: function(p){
+		return 1 - Math.sin(Math.acos(p));
+	},
+
+	Sine: function(p){
+		return 1 - Math.sin((1 - p) * Math.PI / 2);
+	},
+
+	Back: function(p, x){
+		x = x[0] || 1.618;
+		return Math.pow(p, 2) * ((x + 1) * p - x);
+	},
+
+	Bounce: function(p){
+		var value;
+		for (var a = 0, b = 1; 1; a += b, b /= 2){
+			if (p >= (7 - 4 * a) / 11){
+				value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
+				break;
+			}
+		}
+		return value;
+	},
+
+	Elastic: function(p, x){
+		return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
+	}
+
+});
+
+['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
+	Fx.Transitions[transition] = new Fx.Transition(function(p){
+		return Math.pow(p, [i + 2]);
+	});
+});
+
+
+/*
+---
+
+name: Fx.Tween
+
+description: Formerly Fx.Style, effect to transition any CSS property for an element.
+
+license: MIT-style license.
+
+requires: Fx.CSS
+
+provides: [Fx.Tween, Element.fade, Element.highlight]
+
+...
+*/
+
+Fx.Tween = new Class({
+
+	Extends: Fx.CSS,
+
+	initialize: function(element, options){
+		this.element = this.subject = document.id(element);
+		this.parent(options);
+	},
+
+	set: function(property, now){
+		if (arguments.length == 1){
+			now = property;
+			property = this.property || this.options.property;
+		}
+		this.render(this.element, property, now, this.options.unit);
+		return this;
+	},
+
+	start: function(property, from, to){
+		if (!this.check(property, from, to)) return this;
+		var args = Array.flatten(arguments);
+		this.property = this.options.property || args.shift();
+		var parsed = this.prepare(this.element, this.property, args);
+		return this.parent(parsed.from, parsed.to);
+	}
+
+});
+
+Element.Properties.tween = {
+
+	set: function(options){
+		var tween = this.retrieve('tween');
+		if (tween) tween.cancel();
+		return this.eliminate('tween').store('tween:options', $extend({link: 'cancel'}, options));
+	},
+
+	get: function(options){
+		if (options || !this.retrieve('tween')){
+			if (options || !this.retrieve('tween:options')) this.set('tween', options);
+			this.store('tween', new Fx.Tween(this, this.retrieve('tween:options')));
+		}
+		return this.retrieve('tween');
+	}
+
+};
+
+Element.implement({
+
+	tween: function(property, from, to){
+		this.get('tween').start(arguments);
+		return this;
+	},
+
+	fade: function(how){
+		var fade = this.get('tween'), o = 'opacity', toggle;
+		how = $pick(how, 'toggle');
+		switch (how){
+			case 'in': fade.start(o, 1); break;
+			case 'out': fade.start(o, 0); break;
+			case 'show': fade.set(o, 1); break;
+			case 'hide': fade.set(o, 0); break;
+			case 'toggle':
+				var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
+				fade.start(o, (flag) ? 0 : 1);
+				this.store('fade:flag', !flag);
+				toggle = true;
+			break;
+			default: fade.start(o, arguments);
+		}
+		if (!toggle) this.eliminate('fade:flag');
+		return this;
+	},
+
+	highlight: function(start, end){
+		if (!end){
+			end = this.retrieve('highlight:original', this.getStyle('background-color'));
+			end = (end == 'transparent') ? '#fff' : end;
+		}
+		var tween = this.get('tween');
+		tween.start('background-color', start || '#ffff88', end).chain(function(){
+			this.setStyle('background-color', this.retrieve('highlight:original'));
+			tween.callChain();
+		}.bind(this));
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+name: Request
+
+description: Powerful all purpose Request Class. Uses XMLHTTPRequest.
+
+license: MIT-style license.
+
+requires: [Element, Chain, Events, Options, Browser]
+
+provides: Request
+
+...
+*/
+
+var Request = new Class({
+
+	Implements: [Chain, Events, Options],
+
+	options: {/*
+		onRequest: $empty,
+		onComplete: $empty,
+		onCancel: $empty,
+		onSuccess: $empty,
+		onFailure: $empty,
+		onException: $empty,*/
+		url: '',
+		data: '',
+		headers: {
+			'X-Requested-With': 'XMLHttpRequest',
+			'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+		},
+		async: true,
+		format: false,
+		method: 'post',
+		link: 'ignore',
+		isSuccess: null,
+		emulation: true,
+		urlEncoded: true,
+		encoding: 'utf-8',
+		evalScripts: false,
+		evalResponse: false,
+		noCache: false
+	},
+
+	initialize: function(options){
+		this.xhr = new Browser.Request();
+		this.setOptions(options);
+		this.options.isSuccess = this.options.isSuccess || this.isSuccess;
+		this.headers = new Hash(this.options.headers);
+	},
+
+	onStateChange: function(){
+		if (this.xhr.readyState != 4 || !this.running) return;
+		this.running = false;
+		this.status = 0;
+		$try(function(){
+			this.status = this.xhr.status;
+		}.bind(this));
+		this.xhr.onreadystatechange = $empty;
+		if (this.options.isSuccess.call(this, this.status)){
+			this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML};
+			this.success(this.response.text, this.response.xml);
+		} else {
+			this.response = {text: null, xml: null};
+			this.failure();
+		}
+	},
+
+	isSuccess: function(){
+		return ((this.status >= 200) && (this.status < 300));
+	},
+
+	processScripts: function(text){
+		if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return $exec(text);
+		return text.stripScripts(this.options.evalScripts);
+	},
+
+	success: function(text, xml){
+		this.onSuccess(this.processScripts(text), xml);
+	},
+
+	onSuccess: function(){
+		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
+	},
+
+	failure: function(){
+		this.onFailure();
+	},
+
+	onFailure: function(){
+		this.fireEvent('complete').fireEvent('failure', this.xhr);
+	},
+
+	setHeader: function(name, value){
+		this.headers.set(name, value);
+		return this;
+	},
+
+	getHeader: function(name){
+		return $try(function(){
+			return this.xhr.getResponseHeader(name);
+		}.bind(this));
+	},
+
+	check: function(){
+		if (!this.running) return true;
+		switch (this.options.link){
+			case 'cancel': this.cancel(); return true;
+			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
+		}
+		return false;
+	},
+
+	send: function(options){
+		if (!this.check(options)) return this;
+		this.running = true;
+
+		var type = $type(options);
+		if (type == 'string' || type == 'element') options = {data: options};
+
+		var old = this.options;
+		options = $extend({data: old.data, url: old.url, method: old.method}, options);
+		var data = options.data, url = String(options.url), method = options.method.toLowerCase();
+
+		switch ($type(data)){
+			case 'element': data = document.id(data).toQueryString(); break;
+			case 'object': case 'hash': data = Hash.toQueryString(data);
+		}
+
+		if (this.options.format){
+			var format = 'format=' + this.options.format;
+			data = (data) ? format + '&' + data : format;
+		}
+
+		if (this.options.emulation && !['get', 'post'].contains(method)){
+			var _method = '_method=' + method;
+			data = (data) ? _method + '&' + data : _method;
+			method = 'post';
+		}
+
+		if (this.options.urlEncoded && method == 'post'){
+			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
+			this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding);
+		}
+
+		if (this.options.noCache){
+			var noCache = 'noCache=' + new Date().getTime();
+			data = (data) ? noCache + '&' + data : noCache;
+		}
+
+		var trimPosition = url.lastIndexOf('/');
+		if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);
+
+		if (data && method == 'get'){
+			url = url + (url.contains('?') ? '&' : '?') + data;
+			data = null;
+		}
+
+		this.xhr.open(method.toUpperCase(), url, this.options.async);
+
+		this.xhr.onreadystatechange = this.onStateChange.bind(this);
+
+		this.headers.each(function(value, key){
+			try {
+				this.xhr.setRequestHeader(key, value);
+			} catch (e){
+				this.fireEvent('exception', [key, value]);
+			}
+		}, this);
+
+		this.fireEvent('request');
+		this.xhr.send(data);
+		if (!this.options.async) this.onStateChange();
+		return this;
+	},
+
+	cancel: function(){
+		if (!this.running) return this;
+		this.running = false;
+		this.xhr.abort();
+		this.xhr.onreadystatechange = $empty;
+		this.xhr = new Browser.Request();
+		this.fireEvent('cancel');
+		return this;
+	}
+
+});
+
+(function(){
+
+var methods = {};
+['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
+	methods[method] = function(){
+		var params = Array.link(arguments, {url: String.type, data: $defined});
+		return this.send($extend(params, {method: method}));
+	};
+});
+
+Request.implement(methods);
+
+})();
+
+Element.Properties.send = {
+
+	set: function(options){
+		var send = this.retrieve('send');
+		if (send) send.cancel();
+		return this.eliminate('send').store('send:options', $extend({
+			data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
+		}, options));
+	},
+
+	get: function(options){
+		if (options || !this.retrieve('send')){
+			if (options || !this.retrieve('send:options')) this.set('send', options);
+			this.store('send', new Request(this.retrieve('send:options')));
+		}
+		return this.retrieve('send');
+	}
+
+};
+
+Element.implement({
+
+	send: function(url){
+		var sender = this.get('send');
+		sender.send({data: this, url: url || sender.options.url});
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+name: Request.HTML
+
+description: Extends the basic Request Class with additional methods for interacting with HTML responses.
+
+license: MIT-style license.
+
+requires: [Request, Element]
+
+provides: Request.HTML
+
+...
+*/
+
+Request.HTML = new Class({
+
+	Extends: Request,
+
+	options: {
+		update: false,
+		append: false,
+		evalScripts: true,
+		filter: false
+	},
+
+	processHTML: function(text){
+		var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
+		text = (match) ? match[1] : text;
+
+		var container = new Element('div');
+
+		return $try(function(){
+			var root = '<root>' + text + '</root>', doc;
+			if (Browser.Engine.trident){
+				doc = new ActiveXObject('Microsoft.XMLDOM');
+				doc.async = false;
+				doc.loadXML(root);
+			} else {
+				doc = new DOMParser().parseFromString(root, 'text/xml');
+			}
+			root = doc.getElementsByTagName('root')[0];
+			if (!root) return null;
+			for (var i = 0, k = root.childNodes.length; i < k; i++){
+				var child = Element.clone(root.childNodes[i], true, true);
+				if (child) container.grab(child);
+			}
+			return container;
+		}) || container.set('html', text);
+	},
+
+	success: function(text){
+		var options = this.options, response = this.response;
+
+		response.html = text.stripScripts(function(script){
+			response.javascript = script;
+		});
+
+		var temp = this.processHTML(response.html);
+
+		response.tree = temp.childNodes;
+		response.elements = temp.getElements('*');
+
+		if (options.filter) response.tree = response.elements.filter(options.filter);
+		if (options.update) document.id(options.update).empty().set('html', response.html);
+		else if (options.append) document.id(options.append).adopt(temp.getChildren());
+		if (options.evalScripts) $exec(response.javascript);
+
+		this.onSuccess(response.tree, response.elements, response.html, response.javascript);
+	}
+
+});
+
+Element.Properties.load = {
+
+	set: function(options){
+		var load = this.retrieve('load');
+		if (load) load.cancel();
+		return this.eliminate('load').store('load:options', $extend({data: this, link: 'cancel', update: this, method: 'get'}, options));
+	},
+
+	get: function(options){
+		if (options || ! this.retrieve('load')){
+			if (options || !this.retrieve('load:options')) this.set('load', options);
+			this.store('load', new Request.HTML(this.retrieve('load:options')));
+		}
+		return this.retrieve('load');
+	}
+
+};
+
+Element.implement({
+
+	load: function(){
+		this.get('load').send(Array.link(arguments, {data: Object.type, url: String.type}));
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+name: JSON
+
+description: JSON encoder and decoder.
+
+license: MIT-style license.
+
+see: <http://www.json.org/>
+
+requires: [Array, String, Number, Function, Hash]
+
+provides: JSON
+
+...
+*/
+
+var JSON = new Hash(this.JSON && {
+	stringify: JSON.stringify,
+	parse: JSON.parse
+}).extend({
+	
+	$specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},
+
+	$replaceChars: function(chr){
+		return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
+	},
+
+	encode: function(obj){
+		switch ($type(obj)){
+			case 'string':
+				return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"';
+			case 'array':
+				return '[' + String(obj.map(JSON.encode).clean()) + ']';
+			case 'object': case 'hash':
+				var string = [];
+				Hash.each(obj, function(value, key){
+					var json = JSON.encode(value);
+					if (json) string.push(JSON.encode(key) + ':' + json);
+				});
+				return '{' + string + '}';
+			case 'number': case 'boolean': return String(obj);
+			case false: return 'null';
+		}
+		return null;
+	},
+
+	decode: function(string, secure){
+		if ($type(string) != 'string' || !string.length) return null;
+		if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
+		return eval('(' + string + ')');
+	}
+
+});
+
+
+/*
+---
+
+name: Request.JSON
+
+description: Extends the basic Request Class with additional methods for sending and receiving JSON data.
+
+license: MIT-style license.
+
+requires: [Request, JSON]
+
+provides: [Request.JSON]
+
+...
+*/
+
+Request.JSON = new Class({
+
+	Extends: Request,
+
+	options: {
+		secure: true
+	},
+
+	initialize: function(options){
+		this.parent(options);
+		this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
+	},
+
+	success: function(text){
+		this.response.json = JSON.decode(text, this.options.secure);
+		this.onSuccess(this.response.json, text);
+	}
+
+});
+
+
+/*
+---
+
+name: Cookie
+
+description: Class for creating, reading, and deleting browser Cookies.
+
+license: MIT-style license.
+
+credits: Based on the functions by Peter-Paul Koch (http://quirksmode.org).
+
+requires: Options
+
+provides: Cookie
+
+...
+*/
+
+var Cookie = new Class({
+
+	Implements: Options,
+
+	options: {
+		path: false,
+		domain: false,
+		duration: false,
+		secure: false,
+		document: document
+	},
+
+	initialize: function(key, options){
+		this.key = key;
+		this.setOptions(options);
+	},
+
+	write: function(value){
+		value = encodeURIComponent(value);
+		if (this.options.domain) value += '; domain=' + this.options.domain;
+		if (this.options.path) value += '; path=' + this.options.path;
+		if (this.options.duration){
+			var date = new Date();
+			date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
+			value += '; expires=' + date.toGMTString();
+		}
+		if (this.options.secure) value += '; secure';
+		this.options.document.cookie = this.key + '=' + value;
+		return this;
+	},
+
+	read: function(){
+		var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
+		return (value) ? decodeURIComponent(value[1]) : null;
+	},
+
+	dispose: function(){
+		new Cookie(this.key, $merge(this.options, {duration: -1})).write('');
+		return this;
+	}
+
+});
+
+Cookie.write = function(key, value, options){
+	return new Cookie(key, options).write(value);
+};
+
+Cookie.read = function(key){
+	return new Cookie(key).read();
+};
+
+Cookie.dispose = function(key, options){
+	return new Cookie(key, options).dispose();
+};
+
+
+/*
+---
+
+name: DomReady
+
+description: Contains the custom event domready.
+
+license: MIT-style license.
+
+requires: Element.Event
+
+provides: DomReady
+
+...
+*/
+
+Element.Events.domready = {
+
+	onAdd: function(fn){
+		if (Browser.loaded) fn.call(this);
+	}
+
+};
+
+(function(){
+
+	var domready = function(){
+		if (Browser.loaded) return;
+		Browser.loaded = true;
+		window.fireEvent('domready');
+		document.fireEvent('domready');
+	};
+	
+	window.addEvent('load', domready);
+
+	if (Browser.Engine.trident){
+		var temp = document.createElement('div');
+		(function(){
+			($try(function(){
+				temp.doScroll(); // Technique by Diego Perini
+				return document.id(temp).inject(document.body).set('html', 'temp').dispose();
+			})) ? domready() : arguments.callee.delay(50);
+		})();
+	} else if (Browser.Engine.webkit && Browser.Engine.version < 525){
+		(function(){
+			(['loaded', 'complete'].contains(document.readyState)) ? domready() : arguments.callee.delay(50);
+		})();
+	} else {
+		document.addEvent('DOMContentLoaded', domready);
+	}
+
+})();
+
+
+/*
+---
+
+name: Selectors
+
+description: Adds advanced CSS-style querying capabilities for targeting HTML Elements. Includes pseudo selectors.
+
+license: MIT-style license.
+
+requires: Element
+
+provides: Selectors
+
+...
+*/
+
+Native.implement([Document, Element], {
+
+	getElements: function(expression, nocash){
+		expression = expression.split(',');
+		var items, local = {};
+		for (var i = 0, l = expression.length; i < l; i++){
+			var selector = expression[i], elements = Selectors.Utils.search(this, selector, local);
+			if (i != 0 && elements.item) elements = $A(elements);
+			items = (i == 0) ? elements : (items.item) ? $A(items).concat(elements) : items.concat(elements);
+		}
+		return new Elements(items, {ddup: (expression.length > 1), cash: !nocash});
+	}
+
+});
+
+Element.implement({
+
+	match: function(selector){
+		if (!selector || (selector == this)) return true;
+		var tagid = Selectors.Utils.parseTagAndID(selector);
+		var tag = tagid[0], id = tagid[1];
+		if (!Selectors.Filters.byID(this, id) || !Selectors.Filters.byTag(this, tag)) return false;
+		var parsed = Selectors.Utils.parseSelector(selector);
+		return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true;
+	}
+
+});
+
+var Selectors = {Cache: {nth: {}, parsed: {}}};
+
+Selectors.RegExps = {
+	id: (/#([\w-]+)/),
+	tag: (/^(\w+|\*)/),
+	quick: (/^(\w+|\*)$/),
+	splitter: (/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),
+	combined: (/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)
+};
+
+Selectors.Utils = {
+
+	chk: function(item, uniques){
+		if (!uniques) return true;
+		var uid = $uid(item);
+		if (!uniques[uid]) return uniques[uid] = true;
+		return false;
+	},
+
+	parseNthArgument: function(argument){
+		if (Selectors.Cache.nth[argument]) return Selectors.Cache.nth[argument];
+		var parsed = argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);
+		if (!parsed) return false;
+		var inta = parseInt(parsed[1], 10);
+		var a = (inta || inta === 0) ? inta : 1;
+		var special = parsed[2] || false;
+		var b = parseInt(parsed[3], 10) || 0;
+		if (a != 0){
+			b--;
+			while (b < 1) b += a;
+			while (b >= a) b -= a;
+		} else {
+			a = b;
+			special = 'index';
+		}
+		switch (special){
+			case 'n': parsed = {a: a, b: b, special: 'n'}; break;
+			case 'odd': parsed = {a: 2, b: 0, special: 'n'}; break;
+			case 'even': parsed = {a: 2, b: 1, special: 'n'}; break;
+			case 'first': parsed = {a: 0, special: 'index'}; break;
+			case 'last': parsed = {special: 'last-child'}; break;
+			case 'only': parsed = {special: 'only-child'}; break;
+			default: parsed = {a: (a - 1), special: 'index'};
+		}
+
+		return Selectors.Cache.nth[argument] = parsed;
+	},
+
+	parseSelector: function(selector){
+		if (Selectors.Cache.parsed[selector]) return Selectors.Cache.parsed[selector];
+		var m, parsed = {classes: [], pseudos: [], attributes: []};
+		while ((m = Selectors.RegExps.combined.exec(selector))){
+			var cn = m[1], an = m[2], ao = m[3], av = m[5], pn = m[6], pa = m[7];
+			if (cn){
+				parsed.classes.push(cn);
+			} else if (pn){
+				var parser = Selectors.Pseudo.get(pn);
+				if (parser) parsed.pseudos.push({parser: parser, argument: pa});
+				else parsed.attributes.push({name: pn, operator: '=', value: pa});
+			} else if (an){
+				parsed.attributes.push({name: an, operator: ao, value: av});
+			}
+		}
+		if (!parsed.classes.length) delete parsed.classes;
+		if (!parsed.attributes.length) delete parsed.attributes;
+		if (!parsed.pseudos.length) delete parsed.pseudos;
+		if (!parsed.classes && !parsed.attributes && !parsed.pseudos) parsed = null;
+		return Selectors.Cache.parsed[selector] = parsed;
+	},
+
+	parseTagAndID: function(selector){
+		var tag = selector.match(Selectors.RegExps.tag);
+		var id = selector.match(Selectors.RegExps.id);
+		return [(tag) ? tag[1] : '*', (id) ? id[1] : false];
+	},
+
+	filter: function(item, parsed, local){
+		var i;
+		if (parsed.classes){
+			for (i = parsed.classes.length; i--; i){
+				var cn = parsed.classes[i];
+				if (!Selectors.Filters.byClass(item, cn)) return false;
+			}
+		}
+		if (parsed.attributes){
+			for (i = parsed.attributes.length; i--; i){
+				var att = parsed.attributes[i];
+				if (!Selectors.Filters.byAttribute(item, att.name, att.operator, att.value)) return false;
+			}
+		}
+		if (parsed.pseudos){
+			for (i = parsed.pseudos.length; i--; i){
+				var psd = parsed.pseudos[i];
+				if (!Selectors.Filters.byPseudo(item, psd.parser, psd.argument, local)) return false;
+			}
+		}
+		return true;
+	},
+
+	getByTagAndID: function(ctx, tag, id){
+		if (id){
+			var item = (ctx.getElementById) ? ctx.getElementById(id, true) : Element.getElementById(ctx, id, true);
+			return (item && Selectors.Filters.byTag(item, tag)) ? [item] : [];
+		} else {
+			return ctx.getElementsByTagName(tag);
+		}
+	},
+
+	search: function(self, expression, local){
+		var splitters = [];
+
+		var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){
+			splitters.push(m1);
+			return ':)' + m2;
+		}).split(':)');
+
+		var items, filtered, item;
+
+		for (var i = 0, l = selectors.length; i < l; i++){
+
+			var selector = selectors[i];
+
+			if (i == 0 && Selectors.RegExps.quick.test(selector)){
+				items = self.getElementsByTagName(selector);
+				continue;
+			}
+
+			var splitter = splitters[i - 1];
+
+			var tagid = Selectors.Utils.parseTagAndID(selector);
+			var tag = tagid[0], id = tagid[1];
+
+			if (i == 0){
+				items = Selectors.Utils.getByTagAndID(self, tag, id);
+			} else {
+				var uniques = {}, found = [];
+				for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques);
+				items = found;
+			}
+
+			var parsed = Selectors.Utils.parseSelector(selector);
+
+			if (parsed){
+				filtered = [];
+				for (var m = 0, n = items.length; m < n; m++){
+					item = items[m];
+					if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item);
+				}
+				items = filtered;
+			}
+
+		}
+
+		return items;
+
+	}
+
+};
+
+Selectors.Getters = {
+
+	' ': function(found, self, tag, id, uniques){
+		var items = Selectors.Utils.getByTagAndID(self, tag, id);
+		for (var i = 0, l = items.length; i < l; i++){
+			var item = items[i];
+			if (Selectors.Utils.chk(item, uniques)) found.push(item);
+		}
+		return found;
+	},
+
+	'>': function(found, self, tag, id, uniques){
+		var children = Selectors.Utils.getByTagAndID(self, tag, id);
+		for (var i = 0, l = children.length; i < l; i++){
+			var child = children[i];
+			if (child.parentNode == self && Selectors.Utils.chk(child, uniques)) found.push(child);
+		}
+		return found;
+	},
+
+	'+': function(found, self, tag, id, uniques){
+		while ((self = self.nextSibling)){
+			if (self.nodeType == 1){
+				if (Selectors.Utils.chk(self, uniques) && Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
+				break;
+			}
+		}
+		return found;
+	},
+
+	'~': function(found, self, tag, id, uniques){
+		while ((self = self.nextSibling)){
+			if (self.nodeType == 1){
+				if (!Selectors.Utils.chk(self, uniques)) break;
+				if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
+			}
+		}
+		return found;
+	}
+
+};
+
+Selectors.Filters = {
+
+	byTag: function(self, tag){
+		return (tag == '*' || (self.tagName && self.tagName.toLowerCase() == tag));
+	},
+
+	byID: function(self, id){
+		return (!id || (self.id && self.id == id));
+	},
+
+	byClass: function(self, klass){
+		return (self.className && self.className.contains && self.className.contains(klass, ' '));
+	},
+
+	byPseudo: function(self, parser, argument, local){
+		return parser.call(self, argument, local);
+	},
+
+	byAttribute: function(self, name, operator, value){
+		var result = Element.prototype.getProperty.call(self, name);
+		if (!result) return (operator == '!=');
+		if (!operator || value == undefined) return true;
+		switch (operator){
+			case '=': return (result == value);
+			case '*=': return (result.contains(value));
+			case '^=': return (result.substr(0, value.length) == value);
+			case '$=': return (result.substr(result.length - value.length) == value);
+			case '!=': return (result != value);
+			case '~=': return result.contains(value, ' ');
+			case '|=': return result.contains(value, '-');
+		}
+		return false;
+	}
+
+};
+
+Selectors.Pseudo = new Hash({
+
+	// w3c pseudo selectors
+
+	checked: function(){
+		return this.checked;
+	},
+	
+	empty: function(){
+		return !(this.innerText || this.textContent || '').length;
+	},
+
+	not: function(selector){
+		return !Element.match(this, selector);
+	},
+
+	contains: function(text){
+		return (this.innerText || this.textContent || '').contains(text);
+	},
+
+	'first-child': function(){
+		return Selectors.Pseudo.index.call(this, 0);
+	},
+
+	'last-child': function(){
+		var element = this;
+		while ((element = element.nextSibling)){
+			if (element.nodeType == 1) return false;
+		}
+		return true;
+	},
+
+	'only-child': function(){
+		var prev = this;
+		while ((prev = prev.previousSibling)){
+			if (prev.nodeType == 1) return false;
+		}
+		var next = this;
+		while ((next = next.nextSibling)){
+			if (next.nodeType == 1) return false;
+		}
+		return true;
+	},
+
+	'nth-child': function(argument, local){
+		argument = (argument == undefined) ? 'n' : argument;
+		var parsed = Selectors.Utils.parseNthArgument(argument);
+		if (parsed.special != 'n') return Selectors.Pseudo[parsed.special].call(this, parsed.a, local);
+		var count = 0;
+		local.positions = local.positions || {};
+		var uid = $uid(this);
+		if (!local.positions[uid]){
+			var self = this;
+			while ((self = self.previousSibling)){
+				if (self.nodeType != 1) continue;
+				count ++;
+				var position = local.positions[$uid(self)];
+				if (position != undefined){
+					count = position + count;
+					break;
+				}
+			}
+			local.positions[uid] = count;
+		}
+		return (local.positions[uid] % parsed.a == parsed.b);
+	},
+
+	// custom pseudo selectors
+
+	index: function(index){
+		var element = this, count = 0;
+		while ((element = element.previousSibling)){
+			if (element.nodeType == 1 && ++count > index) return false;
+		}
+		return (count == index);
+	},
+
+	even: function(argument, local){
+		return Selectors.Pseudo['nth-child'].call(this, '2n+1', local);
+	},
+
+	odd: function(argument, local){
+		return Selectors.Pseudo['nth-child'].call(this, '2n', local);
+	},
+	
+	selected: function(){
+		return this.selected;
+	},
+	
+	enabled: function(){
+		return (this.disabled === false);
+	}
+
+});
+
+
+/*
+---
+
+name: Swiff
+
+description: Wrapper for embedding SWF movies. Supports External Interface Communication.
+
+license: MIT-style license.
+
+credits: Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.
+
+requires: [Options, $util]
+
+provides: Swiff
+
+...
+*/
+
+var Swiff = new Class({
+
+	Implements: [Options],
+
+	options: {
+		id: null,
+		height: 1,
+		width: 1,
+		container: null,
+		properties: {},
+		params: {
+			quality: 'high',
+			allowScriptAccess: 'always',
+			wMode: 'transparent',
+			swLiveConnect: true
+		},
+		callBacks: {},
+		vars: {}
+	},
+
+	toElement: function(){
+		return this.object;
+	},
+
+	initialize: function(path, options){
+		this.instance = 'Swiff_' + $time();
+
+		this.setOptions(options);
+		options = this.options;
+		var id = this.id = options.id || this.instance;
+		var container = document.id(options.container);
+
+		Swiff.CallBacks[this.instance] = {};
+
+		var params = options.params, vars = options.vars, callBacks = options.callBacks;
+		var properties = $extend({height: options.height, width: options.width}, options.properties);
+
+		var self = this;
+
+		for (var callBack in callBacks){
+			Swiff.CallBacks[this.instance][callBack] = (function(option){
+				return function(){
+					return option.apply(self.object, arguments);
+				};
+			})(callBacks[callBack]);
+			vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
+		}
+
+		params.flashVars = Hash.toQueryString(vars);
+		if (Browser.Engine.trident){
+			properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
+			params.movie = path;
+		} else {
+			properties.type = 'application/x-shockwave-flash';
+			properties.data = path;
+		}
+		var build = '<object id="' + id + '"';
+		for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
+		build += '>';
+		for (var param in params){
+			if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
+		}
+		build += '</object>';
+		this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
+	},
+
+	replaces: function(element){
+		element = document.id(element, true);
+		element.parentNode.replaceChild(this.toElement(), element);
+		return this;
+	},
+
+	inject: function(element){
+		document.id(element, true).appendChild(this.toElement());
+		return this;
+	},
+
+	remote: function(){
+		return Swiff.remote.apply(Swiff, [this.toElement()].extend(arguments));
+	}
+
+});
+
+Swiff.CallBacks = {};
+
+Swiff.remote = function(obj, fn){
+	var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
+	return eval(rs);
+};
+

Added: packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5.1-more.js
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5.1-more.js?rev=1839&op=file
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5.1-more.js (added)
+++ packages/w3c-markup-validator/trunk/htdocs/scripts/mootools-1.2.5.1-more.js Mon Mar 14 10:47:03 2011
@@ -1,0 +1,189 @@
+/*!
+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.
+*/
+
+/*
+---
+
+script: More.js
+
+name: More
+
+description: MooTools More
+
+license: MIT-style license
+
+requires:
+  - Core/MooTools
+
+provides: [MooTools.More]
+
+...
+*/
+
+MooTools.More = {
+	'version': '1.2.5.1',
+	'build': '254884f2b83651bf95260eed5c6cceb838e22d8e'
+};
+
+
+/*
+---
+
+script: Fx.Slide.js
+
+name: Fx.Slide
+
+description: Effect to slide an element in and out of view.
+
+license: MIT-style license
+
+authors:
+  - Valerio Proietti
+
+requires:
+  - Core/Fx
+  - Core/Element.Style
+  - /MooTools.More
+
+provides: [Fx.Slide]
+
+...
+*/
+
+Fx.Slide = new Class({
+
+	Extends: Fx,
+
+	options: {
+		mode: 'vertical',
+		wrapper: false,
+		hideOverflow: true,
+		resetHeight: false
+	},
+
+	initialize: function(element, options){
+		this.addEvent('complete', function(){
+			this.open = (this.wrapper['offset' + this.layout.capitalize()] != 0);
+			if (this.open && this.options.resetHeight) this.wrapper.setStyle('height', '');
+			if (this.open && Browser.Engine.webkit419) this.element.dispose().inject(this.wrapper);
+		}, true);
+		this.element = this.subject = document.id(element);
+		this.parent(options);
+		var wrapper = this.element.retrieve('wrapper');
+		var styles = this.element.getStyles('margin', 'position', 'overflow');
+		if (this.options.hideOverflow) styles = $extend(styles, {overflow: 'hidden'});
+		if (this.options.wrapper) wrapper = document.id(this.options.wrapper).setStyles(styles);
+		this.wrapper = wrapper || new Element('div', {
+			styles: styles
+		}).wraps(this.element);
+		this.element.store('wrapper', this.wrapper).setStyle('margin', 0);
+		this.now = [];
+		this.open = true;
+	},
+
+	vertical: function(){
+		this.margin = 'margin-top';
+		this.layout = 'height';
+		this.offset = this.element.offsetHeight;
+	},
+
+	horizontal: function(){
+		this.margin = 'margin-left';
+		this.layout = 'width';
+		this.offset = this.element.offsetWidth;
+	},
+
+	set: function(now){
+		this.element.setStyle(this.margin, now[0]);
+		this.wrapper.setStyle(this.layout, now[1]);
+		return this;
+	},
+
+	compute: function(from, to, delta){
+		return [0, 1].map(function(i){
+			return Fx.compute(from[i], to[i], delta);
+		});
+	},
+
+	start: function(how, mode){
+		if (!this.check(how, mode)) return this;
+		this[mode || this.options.mode]();
+		var margin = this.element.getStyle(this.margin).toInt();
+		var layout = this.wrapper.getStyle(this.layout).toInt();
+		var caseIn = [[margin, layout], [0, this.offset]];
+		var caseOut = [[margin, layout], [-this.offset, 0]];
+		var start;
+		switch (how){
+			case 'in': start = caseIn; break;
+			case 'out': start = caseOut; break;
+			case 'toggle': start = (layout == 0) ? caseIn : caseOut;
+		}
+		return this.parent(start[0], start[1]);
+	},
+
+	slideIn: function(mode){
+		return this.start('in', mode);
+	},
+
+	slideOut: function(mode){
+		return this.start('out', mode);
+	},
+
+	hide: function(mode){
+		this[mode || this.options.mode]();
+		this.open = false;
+		return this.set([-this.offset, 0]);
+	},
+
+	show: function(mode){
+		this[mode || this.options.mode]();
+		this.open = true;
+		return this.set([0, this.offset]);
+	},
+
+	toggle: function(mode){
+		return this.start('toggle', mode);
+	}
+
+});
+
+Element.Properties.slide = {
+
+	set: function(options){
+		var slide = this.retrieve('slide');
+		if (slide) slide.cancel();
+		return this.eliminate('slide').store('slide:options', $extend({link: 'cancel'}, options));
+	},
+
+	get: function(options){
+		if (options || !this.retrieve('slide')){
+			if (options || !this.retrieve('slide:options')) this.set('slide', options);
+			this.store('slide', new Fx.Slide(this, this.retrieve('slide:options')));
+		}
+		return this.retrieve('slide');
+	}
+
+};
+
+Element.implement({
+
+	slide: function(how, mode){
+		how = how || 'toggle';
+		var slide = this.get('slide'), toggle;
+		switch (how){
+			case 'hide': slide.hide(mode); break;
+			case 'show': slide.show(mode); break;
+			case 'toggle':
+				var flag = this.retrieve('slide:flag', slide.open);
+				slide[flag ? 'slideOut' : 'slideIn'](mode);
+				this.store('slide:flag', !flag);
+				toggle = true;
+			break;
+			default: slide.start(how, mode);
+		}
+		if (!toggle) this.eliminate('slide:flag');
+		return this;
+	}
+
+});

Modified: packages/w3c-markup-validator/trunk/htdocs/scripts/w3c-validator.js
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/scripts/w3c-validator.js?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/scripts/w3c-validator.js (original)
+++ packages/w3c-markup-validator/trunk/htdocs/scripts/w3c-validator.js Mon Mar 14 10:47:03 2011
@@ -1,3 +1,10 @@
+/*!
+   JavaScript for the W3C Markup Validation Service.
+
+   Copyright 2007-2010 W3C (MIT, INRIA, Keio). All Rights Reserved.
+   See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
+*/
+
 var W3C = {
 
 	start: function(){
@@ -21,7 +28,7 @@
 			var value = submit.value;
 			submit.setStyle('display', 'none');
 			var link = new Element('a', {'class': 'submit', 'href': '#'});
-			var span = new Element('span').setHTML(value).inject(link);
+			var span = new Element('span').set('text', value).inject(link);
 			link.injectAfter(submit).addEvent('click', function(event){
 				new Event(event).stop();
 				W3C.Forms[i].submit();
@@ -87,7 +94,7 @@
 
 		W3C.Sections.each(function(section, i){
 			var fakeId = section.id.replace(/-/g, '_');
-			W3C.SectionFx[i] = new Fx.Style(section, 'opacity', {'wait': false, 'duration': 220});
+			W3C.SectionFx[i] = new Fx.Tween(section, {property:'opacity', link: 'cancel', duration: 220});
 			section.setStyle('display', 'none');
 			if (W3C.Location[0] && fakeId.contains(W3C.Location[0].replace(/-/g, '_'))){
 				W3C.displaySection(i, true);

Modified: packages/w3c-markup-validator/trunk/htdocs/source/index.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/source/index.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/source/index.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/source/index.html Mon Mar 14 10:47:03 2011
@@ -82,7 +82,7 @@
 
           <p>
     openSUSE/SUSE Linux RPM packages of the validator are available,
-    courtesy of Sierk Bornemann, at download.openSUSE.org,
+    courtesy of Sierk Bornemann, at software.openSUSE.org,
     &lt;<a href="http://software.opensuse.org/">http://software.opensuse.org/</a>&gt;.
     Starting with openSUSE 10.3, the latest stable validator package and all its
     dependencies are included in the official stable openSUSE distribution.
@@ -95,7 +95,7 @@
           <p>
     Additionally, you can also get these and other needed packages
     from the openSUSE Software Repository at
-    &lt;<a href="http://software.opensuse.org/download/validators/">http://software.opensuse.org/download/validators/</a>&gt;
+    &lt;<a href="http://download.opensuse.org/repositories/validators/">http://download.opensuse.org/repositories/validators/</a>&gt;
     or from one of its mirrors, or (except needed Perl packages)
     from sierkbornemann.de,
     &lt;<a href="http://sierkbornemann.de/pub/tools/w3c-markup-validator/">http://sierkbornemann.de/pub/tools/w3c-markup-validator/</a>&gt;.

Modified: packages/w3c-markup-validator/trunk/htdocs/style/base.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/style/base.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/style/base.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/style/base.css Mon Mar 14 10:47:03 2011
@@ -1,3 +1,10 @@
+/*!
+   Base Style Sheet for the W3C Markup Validation Service.
+
+   Copyright 2000-2006 W3C (MIT, INRIA, Keio). All Rights Reserved.
+   See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
+*/
+
 /* @group Reset */
 
 html, body, form, fieldset, p, a, ul, ol, li, div, legend, label,
@@ -741,4 +748,4 @@
 div#don_program span#don_program_img img {vertical-align: middle;}
 div#don_program span#don_program_text { }
 div#don_program span#don_program_text a {font-weight: bold;}
-/* @end */
+/* @end */

Added: packages/w3c-markup-validator/trunk/htdocs/style/base.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/style/base.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/style/base.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/style/results.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/style/results.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/style/results.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/style/results.css Mon Mar 14 10:47:03 2011
@@ -1,4 +1,9 @@
-/* style sheet for the validator's results page          */
+/*!
+   Results Style Sheet for the W3C Markup Validation Service.
+
+   Copyright 1999-2010 W3C (MIT, INRIA, Keio). All Rights Reserved.
+   See http://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright
+*/
 
 div#results_container {
   margin: 2em;

Added: packages/w3c-markup-validator/trunk/htdocs/style/results.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/style/results.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/style/results.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/tips.css
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/tips.css?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/tips.css (original)
+++ packages/w3c-markup-validator/trunk/htdocs/tips.css Mon Mar 14 10:47:03 2011
@@ -1,4 +1,4 @@
-/*
+/*!
    Quality Tips Style Sheet for the W3C Markup Validation Service.
 
    Copyright 2000 W3C (MIT, INRIA, Keio). All Rights Reserved.

Added: packages/w3c-markup-validator/trunk/htdocs/tips.css.gz
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/tips.css.gz?rev=1839&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/w3c-markup-validator/trunk/htdocs/tips.css.gz
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: packages/w3c-markup-validator/trunk/htdocs/whatsnew.html
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/htdocs/whatsnew.html?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/htdocs/whatsnew.html (original)
+++ packages/w3c-markup-validator/trunk/htdocs/whatsnew.html Mon Mar 14 10:47:03 2011
@@ -26,6 +26,65 @@
     </div>
     <dl id="news">
 
+      <dt id="v12">2010-12-12 &mdash; 1.2 release:</dt>
+      <dd>
+        <p>
+          The 1.2 release of the markup validator is an enhancement and
+          bug fix release. Changes include:
+        </p>
+        <ul>
+          <li>
+            New feature: limited support for IRI's.
+          </li>
+          <li>
+            Enhancement: several updates to validator's internal DTD library
+            and catalog, including
+            <a href="http://www.w3.org/TR/xhtml-modularization/">XHTML
+              modularization</a> 1.1 second edition,
+            <a href="http://www.w3.org/TR/xhtml-basic/">XHTML Basic</a> 1.1
+            second edition, and
+            <a href="http://www.w3.org/TR/xhtml-rdfa/">XHTML + RDFa</a> 1.1
+            20101109 working draft.
+          </li>
+          <li>
+            Enhancement: undefined entity errors from libxml are no longer
+            suppressed as support for external entities is enabled in it since
+            validator version 1.0.
+          </li>
+          <li>
+            Enhancement: minor configuration parsing performance improvements.
+          </li>
+          <li>
+            Enhancement: <a href="http://mootools.net/">MooTools</a> JavaScript
+            library updated to version 1.2.5 + MooTools more 1.2.5.1.
+          </li>
+          <li>
+            Enhancement: CSS and JavaScript files are now content negotiated
+            and served in gzip compressed form to user agents that indicate
+            support for gzip in their <code>Accept-Encoding</code> header.
+          </li>
+          <li>
+            Enhancement: the "Home Page" configuration parameter is no longer
+            required or used.
+          </li>
+          <li>
+            Enhancement: list of the parsers actually used for a validation
+            is now included in valid results.
+          </li>
+          <li>
+            Enhancement: documentation improvements, code cleanups.
+          </li>
+          <li>
+            Bug fixes to <a href="http://validator.w3.org/unicorn/">Unicorn</a>
+            and <a href="docs/api.html">SOAP</a> output templates.
+          </li>
+          <li>
+            Dependency changes: new minimum required versions: CGI 3.40,
+            URI 1.53.
+          </li>
+        </ul>
+      </dd>
+
       <dt id="v11">2010-07-07 &mdash; 1.1 release:</dt>
       <dd>
         <p>
@@ -123,7 +182,8 @@
           <li>
             Enhancement: improved error handling and diagnostics for problems
             occurred when decoding Content-Encodings, when cleaning up
-            markup with Tidy, and when interfacing with the HTML5 validator.
+            markup with HTML-Tidy, and when interfacing with the HTML5
+            validator.
           </li>
           <li>
             Enhancement: recognition of more (non-recommended) aliases for
@@ -200,8 +260,8 @@
           <li>
             Bug fix:
             <a href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=7592">"wide
-              characters"</a> in Tidy's output caused an error which prevented
-            the whole Tidy output from being displayed.
+              characters"</a> in HTML-Tidy's output caused an error which
+            prevented the whole tidied output from being displayed.
           </li>
           <li>
             Bug fix: there were
@@ -220,8 +280,8 @@
           </li>
           <li>
             Bug fix: the state of the "validate error pages", verbosity,
-            error grouping, and "clean up with Tidy" options were not always
-            preserved.
+            error grouping, and "clean up with HTML-Tidy" options were not
+            always preserved.
           </li>
           <li>
             Bug fix: several issues in error message locators in shown
@@ -451,7 +511,7 @@
         </p>
         <ul>
           <li>
-            Bug Fix: processing of documents through HTML Tidy would be
+            Bug Fix: processing of documents through HTML-Tidy would be
             triggered even when not requested. The fix should provide a
             noticeable performance boost.
           </li>
@@ -614,7 +674,7 @@
             Improved interface for better usability, accessibility.
           </li>
           <li>
-            New feature: automatic cleanup of markup (with Tidy).
+            New feature: automatic cleanup of markup (with HTML-Tidy).
           </li>
           <li>
             New feature: additional XML-Well-Formedness check, for more
@@ -1451,7 +1511,7 @@
         <p>
           Added support for a parameter to check the referring Web page for
           mistakes. To use it, just link to the following URL when linking to
-          the service &lt;<a href="http://validator.w3.org/check/referer">http://validator.w3.org/check/referer</a>&gt;
+          the service &lt;<a href="http://validator.w3.org/check?uri=referer">http://validator.w3.org/check?uri=referer</a>&gt;
           (you can try the link to see how it works).
         </p>
       </dd>

Modified: packages/w3c-markup-validator/trunk/httpd/cgi-bin/check
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/httpd/cgi-bin/check?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/httpd/cgi-bin/check (original)
+++ packages/w3c-markup-validator/trunk/httpd/cgi-bin/check Mon Mar 14 10:47:03 2011
@@ -40,7 +40,8 @@
 # polluting our namespace.
 #
 
-use CGI 2.81 qw(-newstyle_urls -private_tempfiles redirect);
+# Need 3.40 for query string and path info fixes, #4365
+use CGI 3.40 qw(-newstyle_urls -private_tempfiles redirect);
 use CGI::Carp qw(carp croak fatalsToBrowser);
 use Config qw(%Config);
 use Config::General 2.32 qw();    # Need 2.32 for <msg 0>, rt.cpan.org#17852
@@ -59,7 +60,7 @@
 use HTTP::Headers::Auth qw();      # Needs to be imported after other HTTP::*.
 use JSON 2.00 qw();
 use SGML::Parser::OpenSP 0.991 qw();
-use URI qw();
+use URI 1.53 qw();                 # Need 1.53 for secure()
 use URI::Escape qw(uri_escape);
 use URI::file;
 use URI::Heuristic qw();
@@ -81,7 +82,7 @@
 #
 # Define global variables.
 use vars qw($DEBUG $CFG %RSRC $VERSION);
-$VERSION = '1.1';
+$VERSION = '1.2';
 
 use constant IS_MODPERL2 =>
     (exists($ENV{MOD_PERL_API_VERSION}) && $ENV{MOD_PERL_API_VERSION} >= 2);
@@ -112,6 +113,7 @@
             -InterPolateVars       => TRUE,
             -AutoLaunder           => TRUE,
             -AutoTrue              => TRUE,
+            -CComments             => FALSE,
             -DefaultConfig         => {
                 Protocols => {Allow => 'http,https'},
                 Paths     => {
@@ -275,6 +277,7 @@
 # Listrefs.
 $File->{Warnings}   = [];    # Warnings...
 $File->{Namespaces} = [];    # Other (non-root) Namespaces.
+$File->{Parsers}    = [];    # Parsers used {name, link, type, options}
 
 # By default, doctype-less documents can not be valid
 $File->{"DOCTYPEless OK"}             = FALSE;
@@ -458,7 +461,10 @@
 elsif ($File->{Charset}->{XML}) {
     $File->{Charset}->{Use} = $File->{Charset}->{XML};
 }
-elsif ($File->{Charset}->{Auto} =~ /^utf-16[bl]e$/ && $File->{BOM} == 2) {
+elsif ($File->{BOM} &&
+    $File->{BOM} == 2 &&
+    $File->{Charset}->{Auto} =~ /^utf-16[bl]e$/)
+{
     $File->{Charset}->{Use} = 'utf-16';
 }
 elsif ($File->{ContentType} =~ m(^application/([-.a-zA-Z0-9]+\+)?xml$)) {
@@ -556,6 +562,7 @@
 #
 # Add a warning if doc is UTF-8 and contains a BOM.
 if ($File->{Charset}->{Use} eq 'utf-8' &&
+    @{$File->{Content}} &&
     $File->{Content}->[0] =~ m(^\x{FEFF}))
 {
     &add_warning('W21', {});
@@ -603,7 +610,8 @@
 
 # before we start the parsing, clean slate
 $File->{'Is Valid'} = TRUE;
-$File->{Errors} = [];
+$File->{Errors}     = [];
+$File->{WF_Errors}  = [];
 
 if (($File->{DOCTYPE} eq "HTML5") or ($File->{DOCTYPE} eq "XHTML5")) {
     if ($CFG->{External}->{HTML5}) {
@@ -837,7 +845,7 @@
             filename => $fname,
             @opts
         );
-        $tmpl->param(cfg_home_page     => $CFG->{'Home Page'});
+        $tmpl->param(env_home_page     => $File->{Env}->{'Home Page'});
         $tmpl->param(validator_version => $VERSION);
         $File->{_Templates}->{$fname} = $tmpl;
     }
@@ -851,6 +859,9 @@
     if ($File->{Opt}->{Output} eq 'soap12') {
         $fname = 'soap_fault.tmpl';
     }
+    elsif ($File->{Opt}->{Output} eq 'ucn') {
+        $fname = 'ucn_fault.tmpl';
+    }
     return &get_template($File, $fname, @opts);
 }
 
@@ -860,8 +871,14 @@
     my $File = shift;
     my $ua = W3C::Validator::UserAgent->new($CFG, $File);
 
-    $File->{ParserName} = "validator.nu";
-    $File->{ParserOpts} = "";
+    push(
+        @{$File->{Parsers}},
+        {   name    => "Compound XML",
+            link    => "http://qa-dev.w3.org/",    # TODO?
+            type    => "",
+            options => ""
+        }
+    );
 
     my $url = URI->new($CFG->{External}->{CompoundXML});
     $url->query("out=xml");
@@ -1015,8 +1032,14 @@
     my $File = shift;
     my $ua = W3C::Validator::UserAgent->new($CFG, $File);
 
-    $File->{ParserName} = "validator.nu";
-    $File->{ParserOpts} = "";
+    push(
+        @{$File->{Parsers}},
+        {   name    => "validator.nu",
+            link    => "http://validator.nu/",
+            type    => "HTML5",
+            options => ""
+        }
+    );
 
     my $url = URI->new($CFG->{External}->{HTML5});
     $url->query("out=xml");
@@ -1185,9 +1208,8 @@
 
 sub dtd_validate (\$)
 {
-    my $File        = shift;
-    my $opensp      = SGML::Parser::OpenSP->new();
-    my $parser_name = "SGML::Parser::OpenSP";
+    my $File   = shift;
+    my $opensp = SGML::Parser::OpenSP->new();
 
     #
     # By default, use SGML catalog file and SGML Declaration.
@@ -1208,8 +1230,14 @@
         push(@spopt, 'min-tag');
     }
 
-    $File->{ParserName} = $parser_name;
-    $File->{ParserOpts} = join(" ", @spopt);
+    push(
+        @{$File->{Parsers}},
+        {   name    => "OpenSP",
+            link    => "http://openjade.sourceforge.net/",
+            type    => "SGML/XML",
+            options => join(" ", @spopt)
+        }
+    );
 
     #
     # Parser configuration
@@ -1266,6 +1294,15 @@
     $xmlparser->base_uri($File->{URI})
         unless ($File->{'Direct Input'} || $File->{'Is Upload'});
 
+    push(
+        @{$File->{Parsers}},
+        {   name    => "libxml2",
+            link    => "http://xmlsoft.org/",
+            type    => "XML",
+            options => ""
+        }
+    );
+
     # Restrict file reading similar to what SGML::Parser::OpenSP does.  Note
     # that all inputs go through the callback so if we were passing a
     # URI/filename to the parser, it would be affected as well and would break
@@ -1277,22 +1314,7 @@
 
     &override_charset($File, "UTF-8");
 
-    my $xml_string = join "\n", @{$File->{Content}};
-
-    my $xmlws = qr/[\x20\x09\x0D\x0A]/o;
-
-    # Is the document standalone?  Need to check with a regex because the
-    # parser may fail to return a document we could use for this.
-    my $standalone = (
-        $xml_string =~ /^<\?xml\b[^>]*${xmlws}
-                                      standalone${xmlws}*=${xmlws}*
-                                      (["'])yes\1
-                                     /sox
-    );
-
-    eval { $xmlparser->parse_string($xml_string); };
-    $xml_string = undef;
-    my @xmlwf_error_list;
+    eval { $xmlparser->parse_string(join("\n", @{$File->{Content}})); };
 
     if (ref($@)) {
 
@@ -1311,17 +1333,7 @@
 
             $err_obj = $err_obj->_prev();
 
-            # The validator will sometimes fail to dereference entities files;
-            # we're filtering the resulting bogus error for non-standalone
-            # documents. @@@TODO: is this still needed?
-            if (!$standalone &&
-                $err->{msg} =~ /Entity '\w+' not defined/)
-            {
-                $err = undef;
-                next;
-            }
-
-            unshift(@xmlwf_error_list, $err);
+            unshift(@{$File->{WF_Errors}}, $err);
         }
     }
     elsif ($@) {
@@ -1411,29 +1423,15 @@
                 $err->{type} = "E";
                 $err->{msg}  = $xmlwf_error_msg;
 
-                # The validator will sometimes fail to dereference entities
-                # files; we're filtering the resulting bogus error for
-                # non-standalone documents. @@@TODO: is this still needed?
-                if (!$standalone &&
-                    $err->{msg} =~ /Entity '\w+' not defined/)
-                {
-                    $xmlwf_error_line = undef;
-                    $xmlwf_error_col  = undef;
-                    $xmlwf_error_msg  = undef;
-                    next;
-                }
-                push(@xmlwf_error_list, $err);
+                push(@{$File->{WF_Errors}}, $err);
                 $xmlwf_error_line = undef;
                 $xmlwf_error_col  = undef;
                 $xmlwf_error_msg  = undef;
             }
         }
     }
-    foreach my $errmsg (@xmlwf_error_list) {
-        $File->{'Is Valid'} = FALSE;
-        push @{$File->{WF_Errors}}, $errmsg;
-    }
-
+
+    $File->{'Is Valid'} = FALSE if @{$File->{WF_Errors}};
     return $File;
 }
 
@@ -1458,8 +1456,13 @@
 
     #
     # The URI...
-    $T->param(file_uri       => $File->{URI});
-    $T->param(file_uri_param => uri_escape($File->{URI}));
+    $T->param(file_uri => $File->{URI});
+
+    #
+    # HTTPS note?
+    $T->param(file_https_note => $File->{'Is Upload'} ||
+            $File->{'Direct Input'} ||
+            URI->new($File->{URI})->secure());
 
     #
     # Set URL for page title.
@@ -1494,16 +1497,12 @@
 
     # Namespaces...
     $T->param(file_namespace => $File->{Namespace});
+
+    # Non-root ones; unique, preserving occurrence order
     my %seen_ns = ();
-    my @bulk_ns = @{$File->{Namespaces}};
-    $File->{Namespaces} = [];    # reinitialize the list of non-root namespaces
-                                 # ... and then get a uniq version of it
-    foreach my $single_namespace (@bulk_ns) {
-        push(@{$File->{Namespaces}}, $single_namespace)
-            unless (($single_namespace eq $File->{Namespace}) or
-            $seen_ns{$single_namespace}++);
-    }
-    my @nss = map({uri => $_}, @{$File->{Namespaces}});
+    $seen_ns{$File->{Namespace}}++ if defined($File->{Namespace});
+    my @nss =
+        map { $seen_ns{$_}++ == 0 ? {uri => $_} : () } @{$File->{Namespaces}};
     $T->param(file_namespaces => \@nss) if @nss;
 
     if ($File->{Opt}->{DOCTYPE}) {
@@ -1541,22 +1540,30 @@
     my $T    = shift;
 
     #
-    # Set debug info for HTML report.
-    $T->param(opt_debug => $DEBUG);
-    $T->param(
-        debug => [
-            map({name => $_, value => $ENV{$_}},
-                qw(no_proxy http_proxy https_proxy ftp_proxy FTP_PASSIVE)),
-            {name => 'Content-Encoding',  value => $File->{ContentEnc}},
-            {name => 'Content-Language',  value => $File->{ContentLang}},
-            {name => 'Content-Location',  value => $File->{ContentLoc}},
-            {name => 'Transfer-Encoding', value => $File->{TransferEnc}},
-            {name => 'Parse Mode',        value => $File->{Mode}},
-            {name => 'Parse Mode Factor', value => $File->{ModeChoice}},
-            {name => 'Parser',            value => $File->{ParserName}},
-            {name => 'Parser Options',    value => $File->{ParserOpts}},
-        ],
-    );
+    # Set debug info for HTML and SOAP reports.
+    if ($DEBUG) {
+        my @parsers;
+        for my $parser (@{$File->{Parsers}}) {
+            my $p = $parser->{name};
+            $p .= " (" . $parser->{options} . ")" if $parser->{options};
+            push(@parsers, $p);
+        }
+        $T->param(
+            debug => [
+                map({name => $_, value => $ENV{$_}},
+                    qw(no_proxy http_proxy https_proxy ftp_proxy FTP_PASSIVE)),
+                {name => 'Content-Encoding',  value => $File->{ContentEnc}},
+                {name => 'Content-Language',  value => $File->{ContentLang}},
+                {name => 'Content-Location',  value => $File->{ContentLoc}},
+                {name => 'Transfer-Encoding', value => $File->{TransferEnc}},
+                {name => 'Parse Mode',        value => $File->{Mode}},
+                {name => 'Parse Mode Factor', value => $File->{ModeChoice}},
+                {name => 'Parsers Used',      value => join(", ", @parsers)},
+            ],
+        );
+    }
+
+    $T->param(parsers => $File->{Parsers});
 
     if (!$File->{Doctype} &&
         (!$File->{Version} ||
@@ -1697,7 +1704,7 @@
         have_warnings => TRUE,
         %$params,
     );
-    for my $tmpl (qw(result fatal-error soap_output)) {
+    for my $tmpl (qw(result fatal-error soap_output ucn_output)) {
         &get_template($File, "$tmpl.tmpl")->param(%tmplparams);
     }
 }
@@ -1893,12 +1900,20 @@
     my $q    = shift;    # The CGI object.
     my $File = shift;    # The master datastructure.
 
-    my $f = $q->param('uploaded_file');
-    my $h = $q->uploadInfo($f);
-    my $file;
+    my $p = $q->param('uploaded_file');
+    my $f = $q->upload('uploaded_file');
+    if (!defined($f)) {
+
+        # Probably not an uploaded file as far as CGI is concerned,
+        # treat as a fragment.
+        $q->param('fragment', $p);
+        return &handle_frag($q, $File);
+    }
+
+    my $h = $q->uploadInfo($p);
 
     local $/ = undef;    # set line delimiter so that <> reads rest of file
-    $file = <$f>;
+    my $file = <$f>;
 
     my ($mode, $ct, $charset) =
         &parse_content_type($File, $h->{'Content-Type'});
@@ -1910,7 +1925,7 @@
     $File->{Modified}        = $q->http('Last-Modified');
     $File->{Server}          = $q->http('User-Agent');   # Fake a "server". :-)
     $File->{Size}           = $q->http('Content-Length');
-    $File->{URI}            = "$f";
+    $File->{URI}            = "$p";
     $File->{'Is Upload'}    = TRUE;
     $File->{'Direct Input'} = FALSE;
 
@@ -2045,7 +2060,7 @@
     return unless $lvl =~ m/^\d+$/;    # Non-digit, i.e. garbage, ignore.
 
     if ($lvl >= $CFG->{'Max Recursion'}) {
-        print redirect $CFG->{'Home Page'};
+        print redirect $File->{Env}->{'Home Page'};
     }
     else {
 
@@ -2367,9 +2382,7 @@
     # for the sake of readability, at least until the xmlwf errors have
     # explanations, we push the errors from the XML parser at the END of the
     # error list.
-    foreach my $errmsg (@{$File->{WF_Errors}}) {
-        push @{$File->{Errors}}, $errmsg;
-    }
+    push @{$File->{Errors}}, @{$File->{WF_Errors}};
 
     if (scalar @{$File->{Errors}}) {
         foreach my $err (@{$File->{Errors}}) {
@@ -2428,10 +2441,10 @@
                         my $escaped_uri = uri_escape($File->{URI});
                         $_msg =~ s/<!--URI-->/$escaped_uri/g;
                     }
-                    $explanation =
-                        "    $_msg\n$explanation";    # The send feedback plea.
-                    $explanation =~
-                        s/<!--CFG_HOME_PAGE-->/$CFG->{'Home Page'}/g;
+
+                    # The send feedback plea.
+                    $explanation = "    $_msg\n$explanation";
+                    $explanation =~ s/<!--#echo\s+var="relroot"\s*-->//g;
                 }
                 $err->{expl} = $explanation;
             }
@@ -2475,14 +2488,18 @@
                 if (!exists $Errors_bytype{$err->{num}}) {
                     $Errors_bytype{$err->{num}}->{instances} = [];
                     my $msg_text;
-                    if ($err->{num} ne 'xmlwf') {
+                    if ($err->{num} eq 'xmlwf') {
+
+                        # FIXME need a catalog of errors from XML::LibXML
+                        $msg_text = "XML Parsing Error";
+                    }
+                    elsif ($err->{num} eq 'html5') {
+                        $msg_text = "HTML5 Validator Error";
+                    }
+                    else {
                         $msg_text = $RSRC{msg}->{$err->{num}}->{original};
                         $msg_text =~ s/%1/X/;
                         $msg_text =~ s/%2/Y/;
-                    }
-                    else
-                    {  ## FIXME we need a catalog of errors from our XML parser
-                        $msg_text = "XML Parsing Error";
                     }
                     $Errors_bytype{$err->{num}}->{expl}        = $err->{expl};
                     $Errors_bytype{$err->{num}}->{generic_msg} = $msg_text;
@@ -2748,47 +2765,37 @@
     my $File = shift;
     my $q    = shift;
 
-    my $path_info;
-    {
-
-        # @@@HACK:
-        # CGI.pm's _name_and_path_from_env has query string related issues;
-        # just trump the query string for the duration of calling methods we
-        # know we don't need it for and which have been affected in the past.
-        # More info: http://www.w3.org/Bugs/Public/show_bug.cgi?id=4365
-        # ->url() reportedly fixed in CGI.pm 3.34, ->path_info() in 3.40.
-
-        local $ENV{REQUEST_URI} = URI->new($ENV{REQUEST_URI})->path()
-            if $ENV{REQUEST_URI};
-
-        # The URL to this CGI script.
-        $File->{Env}->{'Self URI'} = $q->url();
-
-        $path_info = $q->path_info();
-    }
-
-    # Avoid CGI.pm's "exists but undef" behaviour.
-    if (scalar $q->param) {
-        foreach my $param ($q->param) {
-            next if $param eq 'uploaded_file'; # 'uploaded_file' contains data.
-            next if $param eq 'fragment';      # Ditto 'fragment'.
-            next
-                if $param eq 'accept'
-            ;    # Original checking had a specific Accept: header sent.
-            next if $param eq 'accept-language';    # Ditto Accept-Language:.
-            next if $param eq 'accept-charset';     # Ditto Accept-Charset:.
-            next if $q->param($param) eq '0';    # Keep false-but-set params.
-
-            #
-            # Parameters that are given to us without specifying a value get
-            # set to "1" (the "TRUE" constant). This is so we can test for the
-            # boolean value of a parameter instead of first checking whether
-            # the param was given and then testing its value. Needed because
-            # CGI.pm sets ";param" and ";param=" to a boolean false value
-            # (undef() or a null string, respectively).
-            $q->param($param, TRUE) unless $q->param($param);
-        }
-    }
+    # The URL to this CGI script.
+    $File->{Env}->{'Self URI'} = $q->url();
+
+    # Decode parameter values, set booleans the way we expect them.
+    foreach my $param ($q->param()) {
+
+        # 'uploaded_file' and 'fragment' contain data we treat as is.
+        next if ($param eq 'uploaded_file' || $param eq 'fragment');
+
+        # Decode all other defined values as UTF-8.
+        my @values = map { Encode::decode_utf8($_) } $q->param($param);
+        $q->param($param, @values);
+
+        # Original checking had a specific Accept: header sent.
+        next if $param eq 'accept';
+
+        # Ditto Accept-Language:.
+        next if $param eq 'accept-language';
+
+        # Ditto Accept-Charset:.
+        next if $param eq 'accept-charset';
+
+        # Keep false-but-set params.
+        next if $q->param($param) eq '0';
+
+        # Parameters that are given to us without specifying a value get set
+        # to a true value.
+        $q->param($param, TRUE) unless $q->param($param);
+    }
+
+    my $path_info = $q->path_info();
 
     # IIS reportedly does not provide the $path_info we expect - hack around it.
     $path_info =~ s|(.*)/check\.pl(.*)$|$2|
@@ -2818,6 +2825,9 @@
         }
         exit;
     }
+
+    $File->{Env}->{'Home Page'} =
+        URI->new_abs(".", $File->{Env}->{'Self URI'});
 
     # Use "url" unless a "uri" was also given.
     if ($q->param('url') and not $q->param('uri')) {
@@ -3215,9 +3225,9 @@
         # Transcoding failed - do it again line by line to find out exactly
         # where
         my $line_num = 0;
-        foreach my $input_line (split /\r\n|\n|\r/, $input) {
+        while ($input =~ /(.*?)(?:\r\n|\n|\r)/g) {
             $line_num++;
-            eval { $enc->decode($input_line, Encode::FB_CROAK); };
+            eval { $enc->decode($1, Encode::FB_CROAK); };
             if ($@) {
                 my $croak_message = $@;
                 $croak_message =~ s/ at .*//;
@@ -3227,6 +3237,7 @@
                 $tmpl->param(fatal_byte_lines     => $line_num);
                 $tmpl->param(fatal_byte_charset   => $cs);
                 $tmpl->param(fatal_byte_error_msg => $croak_message);
+                last;
             }
         }
         return $File;

Modified: packages/w3c-markup-validator/trunk/httpd/cgi-bin/sendfeedback.pl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/httpd/cgi-bin/sendfeedback.pl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/httpd/cgi-bin/sendfeedback.pl (original)
+++ packages/w3c-markup-validator/trunk/httpd/cgi-bin/sendfeedback.pl Mon Mar 14 10:47:03 2011
@@ -44,6 +44,7 @@
             -InterPolateVars       => TRUE,
             -AutoLaunder           => TRUE,
             -AutoTrue              => TRUE,
+            -CComments             => FALSE,
             -DefaultConfig         => {Paths => {Base => $base,},},
         );
         my %cfg = Config::General->new(%config_opts)->getall();

Modified: packages/w3c-markup-validator/trunk/httpd/conf/httpd.conf
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/httpd/conf/httpd.conf?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/httpd/conf/httpd.conf (original)
+++ packages/w3c-markup-validator/trunk/httpd/conf/httpd.conf Mon Mar 14 10:47:03 2011
@@ -46,7 +46,14 @@
   AllowOverride         None
   AddHandler            server-parsed .html
   AddCharset            utf-8         .html
-            
+  AddEncoding           x-gzip        .gz
+  <Files *.js.gz>
+    ForceType           application/javascript
+  </Files>
+  <Files *.css.gz>
+    ForceType           text/css
+  </Files>
+
   <IfModule mod_rewrite.c>
   Options +SymLinksIfOwnerMatch
   RewriteEngine On

Modified: packages/w3c-markup-validator/trunk/misc/bundle/META.yml
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/misc/bundle/META.yml?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/misc/bundle/META.yml (original)
+++ packages/w3c-markup-validator/trunk/misc/bundle/META.yml Mon Mar 14 10:47:03 2011
@@ -1,6 +1,6 @@
 --- #YAML:1.0
 name:               Bundle-W3C-Validator
-version:            1.1
+version:            1.2
 abstract:           Bundle of modules required by the W3C Markup Validator
 author:
     - W3C QA-dev Team <public-qa-dev at w3.org>
@@ -11,7 +11,7 @@
 build_requires:
     ExtUtils::MakeMaker:  0
 requires:
-    CGI:                  2.81
+    CGI:                  3.40
     CGI::Carp:            0
     Config:               0
     Config::General:      2.32
@@ -36,7 +36,7 @@
     Net::IP:              0
     SGML::Parser::OpenSP:  0.991
     Socket:               0
-    URI:                  0
+    URI:                  1.53
     URI::Escape:          0
     URI::file:            0
     URI::Heuristic:       0

Modified: packages/w3c-markup-validator/trunk/misc/bundle/Makefile.PL
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/misc/bundle/Makefile.PL?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/misc/bundle/Makefile.PL (original)
+++ packages/w3c-markup-validator/trunk/misc/bundle/Makefile.PL Mon Mar 14 10:47:03 2011
@@ -13,7 +13,7 @@
     PREREQ_PM     => {
 
         # Hard dependencies:
-        "CGI"                   => 2.81,
+        "CGI"                   => "3.40",
         "CGI::Carp"             => 0,
         "Config"                => 0,
         "Config::General"       => 2.32,
@@ -36,7 +36,7 @@
         "Net::IP"               => 0,
         "SGML::Parser::OpenSP"  => 0.991,
         "Socket"                => 0,
-        "URI"                   => 0,
+        "URI"                   => 1.53,
         "URI::Escape"           => 0,
         "URI::file"             => 0,
         "URI::Heuristic"        => 0,

Modified: packages/w3c-markup-validator/trunk/misc/bundle/SIGNATURE
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/misc/bundle/SIGNATURE?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/misc/bundle/SIGNATURE (original)
+++ packages/w3c-markup-validator/trunk/misc/bundle/SIGNATURE Mon Mar 14 10:47:03 2011
@@ -15,19 +15,19 @@
 Hash: SHA1
 
 SHA1 645692d934e05bf18bec1417377bb63db46f813c MANIFEST
-SHA1 45fb1e586c2175f1fb2ef79b7d2210716d6bd8da META.yml
-SHA1 f92ad9a50b3fd3b5c25a942c2bc942e7a514c262 Makefile.PL
+SHA1 0fc89574ed143b7ac5a57fca196ffbe0fdbe7db7 META.yml
+SHA1 0307313614755e7bb4ed80e5ef05f36d2132e890 Makefile.PL
 SHA1 b5ff6c7c2f6154d0859a7126aef54e658de169e7 README
-SHA1 03e05b7f909487901312215d0d3c61217d80c4ef lib/Bundle/W3C/Validator.pm
+SHA1 0d3f2a0c3b46409026d5fc9340e2730d94e37a86 lib/Bundle/W3C/Validator.pm
 SHA1 77da198169b0682e4d5d7a4e620d80b49501c7c2 t/00load.t
 -----BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.14 (GNU/Linux)
+Version: GnuPG v1.4.11 (GNU/Linux)
 
-iQEVAwUBTDNa7Id580Rxl2NsAQIRygf+L67lnS4osMTJvNfgkb9322yFaggY/q8m
-oR4yJIGv5Hp3WECLJrFTZc5UQQTG9n++Q5YkFmchMLKNmziSSZOD1FJylbA6RLbU
-TmjZMeHax956GQyyD/FxLZ0/i8CKcg5Qz4AjTKLgNlGj3C7wODxwsTHytfloKO6s
-nLAB75BQHvvhwyZlIIjoZDXv0hpunHXvKdNOsJDy6GcSxiHdnxPp0YXn3cB+Zl9m
-jRqmPCN42raeh96nbMCmlMrqPIYHBio5sKGPlsrFEgMm7GgrG132MBdx/3WRJWg/
-c9alCBXHUXZHuQp+EtKgah99VaVjoH/FHM9LxR/iwoD47RvC+iptbQ==
-=o+DZ
+iQEVAwUBTQSfGYd580Rxl2NsAQI+nwf+JdcZ0bUeIXigRwfpBqwUwJkZ6ybTfC6S
+QbLTUxKkaxedvBSj+kEqOa0wQHHj/pWLA2Is42TFE0JH7qAzns/ZjufBh+2kg2Le
+Yz65HUo3uMNPUV5MrYbo1gEikhPKjd4O6yoo0VChlJbzrAA490HVKnuF/jaDiG51
+ZeOV3nqcWmbcgr1tpuy/vWlN9fWF/qZy+GDkbqPtwLfPJWN51RaPuMvBxD3KrRbH
+WYrFGNjm5+R7PMC4Qjz8wlmDttkt979CzJt8UOWpxl1DEBJuGb1xIGEN2EmzwhsU
+Kro+Z9Sq3WOAlQFhsyUdRBF+Hg/Q898eh2mSbqMw6D4pCLzbvufgSw==
+=FaeA
 -----END PGP SIGNATURE-----

Modified: packages/w3c-markup-validator/trunk/misc/bundle/lib/Bundle/W3C/Validator.pm
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/misc/bundle/lib/Bundle/W3C/Validator.pm?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/misc/bundle/lib/Bundle/W3C/Validator.pm (original)
+++ packages/w3c-markup-validator/trunk/misc/bundle/lib/Bundle/W3C/Validator.pm Mon Mar 14 10:47:03 2011
@@ -5,7 +5,7 @@
 use warnings;
 
 use vars qw($VERSION);
-$VERSION = '1.1';
+$VERSION = '1.2';
 
 1;
 
@@ -21,7 +21,7 @@
 
 =head1 CONTENTS
 
- CGI 2.81
+ CGI 3.40
  CGI::Carp
  Config
  Config::General 2.32
@@ -46,7 +46,7 @@
  Net::hostent
  SGML::Parser::OpenSP 0.991
  Socket
- URI
+ URI 1.53
  URI::Escape
  URI::file
  URI::Heuristic

Modified: packages/w3c-markup-validator/trunk/misc/docs_errors.pl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/misc/docs_errors.pl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/misc/docs_errors.pl (original)
+++ packages/w3c-markup-validator/trunk/misc/docs_errors.pl Mon Mar 14 10:47:03 2011
@@ -96,8 +96,6 @@
                 $single_error{original} = $original;
                 $single_error{id}       = $error_id;
                 $single_error{verbose}  = $rsrc->{msg}->{$error_id}->{verbose};
-                $single_error{verbose} =~
-                    s/<!--CFG_HOME_PAGE-->/$CFG->{'Home Page'}/g;
 
                 push @{$errors}, \%single_error;
 

Modified: packages/w3c-markup-validator/trunk/misc/w3c-markup-validator.spec
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/misc/w3c-markup-validator.spec?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/misc/w3c-markup-validator.spec (original)
+++ packages/w3c-markup-validator/trunk/misc/w3c-markup-validator.spec Mon Mar 14 10:47:03 2011
@@ -43,8 +43,7 @@
 %{__perl} -pi -e \
   's|^(\s*Library\s*=\s*).*|${1}%{_datadir}/sgml/%{name}| ;
    s|^(\s*TidyConf\s*=\s*).*|${1}%{_sysconfdir}/w3c/tidy.conf| ;
-   s|\bwww-validator\@w3\.org\b|root\@localhost| ;
-   s|/validator\.w3\.org/|/localhost/w3c-validator/|' \
+   s|\bwww-validator\@w3\.org\b|root\@localhost|' \
   htdocs/config/validator.conf
 
 # Move config out of the way

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/earl_xml.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/earl_xml.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/earl_xml.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/earl_xml.tmpl Mon Mar 14 10:47:03 2011
@@ -13,13 +13,13 @@
   xmlns:ptr="http://www.w3.org/2009/pointers#"
   xmlns="http://www.w3.org/ns/earl#">
 
-  <Software rdf:about="<TMPL_VAR NAME="cfg_home_page">about.html">
+  <Software rdf:about="<TMPL_VAR NAME="env_home_page">about.html">
     <dct:title xml:lang="en">W3C Markup Validation Service</dct:title>
     <dct:description xml:lang="en">
       The W3C Markup Validation Service is a free service by W3C that helps
       check the validity of Web documents.
     </dct:description>
-    <foaf:homepage><TMPL_VAR NAME="cfg_home_page"></foaf:homepage>
+    <foaf:homepage><TMPL_VAR NAME="env_home_page"></foaf:homepage>
     <dct:hasVersion><TMPL_VAR NAME="validator_version"></dct:hasVersion>
   </Software>
 
@@ -29,7 +29,7 @@
 
 <TMPL_IF NAME="VALID">
   <Assertion>
-    <assertedBy rdf:resource="<TMPL_VAR NAME="cfg_home_page">about.html"/>
+    <assertedBy rdf:resource="<TMPL_VAR NAME="env_home_page">about.html"/>
     <test rdf:resource="http://www.w3.org/Markup/"/>
     <subject rdf:resource="<TMPL_VAR NAME="file_uri">"/>
     <mode rdf:resource="http://www.w3.org/ns/earl#automatic"/>
@@ -38,7 +38,7 @@
 <TMPL_ELSE>
 <TMPL_LOOP NAME="file_errors">
   <Assertion rdf:ID="assert<TMPL_VAR NAME="__counter__">">
-    <assertedBy rdf:resource="<TMPL_VAR NAME="cfg_home_page">about.html"/>
+    <assertedBy rdf:resource="<TMPL_VAR NAME="env_home_page">about.html"/>
     <subject rdf:resource="<TMPL_VAR NAME="file_uri">"/>
     <mode rdf:resource="http://www.w3.org/ns/earl#automatic"/>
     <test rdf:resource="http://www.w3.org/Markup/"/>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/error_messages.cfg
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/error_messages.cfg?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/error_messages.cfg (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/error_messages.cfg Mon Mar 14 10:47:03 2011
@@ -8,7 +8,7 @@
   verbose = <<.EOF.
     <p class="helpwanted">
       <a
-        href="<!--CFG_HOME_PAGE-->feedback.html?uri=<!--URI-->;errmsg_id=<!--MID-->#errormsg"
+        href="<!--#echo var="relroot" -->feedback.html?uri=<!--URI-->;errmsg_id=<!--MID-->#errormsg"
 	title="Suggest improvements on this error message through our feedback channels" 
       >&#x2709;</a>
     </p>
@@ -204,7 +204,7 @@
   verbose <<.EOF.
 <div class="ve mid-47">
   <p>
-      This error may appear when the validator receives an empty document. Please make sure that the document you are uploading is not empty, and <a href="<!--CFG_HOME_PAGE-->feedback.html">report</a> any discrepancy.
+      This error may appear when the validator receives an empty document. Please make sure that the document you are uploading is not empty, and <a href="<!--#echo var="relroot" -->feedback.html">report</a> any discrepancy.
   </p>
 </div>
 .EOF.  
@@ -449,7 +449,7 @@
     </p>
     <p>
       If this error occurred in a script section of your document, you should probably
-      read this <a href="<!--CFG_HOME_PAGE-->docs/help.html#faq-javascript">FAQ entry</a>.
+      read this <a href="<!--#echo var="relroot" -->docs/help.html#faq-javascript">FAQ entry</a>.
     </p>
   </div>
 .EOF.
@@ -598,7 +598,7 @@
       check that they are both allowed in the chosen document type, and/or
       use CSS instead of this attribute. If you received this error when using the 
       &lt;embed&gt; element to incorporate flash media in a Web page, see the 
-      <a href="<!--CFG_HOME_PAGE-->docs/help.html#faq-flash">FAQ item on valid flash</a>.
+      <a href="<!--#echo var="relroot" -->docs/help.html#faq-flash">FAQ item on valid flash</a>.
     </p>
   </div>
 .EOF.
@@ -1026,7 +1026,7 @@
   verbose <<.EOF.
   <div class="ve mid-187">
     <p>The document type could not be determined, because the document had no correct DOCTYPE declaration. The document does not look like HTML, therefore automatic fallback could not be performed, and the document was only checked against basic markup syntax.</p>
-    <p>Learn <a href="<!--CFG_HOME_PAGE-->docs/help.html#faq-doctype">how to add a doctype to your document</a> 
+    <p>Learn <a href="<!--#echo var="relroot" -->docs/help.html#faq-doctype">how to add a doctype to your document</a> 
     from our <acronym title="Frequently Asked Questions">FAQ</acronym>, or use the validator's
     <code>Document Type</code> option to validate your document against a specific Document Type.</p>
   </div>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/footer.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/footer.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/footer.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/footer.tmpl Mon Mar 14 10:47:03 2011
@@ -13,16 +13,16 @@
 <div id="footer">
 
 	<p id="activity_logos">
-		<a href="http://www.w3.org/Status" title="W3C's Open Source, bringing you free Web quality tools and more"><img src="http://www.w3.org/Icons/WWW/w3c_home_nb" alt="W3C" /><img src="http://www.opensource.org/trademarks/opensource/web/opensource-55x48.jpg" alt="Open-Source" title="We are building certified Open Source/Free Software. - see www.opensource.org" /></a>
+		<a href="http://www.w3.org/Status" title="W3C's Open Source, bringing you free Web quality tools and more"><img src="http://www.w3.org/Icons/WWW/w3c_home_nb" alt="W3C" width="72" height="47" /><img src="./images/opensource-55x48.png" alt="Open-Source" title="We are building certified Open Source/Free Software. - see www.opensource.org" width="55" height="48" /></a>
 	</p>
 
 		<p id="support_logo">
 			<a href="http://www.w3.org/QA/Tools/Donate">
-			<img src="http://www.w3.org/QA/Tools/I_heart_validator" alt="I heart Validator logo" title=" Validators Donation Program" />
+			<img src="http://www.w3.org/QA/Tools/I_heart_validator" alt="I heart Validator logo" title=" Validators Donation Program" width="80" height="15" />
 			</a>
 		</p>
     <p id="version_info">
-      This service runs the W3C Markup Validator, <a href="whatsnew.html#v11"><abbr title="version">v</abbr>1.1</a>. 
+      This service runs the W3C Markup Validator, <a href="whatsnew.html#v12"><abbr title="version">v</abbr>1.2</a>. 
     </p>
 
 		<p class="copyright">

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/header.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/header.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/header.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/header.tmpl Mon Mar 14 10:47:03 2011
@@ -18,8 +18,8 @@
         <TMPL_IF NAME="is_feedback"><link rel="shortcut icon" href="http://www.w3.org/2008/site/images/favicon.ico" type="image/x-icon" /><TMPL_ELSE><link rel="icon" href="<TMPL_IF NAME="VALID">data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%02%00%00%00%90%91h6%00%00%00%19IDAT(%91c%0C%DD%10%C5%40%0A%60%22I%F5%A8%86Q%0DCJ%03%00dy%01%7F%0C%9F0%7D%00%00%00%00IEND%AEB%60%82<TMPL_ELSE>data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%10%00%00%00%10%08%02%00%00%00%90%91h6%00%00%00%19IDAT(%91c%BCd%AB%C2%40%0A%60%22I%F5%A8%86Q%0DCJ%03%00%DE%B5%01S%07%88%8FG%00%00%00%00IEND%AEB%60%82</TMPL_IF>" type="image/png" /></TMPL_IF>
     <link rev="made" href="mailto:www-validator at w3.org" />
     <link rev="start" href="./" title="Home Page" />
-    <style type="text/css" media="all">@import "./style/base.css";
-            @import "./style/results.css";</style>
+    <style type="text/css" media="all">@import "./style/base";
+            @import "./style/results";</style>
     <meta name="keywords" content="HTML, HyperText Markup Language, Validation,
       W3C Markup Validation Service" />
     <meta name="description" content="W3C's easy-to-use
@@ -29,7 +29,7 @@
     
     <div id="banner">
      <h1 id="title">
-       <a href="http://www.w3.org/"><img alt="W3C" width="110" height="61" id="logo" src="./images/no_w3c.png" /></a>
+       <a href="http://www.w3.org/"><img alt="W3C" width="110" height="61" id="logo" src="./images/w3c.png" /></a>
  			<a href="./"><span>Markup Validation Service</span></a>
        </h1>
        <p id="tagline">Check the markup (HTML, XHTML, …) of Web documents</p>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/opt_show_tidy.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/opt_show_tidy.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/opt_show_tidy.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/opt_show_tidy.tmpl Mon Mar 14 10:47:03 2011
@@ -1,9 +1,10 @@
   <div id="tidy">
-    <h3>Cleaned-up Source Listing with "Tidy"</h3>
+    <h3>Cleaned-up Source Listing with "HTML-Tidy"</h3>
 
     <p>Below is the <em>cleaned up</em> markup for your document, 
-    as processed through <a href="http://tidy.sourceforge.net/">HTML Tidy</a>.</p>
-    <p>Tidy is a third-party software not developed at W3C,
+    as processed through
+    <a href="http://search.cpan.org/dist/HTML-Tidy/">HTML-Tidy</a>.</p>
+    <p>HTML-Tidy is a third-party software not developed at W3C,
        and its output is <em>provided without any guarantee</em>.</p>
     <pre class="source"><TMPL_VAR NAME="tidy_output" ESCAPE="HTML"></pre>
 

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/result.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/result.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/result.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/result.tmpl Mon Mar 14 10:47:03 2011
@@ -2,23 +2,12 @@
 <TMPL_INCLUDE name="jumpbar.tmpl">
 <!-- valid/invalid header and revalidation table -->
 <TMPL_INCLUDE NAME="table.tmpl">
-
-                <TMPL_IF NAME="is_xml">
-<!--                  <p><strong>Note</strong>:
-                  The Validator XML support has
-                  <a href="http://openjade.sourceforge.net/doc/xml.htm"
-                  title="Limitations in Validator XML support">some limitations</a>.
-                  </p>
--->
-                </TMPL_IF>
-
 
                 <TMPL_IF NAME="VALID">
                   <TMPL_INCLUDE NAME="valid.tmpl">
                 <TMPL_ELSE>
                   <TMPL_INCLUDE NAME="invalid.tmpl">
                 </TMPL_IF>
-
 
       <TMPL_IF NAME="opt_show_source">
         <TMPL_INCLUDE NAME="opt_show_source.tmpl">
@@ -32,5 +21,4 @@
         <TMPL_INCLUDE NAME="opt_show_outline.tmpl">
       </TMPL_IF>
 
-
 <TMPL_INCLUDE NAME="footer.tmpl">

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/soap_output.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/soap_output.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/soap_output.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/soap_output.tmpl Mon Mar 14 10:47:03 2011
@@ -9,11 +9,10 @@
 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
 <env:Body>
 <m:markupvalidationresponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" xmlns:m="http://www.w3.org/2005/10/markup-validator">
-    <TMPL_IF NAME="opt_debug">
     <TMPL_LOOP NAME="debug"><m:debug name="<TMPL_VAR NAME="name" ESCAPE="HTML">"><TMPL_VAR NAME="value" ESCAPE="HTML" DEFAULT="(undefined)"></m:debug>
-    </TMPL_LOOP></TMPL_IF>
+    </TMPL_LOOP>
     <m:uri><TMPL_VAR NAME="file_uri" ESCAPE="HTML"></m:uri>
-    <m:checkedby><TMPL_VAR NAME="cfg_home_page" ESCAPE="HTML"></m:checkedby>
+    <m:checkedby><TMPL_VAR NAME="env_home_page" ESCAPE="HTML"></m:checkedby>
     <m:doctype><TMPL_VAR NAME="file_doctype" ESCAPE="HTML"></m:doctype>
     <m:charset><TMPL_VAR NAME="file_charset" ESCAPE="HTML"></m:charset>
     <m:validity><TMPL_IF NAME="VALID">true<TMPL_ELSE>false</TMPL_IF></m:validity>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/soap_warnings.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/soap_warnings.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/soap_warnings.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/soap_warnings.tmpl Mon Mar 14 10:47:03 2011
@@ -89,6 +89,15 @@
 <TMPL_IF NAME="W26">
   <m:warning><m:messageid>W26</m:messageid><m:message>Mismatch between Public and System identifiers in the DOCTYPE declaration</m:message></m:warning>
 </TMPL_IF>
+<TMPL_IF NAME="W27">
+  <m:warning><m:messageid>W27</m:messageid><m:message>No Character encoding declared at document level</m:message></m:warning>
+</TMPL_IF>
+<TMPL_IF NAME="W28">
+  <m:warning><m:messageid>W28</m:messageid><m:message>Using Direct Input mode: UTF-8 character encoding assumed</m:message></m:warning>
+</TMPL_IF>
+<TMPL_IF NAME="W29">
+  <m:warning><m:messageid>W29</m:messageid><m:message>Error cleaning up markup with HTML-Tidy</m:message></m:warning>
+</TMPL_IF>
 
 <TMPL_IF NAME="W@@">
   <m:warning><m:messageid>W@@</m:messageid><m:message></m:message></m:warning>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/table.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/table.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/table.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/table.tmpl Mon Mar 14 10:47:03 2011
@@ -67,11 +67,9 @@
     <tr><th>Size:</th><td colspan="2"><TMPL_VAR NAME="file_size" ESCAPE="HTML" DEFAULT="(undefined)"></td></tr>
     <tr><th>Content-Type:</th><td colspan="2"><TMPL_VAR NAME="file_contenttype" ESCAPE="HTML" DEFAULT="(undefined)"></td></tr>
 </TMPL_IF>
-<TMPL_IF NAME="opt_debug">
   <TMPL_LOOP NAME="debug">
     <tr><th><TMPL_VAR NAME="name" ESCAPE="HTML">:</th><td colspan="2"><TMPL_VAR NAME="value" ESCAPE="HTML" DEFAULT="(undefined)"></td></tr>
   </TMPL_LOOP>
-</TMPL_IF>
 <TMPL_IF NAME="file_charset">
   <tr>
     <th><label title="Character Encoding" for="charset">Encoding</label>:</th>
@@ -156,7 +154,7 @@
                         <TMPL_IF NAME="opt_show_tidy">
                         	checked="checked"
                         </TMPL_IF>
-    		         /><label for="st">Clean up Markup with HTML Tidy</label></td>
+    		         /><label for="st">Clean up Markup with HTML-Tidy</label></td>
             </tr>
 
     </table>

Added: packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_fault.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_fault.tmpl?rev=1839&op=file
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_fault.tmpl (added)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_fault.tmpl Mon Mar 14 10:47:03 2011
@@ -1,0 +1,130 @@
+Content-Type: application/xml; charset=UTF-8
+<TMPL_IF NAME="fatal_referer_error">Vary: Referer
+</TMPL_IF>X-W3C-Validator-Recursion: <TMPL_VAR NAME="depth" DEFAULT="1"><TMPL_IF NAME="fatal_error">
+X-W3C-Validator-Status: Abort<TMPL_ELSE><TMPL_IF NAME="valid_status">
+X-W3C-Validator-Status: <TMPL_VAR NAME="valid_status"></TMPL_IF>
+X-W3C-Validator-Errors: <TMPL_VAR NAME="valid_errors_num">
+X-W3C-Validator-Warnings: <TMPL_VAR NAME="valid_warnings_num"></TMPL_IF>
+
+<?xml version='1.0' encoding="utf-8"?>
+<observationresponse xmlns="http://www.w3.org/2009/10/unicorn/observationresponse" ref="<TMPL_VAR NAME="file_uri" ESCAPE="HTML">" xml:lang="en">
+
+<status value="failed"/>
+
+<message type="error">
+  <TMPL_IF NAME="fatal_transcode_error">
+    <title>Transcode Error</title>
+    <description>
+      A fatal error occurred when attempting to transcode the character
+      encoding of the document. Either we do not support this character
+      encoding ("<TMPL_VAR NAME="fatal_transcode_charset" ESCAPE="HTML">")
+      yet, or you have specified a non-existent character encoding (often
+      a misspelling).
+      The error was: "<TMPL_VAR NAME="fatal_transcode_errmsg">".
+    </description>
+  </TMPL_IF>
+
+  <TMPL_IF NAME="fatal_decode_error">
+    <title>Decode Error</title>
+    <description>
+      A fatal error occurred when attempting to decode response body
+      from <TMPL_VAR NAME="fatal_decode_uri" ESCAPE="HTML">.
+      Either we do not support the content encoding specified
+      ("<TMPL_VAR NAME="fatal_decode_cenc" ESCAPE="HTML">"), or an
+      error occurred while decoding it.
+      The error was: "<TMPL_VAR NAME="fatal_decode_errmsg" ESCAPE="HTML">".
+    </description>
+  </TMPL_IF>
+
+  <TMPL_IF NAME="fatal_byte_error">
+    <title>Incorrect Bytes detected</title>
+    <description>
+      Sorry, I am unable to validate this document because on line
+      <TMPL_VAR NAME="fatal_byte_lines"> 
+      it contained one or more bytes that I cannot interpret as
+      <TMPL_VAR NAME="fatal_byte_charset" ESCAPE="HTML">
+        (in other words, the bytes found are not valid values in the specified
+        Character Encoding). Please check both the content of the file and the
+        character encoding indication.
+      </description>
+    </TMPL_IF>
+
+    <TMPL_IF NAME="fatal_uri_error">
+      <title>URL scheme not supported</title>
+      <description>
+        Sorry, this type of URL scheme
+        (<TMPL_VAR NAME="fatal_uri_scheme" ESCAPE="HTML">) is not
+        supported by this service. Please check that you entered the URL correctly.
+      </description>
+    </TMPL_IF>
+    <TMPL_IF NAME="fatal_no_content">
+      <title>No Content to validate</title>
+      <description>
+        Sorry, I could not find any content to validate. It is probable that you
+        clicked on the "check" button without choosing a URL, a file or entering
+        the content of the document you would like to validate.
+      </description>
+    </TMPL_IF>
+
+    <TMPL_IF NAME="fatal_ip_error">
+      <title>IP not public</title>
+      <description>
+        Sorry, the IP address <TMPL_IF NAME="fatal_ip_hostname">of</TMPL_IF>
+        <TMPL_VAR NAME="fatal_ip_host"> is not public.
+        For security reasons, validating resources located at non-public IP
+        addresses has been disabled in this service.
+      </description>
+    </TMPL_IF>
+
+    <TMPL_IF NAME="fatal_http_error">
+      <title>HTTP Error</title>
+      <description>
+        Unexpected HTTP response 
+        <TMPL_VAR NAME="fatal_http_code" ESCAPE="HTML"> <TMPL_VAR NAME="fatal_http_msg" ESCAPE="HTML">
+        while trying to retrieve <TMPL_VAR NAME="fatal_http_uri" ESCAPE="HTML">.
+        <TMPL_IF NAME="fatal_http_dns">
+          If you made recent changes to your domain name (DNS) configuration, you may
+          also want to <a href="http://www.squish.net/dnscheck/">check that your
+          domain records are correct</a>, or ask your hosting company to do so.
+        </TMPL_IF>
+        <TMPL_IF NAME="fatal_http_warn">
+          More information about why this is happening may be available from
+          warnings reported by the validator's HTTP (and other protocol) client
+          library:
+          <TMPL_VAR NAME="fatal_http_warn" ESCAPE="HTML">
+        </TMPL_IF>
+      </description>
+    </TMPL_IF>
+
+    <TMPL_IF NAME="fatal_mime_error">
+      <title>unsupported or unrecognized Content Type</title>
+      <description>
+        Sorry, I am unable to validate this document because its content type
+        is <TMPL_VAR NAME="fatal_mime_ct" ESCAPE="HTML">, which is
+        not currently supported by this service.
+      </description>
+    </TMPL_IF>
+
+    <TMPL_IF NAME="fatal_parse_extid_error">
+      <title>Fatal Error: <TMPL_VAR NAME="fatal_parse_extid_msg" ESCAPE="HTML"></title>
+      <description>
+        I could not parse this document, because it makes reference to a
+        system-specific file instead of using a well-known public identifier
+      to specify the type of markup being used.</description>
+    </TMPL_IF>
+
+    <TMPL_IF NAME="fatal_referer_error">
+      <title>No Referer header found!</title>
+      <description>
+        You have requested we check the referring page, but your browser did
+        not send the HTTP "Referer" header field. This can be for several
+        reasons, but most commonly it is because your browser does not
+        know about this header, has been configured not to send one,
+        transferred the referring document over a secure protocol such as
+        https but is accessing the validator over ordinary non-secure http,
+        or is behind a proxy or firewall that strips it out of the request
+        before it reaches us.
+      </description>
+    </TMPL_IF>
+  </message>
+</observationresponse>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_output.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_output.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_output.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_output.tmpl Mon Mar 14 10:47:03 2011
@@ -26,8 +26,8 @@
 		<TMPL_IF NAME="is_tentative">
 			was <em>tentatively</em> checked as <TMPL_VAR NAME="file_version" ESCAPE="HTML">.
 			This means that with the use of some fallback or override mechanism, 
-			we successfully performed a formal validation using an SGML, HTML5 and/or XML
-			Parser(s). In other words, the document would validate as 
+			we successfully performed a formal validation of it.
+			In other words, the document would validate as 
 			<TMPL_VAR NAME="file_version" ESCAPE="HTML"> if you changed the markup
 			to match the changes we have performed automatically, but 
 			<em>it will not be valid until you make these changes</em>.
@@ -43,10 +43,14 @@
 			<TMPL_ELSE>
 				This means that the resource in question identified itself as
 				"<TMPL_VAR NAME="file_version" ESCAPE="HTML">" and that we successfully
-				performed a formal validation using an SGML, HTML5 and/or XML
-				Parser(s) (depending on the markup language used).
+				performed a formal validation of it.
 			</TMPL_IF>
 		</TMPL_IF>
+			The parser implementations we used for this check are based on
+			<TMPL_LOOP NAME="parsers">
+			<TMPL_UNLESS NAME="__first__"><TMPL_IF NAME="__last__">and </TMPL_IF></TMPL_UNLESS>
+			<a href="<TMPL_VAR NAME="link" ESCAPE="HTML">"><TMPL_VAR NAME="name" ESCAPE="HTML"></a><TMPL_IF NAME="type"> (<TMPL_VAR NAME="type" ESCAPE="HTML">)</TMPL_IF><TMPL_IF NAME="__inner__">,</TMPL_IF><TMPL_IF NAME="__last__">.</TMPL_IF>
+			</TMPL_LOOP>
 		<TMPL_IF NAME="badge_uri">
 			<p>To show your readers that you have taken the care to create an
 			interoperable Web page, you may display this icon on any page
@@ -60,10 +64,10 @@
 <pre><code>&lt;p<TMPL_IF NAME="badge_rdfa"> about="" 
 	resource="<TMPL_VAR NAME="badge_rdfa">" 
 	rel="dc:conformsTo" xmlns:dc="http://purl.org/dc/terms/"</TMPL_IF>&gt;
-	&lt;a href="<TMPL_VAR NAME="cfg_home_page" ESCAPE="HTML">check?uri=referer"&gt;
+	&lt;a href="<TMPL_VAR NAME="env_home_page" ESCAPE="HTML">check?uri=referer"&gt;
 		&lt;img src="<TMPL_VAR NAME="badge_uri" ESCAPE="HTML">"
 			<TMPL_IF NAME="badge_alt">alt="<TMPL_VAR NAME="badge_alt" ESCAPE="HTML">"</TMPL_IF>
-			style="<TMPL_IF NAME="badge_h">height: <TMPL_VAR NAME="badge_h">;</TMPL_IF> <TMPL_IF NAME="badge_w">width: <TMPL_VAR NAME="badge_w">;</TMPL_IF>"<TMPL_VAR NAME="badge_tagc">&gt;
+			style="<TMPL_IF NAME="badge_h">height: <TMPL_VAR NAME="badge_h">px;</TMPL_IF> <TMPL_IF NAME="badge_w">width: <TMPL_VAR NAME="badge_w">px;</TMPL_IF> border:0"<TMPL_VAR NAME="badge_tagc">&gt;
 	&lt;/a&gt;
 &lt;/p&gt;</code></pre>
 
@@ -76,10 +80,10 @@
 <pre><code>&lt;p<TMPL_IF NAME="badge_rdfa"> about="" 
 	resource="<TMPL_VAR NAME="badge_rdfa">" 
 	rel="dc:conformsTo" xmlns:dc="http://purl.org/dc/terms/"</TMPL_IF>&gt;
-	&lt;a href="<TMPL_VAR NAME="cfg_home_page" ESCAPE="HTML">check?uri=referer"&gt;
+	&lt;a href="<TMPL_VAR NAME="env_home_page" ESCAPE="HTML">check?uri=referer"&gt;
 		&lt;img src="<TMPL_VAR NAME="badge_alt_uri" ESCAPE="HTML">"
 			<TMPL_IF NAME="badge_alt">alt="<TMPL_VAR NAME="badge_alt" ESCAPE="HTML">"</TMPL_IF>
-			style="<TMPL_IF NAME="badge_h">height: <TMPL_VAR NAME="badge_h">;</TMPL_IF> <TMPL_IF NAME="badge_w">width: <TMPL_VAR NAME="badge_w">;</TMPL_IF>"<TMPL_VAR NAME="badge_tagc">&gt;
+			style="<TMPL_IF NAME="badge_h">height: <TMPL_VAR NAME="badge_h">px;</TMPL_IF> <TMPL_IF NAME="badge_w">width: <TMPL_VAR NAME="badge_w">px;</TMPL_IF> border:0"<TMPL_VAR NAME="badge_tagc">&gt;
 	&lt;/a&gt;
 &lt;/p&gt;</code></pre>
 
@@ -102,13 +106,11 @@
 </message>
 </TMPL_IF>
 
+<TMPL_IF NAME="have_warnings">
+	<TMPL_INCLUDE NAME="ucn_warnings.tmpl">
+</TMPL_IF>
+
 <TMPL_LOOP NAME="file_errors">
-
-<TMPL_IF NAME="have_warnings">
-<message type="warning">
-	<title><TMPL_INCLUDE NAME="ucn_warnings.tmpl"></title>
-</message>
-</TMPL_IF>
 
 <TMPL_IF NAME="err_type_err">
 <message type="error">

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_warnings.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_warnings.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_warnings.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/ucn_warnings.tmpl Mon Mar 14 10:47:03 2011
@@ -1,93 +1,601 @@
+<TMPL_IF NAME="W00">
+	<message type="info">
+		<title>Using experimental feature: <TMPL_VAR NAME="W00_experimental_name" ESCAPE="HTML"></title>
+    	<description>
+    		<p>
+    		The validator checked your document with an experimental feature: 
+    		<em><TMPL_VAR NAME="W00_experimental_name" ESCAPE="HTML"></em>. This feature has been 
+        	made available for your convenience, but be aware that it may be unreliable, or not perfectly
+        	up to date with the latest development of some cutting-edge technologies. If you find any issues
+        	with this feature, please <a href="<TMPL_VAR NAME="W00_experimental_URI" ESCAPE="HTML">">report them</a>. Thank you.
+        	</p>
+        </description>
+	</message>
+</TMPL_IF>
 <TMPL_IF NAME="W01">
-	Missing "charset" attribute for "<TMPL_VAR NAME="W01_ct" ESCAPE="HTML">" document.
+	<message type="warning">
+		<title>Missing "charset" attribute for "<TMPL_VAR NAME="W01_ct" ESCAPE="HTML">" document.</title>
+		<description>
+		    <p>
+		      The HTTP <code>Content-Type</code> header
+		      (<code><TMPL_VAR NAME="W01_ct" ESCAPE="HTML"></code>) sent by your web
+		      <TMPL_IF NAME="W01_upload">browser<TMPL_ELSE>server</TMPL_IF>
+		      (<code><TMPL_VAR NAME="W01_agent" ESCAPE="HTML"></code>) did not contain
+		      a "<code>charset</code>" parameter, but the Content-Type was one of
+		      the XML <code>text/*</code> sub-types.
+		    </p>
+		    <p>
+		      The relevant specification
+		      (<a href="http://www.ietf.org/rfc/rfc3023.txt">RFC 3023</a>)
+		      specifies a strong default of "<code>us-ascii</code>" for
+		      such documents so we will use this value regardless of any encoding you
+		      may have indicated elsewhere.
+		    <p>
+		      If you would like to use a different encoding, you should arrange to have
+		      your <TMPL_IF NAME="W01_upload">browser<TMPL_ELSE>server</TMPL_IF> send
+		      this new encoding information.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W02">
-	No Character Encoding Found!
+	<message type="warning">
+		<title>No Character Encoding Found!</title>
+		<description>
+		    <p>
+		      Falling back to
+		      "<code><TMPL_VAR NAME="W02_charset" ESCAPE="HTML"></code>"
+		      (<a href="docs/users.html#option-fbc">explain...</a>).
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W03">
-	Character Encoding Override in effect!
+	<message type="warning">
+		<title>Character Encoding Override in effect!</title>
+		<description>
+		    <p>
+		      The detected character encoding
+		      "<code><TMPL_VAR NAME="W03_use" ESCAPE="HTML"></code>"
+		      has been suppressed and
+		      "<code><TMPL_VAR NAME="W03_opt" ESCAPE="HTML"></code>" used instead.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W04">
-	No Character Encoding Found!
-	<TMPL_IF NAME="W04_override">
-	Using
-	<TMPL_ELSE>
-	Falling back to 
-	</TMPL_IF>
-	<TMPL_IF NAME="W04_charset"><TMPL_VAR NAME="W04_charset" ESCAPE="HTML"><TMPL_ELSE>UTF-8</TMPL_IF>.
+	<message type="warning">
+		<title>No Character Encoding Found! <TMPL_IF NAME="W04_override">Using<TMPL_ELSE>Falling back to</TMPL_IF> <TMPL_IF NAME="W04_charset"><TMPL_VAR NAME="W04_charset" ESCAPE="HTML"><TMPL_ELSE>UTF-8</TMPL_IF>.</title>
+		<description>
+			<TMPL_IF NAME="W04_override">
+			    <p>None of the standards sources gave any information on the character encoding labeling for this document. The character 
+			      encoding <code><TMPL_IF NAME="W04_charset"><TMPL_VAR NAME="W04_charset" ESCAPE="HTML"><TMPL_ELSE>UTF-8</TMPL_IF></code>,
+			      which you have chosen via the <code>Encoding</code> override option, will be used for tentative validation. 
+			    </p>
+			<TMPL_ELSE>
+			    <p>
+			      None of the standards sources gave any information on the character encoding
+			      labeling for this document. Without encoding information
+			      it is impossible to reliably validate the document. As a fallback
+			      solution, the "<code><TMPL_IF NAME="W04_charset"><TMPL_VAR NAME="W04_charset" ESCAPE="HTML"><TMPL_ELSE>UTF-8</TMPL_IF></code>" 
+			      encoding was used to read the content and attempt to perform the validation,
+			      but this is likely to fail for all non-trivial documents.
+			    </p>
+			    <TMPL_IF NAME="W04_also_tried">
+				<p>Before defaulting to <code><TMPL_IF NAME="W04_charset"><TMPL_VAR NAME="W04_charset" ESCAPE="HTML"><TMPL_ELSE>UTF-8</TMPL_IF></code>
+					the validator also tried to read the content with the following encoding(s), without success: 
+					<code><TMPL_VAR NAME="W04_also_tried" ESCAPE="HTML"></code>.</p>
+			    </TMPL_IF>
+			 </TMPL_IF>
+			 <TMPL_IF NAME="opt_verbose">
+			    <p>The sources used to find encoding information include:</p>
+			    <ul>
+			      <li>The HTTP Content-Type header.</li>
+			      <li>The XML Declaration.</li>
+			      <li>The HTML "META" element.</li>
+			    </ul>
+			    <p>
+			      The algorithm defined in
+			      <a href="http://www.w3.org/TR/REC-xml#sec-guessing">Appendix F of
+			        the XML 1.0 Recommendation</a> was also used, without success.
+			    </p>
+			    <p>
+			      Since none of these sources yielded any usable information, reliable
+			      validation of this document is not possible. Sorry. Please make sure you
+			      specify the character encoding in use.
+			    </p>
+			      <p>Specifying a character encoding is typically done by the web server
+				configuration, by the scripts that put together pages, or inside the
+				document itself. <a href="http://www.iana.org/"><abbr title="Internet Assigned Numbers Authority">IANA</abbr></a> 
+			    maintains the list of
+				<a href="http://www.iana.org/assignments/character-sets">official names for character
+				encodings</a> (called charsets in this context). You can choose from a number
+				of encodings, though we recommend UTF-8 as particularly useful.</p>
+			
+				<p>The W3C <abbr title="Internationalization">I18N</abbr> Activity has collected a 
+					<a href="http://www.w3.org/International/O-charset">few tips on
+				how to declare the encoding of a Web document</a>.</p>
+				<p>
+			      To quickly check whether the document would validate after addressing
+			      the missing character encoding information, you can use the "Encoding"
+			      form control earlier in the page to force an encoding
+			      override to take effect. "iso-8859-1" (Western Europe and North America)
+			      and "utf-8" (Universal, but not commonly used in legacy documents) are
+			      common encodings if you are not sure what encoding to choose.
+			    </p>
+			<TMPL_ELSE>
+			    <p>Read the <a href="docs/help.html#faq-charset"><acronym title="Frequently Asked Questions">FAQ</acronym> 
+			    entry on character encoding</a> for more details and pointers on how to fix this problem with your document.</p>
+			</TMPL_IF>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W05">
-	DOCTYPE Override in effect!
+	<message type="warning">
+		<title>DOCTYPE Override in effect!</title>
+		<description>
+		    <p>
+		      Any DOCTYPE Declaration in the document has been suppressed and the
+		      DOCTYPE for "<code><TMPL_VAR NAME="W05_dtd" ESCAPE="HTML"></code>"
+		      inserted instead. The document will not be Valid until you alter the
+		      source file to reflect this new DOCTYPE.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W06">
-	Unable to Determine Parse Mode!
+	<message type="warning">
+		<title>Unable to Determine Parse Mode!</title>
+		<description>
+		    <p>The validator can process documents either as XML (for document types such as XHTML, SVG, etc.) or SGML (for HTML 4.01 and prior versions). For this document, the information available was not sufficient to determine the parsing mode unambiguously, because:</p>
+		    <ul>
+		    	<TMPL_IF NAME="W06_mime"><li>
+		    	the MIME Media Type (<code><TMPL_VAR NAME="W06_mime" ESCAPE="HTML"></code>)  can be used for XML or SGML document types</li><TMPL_ELSE><li>in <em>Direct Input</em> mode, no MIME Media Type is served to the validator</li></TMPL_IF>
+		    	<TMPL_IF NAME="w06_doctype"><li>the Document Type (<code><TMPL_VAR NAME="w06_doctype" ESCAPE="HTML"></code>) is not in the validator's catalog</li><TMPL_ELSE><li>No known Document Type could be detected</li></TMPL_IF>
+		    	<li>No XML declaration (<abbr>e.g</abbr> <code>&lt;?xml version="1.0"?&gt;</code>) could be found at the beginning of the document.</li>
+		    	<li>No XML namespace (<abbr>e.g</abbr> <code>&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"&gt;</code>) could be found at the root of the document.</li>
+		    </ul>
+		    <p>As a default, the validator is falling back to SGML mode.</p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W07">
-	Contradictory Parse Modes Detected!
+	<message type="warning">
+		<title>Contradictory Parse Modes Detected!</title>
+		<description>
+			<p>The validator can process documents either as XML (for document types such as XHTML, SVG, etc.) or SGML (for HTML 4.01 and prior versions).</p>
+		    <p>
+		      This document was served with HTTP headers declaring it as MIME Media Type
+		      (<code><TMPL_VAR NAME="W07_mime" ESCAPE="HTML"></code>), for which the parsing
+		       mode should be <TMPL_VAR NAME="W07_ct" ESCAPE="HTML">. However, the document's
+		       <code>DOCTYPE</code> Declaration indicates
+		       <TMPL_VAR NAME="W07_dtd" ESCAPE="HTML"> mode.
+		    <p>
+		    <p>Following the rules of <a href="http://www.w3.org/TR/webarch/#metadata-inconsistencies" title="Architecture of the World Wide Web, Volume One - Inconsistencies between Representation Data and Metadata">Web Architecture</a>, validation proceeded using the <TMPL_VAR NAME="W07_ct" ESCAPE="HTML"> mode based on the <code>Content-Type</code> header.
+		    </p>
+		    <p>Fixing this conflict involves either <a href="http://www.w3.org/QA/2007/10/http-media-type.html" title="Setting media type headers on your Web site - W3C Q&amp;A Weblog">setting the Content-Type header</a>, <a
+		      href="http://www.w3.org/QA/2002/04/valid-dtd-list.html">using a known document type</a> or adding an XML declaration (in the case of XML-based documents).</p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W08">
-	No Content-Type Found!
+	<message type="warning">
+		<title>No Content-Type Found!</title>
+		<description>
+		    <p>
+		      This document was served with an empty or missing
+		      <code>Content-Type</code> header.  This is likely to confuse the validator
+		      and other user agents.
+		    </p>
+		    <p>
+		      HTTP messages <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1">SHOULD</a>
+		      contain the <code>Content-Type</code> HTTP header.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W09">
-	No DOCTYPE found! Attempting validation with <TMPL_VAR NAME="W09_dtd" ESCAPE="HTML">.
+	<message type="warning">
+		<title>No DOCTYPE found! Attempting validation with <TMPL_VAR NAME="W09_dtd" ESCAPE="HTML">.</title>
+		<description>
+		    <p>
+		      No DOCTYPE Declaration could be found or recognized in this document. This
+		      generally means that the document is not declaring its Document Type at the top. 
+		      It can also mean that the DOCTYPE declaration contains a spelling error, 
+		      or that it is not using the correct syntax.
+		    </p>
+		    <p> 
+		      The document was checked using a default "fallback" Document Type Definition
+		      that closely resembles “<TMPL_VAR NAME="W09_dtd" ESCAPE="HTML">”.
+		    </p>
+		    <TMPL_IF NAME="opt_verbose">
+		    <p>
+		      It is recommended to use a DOCTYPE declaration as the very first thing in your
+		      HTML document, to identify the precise language being used. For example, for a typical <a
+		      href="http://www.w3.org/TR/xhtml1/">XHTML 1.0</a> document:
+		    </p>
+		    <pre>
+		      &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+		        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
+		      &lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"&gt;
+		        &lt;head&gt;
+		          &lt;title&gt;Title&lt;/title&gt;
+		        &lt;/head&gt;
+		
+		        &lt;body&gt;
+		          &lt;!-- ... body of document ... --&gt;
+		        &lt;/body&gt;
+		      &lt;/html&gt;
+		    </pre>
+		    <p>
+		      For XML documents, you may also wish to include an "XML Declaration"
+		      even before the DOCTYPE Declaration, but this is not well supported
+		      in older browsers. More information about this can be found in the
+		      <a href="http://www.w3.org/TR/xhtml1/">XHTML 1.0</a> Recommendation.
+		    </p>
+		      <p>
+		        The W3C QA Activity maintains a <a
+		          href="http://www.w3.org/QA/2002/04/valid-dtd-list.html">List of
+		            Valid Doctypes</a> that you can choose from, and the <acronym
+		          title="Web Design Group">WDG</acronym> maintains a document on
+		        "<a href="http://htmlhelp.com/tools/validator/doctype.html">Choosing
+		           a DOCTYPE</a>".
+		      </p>
+		  <TMPL_ELSE>
+		    <p>Learn <a href="docs/help.html#faq-doctype">how to add a doctype to your document</a> 
+		    from our <acronym title="Frequently Asked Questions">FAQ</acronym>.</p>
+		  </TMPL_IF>
+		</description>
+	</message>
+</TMPL_IF>
+<TMPL_IF NAME="W09nohtml">
+	<message type="warning">
+		<title>No DOCTYPE found, and unknown root element. Aborting validation.</title>
+		<description>
+		    <p>
+		      The DOCTYPE Declaration was not recognized or is missing. This
+		      probably means that the Formal Public Identifier contains a spelling
+		      error, or that the Declaration is not using correct syntax, or that 
+		      your document is not using a DOCTYPE Declaration.
+		    </p>
+		    <p>
+		      Without a DOCTYPE Declaration it is not possible to check the validity of your document. Since the document does not start with the root &lt;html&gt; element, automatic fallback to an HTML document type was not performed, and most of the validation process was aborted: only basic markup syntax was checked.
+		    </p>
+		    <p>Learn <a href="docs/help.html#faq-doctype">how to add a doctype to your document</a> 
+		    from our <acronym title="Frequently Asked Questions">FAQ</acronym>, or use the validator's
+		    <code>Document Type</code> option to validate your document against a specific Document Type.</p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W09xml">
-	xmlNo DOCTYPE found! Checking XML syntax only.
+	<message type="warning">
+		<title>No DOCTYPE found! Checking XML syntax only.</title>
+		<description>
+			<p>
+		      The DOCTYPE Declaration was not recognized or is missing. This
+		      probably means that the Formal Public Identifier contains a spelling
+		      error, or that the Declaration is not using correct syntax, or that 
+		      your XML document is not using a DOCTYPE Declaration.
+		    </p>
+		    <p>
+		      Validation of the document has been skipped, and a simple check of the well-formedness
+		      of the XML syntax has been performed instead.
+		    </p>
+		    <p>Learn <a href="docs/help.html#faq-doctype">how to add a doctype to your document</a> 
+		    from our <acronym title="Frequently Asked Questions">FAQ</acronym>, or use the validator's
+		    option to validate your XML document against a specific Document Type</p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W10">
-	Unknown Namespace Found
+	<message type="warning">
+		<title>Unknown Namespace Found</title>
+		<description>
+		    <p>
+		      Unknown namespace "<code><TMPL_VAR NAME="W10_ns" ESCAPE="HTML"></code>"
+		      for <TMPL_VAR NAME="W10_type" ESCAPE="HTML"> document!
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W11">
-	Namespace Found in non-XML Document
+	<message type="warning">
+		<title>Namespace Found in non-XML Document</title>
+		<description>
+		    <p>
+		      Namespace "<code><TMPL_VAR NAME="W11_ns" ESCAPE="HTML"></code>" found,
+		      but the <TMPL_IF NAME="w11_doctype"><code><TMPL_VAR NAME="w11_doctype" ESCAPE="HTML"></code></TMPL_IF> document type is not an XML document type!
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W12">
-	No Namespace Found
+	<message type="warning">
+		<title>No Namespace Found</title>
+		<description>
+		    <p>
+		      No Namespace was found, but document type requires one to be present!
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W13">
-	DOCTYPE Override in effect!
+	<message type="warning">
+		<title>DOCTYPE Override in effect!</title>
+		<description>
+		    <p>
+		      The detected DOCTYPE Declaration
+		      "<code><TMPL_VAR NAME="W13_org"></code>" has been
+		      suppressed and the DOCTYPE for
+		      "<code><TMPL_VAR NAME="W13_new" ESCAPE="HTML"></code>" inserted instead,
+		      but even if no errors are shown below the document will not be Valid
+		      until you update it to reflect this new DOCTYPE.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W14">
-	No DOCTYPE Found!
+	<message type="warning">
+		<title>No DOCTYPE Found!</title>
+		<description>
+		    <p>
+		      Falling back to HTML 4.01 Transitional.
+		      (<a href="docs/users.html#option-fbd">explain...</a>)
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W15">
-	DOCTYPE Override in effect!
+	<message type="warning">
+		<title>DOCTYPE Override in effect!</title>
+		<description>
+		    <p>
+		      The DOCTYPE Declaration for "<TMPL_VAR NAME="W15_dtd" ESCAPE="HTML">"
+		      has been inserted at the start of the document, but even if no errors
+		      are shown below the document will not be Valid until you add the new
+		      DOCTYPE Declaration.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W16">
-	No DOCTYPE Found! Falling Back to
-	<TMPL_VAR NAME="W16_dtd" ESCAPE="HTML">.
+	<message type="warning">
+		<title>No DOCTYPE Found! Falling Back to <TMPL_VAR NAME="W16_dtd" ESCAPE="HTML">.</title>
+		<description>
+			    <p>
+			      A DOCTYPE Declaration is mandatory for most current markup languages
+			      and without one it is impossible to reliably validate this document.
+			      I am falling back to "<TMPL_VAR NAME="W16_dtd" ESCAPE="HTML">" and will
+			      attempt to validate the document anyway, but this is very likely to
+			      produce spurious error messages for most non-trivial documents.
+			    </p>
+			  <TMPL_IF NAME="opt_verbose">
+			    <TMPL_INCLUDE NAME="doctype_spiel.tmpl">
+			    <p>
+			      The W3C QA Activity maintains a <a
+			        href="http://www.w3.org/QA/2002/04/valid-dtd-list.html">List of
+			          Valid Doctypes</a> that you can choose from, and the <acronym
+			        title="Web Design Group">WDG</acronym> maintains a document on
+			      "<a href="http://htmlhelp.com/tools/validator/doctype.html">Choosing
+			         a DOCTYPE</a>".
+			    </p>
+			  <TMPL_ELSE>
+			    <p>
+			      So what should I do?
+			      <a href="docs/help.html#faq-doctype">Tell me more...</a>
+			    </p>
+			  </TMPL_IF>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W17">
-	No Character Encoding detected!
+	<message type="warning">
+		<title>No Character Encoding detected!</title>
+		<description>
+		    <p>
+		      To ensure correct validation, processing, and display, it is important
+		      that the character encoding is properly labeled.
+		      <a href="http://www.w3.org/International/O-charset.html">More
+		      information...</a>
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W18">
-	Character Encoding mismatch!
+	<message type="warning">
+		<title>Character Encoding mismatch!</title>
+		<description>
+		    <p>
+		      The character encoding specified in the HTTP header
+		        (<code><TMPL_VAR NAME="W18_http" ESCAPE="HTML"></code>)
+		      is different from the value in the XML declaration
+		        (<code><TMPL_VAR NAME="W18_xml" ESCAPE="HTML"></code>).
+		      I will use the value from the HTTP header
+		        (<code><TMPL_VAR NAME="W18_use" ESCAPE="HTML"></code>).
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W19">
-	Character Encoding mismatch!
+	<message type="warning">
+		<title>Character Encoding mismatch!</title>
+		<description>
+		    <p>
+		      The character encoding specified in the HTTP header
+		        (<code><TMPL_VAR NAME="W19_http" ESCAPE="HTML"></code>)
+		      is different from the value in the <code>&lt;meta&gt;</code> element
+		      (<code><TMPL_VAR NAME="W19_meta" ESCAPE="HTML"></code>). I will use the
+		      value from the HTTP header
+		      (<code><TMPL_VAR NAME="W19_use" ESCAPE="HTML"></code>) for this
+		      validation.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W20">
-	Character Encoding mismatch!
+	<message type="warning">
+		<title>Character Encoding mismatch!</title>
+		<description>
+		    <p>
+		      The character encoding specified in the XML declaration
+		      (<code><TMPL_VAR NAME="W20_xml" ESCAPE="HTML"></code>)
+		      is different from the value in the <code>&lt;meta&gt;</code> element
+		      (<code><TMPL_VAR NAME="W20_meta" ESCAPE="HTML"></code>). I will use the
+		      value from the XML declaration
+		      (<code><TMPL_VAR NAME="W20_xml" ESCAPE="HTML"></code>) for this
+		      validation.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W21">
-	Byte-Order Mark found in UTF-8 File.
+	<message type="warning">
+		<title>Byte-Order Mark found in UTF-8 File.</title>
+		<description>
+		    <p>
+		      The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to
+		      cause problems for some text editors and older browsers. You may want
+		      to consider avoiding its use until it is better supported.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W22">
-	Character Encoding suggestion: use 
-	<TMPL_VAR NAME="W22_suggested" ESCAPE="HTML"> instead of <TMPL_VAR NAME="W22_declared" ESCAPE="HTML"></warning></message>
+	<message type="warning">
+		<title>Character Encoding suggestion: use <TMPL_VAR NAME="W22_suggested" ESCAPE="HTML"> instead of <TMPL_VAR NAME="W22_declared" ESCAPE="HTML"></title>
+		<description>
+		    <p>
+		      The character encoding declared for this document 
+		      (<code><TMPL_VAR NAME="W22_declared" ESCAPE="HTML"></code>) may not be widely supported.
+		      This encoding is equivalent to <code><TMPL_VAR NAME="W22_suggested" ESCAPE="HTML"></code>
+		      which may be better supported across platforms.
+		    </p> 
+		    <p>
+		      More information on <a href="http://www.w3.org/International/O-charset.html">declaring a character encoding on your Web server or in your document</a> can be found on the W3C Internationalization site.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W23">
-	Conflict between Mime Type and Document Type
+	<message type="warning">
+		<title>Conflict between Mime Type and Document Type</title>
+		<description>
+		   <p>The document is being served with the  <code><TMPL_VAR NAME="W23_type" ESCAPE="HTML"></code> Mime Type
+		      which is not a registered media type for the 
+		      <code><TMPL_VAR NAME="W23_doctype" ESCAPE="HTML"></code> Document Type. The recommended media type 
+		      for this document is: <code><TMPL_VAR NAME="W23_type_pref" ESCAPE="HTML"></code></p>
+		           
+		   <p>Using a wrong media type for a certain document type may
+		      confuse the validator and other user agents with respect to the 
+		      nature of the document, and you may get some erroneous validation
+		      errors. How to fix this problem? One of the following techniques should help:</p>
+		   <ul>     
+		     <li>
+		        If you are serving a static file on a Web server, changing its extension should help. 
+		        Use e.g <code>.xhtml</code> for XHTML or <code>.mml</code> for MathML.
+		     </li>
+		     <li>You may need to reconfigure your Web server. This <a  href="http://www.developershome.com/wap/wapServerSetup/tutorial.asp?page=settingUpMIME">Setting up MIME Types tutorial</a> has instructions for Apache, Tomcat and IIS.</li>
+		     <li>If the document is generated dynamically, the scripting language should allow you to set up the mime type: 
+		         this <a href="http://juicystudio.com/article/content-negotiation.php">article on MIME Types and Content Negotiation</a> has examples in PHP, Perl, and ASP.</li>
+		   </ul>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W24">
-	Rare or unregistered Character Encoding detected
+	<message type="warning">
+		<title>Rare or unregistered Character Encoding detected</title>
+		<description>
+		    <p>
+		      The character encoding declared for this document 
+		      (<code><TMPL_VAR NAME="W24_declared" ESCAPE="HTML"></code>) 
+		      is supported by the validator, but may not be widely supported across platforms.
+		      For the sake of interoperability, it is best to use a unicode character encoding 
+		      such as <code>UTF-8</code>, or one of the 
+		      <a href="http://www.iana.org/assignments/character-sets">registered character
+		  	encodings</a>.
+		    </p> 
+		    <p>
+		      More information on <a href="http://www.w3.org/International/O-charset.html">declaring a character encoding on your Web server or in your document</a> can be found on the W3C Internationalization site.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W25">
-	<TMPL_VAR NAME="W25_dtd" ESCAPE="HTML"> document without DOCTYPE detected
+	<message type="warning">
+		<title><TMPL_VAR NAME="W25_dtd" ESCAPE="HTML"> document without DOCTYPE detected</title>
+		<description>
+		    <p>This document does not declare any DOCTYPE. A Doctype declaration is generally 
+		       needed for validation, but the checked document uses markup specific to <TMPL_VAR NAME="W25_dtd" ESCAPE="HTML">, which may be used without DOCTYPE. </p>
+		    <p>Validation was performed as if the DOCTYPE for <TMPL_VAR NAME="W25_dtd" ESCAPE="HTML"> was present. If this automatic detection is not correct, <a href="http://www.w3.org/QA/2002/04/valid-dtd-list.html" title="W3C QA - Recommended list of DTDs you can use in your Web document">adding a DOCTYPE declaration</a> will help validate without ambiguity.</p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W26">
-	Mismatch between Public and System identifiers in the DOCTYPE declaration
+	<message type="warning">
+		<title>Mismatch between Public and System identifiers in the DOCTYPE declaration</title>
+		<description>
+		    <p>This document uses an inconsistent DOCTYPE declaration. 
+		    <TMPL_IF NAME="W26_dtd_sys_recommend">
+		    The Public Identifier  
+			<code><TMPL_VAR NAME="W26_dtd_pub" ESCAPE="HTML"></code> declares the 
+			<code><TMPL_VAR NAME="W26_dtd_pub_display" ESCAPE="HTML"></code> document type, but the associated System Identifier
+			<code><TMPL_VAR NAME="W26_dtd_sys" ESCAPE="HTML"></code> does not match this document type.</p>
+			<p>The recommended System Identifier 
+			for <code><TMPL_VAR NAME="W26_dtd_pub_display" ESCAPE="HTML"></code> is <code><TMPL_VAR NAME="W26_dtd_sys_recommend" ESCAPE="HTML"></code>.
+		    </TMPL_IF>
+		    <TMPL_IF NAME="W26_dtd_pub_recommend">
+		    The System Identifier  
+			<code><TMPL_VAR NAME="W26_dtd_sys" ESCAPE="HTML"></code> declares the 
+			<code><TMPL_VAR NAME="W26_dtd_pub_display" ESCAPE="HTML"></code> document type, but the associated Public Identifier
+			<code><TMPL_VAR NAME="W26_dtd_pub" ESCAPE="HTML"></code> does not match this document type.</p>
+			<p>The recommended Public Identifier 
+			for <code><TMPL_VAR NAME="W26_dtd_sys" ESCAPE="HTML"></code> is <code><TMPL_VAR NAME="W26_dtd_pub_recommend" ESCAPE="HTML"></code>.
+		    </TMPL_IF>	
+			
+			</p>
+			<p>The safest way to use a correct DOCTYPE declaration is to copy and paste one from the 
+			<a href="http://www.w3.org/QA/2002/04/valid-dtd-list.html" 
+			title="W3C QA - Recommended list of DTDs you can use in your Web document">recommended list</a> 
+			and avoid editing that part of your markup by hand.</p>
+		</description>
+	</message>
+</TMPL_IF>
+<TMPL_IF NAME="W27">
+	<message type="info">
+		<title>No Character encoding declared at document level</title>
+		<description>
+		    <p>No character encoding information was found within the document, either in an HTML <code>meta</code> element or an XML declaration. It is often recommended to declare the character encoding in the document itself, especially if there is a chance that the document will be read from or saved to disk, CD, etc.</p>
+		    <p>See <a href="http://www.w3.org/International/tutorials/tutorial-char-enc/#Slide0250">this tutorial on character encoding</a> for techniques and explanations.</p>
+		</description>
+	</message>
+</TMPL_IF>
+<TMPL_IF NAME="W28">
+	<message type="info">
+		<title>Using Direct Input mode: UTF-8 character encoding assumed</title>
+		<description>
+		    <p>Unlike the “by URI” and “by File Upload” modes, the “Direct Input” mode of the validator provides validated content in the form of characters pasted or typed in the validator's form field. This will automatically make the data UTF-8, and therefore the validator does not need to determine the character encoding of your document, and will ignore any charset information specified.</p>
+		    <p>If you notice a discrepancy in detected character encoding between the “Direct Input” mode and other validator modes, this is likely to be the reason. It is neither a bug in the validator, nor in your document.</p>
+		</description>
+	</message>
+</TMPL_IF>
+<TMPL_IF NAME="W29">
+	<message type="warning">
+		<title>Error cleaning up markup with HTML-Tidy.</title>
+		<description>
+		    <p>
+		      An error occurred while cleaning up markup with HTML-Tidy.  The reported
+		      error was:<br />
+		      <TMPL_VAR NAME="W29_msg" ESCAPE="HTML">
+		    </p>
+		    <p>
+		      It is unlikely that this is a problem with the checked document, but
+		      rather a software or configuration issue with the validator.
+		    </p>
+		</description>
+	</message>
 </TMPL_IF>
 <TMPL_IF NAME="W@@">
-	W@@
-</TMPL_IF>
-
+	<message type="warning">
+		<title>W@@</title>
+	</message>
+</TMPL_IF>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/valid.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/valid.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/valid.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/valid.tmpl Mon Mar 14 10:47:03 2011
@@ -32,8 +32,8 @@
 <TMPL_IF NAME="is_tentative">
     was <em>tentatively</em> checked as <TMPL_VAR NAME="file_version" ESCAPE="HTML">.
     This means that with the use of some fallback or override mechanism, 
-    we successfully performed a formal validation using an SGML, HTML5 and/or XML
-    Parser(s). In other words, the document would validate as 
+    we successfully performed a formal validation of it.
+    In other words, the document would validate as
     <TMPL_VAR NAME="file_version" ESCAPE="HTML"> if you changed the markup
     to match the changes we have performed automatically, but 
     <strong>it will not be valid until you make these changes</strong>.
@@ -48,10 +48,14 @@
     <TMPL_ELSE>
     This means that the resource in question identified itself as
     "<TMPL_VAR NAME="file_version" ESCAPE="HTML">" and that we successfully
-    performed a formal validation using an SGML, HTML5 and/or XML
-    Parser(s) (depending on the markup language used).
+    performed a formal validation of it.
     </TMPL_IF>
 </TMPL_IF>
+    The parser implementations we used for this check are based on
+    <TMPL_LOOP NAME="parsers">
+    <TMPL_UNLESS NAME="__first__"><TMPL_IF NAME="__last__">and </TMPL_IF></TMPL_UNLESS>
+    <a href="<TMPL_VAR NAME="link" ESCAPE="HTML">"><TMPL_VAR NAME="name" ESCAPE="HTML"></a><TMPL_IF NAME="type"> (<TMPL_VAR NAME="type" ESCAPE="HTML">)</TMPL_IF><TMPL_IF NAME="__inner__">,</TMPL_IF><TMPL_IF NAME="__last__">.</TMPL_IF>
+    </TMPL_LOOP>
   </p>
 <TMPL_IF NAME="badge_uri">
 <h4>"valid" Icon(s) on your Web page</h4>
@@ -70,7 +74,7 @@
   &lt;p<TMPL_IF NAME="badge_rdfa"> about=""
      resource="<TMPL_VAR NAME="badge_rdfa">"
      rel="dc:conformsTo" xmlns:dc="http://purl.org/dc/terms/"</TMPL_IF>&gt;
-    &lt;a href="<TMPL_VAR NAME="cfg_home_page" ESCAPE="HTML">check?uri=referer"&gt;&lt;img
+    &lt;a href="<TMPL_VAR NAME="env_home_page" ESCAPE="HTML">check?uri=referer"&gt;&lt;img
         src="<TMPL_VAR NAME="badge_uri" ESCAPE="HTML">"
         <TMPL_IF NAME="badge_alt">alt="<TMPL_VAR NAME="badge_alt" ESCAPE="HTML">"</TMPL_IF> <TMPL_IF NAME="badge_h">height="<TMPL_VAR NAME="badge_h">"</TMPL_IF> <TMPL_IF NAME="badge_w">width="<TMPL_VAR NAME="badge_w">"</TMPL_IF><TMPL_VAR NAME="badge_tagc">&gt;&lt;/a&gt;
   &lt;/p&gt;
@@ -85,7 +89,7 @@
   &lt;p<TMPL_IF NAME="badge_rdfa"> about=""
      resource="<TMPL_VAR NAME="badge_rdfa">"
      rel="dc:conformsTo" xmlns:dc="http://purl.org/dc/terms/"</TMPL_IF>&gt;
-    &lt;a href="<TMPL_VAR NAME="cfg_home_page" ESCAPE="HTML">check?uri=referer"&gt;&lt;img
+    &lt;a href="<TMPL_VAR NAME="env_home_page" ESCAPE="HTML">check?uri=referer"&gt;&lt;img
         src="<TMPL_VAR NAME="badge_alt_uri" ESCAPE="HTML">"
         <TMPL_IF NAME="badge_alt">alt="<TMPL_VAR NAME="badge_alt" ESCAPE="HTML">"</TMPL_IF> <TMPL_IF NAME="badge_h">height="<TMPL_VAR NAME="badge_h">"</TMPL_IF> <TMPL_IF NAME="badge_w">width="<TMPL_VAR NAME="badge_w">"</TMPL_IF><TMPL_VAR NAME="badge_tagc">&gt;&lt;/a&gt;
   &lt;/p&gt;
@@ -95,6 +99,11 @@
     If you like, you can download a copy of the icons
     to keep in your local web directory, and change the HTML fragment
     above to reference your local image rather than the one on this server.
+  <TMPL_IF NAME="file_https_note">
+    See also our help items related to documents transferred over secure
+    protocols for these <a href="docs/help.html#icon-https">icons</a> and
+    the <a href="docs/help.html#faq-referer">"uri=referer" feature</a>.
+  </TMPL_IF>
   </p>
 </TMPL_IF>
 <TMPL_UNLESS NAME="is_upload">
@@ -120,7 +129,7 @@
 check it
   <TMPL_ELSE>
     <a title="Validate CSS at the W3C CSS Validator"
-    href="http://jigsaw.w3.org/css-validator/validator?uri=<TMPL_VAR NAME="file_uri_param">">check
+    href="http://jigsaw.w3.org/css-validator/validator?uri=<TMPL_VAR NAME="file_uri" ESCAPE="URL">">check
     it</a>
   </TMPL_IF>
 </TMPL_IF>

Modified: packages/w3c-markup-validator/trunk/share/templates/en_US/warnings.tmpl
URL: http://svn.debian.org/wsvn/debian-xml-sgml/packages/w3c-markup-validator/trunk/share/templates/en_US/warnings.tmpl?rev=1839&op=diff
==============================================================================
--- packages/w3c-markup-validator/trunk/share/templates/en_US/warnings.tmpl (original)
+++ packages/w3c-markup-validator/trunk/share/templates/en_US/warnings.tmpl Mon Mar 14 10:47:03 2011
@@ -540,9 +540,9 @@
 </TMPL_IF>
 
 <TMPL_IF NAME="W29">
-  <li class="msg_warn" id="W29"><p><span class="err_type"><img src="images/info_icons/warning.png" alt="Warning" title="Warning" /></span> <span class="msg">Error cleaning up markup with HTML Tidy.</span></p>
-    <p>
-      An error occurred while cleaning up markup with HTML Tidy.  The reported
+  <li class="msg_warn" id="W29"><p><span class="err_type"><img src="images/info_icons/warning.png" alt="Warning" title="Warning" /></span> <span class="msg">Error cleaning up markup with HTML-Tidy.</span></p>
+    <p>
+      An error occurred while cleaning up markup with HTML-Tidy.  The reported
       error was:<br />
       <TMPL_VAR NAME="W29_msg" ESCAPE="HTML">
     </p>




More information about the debian-xml-sgml-commit mailing list