<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,26 +1,49 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::READ - Foorum is a forum script built in Catalyst.
-
-=head1 INSTALL
-
-Read L&lt;Foorum::Manual::INSTALL&gt; file at the same dir.
-
-=head1 RUN
-
-you can run it under mod_perl or fastcgi
-
-for test using, we recommend to use builtin server.pl try:
-
-  perl bin/foorum_server.pl -k
-
-=head2 SEE ALSO
-
-L&lt;Catalyst&gt;, L&lt;DBIx::Class&gt;, L&lt;Template&gt;
-
-L&lt;Foorum::Manual::INSTALL&gt;, L&lt;Foorum::Manual::Configure&gt;
-
-=cut
+NAME
+    Foorum - forum system based on Catalyst
+
+DESCRIPTION
+    nothing for now.
+
+LIVE DEMO
+    &lt;http://www.foorumbbs.com/&gt;
+
+FEATURES
+    open source
+        u can FETCH all code from &lt;http://github.com/fayland/foorum/tree&gt;
+        any time any where.
+
+    Win32 compatibility
+        Linux/Unix/Win32 both OK.
+
+    templates
+        use Template for UI.
+
+    built-in cache
+        use Cache::Memcached or use Cache::FileCache or others;
+
+    reliable job queue
+        use TheSchwartz::Moosified
+
+    Multi Formatter
+        HTML::BBCode, Text::Textile, Pod::Xhtml, Text::GooglewikiFormat
+
+    Captcha
+        To keep robot out.
+
+JOIN US
+    Welcome to fork it in &lt;http://github.com/fayland/foorum/tree&gt; and pull
+    requests back.
+
+TODO
+    &lt;http://code.google.com/p/foorum/issues/list&gt;
+
+SEE ALSO
+    Catalyst, DBIx::Class, Template
+
+AUTHOR
+    Fayland Lam, &quot;&lt;fayland at gmail.com&gt;&quot;
+
+COPYRIGHT &amp; LICENSE
+    This program is free software; you can redistribute it and/or modify it
+    under the same terms as Perl itself.
+</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -104,16 +104,12 @@ To keep robot out.
 
 =head1 JOIN US
 
-please send me an email to add u into the google.code Project members list.
+Welcome to fork it in L&lt;http://github.com/fayland/foorum/tree&gt; and pull requests back.
 
 =head1 TODO
 
 L&lt;http://code.google.com/p/foorum/issues/list&gt;
 
-=head1 GitHub
-
-L&lt;http://github.com/fayland/foorum/tree&gt;
-
 =head1 SEE ALSO
 
 L&lt;Catalyst&gt;, L&lt;DBIx::Class&gt;, L&lt;Template&gt;</diff>
      <filename>lib/Foorum.pm</filename>
    </modified>
    <modified>
      <diff>@@ -1,259 +1,259 @@
-msgid &quot;Forum Name&quot;
-msgstr &quot;&#35770;&#22363;&#21517;&#31216;&quot;
-
-msgid &quot;Last Update&quot;
-msgstr &quot;&#26368;&#21518;&#26356;&#26032;&quot;
-
-msgid &quot;Moderators&quot;
-msgstr &quot;&#29256;&#20027;&quot;
-
-msgid &quot;Replies&quot;
-msgstr &quot;&#22238;&#22797;&quot;
-
-msgid &quot;Reply&quot;
-msgstr &quot;&#22238;&#22797;&quot;
-
-msgid &quot;Edit&quot;
-msgstr &quot;&#32534;&#36753;&quot;
-
-msgid &quot;Delete&quot;
-msgstr &quot;&#21024;&#38500;&quot;
-
-msgid &quot;Action&quot;
-msgstr &quot;&#25805;&#20316;&quot;
-
-msgid &quot;Hit&quot;
-msgstr &quot;&#28857;&#20987;&quot;
-
-msgid &quot;Status&quot;
-msgstr &quot;&#29366;&#24577;&quot;
-
-msgid &quot;Threads&quot;
-msgstr &quot;&#20027;&#39064;&quot;
-
-msgid &quot;Poll&quot;
-msgstr &quot;&#25237;&#31080;&quot;
-
-msgid &quot;Author&quot;
-msgstr &quot;&#20316;&#32773;&quot;
-
-msgid &quot;User&quot;
-msgstr &quot;&#29992;&#25143;&quot;
-
-msgid &quot;Subject&quot;
-msgstr &quot;&#26631;&#39064;&quot;
-
-msgid &quot;Title&quot;
-msgstr &quot;&#26631;&#39064;&quot;
-
-msgid &quot;Content&quot;
-msgstr &quot;&#20869;&#23481;&quot;
-
-msgid &quot;Upload Attachment&quot;
-msgstr &quot;&#19978;&#20256;&#38468;&#20214;&quot;
-
-msgid &quot;Date&quot;
-msgstr &quot;&#26085;&#26399;&quot;
-
-msgid &quot;Register&quot;
-msgstr &quot;&#27880;&#20876;&quot;
-
-msgid &quot;Log in&quot;
-msgstr &quot;&#30331;&#24405;&quot;
-
-msgid &quot;Log out&quot;
-msgstr &quot;&#36864;&#20986;&quot;
-
-msgid &quot;Search&quot;
-msgstr &quot;&#25628;&#32034;&quot;
-
-msgid &quot;Forum Admin&quot;
-msgstr &quot;&#31649;&#29702;&#35770;&#22363;&quot;
-
-msgid &quot;Message&quot;
-msgstr &quot;&#25105;&#30340;&#28040;&#24687;&quot;
-
-msgid &quot;What's New?&quot;
-msgstr &quot;&#26368;&#36817;&#26356;&#26032;&quot;
-
-msgid &quot;Edit Profile&quot;
-msgstr &quot;&#32534;&#36753;&#20010;&#20154;&#36164;&#26009;&quot;
-
-msgid &quot;Forget password?&quot;
-msgstr &quot;&#24536;&#35760;&#23494;&#30721;&quot;
-
-msgid &quot;Recent Topics&quot;
-msgstr &quot;&#26368;&#36817;&#26032;&#24086;&quot;
-
-msgid &quot;Recent Elite Topics&quot;
-msgstr &quot;&#26368;&#36817;&#31934;&#21326;&#24086;&quot;
-
-msgid &quot;My Panel&quot;
-msgstr &quot;&#25105;&#30340;&#25511;&#21046;&#38754;&#26495;&quot;
-
-msgid &quot;My Recent Topics&quot;
-msgstr &quot;&#25105;&#21457;&#34920;&#30340;&#26368;&#26032;&#24086;&#23376;&quot;
-
-msgid &quot;Close&quot;
-msgstr &quot;&#20851;&#38381;&quot;
-
-msgid &quot;Who is viewing this Page?&quot;
-msgstr &quot;&#35841;&#22312;&#26597;&#30475;&#36825;&#20010;&#39029;&#38754;&#65311;&quot;
-
-msgid &quot;You have new messages (%1)&quot;
-msgstr &quot;&#24744;&#26377;%1&#26465;&#26032;&#30701;&#28040;&#24687;&quot;
-
-# footer
-msgid &quot;About Us&quot;
-msgstr &quot;&#20851;&#20110;&#25105;&#20204;&quot;
-
-msgid &quot;Contact Us&quot;
-msgstr &quot;&#32852;&#31995;&#25105;&#20204;&quot;
-
-msgid &quot;Terms of Service&quot;
-msgstr &quot;&#26381;&#21153;&#26465;&#27454;&quot;
-
-msgid &quot;Privacy Statement&quot;
-msgstr &quot;&#38544;&#31169;&#31574;&#30053;&quot;
-
-msgid &quot;Help Center&quot;
-msgstr &quot;&#24110;&#21161;&#20013;&#24515;&quot;
-
-# error message
-msgid &quot;Illegal Request.&quot;
-msgstr &quot;&#38750;&#27861;&#35775;&#38382;&quot;
-
-msgid &quot;Permission Denied.&quot;
-msgstr &quot;&#26435;&#38480;&#31105;&#27490;&quot;
-
-msgid &quot;User non-exist&quot;
-msgstr &quot;&#29992;&#25143;&#19981;&#23384;&#22312;&quot;
-
-msgid &quot;User is blocked&quot;
-msgstr &quot;&#29992;&#25143;&#34987;&#31105;&quot;
-
-msgid &quot;Your status is pending&quot;
-msgstr &quot;&#20320;&#30340;&#29366;&#24577;&#20026;&#8220;&#31561;&#24453;&#25209;&#20934;&#8221;&quot;
-
-msgid &quot;Your status is rejected&quot;
-msgstr &quot;&#20320;&#30340;&#29366;&#24577;&#20026;&#8220;&#34987;&#25298;&#32477;&#8221;&quot;
-
-msgid &quot;URL WRONG HERE&quot;
-msgstr &quot;URL &#22320;&#22336;&#38169;&#35823;&quot;
-
-msgid &quot;IT'S CLOSED&quot;
-msgstr &quot;&#24050;&#20851;&#38381;&quot;
-
-msgid &quot;The requested URL is not found on this server.&quot;
-msgstr &quot;&#24744;&#35775;&#38382;&#30340;&#22320;&#22336;&#19981;&#23384;&#22312;&quot;
-
-# forum/topic action
-msgid &quot;New Topic&quot;
-msgstr &quot;&#26032;&#24086;&#23376;&quot;
-
-msgid &quot;New Poll&quot;
-msgstr &quot;&#26032;&#25237;&#31080;&quot;
-
-msgid &quot;Lock&quot;
-msgstr &quot;&#38145;&#23450;&quot;
-
-msgid &quot;Unlock&quot;
-msgstr &quot;&#35299;&#38500;&#38145;&#23450;&quot;
-
-msgid &quot;Sticky&quot;
-msgstr &quot;&#22266;&#39030;&quot;
-
-msgid &quot;Unsticky&quot;
-msgstr &quot;&#35299;&#38500;&#22266;&#39030;&quot;
-
-msgid &quot;Elite&quot;
-msgstr &quot;&#35774;&#32622;&#31934;&#21326;&quot;
-
-msgid &quot;Unelite&quot;
-msgstr &quot;&#21462;&#28040;&#31934;&#21326;&quot;
-
-# message page
-msgid &quot;Menu&quot;
-msgstr &quot;&#33756;&#21333;&quot;
-
-msgid &quot;Compose New Message&quot;
-msgstr &quot;&#25776;&#20889;&#26032;&#30340;&#30701;&#28040;&#24687;&quot;
-
-msgid &quot;Inbox&quot;
-msgstr &quot;&#25910;&#20214;&#31665;&quot;
-
-msgid &quot;Outbox&quot;
-msgstr &quot;&#21457;&#20214;&#31665;&quot;
-
-# forumadmin page
-msgid &quot;Basic Setting&quot;
-msgstr &quot;&#22522;&#26412;&#35774;&#32622;&quot;
-
-msgid &quot;Style Setting&quot;
-msgstr &quot;&#39118;&#26684;&#35774;&#32622;&quot;
-
-msgid &quot;Delete Style&quot;
-msgstr &quot;&#21024;&#38500;&#39118;&#26684;&quot;
-
-msgid &quot;Members Settings&quot;
-msgstr &quot;&#20250;&#21592;&#35774;&#32622;&quot;
-
-msgid &quot;Announcement Setting&quot;
-msgstr &quot;&#20844;&#21578;&#35774;&#32622;&quot;
-
-# topic page
-msgid &quot;Threads:&quot;
-msgstr &quot;&#21457;&#26032;&#24086;&#25968;&#65306;&quot;
-
-msgid &quot;Replies:&quot;
-msgstr &quot;&#22238;&#22797;&#24086;&#25968;&#65306;&quot;
-
-msgid &quot;Register on&quot;
-msgstr &quot;&#27880;&#20876;&#26102;&#38388;&quot;
-
-# login/profile
-msgid &quot;Username&quot;
-msgstr &quot;&#29992;&#25143;&#21517;&quot;
-
-msgid &quot;Nickname&quot;
-msgstr &quot;&#26165;&#31216;&quot;
-
-msgid &quot;Email&quot;
-msgstr &quot;&#30005;&#23376;&#37038;&#20214;&quot;
-
-msgid &quot;Gender&quot;
-msgstr &quot;&#24615;&#21035;&quot;
-
-msgid &quot;Birthday&quot;
-msgstr &quot;&#29983;&#26085;&quot;
-
-msgid &quot;Homepage&quot;
-msgstr &quot;&#20027;&#39029;&quot;
-
-msgid &quot;Password&quot;
-msgstr &quot;&#23494;&#30721;&quot;
-
-msgid &quot;Confirm Password&quot;
-msgstr &quot;&#23494;&#30721;&#30830;&#35748;&quot;
-
-msgid &quot;Captcha&quot;
-msgstr &quot;&#39564;&#35777;&#30721;&quot;
-
-msgid &quot;Country/Territory&quot;
-msgstr &quot;&#22269;&#23478;&#25110;&#22320;&#21306;&quot;
-
-msgid &quot;Location Information&quot;
-msgstr &quot;&#22320;&#21306;&#20449;&#24687;&quot;
-
-msgid &quot;Contact Information&quot;
-msgstr &quot;&#32852;&#31995;&#20449;&#24687;&quot;
-
-# login
-msgid &quot;Login By Username&quot;
-msgstr &quot;&#29992;&#25143;&#21517;&#30331;&#38470;&quot;
-
-msgid &quot;Login By Email&quot;
-msgstr &quot;&#30005;&#23376;&#37038;&#20214;&#30331;&#38470;&quot;
-
-msgid &quot;Remember me?&quot;
-msgstr &quot;&#35760;&#20303;&#25105;&#30340;&#30331;&#38470;&#29366;&#24577;&#65311;&quot;
+msgid &quot;Forum Name&quot;
+msgstr &quot;&#35770;&#22363;&#21517;&#31216;&quot;
+
+msgid &quot;Last Update&quot;
+msgstr &quot;&#26368;&#21518;&#26356;&#26032;&quot;
+
+msgid &quot;Moderators&quot;
+msgstr &quot;&#29256;&#20027;&quot;
+
+msgid &quot;Replies&quot;
+msgstr &quot;&#22238;&#22797;&quot;
+
+msgid &quot;Reply&quot;
+msgstr &quot;&#22238;&#22797;&quot;
+
+msgid &quot;Edit&quot;
+msgstr &quot;&#32534;&#36753;&quot;
+
+msgid &quot;Delete&quot;
+msgstr &quot;&#21024;&#38500;&quot;
+
+msgid &quot;Action&quot;
+msgstr &quot;&#25805;&#20316;&quot;
+
+msgid &quot;Hit&quot;
+msgstr &quot;&#28857;&#20987;&quot;
+
+msgid &quot;Status&quot;
+msgstr &quot;&#29366;&#24577;&quot;
+
+msgid &quot;Threads&quot;
+msgstr &quot;&#20027;&#39064;&quot;
+
+msgid &quot;Poll&quot;
+msgstr &quot;&#25237;&#31080;&quot;
+
+msgid &quot;Author&quot;
+msgstr &quot;&#20316;&#32773;&quot;
+
+msgid &quot;User&quot;
+msgstr &quot;&#29992;&#25143;&quot;
+
+msgid &quot;Subject&quot;
+msgstr &quot;&#26631;&#39064;&quot;
+
+msgid &quot;Title&quot;
+msgstr &quot;&#26631;&#39064;&quot;
+
+msgid &quot;Content&quot;
+msgstr &quot;&#20869;&#23481;&quot;
+
+msgid &quot;Upload Attachment&quot;
+msgstr &quot;&#19978;&#20256;&#38468;&#20214;&quot;
+
+msgid &quot;Date&quot;
+msgstr &quot;&#26085;&#26399;&quot;
+
+msgid &quot;Register&quot;
+msgstr &quot;&#27880;&#20876;&quot;
+
+msgid &quot;Log in&quot;
+msgstr &quot;&#30331;&#24405;&quot;
+
+msgid &quot;Log out&quot;
+msgstr &quot;&#36864;&#20986;&quot;
+
+msgid &quot;Search&quot;
+msgstr &quot;&#25628;&#32034;&quot;
+
+msgid &quot;Forum Admin&quot;
+msgstr &quot;&#31649;&#29702;&#35770;&#22363;&quot;
+
+msgid &quot;Message&quot;
+msgstr &quot;&#25105;&#30340;&#28040;&#24687;&quot;
+
+msgid &quot;What's New?&quot;
+msgstr &quot;&#26368;&#36817;&#26356;&#26032;&quot;
+
+msgid &quot;Edit Profile&quot;
+msgstr &quot;&#32534;&#36753;&#20010;&#20154;&#36164;&#26009;&quot;
+
+msgid &quot;Forget password?&quot;
+msgstr &quot;&#24536;&#35760;&#23494;&#30721;&quot;
+
+msgid &quot;Recent Topics&quot;
+msgstr &quot;&#26368;&#36817;&#26032;&#24086;&quot;
+
+msgid &quot;Recent Elite Topics&quot;
+msgstr &quot;&#26368;&#36817;&#31934;&#21326;&#24086;&quot;
+
+msgid &quot;My Panel&quot;
+msgstr &quot;&#25105;&#30340;&#25511;&#21046;&#38754;&#26495;&quot;
+
+msgid &quot;My Recent Topics&quot;
+msgstr &quot;&#25105;&#21457;&#34920;&#30340;&#26368;&#26032;&#24086;&#23376;&quot;
+
+msgid &quot;Close&quot;
+msgstr &quot;&#20851;&#38381;&quot;
+
+msgid &quot;Who is viewing this Page?&quot;
+msgstr &quot;&#35841;&#22312;&#26597;&#30475;&#36825;&#20010;&#39029;&#38754;&#65311;&quot;
+
+msgid &quot;You have new messages (%1)&quot;
+msgstr &quot;&#24744;&#26377;%1&#26465;&#26032;&#30701;&#28040;&#24687;&quot;
+
+# footer
+msgid &quot;About Us&quot;
+msgstr &quot;&#20851;&#20110;&#25105;&#20204;&quot;
+
+msgid &quot;Contact Us&quot;
+msgstr &quot;&#32852;&#31995;&#25105;&#20204;&quot;
+
+msgid &quot;Terms of Service&quot;
+msgstr &quot;&#26381;&#21153;&#26465;&#27454;&quot;
+
+msgid &quot;Privacy Statement&quot;
+msgstr &quot;&#38544;&#31169;&#31574;&#30053;&quot;
+
+msgid &quot;Help Center&quot;
+msgstr &quot;&#24110;&#21161;&#20013;&#24515;&quot;
+
+# error message
+msgid &quot;Illegal Request.&quot;
+msgstr &quot;&#38750;&#27861;&#35775;&#38382;&quot;
+
+msgid &quot;Permission Denied.&quot;
+msgstr &quot;&#26435;&#38480;&#31105;&#27490;&quot;
+
+msgid &quot;User non-exist&quot;
+msgstr &quot;&#29992;&#25143;&#19981;&#23384;&#22312;&quot;
+
+msgid &quot;User is blocked&quot;
+msgstr &quot;&#29992;&#25143;&#34987;&#31105;&quot;
+
+msgid &quot;Your status is pending&quot;
+msgstr &quot;&#20320;&#30340;&#29366;&#24577;&#20026;&#8220;&#31561;&#24453;&#25209;&#20934;&#8221;&quot;
+
+msgid &quot;Your status is rejected&quot;
+msgstr &quot;&#20320;&#30340;&#29366;&#24577;&#20026;&#8220;&#34987;&#25298;&#32477;&#8221;&quot;
+
+msgid &quot;URL WRONG HERE&quot;
+msgstr &quot;URL &#22320;&#22336;&#38169;&#35823;&quot;
+
+msgid &quot;IT'S CLOSED&quot;
+msgstr &quot;&#24050;&#20851;&#38381;&quot;
+
+msgid &quot;The requested URL is not found on this server.&quot;
+msgstr &quot;&#24744;&#35775;&#38382;&#30340;&#22320;&#22336;&#19981;&#23384;&#22312;&quot;
+
+# forum/topic action
+msgid &quot;New Topic&quot;
+msgstr &quot;&#26032;&#24086;&#23376;&quot;
+
+msgid &quot;New Poll&quot;
+msgstr &quot;&#26032;&#25237;&#31080;&quot;
+
+msgid &quot;Lock&quot;
+msgstr &quot;&#38145;&#23450;&quot;
+
+msgid &quot;Unlock&quot;
+msgstr &quot;&#35299;&#38500;&#38145;&#23450;&quot;
+
+msgid &quot;Sticky&quot;
+msgstr &quot;&#22266;&#39030;&quot;
+
+msgid &quot;Unsticky&quot;
+msgstr &quot;&#35299;&#38500;&#22266;&#39030;&quot;
+
+msgid &quot;Elite&quot;
+msgstr &quot;&#35774;&#32622;&#31934;&#21326;&quot;
+
+msgid &quot;Unelite&quot;
+msgstr &quot;&#21462;&#28040;&#31934;&#21326;&quot;
+
+# message page
+msgid &quot;Menu&quot;
+msgstr &quot;&#33756;&#21333;&quot;
+
+msgid &quot;Compose New Message&quot;
+msgstr &quot;&#25776;&#20889;&#26032;&#30340;&#30701;&#28040;&#24687;&quot;
+
+msgid &quot;Inbox&quot;
+msgstr &quot;&#25910;&#20214;&#31665;&quot;
+
+msgid &quot;Outbox&quot;
+msgstr &quot;&#21457;&#20214;&#31665;&quot;
+
+# forumadmin page
+msgid &quot;Basic Setting&quot;
+msgstr &quot;&#22522;&#26412;&#35774;&#32622;&quot;
+
+msgid &quot;Style Setting&quot;
+msgstr &quot;&#39118;&#26684;&#35774;&#32622;&quot;
+
+msgid &quot;Delete Style&quot;
+msgstr &quot;&#21024;&#38500;&#39118;&#26684;&quot;
+
+msgid &quot;Members Settings&quot;
+msgstr &quot;&#20250;&#21592;&#35774;&#32622;&quot;
+
+msgid &quot;Announcement Setting&quot;
+msgstr &quot;&#20844;&#21578;&#35774;&#32622;&quot;
+
+# topic page
+msgid &quot;Threads:&quot;
+msgstr &quot;&#21457;&#26032;&#24086;&#25968;&#65306;&quot;
+
+msgid &quot;Replies:&quot;
+msgstr &quot;&#22238;&#22797;&#24086;&#25968;&#65306;&quot;
+
+msgid &quot;Register on&quot;
+msgstr &quot;&#27880;&#20876;&#26102;&#38388;&quot;
+
+# login/profile
+msgid &quot;Username&quot;
+msgstr &quot;&#29992;&#25143;&#21517;&quot;
+
+msgid &quot;Nickname&quot;
+msgstr &quot;&#26165;&#31216;&quot;
+
+msgid &quot;Email&quot;
+msgstr &quot;&#30005;&#23376;&#37038;&#20214;&quot;
+
+msgid &quot;Gender&quot;
+msgstr &quot;&#24615;&#21035;&quot;
+
+msgid &quot;Birthday&quot;
+msgstr &quot;&#29983;&#26085;&quot;
+
+msgid &quot;Homepage&quot;
+msgstr &quot;&#20027;&#39029;&quot;
+
+msgid &quot;Password&quot;
+msgstr &quot;&#23494;&#30721;&quot;
+
+msgid &quot;Confirm Password&quot;
+msgstr &quot;&#23494;&#30721;&#30830;&#35748;&quot;
+
+msgid &quot;Captcha&quot;
+msgstr &quot;&#39564;&#35777;&#30721;&quot;
+
+msgid &quot;Country/Territory&quot;
+msgstr &quot;&#22269;&#23478;&#25110;&#22320;&#21306;&quot;
+
+msgid &quot;Location Information&quot;
+msgstr &quot;&#22320;&#21306;&#20449;&#24687;&quot;
+
+msgid &quot;Contact Information&quot;
+msgstr &quot;&#32852;&#31995;&#20449;&#24687;&quot;
+
+# login
+msgid &quot;Login By Username&quot;
+msgstr &quot;&#29992;&#25143;&#21517;&#30331;&#38470;&quot;
+
+msgid &quot;Login By Email&quot;
+msgstr &quot;&#30005;&#23376;&#37038;&#20214;&#30331;&#38470;&quot;
+
+msgid &quot;Remember me?&quot;
+msgstr &quot;&#35760;&#20303;&#25105;&#30340;&#30331;&#38470;&#29366;&#24577;&#65311;&quot;</diff>
      <filename>lib/Foorum/I18N/cn.po</filename>
    </modified>
    <modified>
      <diff>@@ -1,259 +1,259 @@
-msgid &quot;Forum Name&quot;
-msgstr &quot;&#35542;&#22727;&#21517;&#31281;&quot;
-
-msgid &quot;Last Update&quot;
-msgstr &quot;&#26368;&#24460;&#26356;&#26032;&quot;
-
-msgid &quot;Moderators&quot;
-msgstr &quot;&#29256;&#20027;&quot;
-
-msgid &quot;Replies&quot;
-msgstr &quot;&#22238;&#35079;&quot;
-
-msgid &quot;Reply&quot;
-msgstr &quot;&#22238;&#35079;&quot;
-
-msgid &quot;Edit&quot;
-msgstr &quot;&#32232;&#36655;&quot;
-
-msgid &quot;Delete&quot;
-msgstr &quot;&#21034;&#38500;&quot;
-
-msgid &quot;Action&quot;
-msgstr &quot;&#25805;&#20316;&quot;
-
-msgid &quot;Hit&quot;
-msgstr &quot;&#40670;&#25802;&quot;
-
-msgid &quot;Status&quot;
-msgstr &quot;&#29376;&#24907;&quot;
-
-msgid &quot;Threads&quot;
-msgstr &quot;&#20027;&#38988;&quot;
-
-msgid &quot;Poll&quot;
-msgstr &quot;&#25237;&#31080;&quot;
-
-msgid &quot;Author&quot;
-msgstr &quot;&#20316;&#32773;&quot;
-
-msgid &quot;User&quot;
-msgstr &quot;&#29992;&#25142;&quot;
-
-msgid &quot;Subject&quot;
-msgstr &quot;&#27161;&#38988;&quot;
-
-msgid &quot;Title&quot;
-msgstr &quot;&#27161;&#38988;&quot;
-
-msgid &quot;Content&quot;
-msgstr &quot;&#20839;&#23481;&quot;
-
-msgid &quot;Upload Attachment&quot;
-msgstr &quot;&#19978;&#20659;&#38468;&#20214;&quot;
-
-msgid &quot;Date&quot;
-msgstr &quot;&#26085;&#26399;&quot;
-
-msgid &quot;Register&quot;
-msgstr &quot;&#27880;&#20874;&quot;
-
-msgid &quot;Log in&quot;
-msgstr &quot;&#30331;&#37636;&quot;
-
-msgid &quot;Log out&quot;
-msgstr &quot;&#36864;&#20986;&quot;
-
-msgid &quot;Search&quot;
-msgstr &quot;&#25628;&#32034;&quot;
-
-msgid &quot;Forum Admin&quot;
-msgstr &quot;&#31649;&#29702;&#35542;&#22727;&quot;
-
-msgid &quot;Message&quot;
-msgstr &quot;&#25105;&#30340;&#28040;&#24687;&quot;
-
-msgid &quot;What's New?&quot;
-msgstr &quot;&#26368;&#36817;&#26356;&#26032;&quot;
-
-msgid &quot;Edit Profile&quot;
-msgstr &quot;&#32232;&#36655;&#20491;&#20154;&#36039;&#26009;&quot;
-
-msgid &quot;Forget password?&quot;
-msgstr &quot;&#24536;&#35352;&#23494;&#30908;&quot;
-
-msgid &quot;Recent Topics&quot;
-msgstr &quot;&#26368;&#36817;&#26032;&#24086;&quot;
-
-msgid &quot;Recent Elite Topics&quot;
-msgstr &quot;&#26368;&#36817;&#31934;&#33775;&#24086;&quot;
-
-msgid &quot;My Panel&quot;
-msgstr &quot;&#25105;&#30340;&#25511;&#21046;&#38754;&#26495;&quot;
-
-msgid &quot;My Recent Topics&quot;
-msgstr &quot;&#25105;&#30332;&#34920;&#30340;&#26368;&#26032;&#24086;&#23376;&quot;
-
-msgid &quot;Close&quot;
-msgstr &quot;&#38364;&#38281;&quot;
-
-msgid &quot;Who is viewing this Page?&quot;
-msgstr &quot;&#35504;&#22312;&#26597;&#30475;&#36889;&#20491;&#38913;&#38754;&#65311;&quot;
-
-msgid &quot;You have new messages (%1)&quot;
-msgstr &quot;&#24744;&#26377;%1&#26781;&#26032;&#30701;&#28040;&#24687;&quot;
-
-# footer
-msgid &quot;About Us&quot;
-msgstr &quot;&#38364;&#20110;&#25105;&#20497;&quot;
-
-msgid &quot;Contact Us&quot;
-msgstr &quot;&#32879;&#31995;&#25105;&#20497;&quot;
-
-msgid &quot;Terms of Service&quot;
-msgstr &quot;&#26381;&#21209;&#26781;&#27454;&quot;
-
-msgid &quot;Privacy Statement&quot;
-msgstr &quot;&#38577;&#31169;&#31574;&#30053;&quot;
-
-msgid &quot;Help Center&quot;
-msgstr &quot;&#24171;&#21161;&#20013;&#24515;&quot;
-
-# error message
-msgid &quot;Illegal Request.&quot;
-msgstr &quot;&#38750;&#27861;&#35370;&#21839;&quot;
-
-msgid &quot;Permission Denied.&quot;
-msgstr &quot;&#27402;&#38480;&#31105;&#27490;&quot;
-
-msgid &quot;User non-exist&quot;
-msgstr &quot;&#29992;&#25142;&#19981;&#23384;&#22312;&quot;
-
-msgid &quot;User is blocked&quot;
-msgstr &quot;&#29992;&#25142;&#34987;&#31105;&quot;
-
-msgid &quot;Your status is pending&quot;
-msgstr &quot;&#20320;&#30340;&#29376;&#24907;&#28858;&#8220;&#31561;&#24453;&#25209;&#20934;&#8221;&quot;
-
-msgid &quot;Your status is rejected&quot;
-msgstr &quot;&#20320;&#30340;&#29376;&#24907;&#28858;&#8220;&#34987;&#25298;&#32085;&#8221;&quot;
-
-msgid &quot;URL WRONG HERE&quot;
-msgstr &quot;URL &#22320;&#22336;&#37679;&#35492;&quot;
-
-msgid &quot;IT'S CLOSED&quot;
-msgstr &quot;&#24050;&#38364;&#38281;&quot;
-
-msgid &quot;The requested URL is not found on this server.&quot;
-msgstr &quot;&#24744;&#35370;&#21839;&#30340;&#22320;&#22336;&#19981;&#23384;&#22312;&quot;
-
-# forum/topic action
-msgid &quot;New Topic&quot;
-msgstr &quot;&#26032;&#24086;&#23376;&quot;
-
-msgid &quot;New Poll&quot;
-msgstr &quot;&#26032;&#25237;&#31080;&quot;
-
-msgid &quot;Lock&quot;
-msgstr &quot;&#37782;&#23450;&quot;
-
-msgid &quot;Unlock&quot;
-msgstr &quot;&#35299;&#38500;&#37782;&#23450;&quot;
-
-msgid &quot;Sticky&quot;
-msgstr &quot;&#22266;&#38914;&quot;
-
-msgid &quot;Unsticky&quot;
-msgstr &quot;&#35299;&#38500;&#22266;&#38914;&quot;
-
-msgid &quot;Elite&quot;
-msgstr &quot;&#35373;&#32622;&#31934;&#33775;&quot;
-
-msgid &quot;Unelite&quot;
-msgstr &quot;&#21462;&#28040;&#31934;&#33775;&quot;
-
-# message page
-msgid &quot;Menu&quot;
-msgstr &quot;&#33756;&#21934;&quot;
-
-msgid &quot;Compose New Message&quot;
-msgstr &quot;&#25776;&#23531;&#26032;&#30340;&#30701;&#28040;&#24687;&quot;
-
-msgid &quot;Inbox&quot;
-msgstr &quot;&#25910;&#20214;&#31665;&quot;
-
-msgid &quot;Outbox&quot;
-msgstr &quot;&#30332;&#20214;&#31665;&quot;
-
-# forumadmin page
-msgid &quot;Basic Setting&quot;
-msgstr &quot;&#22522;&#26412;&#35373;&#32622;&quot;
-
-msgid &quot;Style Setting&quot;
-msgstr &quot;&#39080;&#26684;&#35373;&#32622;&quot;
-
-msgid &quot;Delete Style&quot;
-msgstr &quot;&#21034;&#38500;&#39080;&#26684;&quot;
-
-msgid &quot;Members Settings&quot;
-msgstr &quot;&#26371;&#21729;&#35373;&#32622;&quot;
-
-msgid &quot;Announcement Setting&quot;
-msgstr &quot;&#20844;&#21578;&#35373;&#32622;&quot;
-
-# topic page
-msgid &quot;Threads:&quot;
-msgstr &quot;&#30332;&#26032;&#24086;&#25976;&#65306;&quot;
-
-msgid &quot;Replies:&quot;
-msgstr &quot;&#22238;&#35079;&#24086;&#25976;&#65306;&quot;
-
-msgid &quot;Register on&quot;
-msgstr &quot;&#27880;&#20874;&#26178;&#38291;&quot;
-
-# login/profile
-msgid &quot;Username&quot;
-msgstr &quot;&#29992;&#25142;&#21517;&quot;
-
-msgid &quot;Nickname&quot;
-msgstr &quot;&#26289;&#31281;&quot;
-
-msgid &quot;Email&quot;
-msgstr &quot;&#38651;&#23376;&#37109;&#20214;&quot;
-
-msgid &quot;Gender&quot;
-msgstr &quot;&#24615;&#21029;&quot;
-
-msgid &quot;Birthday&quot;
-msgstr &quot;&#29983;&#26085;&quot;
-
-msgid &quot;Homepage&quot;
-msgstr &quot;&#20027;&#38913;&quot;
-
-msgid &quot;Password&quot;
-msgstr &quot;&#23494;&#30908;&quot;
-
-msgid &quot;Confirm Password&quot;
-msgstr &quot;&#23494;&#30908;&#30906;&#35469;&quot;
-
-msgid &quot;Captcha&quot;
-msgstr &quot;&#39511;&#35388;&#30908;&quot;
-
-msgid &quot;Country/Territory&quot;
-msgstr &quot;&#22283;&#23478;&#25110;&#22320;&#21312;&quot;
-
-msgid &quot;Location Information&quot;
-msgstr &quot;&#22320;&#21312;&#20449;&#24687;&quot;
-
-msgid &quot;Contact Information&quot;
-msgstr &quot;&#32879;&#31995;&#20449;&#24687;&quot;
-
-# login
-msgid &quot;Login By Username&quot;
-msgstr &quot;&#29992;&#25142;&#21517;&#30331;&#38520;&quot;
-
-msgid &quot;Login By Email&quot;
-msgstr &quot;&#38651;&#23376;&#37109;&#20214;&#30331;&#38520;&quot;
-
-msgid &quot;Remember me?&quot;
-msgstr &quot;&#35352;&#20303;&#25105;&#30340;&#30331;&#38520;&#29376;&#24907;&#65311;&quot;
+msgid &quot;Forum Name&quot;
+msgstr &quot;&#35542;&#22727;&#21517;&#31281;&quot;
+
+msgid &quot;Last Update&quot;
+msgstr &quot;&#26368;&#24460;&#26356;&#26032;&quot;
+
+msgid &quot;Moderators&quot;
+msgstr &quot;&#29256;&#20027;&quot;
+
+msgid &quot;Replies&quot;
+msgstr &quot;&#22238;&#35079;&quot;
+
+msgid &quot;Reply&quot;
+msgstr &quot;&#22238;&#35079;&quot;
+
+msgid &quot;Edit&quot;
+msgstr &quot;&#32232;&#36655;&quot;
+
+msgid &quot;Delete&quot;
+msgstr &quot;&#21034;&#38500;&quot;
+
+msgid &quot;Action&quot;
+msgstr &quot;&#25805;&#20316;&quot;
+
+msgid &quot;Hit&quot;
+msgstr &quot;&#40670;&#25802;&quot;
+
+msgid &quot;Status&quot;
+msgstr &quot;&#29376;&#24907;&quot;
+
+msgid &quot;Threads&quot;
+msgstr &quot;&#20027;&#38988;&quot;
+
+msgid &quot;Poll&quot;
+msgstr &quot;&#25237;&#31080;&quot;
+
+msgid &quot;Author&quot;
+msgstr &quot;&#20316;&#32773;&quot;
+
+msgid &quot;User&quot;
+msgstr &quot;&#29992;&#25142;&quot;
+
+msgid &quot;Subject&quot;
+msgstr &quot;&#27161;&#38988;&quot;
+
+msgid &quot;Title&quot;
+msgstr &quot;&#27161;&#38988;&quot;
+
+msgid &quot;Content&quot;
+msgstr &quot;&#20839;&#23481;&quot;
+
+msgid &quot;Upload Attachment&quot;
+msgstr &quot;&#19978;&#20659;&#38468;&#20214;&quot;
+
+msgid &quot;Date&quot;
+msgstr &quot;&#26085;&#26399;&quot;
+
+msgid &quot;Register&quot;
+msgstr &quot;&#27880;&#20874;&quot;
+
+msgid &quot;Log in&quot;
+msgstr &quot;&#30331;&#37636;&quot;
+
+msgid &quot;Log out&quot;
+msgstr &quot;&#36864;&#20986;&quot;
+
+msgid &quot;Search&quot;
+msgstr &quot;&#25628;&#32034;&quot;
+
+msgid &quot;Forum Admin&quot;
+msgstr &quot;&#31649;&#29702;&#35542;&#22727;&quot;
+
+msgid &quot;Message&quot;
+msgstr &quot;&#25105;&#30340;&#28040;&#24687;&quot;
+
+msgid &quot;What's New?&quot;
+msgstr &quot;&#26368;&#36817;&#26356;&#26032;&quot;
+
+msgid &quot;Edit Profile&quot;
+msgstr &quot;&#32232;&#36655;&#20491;&#20154;&#36039;&#26009;&quot;
+
+msgid &quot;Forget password?&quot;
+msgstr &quot;&#24536;&#35352;&#23494;&#30908;&quot;
+
+msgid &quot;Recent Topics&quot;
+msgstr &quot;&#26368;&#36817;&#26032;&#24086;&quot;
+
+msgid &quot;Recent Elite Topics&quot;
+msgstr &quot;&#26368;&#36817;&#31934;&#33775;&#24086;&quot;
+
+msgid &quot;My Panel&quot;
+msgstr &quot;&#25105;&#30340;&#25511;&#21046;&#38754;&#26495;&quot;
+
+msgid &quot;My Recent Topics&quot;
+msgstr &quot;&#25105;&#30332;&#34920;&#30340;&#26368;&#26032;&#24086;&#23376;&quot;
+
+msgid &quot;Close&quot;
+msgstr &quot;&#38364;&#38281;&quot;
+
+msgid &quot;Who is viewing this Page?&quot;
+msgstr &quot;&#35504;&#22312;&#26597;&#30475;&#36889;&#20491;&#38913;&#38754;&#65311;&quot;
+
+msgid &quot;You have new messages (%1)&quot;
+msgstr &quot;&#24744;&#26377;%1&#26781;&#26032;&#30701;&#28040;&#24687;&quot;
+
+# footer
+msgid &quot;About Us&quot;
+msgstr &quot;&#38364;&#20110;&#25105;&#20497;&quot;
+
+msgid &quot;Contact Us&quot;
+msgstr &quot;&#32879;&#31995;&#25105;&#20497;&quot;
+
+msgid &quot;Terms of Service&quot;
+msgstr &quot;&#26381;&#21209;&#26781;&#27454;&quot;
+
+msgid &quot;Privacy Statement&quot;
+msgstr &quot;&#38577;&#31169;&#31574;&#30053;&quot;
+
+msgid &quot;Help Center&quot;
+msgstr &quot;&#24171;&#21161;&#20013;&#24515;&quot;
+
+# error message
+msgid &quot;Illegal Request.&quot;
+msgstr &quot;&#38750;&#27861;&#35370;&#21839;&quot;
+
+msgid &quot;Permission Denied.&quot;
+msgstr &quot;&#27402;&#38480;&#31105;&#27490;&quot;
+
+msgid &quot;User non-exist&quot;
+msgstr &quot;&#29992;&#25142;&#19981;&#23384;&#22312;&quot;
+
+msgid &quot;User is blocked&quot;
+msgstr &quot;&#29992;&#25142;&#34987;&#31105;&quot;
+
+msgid &quot;Your status is pending&quot;
+msgstr &quot;&#20320;&#30340;&#29376;&#24907;&#28858;&#8220;&#31561;&#24453;&#25209;&#20934;&#8221;&quot;
+
+msgid &quot;Your status is rejected&quot;
+msgstr &quot;&#20320;&#30340;&#29376;&#24907;&#28858;&#8220;&#34987;&#25298;&#32085;&#8221;&quot;
+
+msgid &quot;URL WRONG HERE&quot;
+msgstr &quot;URL &#22320;&#22336;&#37679;&#35492;&quot;
+
+msgid &quot;IT'S CLOSED&quot;
+msgstr &quot;&#24050;&#38364;&#38281;&quot;
+
+msgid &quot;The requested URL is not found on this server.&quot;
+msgstr &quot;&#24744;&#35370;&#21839;&#30340;&#22320;&#22336;&#19981;&#23384;&#22312;&quot;
+
+# forum/topic action
+msgid &quot;New Topic&quot;
+msgstr &quot;&#26032;&#24086;&#23376;&quot;
+
+msgid &quot;New Poll&quot;
+msgstr &quot;&#26032;&#25237;&#31080;&quot;
+
+msgid &quot;Lock&quot;
+msgstr &quot;&#37782;&#23450;&quot;
+
+msgid &quot;Unlock&quot;
+msgstr &quot;&#35299;&#38500;&#37782;&#23450;&quot;
+
+msgid &quot;Sticky&quot;
+msgstr &quot;&#22266;&#38914;&quot;
+
+msgid &quot;Unsticky&quot;
+msgstr &quot;&#35299;&#38500;&#22266;&#38914;&quot;
+
+msgid &quot;Elite&quot;
+msgstr &quot;&#35373;&#32622;&#31934;&#33775;&quot;
+
+msgid &quot;Unelite&quot;
+msgstr &quot;&#21462;&#28040;&#31934;&#33775;&quot;
+
+# message page
+msgid &quot;Menu&quot;
+msgstr &quot;&#33756;&#21934;&quot;
+
+msgid &quot;Compose New Message&quot;
+msgstr &quot;&#25776;&#23531;&#26032;&#30340;&#30701;&#28040;&#24687;&quot;
+
+msgid &quot;Inbox&quot;
+msgstr &quot;&#25910;&#20214;&#31665;&quot;
+
+msgid &quot;Outbox&quot;
+msgstr &quot;&#30332;&#20214;&#31665;&quot;
+
+# forumadmin page
+msgid &quot;Basic Setting&quot;
+msgstr &quot;&#22522;&#26412;&#35373;&#32622;&quot;
+
+msgid &quot;Style Setting&quot;
+msgstr &quot;&#39080;&#26684;&#35373;&#32622;&quot;
+
+msgid &quot;Delete Style&quot;
+msgstr &quot;&#21034;&#38500;&#39080;&#26684;&quot;
+
+msgid &quot;Members Settings&quot;
+msgstr &quot;&#26371;&#21729;&#35373;&#32622;&quot;
+
+msgid &quot;Announcement Setting&quot;
+msgstr &quot;&#20844;&#21578;&#35373;&#32622;&quot;
+
+# topic page
+msgid &quot;Threads:&quot;
+msgstr &quot;&#30332;&#26032;&#24086;&#25976;&#65306;&quot;
+
+msgid &quot;Replies:&quot;
+msgstr &quot;&#22238;&#35079;&#24086;&#25976;&#65306;&quot;
+
+msgid &quot;Register on&quot;
+msgstr &quot;&#27880;&#20874;&#26178;&#38291;&quot;
+
+# login/profile
+msgid &quot;Username&quot;
+msgstr &quot;&#29992;&#25142;&#21517;&quot;
+
+msgid &quot;Nickname&quot;
+msgstr &quot;&#26289;&#31281;&quot;
+
+msgid &quot;Email&quot;
+msgstr &quot;&#38651;&#23376;&#37109;&#20214;&quot;
+
+msgid &quot;Gender&quot;
+msgstr &quot;&#24615;&#21029;&quot;
+
+msgid &quot;Birthday&quot;
+msgstr &quot;&#29983;&#26085;&quot;
+
+msgid &quot;Homepage&quot;
+msgstr &quot;&#20027;&#38913;&quot;
+
+msgid &quot;Password&quot;
+msgstr &quot;&#23494;&#30908;&quot;
+
+msgid &quot;Confirm Password&quot;
+msgstr &quot;&#23494;&#30908;&#30906;&#35469;&quot;
+
+msgid &quot;Captcha&quot;
+msgstr &quot;&#39511;&#35388;&#30908;&quot;
+
+msgid &quot;Country/Territory&quot;
+msgstr &quot;&#22283;&#23478;&#25110;&#22320;&#21312;&quot;
+
+msgid &quot;Location Information&quot;
+msgstr &quot;&#22320;&#21312;&#20449;&#24687;&quot;
+
+msgid &quot;Contact Information&quot;
+msgstr &quot;&#32879;&#31995;&#20449;&#24687;&quot;
+
+# login
+msgid &quot;Login By Username&quot;
+msgstr &quot;&#29992;&#25142;&#21517;&#30331;&#38520;&quot;
+
+msgid &quot;Login By Email&quot;
+msgstr &quot;&#38651;&#23376;&#37109;&#20214;&#30331;&#38520;&quot;
+
+msgid &quot;Remember me?&quot;
+msgstr &quot;&#35352;&#20303;&#25105;&#30340;&#30331;&#38520;&#29376;&#24907;&#65311;&quot;</diff>
      <filename>lib/Foorum/I18N/tw.po</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,15 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::AUTHORS - Foorum authors
-
-=head1 AUTHORS
-
-Alphabetical Order:
-
-Fayland                     &lt;fayland at gmail.com&gt;
-Viacheslav Tikhanovskii
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::AUTHORS - Foorum authors
+
+=head1 AUTHORS
+
+Alphabetical Order:
+
+Fayland                     &lt;fayland at gmail.com&gt;
+Viacheslav Tikhanovskii
+
+=cut</diff>
      <filename>lib/Foorum/Manual/AUTHORS.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,52 +1,52 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::Configure - configure Foorum
-
-Generally, run bin/setup.pl
-
-=head1 Cache Configure
-
-we have built-in FileCache in foorum.yml
-
-  cache:
-    backends:
-      default:
-        class: 'Cache::FileCache'
-        namespace: 'Foorum'
-        default_expires_in: 600
-
-
-optional: cache_root: '/home/faylandfoorum/cache'
-
-and we can configure Cache::Memcached as backend cache
-
-  cache:
-    backends:
-      default:
-        class: 'Cache::Memcached'
-        servers:
-          - '127.0.0.1:11211'
-        compress_threshold: '10_000'
-        debug: 0
-
-
-See Also L&lt;Catalyst::Plugin::Cache&gt;
-
-=head1 Mail Configure
-
-we have several conf under directory conf/examples/mail for mail.
-
-  * sendmail.yml - under Linux/Unix we recommended this one. cp conf/examples/mail/sendmail.yml conf/mail.yml
-  * SMTP.yml - if u have a SMTP server. cp it as conf/mail.yml and change SMTP server and user/pass
-  * Gmail.yml - if u have no choice, try this.
-
-=head2 See Also
-
-L&lt;Email::Send&gt;
-
-L&lt;Foorum::Manual::INSTALL&gt;, L&lt;Foorum::Manual::TroubleShooting&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::Configure - configure Foorum
+
+Generally, run bin/setup.pl
+
+=head1 Cache Configure
+
+we have built-in FileCache in foorum.yml
+
+  cache:
+    backends:
+      default:
+        class: 'Cache::FileCache'
+        namespace: 'Foorum'
+        default_expires_in: 600
+
+
+optional: cache_root: '/home/faylandfoorum/cache'
+
+and we can configure Cache::Memcached as backend cache
+
+  cache:
+    backends:
+      default:
+        class: 'Cache::Memcached'
+        servers:
+          - '127.0.0.1:11211'
+        compress_threshold: '10_000'
+        debug: 0
+
+
+See Also L&lt;Catalyst::Plugin::Cache&gt;
+
+=head1 Mail Configure
+
+we have several conf under directory conf/examples/mail for mail.
+
+  * sendmail.yml - under Linux/Unix we recommended this one. cp conf/examples/mail/sendmail.yml conf/mail.yml
+  * SMTP.yml - if u have a SMTP server. cp it as conf/mail.yml and change SMTP server and user/pass
+  * Gmail.yml - if u have no choice, try this.
+
+=head2 See Also
+
+L&lt;Email::Send&gt;
+
+L&lt;Foorum::Manual::INSTALL&gt;, L&lt;Foorum::Manual::TroubleShooting&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/Configure.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,23 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::HowRSS - How we build RSS system
-
-=head1 How we build RSS system
-
-  * we don't use L&lt;XML::RSS&gt; or &lt;XML::Feed&gt; or anything else to build RSS, instead we just use TT2 to produce RSS XML.
-  * RSS URL is always add /rss at behind. like:
-    # /forum/FoorumLongLive has RSS: /forum/FoorumLongLive/rss
-    # /site/popular has RSS: /site/popular/RSS
-    # /forum/FoorumLongLive/72 has RSS: /forum/FoorumLongLive/72/rss
-  * since URL is so special, we have a stash: $c-&gt;stash-&gt;{isI&lt;rss&gt;template} = ( $path =~ /\/rss(\/|$)/ ) ? 1 : 0;
-    # Root.pm sub end {}. if res-&gt;redirect(), we raise RSS error.
-    # Root.pm sub end {}. if template is not RSS, raise RSS error.
-  * we have RSS and it's based URL in one sub. so it's pretty neat and easy to read.
-
-=head2 SEE ALSO
-L&lt;Foorum::Manual::RULES&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::HowRSS - How we build RSS system
+
+=head1 How we build RSS system
+
+  * we don't use L&lt;XML::RSS&gt; or &lt;XML::Feed&gt; or anything else to build RSS, instead we just use TT2 to produce RSS XML.
+  * RSS URL is always add /rss at behind. like:
+    # /forum/FoorumLongLive has RSS: /forum/FoorumLongLive/rss
+    # /site/popular has RSS: /site/popular/RSS
+    # /forum/FoorumLongLive/72 has RSS: /forum/FoorumLongLive/72/rss
+  * since URL is so special, we have a stash: $c-&gt;stash-&gt;{isI&lt;rss&gt;template} = ( $path =~ /\/rss(\/|$)/ ) ? 1 : 0;
+    # Root.pm sub end {}. if res-&gt;redirect(), we raise RSS error.
+    # Root.pm sub end {}. if template is not RSS, raise RSS error.
+  * we have RSS and it's based URL in one sub. so it's pretty neat and easy to read.
+
+=head2 SEE ALSO
+L&lt;Foorum::Manual::RULES&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/HowRSS.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,23 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::I18N - Foorum I18N
-
-=head1 I18N
-
-File Lists:
-
-  * Locale::Country::Multilingual - eg: L&lt;http://fayland.googlecode.com/svn/trunk/CPAN/Locale-Country-Multilingual/lib/Locale/Country/Multilingual/en.dat|en.dat&gt;
-  * lib/Foorum/I18N/LANG.po - eg: lib/Foorum/I18N/cn.po
-  * root/static/js/jquery/validate/messagesI&lt;LANG.js - eg: root/js/jquery/validate/messages&gt;cn.js
-  * root/static/js/site/formatter/ubbhelp-LANG.js - eg: root/js/site/formatter/ubbhelp-en.js
-  * templates/lang/LANG
-    * email - eg: templates/lang/en/email/activation.html
-    * help  - eg: templates/lang/en/help/email.html
-    * info  - eg: templates/lang/en/info/about_us.html
-
-Generally that's it!
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::I18N - Foorum I18N
+
+=head1 I18N
+
+File Lists:
+
+  * Locale::Country::Multilingual - eg: L&lt;http://fayland.googlecode.com/svn/trunk/CPAN/Locale-Country-Multilingual/lib/Locale/Country/Multilingual/en.dat|en.dat&gt;
+  * lib/Foorum/I18N/LANG.po - eg: lib/Foorum/I18N/cn.po
+  * root/static/js/jquery/validate/messagesI&lt;LANG.js - eg: root/js/jquery/validate/messages&gt;cn.js
+  * root/static/js/site/formatter/ubbhelp-LANG.js - eg: root/js/site/formatter/ubbhelp-en.js
+  * templates/lang/LANG
+    * email - eg: templates/lang/en/email/activation.html
+    * help  - eg: templates/lang/en/help/email.html
+    * info  - eg: templates/lang/en/info/about_us.html
+
+Generally that's it!
+
+=cut</diff>
      <filename>lib/Foorum/Manual/I18N.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,57 +1,57 @@
-our $VERSION = '0.003001';
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::INSTALL - install Foorum
-
-=head1 Steps
-
-=head2 Database
-
-MySQL and SQLite are supported with tests while PostgreSQL are still marked as EXPERIMENTAL.
-
-=head3 MySQL
-
-  * mysql -uroot -p
-  * mysql&gt; CREATE DATABASE foorum;
-  * mysql&gt; CREATE DATABASE theschwartz;
-  * mysql&gt; exit;
-  * mysql -uroot -p foorum &lt; bin/db/foorum.sql
-  * mysql -uroot -p theschwartz &lt; bin/db/theschwartz.sql
-
-=head3 SQLite
-
-Download sqlite3 from L&lt;http://www.sqlite.org/download.html&gt;
-
-  * sqlite3 foorum.db
-  * sqlite&gt; .read bin/db/foorum.sqlite.sql
-  * sqlite&gt; .read bin/db/theschwartz.sqlite.sql
-  * sqlite&gt; .quit
-
-=head3 PostgreSQL (EXPERIMENTAL)
-
-files are bin/db/foorum.pg.sql and bin/db/theschwartz.pg.sql
-
-USE IT AT YOUR OWN RISK.
-
-=head2 Perl
-
-  * perl bin/setup.pl
-  * perl Makefile.PL; make; make test; make realclean;
-  * perl bin/foorum_server.pl
-
-=head2 Apache Configure
-
-  * remember set Options -Index in $Foorum/root/upload, so that nobody can view /upload URL
-
-  $ vim Foorum/root/upload/.htaccess
-  Options -Indexes
-
-
-=head1 SEE ALSO
-
-L&lt;Foorum::Manual::Configure&gt;, L&lt;Foorum::Manual::TroubleShooting&gt;
-
-=cut
+our $VERSION = '0.003001';
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::INSTALL - install Foorum
+
+=head1 Steps
+
+=head2 Database
+
+MySQL and SQLite are supported with tests while PostgreSQL are still marked as EXPERIMENTAL.
+
+=head3 MySQL
+
+  * mysql -uroot -p
+  * mysql&gt; CREATE DATABASE foorum;
+  * mysql&gt; CREATE DATABASE theschwartz;
+  * mysql&gt; exit;
+  * mysql -uroot -p foorum &lt; bin/db/foorum.sql
+  * mysql -uroot -p theschwartz &lt; bin/db/theschwartz.sql
+
+=head3 SQLite
+
+Download sqlite3 from L&lt;http://www.sqlite.org/download.html&gt;
+
+  * sqlite3 foorum.db
+  * sqlite&gt; .read bin/db/foorum.sqlite.sql
+  * sqlite&gt; .read bin/db/theschwartz.sqlite.sql
+  * sqlite&gt; .quit
+
+=head3 PostgreSQL (EXPERIMENTAL)
+
+files are bin/db/foorum.pg.sql and bin/db/theschwartz.pg.sql
+
+USE IT AT YOUR OWN RISK.
+
+=head2 Perl
+
+  * perl bin/setup.pl
+  * perl Makefile.PL; make; make test; make realclean;
+  * perl bin/foorum_server.pl
+
+=head2 Apache Configure
+
+  * remember set Options -Index in $Foorum/root/upload, so that nobody can view /upload URL
+
+  $ vim Foorum/root/upload/.htaccess
+  Options -Indexes
+
+
+=head1 SEE ALSO
+
+L&lt;Foorum::Manual::Configure&gt;, L&lt;Foorum::Manual::TroubleShooting&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/INSTALL.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,58 +1,58 @@
-
-=pod
-
-
-=head1 NAME
-
-Foorum::Manual::PreRelease - things when release
-
-=head2 Before Release
-
-  * $ cd Misc/bin
-  * $ perl js-min.pl
-
-  # minify the javascript under root/static/js to root/static/js/min by L&lt;JavaScript::Minifier&gt;
-
-  * $ perl css-min.pl
-
-  # minify the css under root/static/css to root/static/css/min by L&lt;CSS::Minifier&gt;
-
-  * $ perl bdfgw.pl
-
-  # build docs from GoogleCode wiki by L&lt;Text::GooglewikiFormat&gt;
-
-  * $ perl wiki2pod.pl
-
-  # use L&lt;Pod::From::GoogleWiki&gt; to build Foorum::Manual::
-
-  * $ perl g2b.pl
-
-  # tranlate lib/Foorum/I18N/cn.po to lib/Foorum/I18N/tw.po and etc by L&lt;Encode::HanConvert&gt;
-
-  * $ perl perltidy.pl
-
-  # make all .pl .pm .t clean by L&lt;Perl::Tidy&gt;
-
-  * $ perl perlcritic.pl
-
-  # use L&lt;Perl::Critic&gt; to all .pl .pm .t files.
-
-
-=head2 Release
-
-  * $ perl Makefile.PL
-  * $ make
-
-  # or 'nmake' under Win32
-
-  * $ rm MANIFEST
-  * $ make manifest
-  * $ make test
-  * $ make dist
-  * $ make realclean
-
-  # just do those stuff as normal Perl distribution.
-
-
-
-=cut
+
+=pod
+
+
+=head1 NAME
+
+Foorum::Manual::PreRelease - things when release
+
+=head2 Before Release
+
+  * $ cd Misc/bin
+  * $ perl js-min.pl
+
+  # minify the javascript under root/static/js to root/static/js/min by L&lt;JavaScript::Minifier&gt;
+
+  * $ perl css-min.pl
+
+  # minify the css under root/static/css to root/static/css/min by L&lt;CSS::Minifier&gt;
+
+  * $ perl bdfgw.pl
+
+  # build docs from GoogleCode wiki by L&lt;Text::GooglewikiFormat&gt;
+
+  * $ perl wiki2pod.pl
+
+  # use L&lt;Pod::From::GoogleWiki&gt; to build Foorum::Manual::
+
+  * $ perl g2b.pl
+
+  # tranlate lib/Foorum/I18N/cn.po to lib/Foorum/I18N/tw.po and etc by L&lt;Encode::HanConvert&gt;
+
+  * $ perl perltidy.pl
+
+  # make all .pl .pm .t clean by L&lt;Perl::Tidy&gt;
+
+  * $ perl perlcritic.pl
+
+  # use L&lt;Perl::Critic&gt; to all .pl .pm .t files.
+
+
+=head2 Release
+
+  * $ perl Makefile.PL
+  * $ make
+
+  # or 'nmake' under Win32
+
+  * $ rm MANIFEST
+  * $ make manifest
+  * $ make test
+  * $ make dist
+  * $ make realclean
+
+  # just do those stuff as normal Perl distribution.
+
+
+
+=cut</diff>
      <filename>lib/Foorum/Manual/PreRelease.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,26 +1,26 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::READ - Foorum is a forum script built in Catalyst.
-
-=head1 INSTALL
-
-Read L&lt;Foorum::Manual::INSTALL&gt; file at the same dir.
-
-=head1 RUN
-
-you can run it under mod_perl or fastcgi
-
-for test using, we recommend to use builtin server.pl try:
-
-  perl bin/foorum_server.pl -k
-
-=head2 SEE ALSO
-
-L&lt;Catalyst&gt;, L&lt;DBIx::Class&gt;, L&lt;Template&gt;
-
-L&lt;Foorum::Manual::INSTALL&gt;, L&lt;Foorum::Manual::Configure&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::READ - Foorum is a forum script built in Catalyst.
+
+=head1 INSTALL
+
+Read L&lt;Foorum::Manual::INSTALL&gt; file at the same dir.
+
+=head1 RUN
+
+you can run it under mod_perl or fastcgi
+
+for test using, we recommend to use builtin server.pl try:
+
+  perl bin/foorum_server.pl -k
+
+=head2 SEE ALSO
+
+L&lt;Catalyst&gt;, L&lt;DBIx::Class&gt;, L&lt;Template&gt;
+
+L&lt;Foorum::Manual::INSTALL&gt;, L&lt;Foorum::Manual::Configure&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/README.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,35 +1,35 @@
-
-=pod
-
-
-=head1 NAME
-
-Foorum::Manual::RULES - Foorum rules
-
-=head2 General Rules
-
-  * Release Early and Release Often
-  * Keep it Simple, Stupid (KISS)
-  * Don't Repeat Yourself (DRY)
-  * Design for change
-  * Don't rely on trick
-  * Fast is better
-
-=head2 Catalyst Rules
-
-  * Don't raise error in model class (no detach('/print_error'))
-
-=head2 Datebase Rules
-
-  * use INT(11) UNSIGNED instead of DATETIME (no DATETIME please)
-
-=head2 Default Rules In Foorum
-
-  * Raise non-exists error in Controller/Get.pm
-
-=head2 HTML Rules
-
-  * css at begin while js at end
-
-
-=cut
+
+=pod
+
+
+=head1 NAME
+
+Foorum::Manual::RULES - Foorum rules
+
+=head2 General Rules
+
+  * Release Early and Release Often
+  * Keep it Simple, Stupid (KISS)
+  * Don't Repeat Yourself (DRY)
+  * Design for change
+  * Don't rely on trick
+  * Fast is better
+
+=head2 Catalyst Rules
+
+  * Don't raise error in model class (no detach('/print_error'))
+
+=head2 Datebase Rules
+
+  * use INT(11) UNSIGNED instead of DATETIME (no DATETIME please)
+
+=head2 Default Rules In Foorum
+
+  * Raise non-exists error in Controller/Get.pm
+
+=head2 HTML Rules
+
+  * css at begin while js at end
+
+
+=cut</diff>
      <filename>lib/Foorum/Manual/RULES.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,18 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::TroubleShooting - Foorum trouble fixes
-
-=head1 Trouble Shooting
-
-=head2 C&lt;--Couldn't render template &quot;plugin error - Math: plugin not found&quot;--&gt;
-
-upgrade L&lt;Template&gt;
-
-=head1 SEE ALSO
-
-L&lt;Foorum::Manual::README&gt;, L&lt;Foorum::Manual::INSTALL&gt;, L&lt;Foorum::Manual::Configure&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::TroubleShooting - Foorum trouble fixes
+
+=head1 Trouble Shooting
+
+=head2 C&lt;--Couldn't render template &quot;plugin error - Math: plugin not found&quot;--&gt;
+
+upgrade L&lt;Template&gt;
+
+=head1 SEE ALSO
+
+L&lt;Foorum::Manual::README&gt;, L&lt;Foorum::Manual::INSTALL&gt;, L&lt;Foorum::Manual::Configure&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/TroubleShooting.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,144 +1,144 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::Tutorial1 - Tutorial 1: Catalyst Plugins used in Foorum
-
-=head2 Config::YAML
-
-L&lt;Catalyst::Plugin::Config::YAML::XS&gt;
-
-Why we are using Config::YAML::XS instead ConfigLoader is under a simple L&lt;Foorum::Manual::RULES&gt;, Fast is better.
-
-=head2 Static::Simple
-
-L&lt;Catalyst::Plugin::Static::Simple&gt;
-
-I think I need let Static::Simple be configurable later. because it's better let Apache handles static contents.
-
-=head2 Authentication
-
-L&lt;Catalyst::Plugin::Authentication&gt;
-
-Authentication is a important part in Foorum. viacheslav.t suggests
-
- Another thing that i am concerned about is a way how to plug-in your forum to an
- existing Cat application. For example i have my own user infrastructure and
- registration, banning, blocking system (some things are borrowed from your code
- ;-)...
-
-I'm strongly agree with him. so we will rewrite this part later.
-
-but for now. in foorum.yml
-
-  authentication:
-    default_realm: 'members'
-    password_hash_type: &quot;SHA-1&quot;
-    realms:
-      members:
-        credential:
-          class: 'Password'
-          password_field: 'password'
-          password_type: &quot;hashed&quot;
-          password_hash_type: &quot;SHA-1&quot;
-        store:
-          class: 'FromSub::Hash'
-          model_class: &quot;UserAuth&quot;
-
-
-here we are using Credential::Password and a Store::FromSub::Hash.
-
-I must admit that FromSub::Hash is not good enough. but it doesn't hit database every request for $c-&gt;user. Store::DBIC is nice yet our Model/User.pm sub get is returning a cached user hash. so we use FromSub::Hash.
-
-=head2 Cache
-
-L&lt;Catalyst::Plugin::Cache&gt;
-
-before we use Catalyst::Plugin::Cache::Memcached, but that's not so flexiable. so we turn to use Catalyst::Plugin::Cache. the configuration in foorum.yml is:
-
-  cache:
-    backends:
-      default:
-        class: 'Cache::FileCache'
-        namespace: 'Foorum'
-        default_expires_in: 600
-
-
-meanwhile, we can use Memcached:
-
-  cache:
-    backends:
-      default:
-        class: Cache::Memcached
-        compress_threshold: 10_000
-        debug: 0
-        servers:
-          - 127.0.0.1:11211
-
-
-=head2 Session::DynamicExpiry
-
-L&lt;Catalyst::Plugin::Session::DynamicExpiry&gt;
-
-for the &quot;Remember Me?&quot;.
-
-=head2 Session
-
-L&lt;Catalyst::Plugin::Session&gt;
-
-that's pretty normal here. we use DBIC and Cookie. no URI since that's bad.
-
-=head2 I18N
-
-L&lt;Catalyst::Plugin::I18N&gt;
-
-check Foorum/I18N/cn.po and tw.po then u can write one for your own. that's easy!
-
-=head2 FormValidator::Simple
-
-L&lt;Catalyst::Plugin::FormValidator::Simple&gt;
-
-we are going to HTML::FormFu.
-
-=head2 Captcha
-
-L&lt;Catalyst::Plugin::Captcha&gt;
-
-  captcha:
-    session_name: captcha_string
-    new:
-      width: 80
-      height: 30
-      lines: 1
-      gd_font: giant
-    create:
-      - normal
-      - rect
-    particle:
-      - 100
-    out:
-      force: jpeg
-
-
-=head2 PageCache
-
-L&lt;Catalyst::Plugin::PageCache&gt;
-
-it's configurable. u can disable by set
-
-  function_on:
-    maintain: 0
-    register: 1
-    create_forum: 1
-    scraper: 0
-    page_cache: 0
-
-
-when page_cache: 1, it will be enabled.
-
-=head1 SEE ALSO
-
-L&lt;Foorum::Manual::I18N&gt;, L&lt;Foorum::Manual::Configure&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial4&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::Tutorial1 - Tutorial 1: Catalyst Plugins used in Foorum
+
+=head2 Config::YAML
+
+L&lt;Catalyst::Plugin::Config::YAML::XS&gt;
+
+Why we are using Config::YAML::XS instead ConfigLoader is under a simple L&lt;Foorum::Manual::RULES&gt;, Fast is better.
+
+=head2 Static::Simple
+
+L&lt;Catalyst::Plugin::Static::Simple&gt;
+
+I think I need let Static::Simple be configurable later. because it's better let Apache handles static contents.
+
+=head2 Authentication
+
+L&lt;Catalyst::Plugin::Authentication&gt;
+
+Authentication is a important part in Foorum. viacheslav.t suggests
+
+ Another thing that i am concerned about is a way how to plug-in your forum to an
+ existing Cat application. For example i have my own user infrastructure and
+ registration, banning, blocking system (some things are borrowed from your code
+ ;-)...
+
+I'm strongly agree with him. so we will rewrite this part later.
+
+but for now. in foorum.yml
+
+  authentication:
+    default_realm: 'members'
+    password_hash_type: &quot;SHA-1&quot;
+    realms:
+      members:
+        credential:
+          class: 'Password'
+          password_field: 'password'
+          password_type: &quot;hashed&quot;
+          password_hash_type: &quot;SHA-1&quot;
+        store:
+          class: 'FromSub::Hash'
+          model_class: &quot;UserAuth&quot;
+
+
+here we are using Credential::Password and a Store::FromSub::Hash.
+
+I must admit that FromSub::Hash is not good enough. but it doesn't hit database every request for $c-&gt;user. Store::DBIC is nice yet our Model/User.pm sub get is returning a cached user hash. so we use FromSub::Hash.
+
+=head2 Cache
+
+L&lt;Catalyst::Plugin::Cache&gt;
+
+before we use Catalyst::Plugin::Cache::Memcached, but that's not so flexiable. so we turn to use Catalyst::Plugin::Cache. the configuration in foorum.yml is:
+
+  cache:
+    backends:
+      default:
+        class: 'Cache::FileCache'
+        namespace: 'Foorum'
+        default_expires_in: 600
+
+
+meanwhile, we can use Memcached:
+
+  cache:
+    backends:
+      default:
+        class: Cache::Memcached
+        compress_threshold: 10_000
+        debug: 0
+        servers:
+          - 127.0.0.1:11211
+
+
+=head2 Session::DynamicExpiry
+
+L&lt;Catalyst::Plugin::Session::DynamicExpiry&gt;
+
+for the &quot;Remember Me?&quot;.
+
+=head2 Session
+
+L&lt;Catalyst::Plugin::Session&gt;
+
+that's pretty normal here. we use DBIC and Cookie. no URI since that's bad.
+
+=head2 I18N
+
+L&lt;Catalyst::Plugin::I18N&gt;
+
+check Foorum/I18N/cn.po and tw.po then u can write one for your own. that's easy!
+
+=head2 FormValidator::Simple
+
+L&lt;Catalyst::Plugin::FormValidator::Simple&gt;
+
+we are going to HTML::FormFu.
+
+=head2 Captcha
+
+L&lt;Catalyst::Plugin::Captcha&gt;
+
+  captcha:
+    session_name: captcha_string
+    new:
+      width: 80
+      height: 30
+      lines: 1
+      gd_font: giant
+    create:
+      - normal
+      - rect
+    particle:
+      - 100
+    out:
+      force: jpeg
+
+
+=head2 PageCache
+
+L&lt;Catalyst::Plugin::PageCache&gt;
+
+it's configurable. u can disable by set
+
+  function_on:
+    maintain: 0
+    register: 1
+    create_forum: 1
+    scraper: 0
+    page_cache: 0
+
+
+when page_cache: 1, it will be enabled.
+
+=head1 SEE ALSO
+
+L&lt;Foorum::Manual::I18N&gt;, L&lt;Foorum::Manual::Configure&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial4&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/Tutorial1.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,79 +1,79 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::Tutorial2 - Tutorial 2: Dive into Foorum: TheSchwartz
-
-=head2 TheSchwartz introduction
-
-L&lt;TheSchwartz&gt;
-
-As CPAN perldoc says: reliable job queue. Basically it splitted into two parts, one is worker while the other is client.
-
-Worker script:
-
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/cron/TheSchwartz_worker.pl&gt;
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/cron/TheSchwartzI&lt;worker&gt;scraper.pl&gt;
-
-We may have several workers to deal with different tasks. For example TheSchwartzI&lt;worker.pl deal with some tasks while TheSchwartz&gt;worker_scraper.pl deal with scraper task.
-
-What's worker for? In my idea, that's just a script to monitor a table in database (check if there is any task to do) every 5 secs. Faked code like this:
-
-  while (1) {
-      # check if there is any new TODO task in one table of theschwartz database.
-      if ($has_new_task) { # scalar @new_tasks
-          foreach my $new_task (@new_tasks) {
-              $new_task-&gt;worker();
-          }
-      }
-      sleep 5;
-
-
-Where does new task from? Foorum has two ways, always one is form Foorum/Controller|Model, the other is from cron scripts.
-
-example code:
-
-  # in Foorum/Model
-
-  use Foorum::ExternalUtils qw/theschwartz/;
-  my $client = theschwartz();
-  $client-&gt;insert(
-      'Foorum::TheSchwartz::Worker::WorkerExample',
-      @args
-  );
-
-  # in cron script. L&lt;http://foorum.googlecode.com/svn/trunk/bin/cron/TheSchwartz_client.pl&gt;
-
-That's a simple introduction. Maybe I'm wrong here. :)
-
-=head2 Worker in Foorum
-
-For now, we have several workers:
-
-  * Foorum::TheSchwartz::Worker::DailyChart
-  * Foorum::TheSchwartz::Worker::DailyReport
-  * Foorum::TheSchwartz::Worker::Hit
-  * Foorum::TheSchwartz::Worker::RemoveOldDataFromDB
-  * Foorum::TheSchwartz::Worker::ResizeProfilePhoto
-  * Foorum::TheSchwartz::Worker::SendScheduledEmail
-  * Foorum::TheSchwartz::Worker::SendStarredNofication
-  * etc.
-
-There is a simple L&lt;Foorum::Manual::RULES&gt; that why we use TheSchwartz, put heavy code on backend script instead of httpd.
-
-  * Hit is a cron script to update topic hits and Popular.
-  * RemoveOldDataFromDB - remove useless data from database because it's outdated.
-  * ResizeProfilePhoto  - let httpd load Image::Magick is not so good.
-  * SendScheduledEmail  - send email, web insert data into table then this worker send email behind
-  * SendStarredNofication - oh, typo here, should be Notification. ;)
-
-=head2 How to write a Worker in Foorum?
-
-OK, please borrow code from exist ones.
-
-=head1 SEE ALSO
-
-L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial4&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::Tutorial2 - Tutorial 2: Dive into Foorum: TheSchwartz
+
+=head2 TheSchwartz introduction
+
+L&lt;TheSchwartz&gt;
+
+As CPAN perldoc says: reliable job queue. Basically it splitted into two parts, one is worker while the other is client.
+
+Worker script:
+
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/cron/TheSchwartz_worker.pl&gt;
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/cron/TheSchwartzI&lt;worker&gt;scraper.pl&gt;
+
+We may have several workers to deal with different tasks. For example TheSchwartzI&lt;worker.pl deal with some tasks while TheSchwartz&gt;worker_scraper.pl deal with scraper task.
+
+What's worker for? In my idea, that's just a script to monitor a table in database (check if there is any task to do) every 5 secs. Faked code like this:
+
+  while (1) {
+      # check if there is any new TODO task in one table of theschwartz database.
+      if ($has_new_task) { # scalar @new_tasks
+          foreach my $new_task (@new_tasks) {
+              $new_task-&gt;worker();
+          }
+      }
+      sleep 5;
+
+
+Where does new task from? Foorum has two ways, always one is form Foorum/Controller|Model, the other is from cron scripts.
+
+example code:
+
+  # in Foorum/Model
+
+  use Foorum::ExternalUtils qw/theschwartz/;
+  my $client = theschwartz();
+  $client-&gt;insert(
+      'Foorum::TheSchwartz::Worker::WorkerExample',
+      @args
+  );
+
+  # in cron script. L&lt;http://foorum.googlecode.com/svn/trunk/bin/cron/TheSchwartz_client.pl&gt;
+
+That's a simple introduction. Maybe I'm wrong here. :)
+
+=head2 Worker in Foorum
+
+For now, we have several workers:
+
+  * Foorum::TheSchwartz::Worker::DailyChart
+  * Foorum::TheSchwartz::Worker::DailyReport
+  * Foorum::TheSchwartz::Worker::Hit
+  * Foorum::TheSchwartz::Worker::RemoveOldDataFromDB
+  * Foorum::TheSchwartz::Worker::ResizeProfilePhoto
+  * Foorum::TheSchwartz::Worker::SendScheduledEmail
+  * Foorum::TheSchwartz::Worker::SendStarredNofication
+  * etc.
+
+There is a simple L&lt;Foorum::Manual::RULES&gt; that why we use TheSchwartz, put heavy code on backend script instead of httpd.
+
+  * Hit is a cron script to update topic hits and Popular.
+  * RemoveOldDataFromDB - remove useless data from database because it's outdated.
+  * ResizeProfilePhoto  - let httpd load Image::Magick is not so good.
+  * SendScheduledEmail  - send email, web insert data into table then this worker send email behind
+  * SendStarredNofication - oh, typo here, should be Notification. ;)
+
+=head2 How to write a Worker in Foorum?
+
+OK, please borrow code from exist ones.
+
+=head1 SEE ALSO
+
+L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial4&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/Tutorial2.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,55 +1,55 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::Tutorial3 - Tutorial 3: For Foorum Developers
-
-=head2 Perl::Critic
-
-L&lt;Perl::Critic&gt;
-
-Every Perl developer should use Perl::Critic to check his code. It would avoid stupid errors.
-
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/perlcritic.pl&gt;
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/critic.txt&gt;
-
-=head2 Perl::Tidy
-
-L&lt;Perl::Tidy&gt;
-
-Every Programmer has own style to write code (expect Python. ;-). well, for many developers in one project, I think it's better to keep in one voice. that's Perl::Tidy for.
-
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/perltidy.pl&gt;
-
-If u want a different style, please dicuss before edit
-
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/.perltidyrc&gt;
-
-=head2 JavaScript::Minifier and CSS::Minifier
-
-L&lt;JavaScript::Minifier&gt;, L&lt;CSS::Minifier&gt;
-
-With minified css/js, browser loads page more fast. well, I plan to use L&lt;http://search.cpan.org/~ruz/CSS-Squish-0.07/lib/CSS/Squish.pm&gt; to merge all CSS into one file (but it's only a plan for now).
-
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/js-min.pl&gt;
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/css-min.pl&gt;
-
-=head2 debug flag in foorum_local.yml
-
-vim foorum_local.yml, and add a line:
-
-  debug_mode: 1
-
-
-=head2 Build Docs From GoogleCode wiki
-
-Please don't edit $svn/trunk/docs/ HTML files, instead edit $svn/wiki or L&lt;http://code.google.com/p/foorum/w/list|Wiki&gt; through Web. after edit, u can use follow script to update docs/ HTML files.
-
-  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/bdfgw.pl&gt;
-
-=head1 SEE ALSO
-
-L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial4&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::Tutorial3 - Tutorial 3: For Foorum Developers
+
+=head2 Perl::Critic
+
+L&lt;Perl::Critic&gt;
+
+Every Perl developer should use Perl::Critic to check his code. It would avoid stupid errors.
+
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/perlcritic.pl&gt;
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/critic.txt&gt;
+
+=head2 Perl::Tidy
+
+L&lt;Perl::Tidy&gt;
+
+Every Programmer has own style to write code (expect Python. ;-). well, for many developers in one project, I think it's better to keep in one voice. that's Perl::Tidy for.
+
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/perltidy.pl&gt;
+
+If u want a different style, please dicuss before edit
+
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/.perltidyrc&gt;
+
+=head2 JavaScript::Minifier and CSS::Minifier
+
+L&lt;JavaScript::Minifier&gt;, L&lt;CSS::Minifier&gt;
+
+With minified css/js, browser loads page more fast. well, I plan to use L&lt;http://search.cpan.org/~ruz/CSS-Squish-0.07/lib/CSS/Squish.pm&gt; to merge all CSS into one file (but it's only a plan for now).
+
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/js-min.pl&gt;
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/css-min.pl&gt;
+
+=head2 debug flag in foorum_local.yml
+
+vim foorum_local.yml, and add a line:
+
+  debug_mode: 1
+
+
+=head2 Build Docs From GoogleCode wiki
+
+Please don't edit $svn/trunk/docs/ HTML files, instead edit $svn/wiki or L&lt;http://code.google.com/p/foorum/w/list|Wiki&gt; through Web. after edit, u can use follow script to update docs/ HTML files.
+
+  * L&lt;http://foorum.googlecode.com/svn/trunk/bin/misc/bdfgw.pl&gt;
+
+=head1 SEE ALSO
+
+L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial4&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/Tutorial3.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,103 +1,103 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::Tutorial4 - Tutorial 4: jQuery javascript framework
-
-=head2 Short Introducation
-
-L&lt;http://jquery.com/|jQuery&gt; is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages.
-
-There are a lot of javascript frameworks: prototype, mootool, dojo, YUI etc. Yet why we pick up jquery is just a matter of taste. (Dude, I can't tell more, that's just personal feeling.)
-
-=head2 Used in Foorum
-
-We load jquery in every page by default.
-
-   * disable Submit button when submit() form to avoid duplicate submit.
-
-      $(document.forms).each( function(theform) {
-          
-          // disabled the Submit and Reset when submit a form
-          // to avoid duplicate submit
-          $(theform).submit( function() {
-              $('input:submit').attr( { disabled : 'disabled' } );
-              $('input:reset').attr(  { disabled : 'disabled' } );
-          } );
-          
-          // Press Ctrl+Enter to submit the form. like QQ.
-          $(theform).keypress( function(evt) {
-              var x = evt.keyCode;
-              var q = evt.ctrlKey;
-              
-              if (q &amp;&amp; (x == 13 || x == 10)) {
-                  theform.submit();
-              }
-          } );
-      } );
-
-   * timezone auto-detection. L&lt;|2008-01-17 15:46:33 &gt; in my local time, meanwhile that's L&lt;|2008-01-17 16:46:33 &gt; in your computer. that's provided by this piece of code. (put class=&quot;date&quot; in MySQL DateTime format span. &lt;span class=&quot;date&quot;&gt;2008-01-17 15:46:33&lt;/span&gt;)
-
-      // follows are copied from datePicker/date.js
-      // utility method
-      var _zeroPad = function(num) {
-          var s = '0'+num;
-          return s.substring(s.length-2)
-          //return ('0'+num).substring(-2); // doesn't work on IE :(
-      };
-      
-     $(&quot;.date&quot;).each(function (i) {
-          var s = $(this).text();
-          if (! s) { return false; }
-   
-          var f = this.id; //format
-          if (! f) {
-              f = 'yyyy-mm-dd hh:ii:ss';
-          }
-          
-          var d = new Date(1997, 1, 1, 1, 1, 1);
-          var iY = f.indexOf('yyyy');
-          if (iY &gt; -1) {
-              d.setFullYear(Number(s.substr(iY, 4)));
-          }
-          var iM = f.indexOf('mm');
-          if (iM &gt; -1) {
-              d.setMonth(Number(s.substr(iM, 2)) - 1);
-          }
-          d.setDate(Number(s.substr(f.indexOf('dd'), 2)));
-          d.setHours(Number(s.substr(f.indexOf('hh'), 2)));
-          d.setMinutes(Number(s.substr(f.indexOf('ii'), 2)));
-          d.setSeconds(Number(s.substr(f.indexOf('ss'), 2)));
-          
-          var timezoneOffset = -(new Date().getTimezoneOffset());
-          d.setMinutes(d.getMinutes() + timezoneOffset);
-          
-          if (! isNaN(d.getFullYear()) &amp;&amp; d.getFullYear() &gt; 1997) {
-              var t = f
-                  .split('yyyy').join(d.getFullYear())
-                  .split('mm').join(_zeroPad(d.getMonth()+1))
-                  .split('dd').join(_zeroPad(d.getDate()))
-                  .split('hh').join(_zeroPad(d.getHours()))
-                  .split('ii').join(_zeroPad(d.getMinutes()))
-                  .split('ss').join(_zeroPad(d.getSeconds()))
-                  ;
-          
-              $(this).text(t);
-          }
-     } );
-
-
-Above code is from L&lt;http://foorum.googlecode.com/svn/trunk/root/static/js/utils.js&gt; it may be changed later.
-
-=head2 jQuery UI
-
-L&lt;http://ui.jquery.com/&gt;
-
-We are using Tabs. L&lt;http://dev.jquery.com/view/tags/ui/1.0.1a/demos/ui.tabs.html&gt;
-
-=head1 SEE ALSO
-
-L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::Tutorial4 - Tutorial 4: jQuery javascript framework
+
+=head2 Short Introducation
+
+L&lt;http://jquery.com/|jQuery&gt; is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages.
+
+There are a lot of javascript frameworks: prototype, mootool, dojo, YUI etc. Yet why we pick up jquery is just a matter of taste. (Dude, I can't tell more, that's just personal feeling.)
+
+=head2 Used in Foorum
+
+We load jquery in every page by default.
+
+   * disable Submit button when submit() form to avoid duplicate submit.
+
+      $(document.forms).each( function(theform) {
+          
+          // disabled the Submit and Reset when submit a form
+          // to avoid duplicate submit
+          $(theform).submit( function() {
+              $('input:submit').attr( { disabled : 'disabled' } );
+              $('input:reset').attr(  { disabled : 'disabled' } );
+          } );
+          
+          // Press Ctrl+Enter to submit the form. like QQ.
+          $(theform).keypress( function(evt) {
+              var x = evt.keyCode;
+              var q = evt.ctrlKey;
+              
+              if (q &amp;&amp; (x == 13 || x == 10)) {
+                  theform.submit();
+              }
+          } );
+      } );
+
+   * timezone auto-detection. L&lt;|2008-01-17 15:46:33 &gt; in my local time, meanwhile that's L&lt;|2008-01-17 16:46:33 &gt; in your computer. that's provided by this piece of code. (put class=&quot;date&quot; in MySQL DateTime format span. &lt;span class=&quot;date&quot;&gt;2008-01-17 15:46:33&lt;/span&gt;)
+
+      // follows are copied from datePicker/date.js
+      // utility method
+      var _zeroPad = function(num) {
+          var s = '0'+num;
+          return s.substring(s.length-2)
+          //return ('0'+num).substring(-2); // doesn't work on IE :(
+      };
+      
+     $(&quot;.date&quot;).each(function (i) {
+          var s = $(this).text();
+          if (! s) { return false; }
+   
+          var f = this.id; //format
+          if (! f) {
+              f = 'yyyy-mm-dd hh:ii:ss';
+          }
+          
+          var d = new Date(1997, 1, 1, 1, 1, 1);
+          var iY = f.indexOf('yyyy');
+          if (iY &gt; -1) {
+              d.setFullYear(Number(s.substr(iY, 4)));
+          }
+          var iM = f.indexOf('mm');
+          if (iM &gt; -1) {
+              d.setMonth(Number(s.substr(iM, 2)) - 1);
+          }
+          d.setDate(Number(s.substr(f.indexOf('dd'), 2)));
+          d.setHours(Number(s.substr(f.indexOf('hh'), 2)));
+          d.setMinutes(Number(s.substr(f.indexOf('ii'), 2)));
+          d.setSeconds(Number(s.substr(f.indexOf('ss'), 2)));
+          
+          var timezoneOffset = -(new Date().getTimezoneOffset());
+          d.setMinutes(d.getMinutes() + timezoneOffset);
+          
+          if (! isNaN(d.getFullYear()) &amp;&amp; d.getFullYear() &gt; 1997) {
+              var t = f
+                  .split('yyyy').join(d.getFullYear())
+                  .split('mm').join(_zeroPad(d.getMonth()+1))
+                  .split('dd').join(_zeroPad(d.getDate()))
+                  .split('hh').join(_zeroPad(d.getHours()))
+                  .split('ii').join(_zeroPad(d.getMinutes()))
+                  .split('ss').join(_zeroPad(d.getSeconds()))
+                  ;
+          
+              $(this).text(t);
+          }
+     } );
+
+
+Above code is from L&lt;http://foorum.googlecode.com/svn/trunk/root/static/js/utils.js&gt; it may be changed later.
+
+=head2 jQuery UI
+
+L&lt;http://ui.jquery.com/&gt;
+
+We are using Tabs. L&lt;http://dev.jquery.com/view/tags/ui/1.0.1a/demos/ui.tabs.html&gt;
+
+=head1 SEE ALSO
+
+L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial5&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/Tutorial4.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,234 +1,234 @@
-
-=pod
-
-=head1 NAME
-
-Foorum::Manual::Tutorial5 - Tutorial 5: How to write test cases For Foorum
-
-=head2 Test
-
-Test, test, test!
-
-=head2 Reference
-
-   * L&lt;Test::Simple&gt;
-   * L&lt;Test::More&gt;
-   * L&lt;Test::Harness&gt;
-   * L&lt;Test::LongString&gt;
-
-=head2 Controller
-
-We are not going to use L&lt;Test::WWW::Mechanize::Catalyst&gt; for this moment. Sure, I think we will add it later.
-
-=head2 Model, esp. Schema
-
-We are going to move all schema related code into ResultSet/ scope because it's easy to test without $c in Model/.
-
-Some explanation in Foorum::Test under t/lib:
-
-   * we use DBD::SQLite to test all schema function since it's very simple.
-
-  sub schema {
-      # override live cache
-      $Foorum::Schema::cache = cache();
-   
-      # create the database
-      my $db_file = &quot;$path/test.db&quot;;
-      my $schema
-          = Foorum::Schema-&gt;connect( &quot;dbi:SQLite:$db_file&quot;, '', '',
-          { AutoCommit =&gt; 1, RaiseError =&gt; 1, PrintError =&gt; 1 },
-          );
-   
-      return $schema;
-  }
-
-   * we use File::Cache as test cache backend. and with namespace: 'FoorumTest'
-
-  sub cache {
-      return $cache if ($cache);
-   
-      $cache = Cache::FileCache-&gt;new(
-          {   namespace          =&gt; 'FoorumTest',
-              default_expires_in =&gt; 300,
-          }
-      );
-   
-      return $cache;
-  }
-
-
-with this two things, the test case wouldn't affect the product site.
-
-filter_word.t code explanation:
-
-  #!/usr/bin/perl
-   
-  use strict;
-  use warnings;
-  use Test::More;
-   
-  ### Code Exp.
-  ### To be sane, we skip if DBD::SQLite is not installed.
-  BEGIN {
-      eval { require DBI }
-          or plan skip_all =&gt; &quot;DBI is required for this test&quot;;
-      eval { require DBD::SQLite }
-          or plan skip_all =&gt; &quot;DBD::SQLite is required for this test&quot;;
-      plan tests           =&gt; 3;
-  }
-   
-  ### Code Exp.
-  ### load Foorum::TestUtils to get schema and cache
-  use FindBin;
-  use lib &quot;$FindBin::Bin/../lib&quot;;
-  use Foorum::TestUtils qw/schema cache base_path/;
-  my $schema = schema();
-  my $cache  = cache();
-   
-  ### Code Exp.
-  ### Test with Foorum::ResultSet::FilterWord
-  my $filter_word_res = $schema-&gt;resultset('FilterWord');
-   
-  ### Code Exp.
-  ### to make test case moving smoothly, we just create some test data
-  ### After test case is done, we need remove those data
-  # create
-  $filter_word_res-&gt;create(
-      {   word =&gt; 'system',
-          type =&gt; 'username_reserved'
-      }
-  );
-  $filter_word_res-&gt;create(
-      {   word =&gt; 'fuck',
-          type =&gt; 'bad_word'
-      }
-  );
-  $filter_word_res-&gt;create(
-      {   word =&gt; 'asshole',
-          type =&gt; 'offensive_word'
-      }
-  );
-   
-  ### Code Exp.
-  ### Make sure exist cache wouldn't affect our test cases.
-  $cache-&gt;remove(&quot;filter_word|type=username_reserved&quot;);
-  $cache-&gt;remove(&quot;filter_word|type=bad_word&quot;);
-  $cache-&gt;remove(&quot;filter_word|type=offensive_word&quot;);
-   
-  ### Code Exp.
-  ### Check sub get_data in Foorum::ResultSet::FilterWord
-  my @data = $filter_word_res-&gt;get_data('username_reserved');
-   
-  ### Code Exp.
-  ### ok what we get cantains the one we created.
-  ok( grep { $_ eq 'system' } @data, &quot;get 'username_reserved' OK&quot; );
-   
-  ### Code Exp.
-  ### check sub has_bad_word in Foorum::ResultSet::FilterWord
-  my $has_bad_word = $filter_word_res-&gt;has_bad_word(&quot;oh, fuck you!&quot;);
-  is( $has_bad_word, 1, 'has_bad_word OK' );
-   
-  ### Code Exp.
-  ### check sub convert_offensive_word in Foorum::ResultSet::FilterWord
-  my $return_text = $filter_word_res-&gt;convert_offensive_word(&quot;kick your asshole la, dude!&quot;);
-  like( $return_text, qr/\*/, 'convert_offensive_word OK' ); #\ #/
-   
-  ### Code Exp.
-  ### Make our DB as the same as before we run it. so that we can run it many times
-  END {
-      # Keep Database the same from original
-      use File::Copy ();
-      my $base_path = base_path();
-      File::Copy::copy( &quot;$base_path/t/lib/Foorum/backup.db&quot;,
-          &quot;$base_path/t/lib/Foorum/test.db&quot; );
-  }
-   
-  1;
-
-
-=head2 View Esp. TT
-
-Generally we don't write any test cases for TT. but if we want to write one, that's still possible.
-
-check t/templates/wrapper.t
-
-  #!/usr/bin/perl
-   
-  use strict;
-  use warnings;
-  use Test::More;
-   
-  BEGIN {
-      my $has_test_longstring
-          = eval &quot;use Test::LongString; 1;&quot;;    ## no critic (ProhibitStringyEval)
-      $has_test_longstring or plan skip_all =&gt; &quot;Test::LongString is required for this test&quot;;
-      plan tests =&gt; 2;
-  }
-   
-  use FindBin;
-  use lib &quot;$FindBin::Bin/../lib&quot;;
-  use Foorum::TestUtils qw/tt2/;
-  my $tt2 = tt2();
-   
-  my $var = {
-      title   =&gt; 'TestTitle',
-      RSS_URL =&gt; 'httpRSS_URL',
-  };
-   
-  my $ret;
-  $tt2-&gt;process( 'wrapper.html', $var, \$ret );
-   
-  contains_string( $ret, 'TestTitle', '[% title %] ok' );
-  like_string(
-      $ret,
-      qr/application\/rss\+xml(.*?)href\=\&quot;httpRSS_URL\&quot;/,
-      '[% RSS_URL %] OK'
-  );
-
-
-=head2 Others
-
-Like Foorum::Formatter or Foorum::Utils, we just write normal test cases as told in Test::More.
-
-Example: (t/formatter/textile.t)
-
-  #!/usr/bin/perl
-   
-  use strict;
-  use warnings;
-  use Test::More;
-   
-  BEGIN {
-      eval { require Text::Textile }
-          or plan skip_all =&gt; &quot;Text::Textile is required for this test&quot;;
-   
-      plan tests =&gt; 3;
-  }
-   
-  use Foorum::Formatter qw/filter_format/;
-   
-  my $text = &lt;&lt;TEXT;
-  h1. Heading
-   
-  A _simple_ demonstration of Textile markup.
-   
-  * One
-  * Two
-  * Three
-   
-  &quot;More information&quot;:http://www.textism.com/tools/textile is available.
-  TEXT
-   
-  my $html = filter_format( $text, { format =&gt; 'textile' } );
-   
-  like( $html, qr/h1/, 'h1 OK' );
-  like( $html, qr/li/, '*,* OK' );
-  like( $html, qr/\&lt;a href=/,
-      '&quot;More information&quot;:http://www.textism.com/tools/textile OK' );
-
-
-=head1 SEE ALSO
-
-L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial4&gt;
-
-=cut
+
+=pod
+
+=head1 NAME
+
+Foorum::Manual::Tutorial5 - Tutorial 5: How to write test cases For Foorum
+
+=head2 Test
+
+Test, test, test!
+
+=head2 Reference
+
+   * L&lt;Test::Simple&gt;
+   * L&lt;Test::More&gt;
+   * L&lt;Test::Harness&gt;
+   * L&lt;Test::LongString&gt;
+
+=head2 Controller
+
+We are not going to use L&lt;Test::WWW::Mechanize::Catalyst&gt; for this moment. Sure, I think we will add it later.
+
+=head2 Model, esp. Schema
+
+We are going to move all schema related code into ResultSet/ scope because it's easy to test without $c in Model/.
+
+Some explanation in Foorum::Test under t/lib:
+
+   * we use DBD::SQLite to test all schema function since it's very simple.
+
+  sub schema {
+      # override live cache
+      $Foorum::Schema::cache = cache();
+   
+      # create the database
+      my $db_file = &quot;$path/test.db&quot;;
+      my $schema
+          = Foorum::Schema-&gt;connect( &quot;dbi:SQLite:$db_file&quot;, '', '',
+          { AutoCommit =&gt; 1, RaiseError =&gt; 1, PrintError =&gt; 1 },
+          );
+   
+      return $schema;
+  }
+
+   * we use File::Cache as test cache backend. and with namespace: 'FoorumTest'
+
+  sub cache {
+      return $cache if ($cache);
+   
+      $cache = Cache::FileCache-&gt;new(
+          {   namespace          =&gt; 'FoorumTest',
+              default_expires_in =&gt; 300,
+          }
+      );
+   
+      return $cache;
+  }
+
+
+with this two things, the test case wouldn't affect the product site.
+
+filter_word.t code explanation:
+
+  #!/usr/bin/perl
+   
+  use strict;
+  use warnings;
+  use Test::More;
+   
+  ### Code Exp.
+  ### To be sane, we skip if DBD::SQLite is not installed.
+  BEGIN {
+      eval { require DBI }
+          or plan skip_all =&gt; &quot;DBI is required for this test&quot;;
+      eval { require DBD::SQLite }
+          or plan skip_all =&gt; &quot;DBD::SQLite is required for this test&quot;;
+      plan tests           =&gt; 3;
+  }
+   
+  ### Code Exp.
+  ### load Foorum::TestUtils to get schema and cache
+  use FindBin;
+  use lib &quot;$FindBin::Bin/../lib&quot;;
+  use Foorum::TestUtils qw/schema cache base_path/;
+  my $schema = schema();
+  my $cache  = cache();
+   
+  ### Code Exp.
+  ### Test with Foorum::ResultSet::FilterWord
+  my $filter_word_res = $schema-&gt;resultset('FilterWord');
+   
+  ### Code Exp.
+  ### to make test case moving smoothly, we just create some test data
+  ### After test case is done, we need remove those data
+  # create
+  $filter_word_res-&gt;create(
+      {   word =&gt; 'system',
+          type =&gt; 'username_reserved'
+      }
+  );
+  $filter_word_res-&gt;create(
+      {   word =&gt; 'fuck',
+          type =&gt; 'bad_word'
+      }
+  );
+  $filter_word_res-&gt;create(
+      {   word =&gt; 'asshole',
+          type =&gt; 'offensive_word'
+      }
+  );
+   
+  ### Code Exp.
+  ### Make sure exist cache wouldn't affect our test cases.
+  $cache-&gt;remove(&quot;filter_word|type=username_reserved&quot;);
+  $cache-&gt;remove(&quot;filter_word|type=bad_word&quot;);
+  $cache-&gt;remove(&quot;filter_word|type=offensive_word&quot;);
+   
+  ### Code Exp.
+  ### Check sub get_data in Foorum::ResultSet::FilterWord
+  my @data = $filter_word_res-&gt;get_data('username_reserved');
+   
+  ### Code Exp.
+  ### ok what we get cantains the one we created.
+  ok( grep { $_ eq 'system' } @data, &quot;get 'username_reserved' OK&quot; );
+   
+  ### Code Exp.
+  ### check sub has_bad_word in Foorum::ResultSet::FilterWord
+  my $has_bad_word = $filter_word_res-&gt;has_bad_word(&quot;oh, fuck you!&quot;);
+  is( $has_bad_word, 1, 'has_bad_word OK' );
+   
+  ### Code Exp.
+  ### check sub convert_offensive_word in Foorum::ResultSet::FilterWord
+  my $return_text = $filter_word_res-&gt;convert_offensive_word(&quot;kick your asshole la, dude!&quot;);
+  like( $return_text, qr/\*/, 'convert_offensive_word OK' ); #\ #/
+   
+  ### Code Exp.
+  ### Make our DB as the same as before we run it. so that we can run it many times
+  END {
+      # Keep Database the same from original
+      use File::Copy ();
+      my $base_path = base_path();
+      File::Copy::copy( &quot;$base_path/t/lib/Foorum/backup.db&quot;,
+          &quot;$base_path/t/lib/Foorum/test.db&quot; );
+  }
+   
+  1;
+
+
+=head2 View Esp. TT
+
+Generally we don't write any test cases for TT. but if we want to write one, that's still possible.
+
+check t/templates/wrapper.t
+
+  #!/usr/bin/perl
+   
+  use strict;
+  use warnings;
+  use Test::More;
+   
+  BEGIN {
+      my $has_test_longstring
+          = eval &quot;use Test::LongString; 1;&quot;;    ## no critic (ProhibitStringyEval)
+      $has_test_longstring or plan skip_all =&gt; &quot;Test::LongString is required for this test&quot;;
+      plan tests =&gt; 2;
+  }
+   
+  use FindBin;
+  use lib &quot;$FindBin::Bin/../lib&quot;;
+  use Foorum::TestUtils qw/tt2/;
+  my $tt2 = tt2();
+   
+  my $var = {
+      title   =&gt; 'TestTitle',
+      RSS_URL =&gt; 'httpRSS_URL',
+  };
+   
+  my $ret;
+  $tt2-&gt;process( 'wrapper.html', $var, \$ret );
+   
+  contains_string( $ret, 'TestTitle', '[% title %] ok' );
+  like_string(
+      $ret,
+      qr/application\/rss\+xml(.*?)href\=\&quot;httpRSS_URL\&quot;/,
+      '[% RSS_URL %] OK'
+  );
+
+
+=head2 Others
+
+Like Foorum::Formatter or Foorum::Utils, we just write normal test cases as told in Test::More.
+
+Example: (t/formatter/textile.t)
+
+  #!/usr/bin/perl
+   
+  use strict;
+  use warnings;
+  use Test::More;
+   
+  BEGIN {
+      eval { require Text::Textile }
+          or plan skip_all =&gt; &quot;Text::Textile is required for this test&quot;;
+   
+      plan tests =&gt; 3;
+  }
+   
+  use Foorum::Formatter qw/filter_format/;
+   
+  my $text = &lt;&lt;TEXT;
+  h1. Heading
+   
+  A _simple_ demonstration of Textile markup.
+   
+  * One
+  * Two
+  * Three
+   
+  &quot;More information&quot;:http://www.textism.com/tools/textile is available.
+  TEXT
+   
+  my $html = filter_format( $text, { format =&gt; 'textile' } );
+   
+  like( $html, qr/h1/, 'h1 OK' );
+  like( $html, qr/li/, '*,* OK' );
+  like( $html, qr/\&lt;a href=/,
+      '&quot;More information&quot;:http://www.textism.com/tools/textile OK' );
+
+
+=head1 SEE ALSO
+
+L&lt;Foorum::Manual::Tutorial1&gt;, L&lt;Foorum::Manual::Tutorial2&gt;, L&lt;Foorum::Manual::Tutorial3&gt;, L&lt;Foorum::Manual::Tutorial4&gt;
+
+=cut</diff>
      <filename>lib/Foorum/Manual/Tutorial5.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,26 +1,26 @@
-
-=pod
-
-
-=head1 NAME
-
-Foorum::Manual::Upgrade - how to upgrade Foorum?
-
-=head1 Introduction
-
-It's for upgrade from old version to new Foorum. If u are trying to install from the beginning, try read L&lt;Foorum::Manual::INSTALL&gt;
-
-=head1 Details
-
-Let's explain in an example like upgrade from 0.1.5 to 0.2.0
-
-   * check bin/upgrade dir. then u will find a lot of dirs like 0.1.1 0.1.2 like. try run each scripts under those dirs from 0.1.6 (no 0.1.5 since we ran that when upgrade to 0.1.5) to 0.2.0. here we have 0.1.7, 0.1.8 and 0.2.0
-   * run them from old to new like &quot;perl 0.1.7/up.pl&quot; then &quot;perl 0.1.8/upl.pl&quot;, and at last &quot;perl 0.2.0/scraper.pl&quot; (if u have scraper option on)
-
-=head1 CAVEATS
-
-   * Please don't run them more than once (even some scripts can run many times, but some are not)
-   * Report to L&lt;Foorum::Manual::AUTHORS&gt; when something went wrong
-
-
-=cut
+
+=pod
+
+
+=head1 NAME
+
+Foorum::Manual::Upgrade - how to upgrade Foorum?
+
+=head1 Introduction
+
+It's for upgrade from old version to new Foorum. If u are trying to install from the beginning, try read L&lt;Foorum::Manual::INSTALL&gt;
+
+=head1 Details
+
+Let's explain in an example like upgrade from 0.1.5 to 0.2.0
+
+   * check bin/upgrade dir. then u will find a lot of dirs like 0.1.1 0.1.2 like. try run each scripts under those dirs from 0.1.6 (no 0.1.5 since we ran that when upgrade to 0.1.5) to 0.2.0. here we have 0.1.7, 0.1.8 and 0.2.0
+   * run them from old to new like &quot;perl 0.1.7/up.pl&quot; then &quot;perl 0.1.8/upl.pl&quot;, and at last &quot;perl 0.2.0/scraper.pl&quot; (if u have scraper option on)
+
+=head1 CAVEATS
+
+   * Please don't run them more than once (even some scripts can run many times, but some are not)
+   * Report to L&lt;Foorum::Manual::AUTHORS&gt; when something went wrong
+
+
+=cut</diff>
      <filename>lib/Foorum/Manual/Upgrade.pod</filename>
    </modified>
    <modified>
      <diff>@@ -1,39 +1,39 @@
-.ui-accordion { margin: 0; padding: 0; list-style-type: none; }
-.ui-accordion li { margin: 0; margin-bottom: 2px; padding: 0; }
-.ui-accordion li .ui-accordion-header {
-	display: block;
-	padding-left: 5px;
-	margin-right: 3px;
-	height: 28px;
-	background-image: url(i/accordion-middle.png);
-	color: #000;
-	text-decoration: none;
-	line-height: 28px;
-	position: relative;
-	left: 3px;
-}
-.ui-accordion li .ui-accordion-right {
-	display: block;
-	background-image: url(i/accordion-right.png);
-	position: absolute;
-	top: 0px;
-	right: -3px;
-	height: 28px;
-	width: 3px;
-}
-.ui-accordion li .ui-accordion-left {
-	display: block;
-	background-image: url(i/accordion-left.png);
-	background-repeat: no-repeat;
-	position: absolute;
-	height: 28px;
-	width: 3px;
-}
-
-.ui-accordion li:hover .ui-accordion-left { background-image: url(i/accordion-left-over.png); }
-.ui-accordion li:hover .ui-accordion-header { background-image: url(i/accordion-middle-over.png); }
-.ui-accordion li:hover .ui-accordion-right { background-image: url(i/accordion-right-over.png); }
-
-.ui-accordion li.selected .ui-accordion-left { background-image: url(i/accordion-left-act.png); }
-.ui-accordion li.selected .ui-accordion-header { background-image: url(i/accordion-middle-act.png); }
-.ui-accordion li.selected .ui-accordion-right { background-image: url(i/accordion-right-act.png); }
+.ui-accordion { margin: 0; padding: 0; list-style-type: none; }
+.ui-accordion li { margin: 0; margin-bottom: 2px; padding: 0; }
+.ui-accordion li .ui-accordion-header {
+	display: block;
+	padding-left: 5px;
+	margin-right: 3px;
+	height: 28px;
+	background-image: url(i/accordion-middle.png);
+	color: #000;
+	text-decoration: none;
+	line-height: 28px;
+	position: relative;
+	left: 3px;
+}
+.ui-accordion li .ui-accordion-right {
+	display: block;
+	background-image: url(i/accordion-right.png);
+	position: absolute;
+	top: 0px;
+	right: -3px;
+	height: 28px;
+	width: 3px;
+}
+.ui-accordion li .ui-accordion-left {
+	display: block;
+	background-image: url(i/accordion-left.png);
+	background-repeat: no-repeat;
+	position: absolute;
+	height: 28px;
+	width: 3px;
+}
+
+.ui-accordion li:hover .ui-accordion-left { background-image: url(i/accordion-left-over.png); }
+.ui-accordion li:hover .ui-accordion-header { background-image: url(i/accordion-middle-over.png); }
+.ui-accordion li:hover .ui-accordion-right { background-image: url(i/accordion-right-over.png); }
+
+.ui-accordion li.selected .ui-accordion-left { background-image: url(i/accordion-left-act.png); }
+.ui-accordion li.selected .ui-accordion-header { background-image: url(i/accordion-middle-act.png); }
+.ui-accordion li.selected .ui-accordion-right { background-image: url(i/accordion-right-act.png); }</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.accordion.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
-@import &quot;flora.css&quot;;
-@import &quot;flora.accordion.css&quot;;
-@import &quot;flora.datepicker.css&quot;;
-@import &quot;flora.dialog.css&quot;;
-@import &quot;flora.resizable.css&quot;;
-@import &quot;flora.slider.css&quot;;
-@import &quot;flora.tabs.css&quot;;
+@import &quot;flora.css&quot;;
+@import &quot;flora.accordion.css&quot;;
+@import &quot;flora.datepicker.css&quot;;
+@import &quot;flora.dialog.css&quot;;
+@import &quot;flora.resizable.css&quot;;
+@import &quot;flora.slider.css&quot;;
+@import &quot;flora.tabs.css&quot;;</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.all.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,2 @@
-.ui-wrapper { border: 1px solid #50A029; }
-.ui-wrapper input, .ui-wrapper textarea { border: 0; }
+.ui-wrapper { border: 1px solid #50A029; }
+.ui-wrapper input, .ui-wrapper textarea { border: 0; }</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,179 +1,179 @@
-/* Main Flora Style Sheet for jQuery UI ui-datepicker */
-#ui-datepicker-div, .ui-datepicker-inline {
-	font-family: Arial,Helvetica,sans-serif;
-	font-size: 14px;
-	padding: 0;
-	margin: 0;
-	background: #DDD;
-	width: 185px;
-}
-#ui-datepicker-div {
-	display: none;
-	border: 1px solid #FF9900;
-	z-index: 10;
-}
-.ui-datepicker-inline {
-	float: left;
-	display: block;
-	border: 0;
-}
-.ui-datepicker-dialog {
-	padding: 5px !important;
-	border: 4px ridge #DDD !important;
-}
-button.ui-datepicker-trigger {
-	width: 25px;
-}
-img.ui-datepicker-trigger {
-	margin: 2px;
-	vertical-align: middle;
-}
-.ui-datepicker-prompt {
-	float: left;
-	padding: 2px;
-	background: #DDD;
-	color: #000;
-}
-*html .ui-datepicker-prompt {
-	width: 185px;
-}
-.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker {
-	clear: both;
-	float: left;
-	width: 100%;
-	color: #FFF;
-}
-.ui-datepicker-control {
-	background: #FF9900;
-	padding: 2px 0px;
-}
-.ui-datepicker-links {
-	background: #E0F4D7;
-	padding: 2px 0px;
-}
-.ui-datepicker-control, .ui-datepicker-links {
-	font-weight: bold;
-	font-size: 80%;
-	letter-spacing: 1px;
-}
-.ui-datepicker-links label {
-	padding: 2px 5px;
-	color: #888;
-}
-.ui-datepicker-clear, .ui-datepicker-prev {
-	float: left;
-	width: 34%;
-}
-.ui-datepicker-current {
-	float: left;
-	width: 30%;
-	text-align: center;
-}
-.ui-datepicker-close, .ui-datepicker-next {
-	float: right;
-	width: 34%;
-	text-align: right;
-}
-.ui-datepicker-header {
-	padding: 1px 0 3px;
-	background: #83C948;
-	text-align: center;
-	font-weight: bold;
-	height: 1.3em;
-}
-.ui-datepicker-header select {
-	background: #83C948;
-	color: #000;
-	border: 0px;
-	font-weight: bold;
-}
-.ui-datepicker {
-	background: #CCC;
-	text-align: center;
-	font-size: 100%;
-}
-.ui-datepicker a {
-	display: block;
-	width: 100%;
-}
-.ui-datepicker .ui-datepicker-title-row {
-	background: #B1DB87;
-	color: #000;
-}
-.ui-datepicker .ui-datepicker-days-row {
-	background: #FFF;
-	color: #666;
-}
-.ui-datepicker-week-col {
-	background: #B1DB87;
-	color: #000;
-}
-.ui-datepicker .ui-datepicker-days-cell {
-	color: #000;
-	border: 1px solid #DDD;
-}
-#ui-datepicker .ui-datepicker-days-cell a {
-	display: block;
-}
-.ui-datepicker .ui-datepicker-week-end-cell {
-	background: #E0F4D7;
-}
-.ui-datepicker .ui-datepicker-days-cell-over {
-	background: #FFF;
-	border: 1px solid #777;
-}
-.ui-datepicker .ui-datepicker-unselectable {
-	color: #888;
-}
-.ui-datepicker-today {
-	background: #B1DB87 !important;
-}
-.ui-datepicker-current-day {
-	background: #83C948 !important;
-}
-#ui-datepicker-div a, .ui-datepicker-inline a {
-	cursor: pointer;
-	margin: 0;
-	padding: 0;
-	background: none;
-	color: #000;
-}
-.ui-datepicker-inline .ui-datepicker-links a {
-	padding: 0 5px !important;
-}
-.ui-datepicker-control a, .ui-datepicker-links a {
-	padding: 2px 5px !important;
-	color: #000 !important;
-}
-.ui-datepicker-title-row a {
-	color: #000 !important;
-}
-.ui-datepicker-control a:hover {
-	background: #FDD !important;
-	color: #333 !important;
-}
-.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover {
-	background: #FFF !important;
-	color: #333 !important;
-}
-.ui-datepicker-multi .ui-datepicker {
-	border: 1px solid #83C948;
-}
-.ui-datepicker-one-month {
-	float: left;
-	width: 185px;
-}
-.ui-datepicker-new-row {
-	clear: left;
-}
-.ui-datepicker-cover {
-	display: none;
-	display/**/: block;
-	position: absolute;
-	z-index: -1;
-	filter: mask();
-	top: -4px;
-	left: -4px;
-	width: 193px;
-	height: 200px;
-}
+/* Main Flora Style Sheet for jQuery UI ui-datepicker */
+#ui-datepicker-div, .ui-datepicker-inline {
+	font-family: Arial,Helvetica,sans-serif;
+	font-size: 14px;
+	padding: 0;
+	margin: 0;
+	background: #DDD;
+	width: 185px;
+}
+#ui-datepicker-div {
+	display: none;
+	border: 1px solid #FF9900;
+	z-index: 10;
+}
+.ui-datepicker-inline {
+	float: left;
+	display: block;
+	border: 0;
+}
+.ui-datepicker-dialog {
+	padding: 5px !important;
+	border: 4px ridge #DDD !important;
+}
+button.ui-datepicker-trigger {
+	width: 25px;
+}
+img.ui-datepicker-trigger {
+	margin: 2px;
+	vertical-align: middle;
+}
+.ui-datepicker-prompt {
+	float: left;
+	padding: 2px;
+	background: #DDD;
+	color: #000;
+}
+*html .ui-datepicker-prompt {
+	width: 185px;
+}
+.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker {
+	clear: both;
+	float: left;
+	width: 100%;
+	color: #FFF;
+}
+.ui-datepicker-control {
+	background: #FF9900;
+	padding: 2px 0px;
+}
+.ui-datepicker-links {
+	background: #E0F4D7;
+	padding: 2px 0px;
+}
+.ui-datepicker-control, .ui-datepicker-links {
+	font-weight: bold;
+	font-size: 80%;
+	letter-spacing: 1px;
+}
+.ui-datepicker-links label {
+	padding: 2px 5px;
+	color: #888;
+}
+.ui-datepicker-clear, .ui-datepicker-prev {
+	float: left;
+	width: 34%;
+}
+.ui-datepicker-current {
+	float: left;
+	width: 30%;
+	text-align: center;
+}
+.ui-datepicker-close, .ui-datepicker-next {
+	float: right;
+	width: 34%;
+	text-align: right;
+}
+.ui-datepicker-header {
+	padding: 1px 0 3px;
+	background: #83C948;
+	text-align: center;
+	font-weight: bold;
+	height: 1.3em;
+}
+.ui-datepicker-header select {
+	background: #83C948;
+	color: #000;
+	border: 0px;
+	font-weight: bold;
+}
+.ui-datepicker {
+	background: #CCC;
+	text-align: center;
+	font-size: 100%;
+}
+.ui-datepicker a {
+	display: block;
+	width: 100%;
+}
+.ui-datepicker .ui-datepicker-title-row {
+	background: #B1DB87;
+	color: #000;
+}
+.ui-datepicker .ui-datepicker-days-row {
+	background: #FFF;
+	color: #666;
+}
+.ui-datepicker-week-col {
+	background: #B1DB87;
+	color: #000;
+}
+.ui-datepicker .ui-datepicker-days-cell {
+	color: #000;
+	border: 1px solid #DDD;
+}
+#ui-datepicker .ui-datepicker-days-cell a {
+	display: block;
+}
+.ui-datepicker .ui-datepicker-week-end-cell {
+	background: #E0F4D7;
+}
+.ui-datepicker .ui-datepicker-days-cell-over {
+	background: #FFF;
+	border: 1px solid #777;
+}
+.ui-datepicker .ui-datepicker-unselectable {
+	color: #888;
+}
+.ui-datepicker-today {
+	background: #B1DB87 !important;
+}
+.ui-datepicker-current-day {
+	background: #83C948 !important;
+}
+#ui-datepicker-div a, .ui-datepicker-inline a {
+	cursor: pointer;
+	margin: 0;
+	padding: 0;
+	background: none;
+	color: #000;
+}
+.ui-datepicker-inline .ui-datepicker-links a {
+	padding: 0 5px !important;
+}
+.ui-datepicker-control a, .ui-datepicker-links a {
+	padding: 2px 5px !important;
+	color: #000 !important;
+}
+.ui-datepicker-title-row a {
+	color: #000 !important;
+}
+.ui-datepicker-control a:hover {
+	background: #FDD !important;
+	color: #333 !important;
+}
+.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover {
+	background: #FFF !important;
+	color: #333 !important;
+}
+.ui-datepicker-multi .ui-datepicker {
+	border: 1px solid #83C948;
+}
+.ui-datepicker-one-month {
+	float: left;
+	width: 185px;
+}
+.ui-datepicker-new-row {
+	clear: left;
+}
+.ui-datepicker-cover {
+	display: none;
+	display/**/: block;
+	position: absolute;
+	z-index: -1;
+	filter: mask();
+	top: -4px;
+	left: -4px;
+	width: 193px;
+	height: 200px;
+}</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.datepicker.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,95 +1,95 @@
-/* This file skins dialog */
-
-.flora .ui-dialog,
-.flora.ui-dialog {
-	background-color: #e6f7d4;
-}
-
-.flora .ui-dialog .ui-dialog-titlebar,
-.flora.ui-dialog .ui-dialog-titlebar {
-	border-bottom: 1px solid #d8d2aa;
-	background: #ff9900 url(i/dialog-title.gif) repeat-x;
-	padding: 0px;
-	height: 28px;
-	_height: 29px;
-}
-
-.flora .ui-dialog.ui-draggable .ui-dialog-titlebar,
-.flora.ui-dialog.ui-draggable .ui-dialog-titlebar {
-	cursor: move;
-}
-
-.flora .ui-dialog .ui-dialog-titlebar-close,
-.flora.ui-dialog .ui-dialog-titlebar-close {
-	width: 16px;
-	height: 16px;
-	background: url(i/dialog-titlebar-close.png) no-repeat;
-	position:absolute;
-	top: 6px;
-	right: 7px;
-	cursor: default;
-}
-
-.flora .ui-dialog .ui-dialog-titlebar-close span,
-.flora.ui-dialog .ui-dialog-titlebar-close span {
-	display: none;
-}
-
-.flora .ui-dialog .ui-dialog-titlebar-close-hover,
-.flora.ui-dialog .ui-dialog-titlebar-close-hover {
-	background: url(i/dialog-titlebar-close-hover.png) no-repeat;
-}
-
-.flora .ui-dialog .ui-dialog-title,
-.flora.ui-dialog .ui-dialog-title {
-	margin-left: 5px;
-	color: white;
-	font-weight: bold;
-	position: relative;
-	top: 7px;
-	left: 4px;
-}
-
-.flora .ui-dialog .ui-dialog-content,
-.flora.ui-dialog .ui-dialog-content {
-	margin: 1.2em;
-}
-
-.flora .ui-dialog .ui-dialog-buttonpane,
-.flora.ui-dialog .ui-dialog-buttonpane {
-	position: absolute;
-	bottom: 8px;
-	right: 12px;
-	width: 100%;
-	text-align: right;
-}
-
-.flora .ui-dialog .ui-dialog-buttonpane button,
-.flora.ui-dialog .ui-dialog-buttonpane button {
-	margin: 6px;
-}
-
-/* Dialog handle styles */
-.flora .ui-dialog .ui-resizable-n,
-.flora.ui-dialog .ui-resizable-n { cursor: n-resize; height: 6px; width: 100%; top: 0px; left: 0px; background: transparent url(i/dialog-n.gif) repeat scroll center top; }
-
-.flora .ui-dialog .ui-resizable-s,
-.flora.ui-dialog .ui-resizable-s { cursor: s-resize; height: 8px; width: 100%; bottom: 0px; left: 0px; background: transparent url(i/dialog-s.gif) repeat scroll center top; }
-
-.flora .ui-dialog .ui-resizable-e,
-.flora.ui-dialog .ui-resizable-e { cursor: e-resize; width: 7px; right: 0px; top: 0px; height: 100%; background: transparent url(i/dialog-e.gif) repeat scroll right center; }
-
-.flora .ui-dialog .ui-resizable-w,
-.flora.ui-dialog .ui-resizable-w { cursor: w-resize; width: 7px; left: 0px; top: 0px; height: 100%; background: transparent url(i/dialog-w.gif) repeat scroll right center; }
-
-.flora .ui-dialog .ui-resizable-se,
-.flora.ui-dialog .ui-resizable-se { cursor: se-resize; width: 9px; height: 9px; right: 0px; bottom: 0px; background: transparent url(i/dialog-se.gif); }
-
-.flora .ui-dialog .ui-resizable-sw,
-.flora.ui-dialog .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: 0px; bottom: 0px; background: transparent url(i/dialog-sw.gif); }
-
-.flora .ui-dialog .ui-resizable-nw,
-.flora.ui-dialog .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 29px; left: 0px; top: 0px; background: transparent url(i/dialog-nw.gif); }
-
-.flora .ui-dialog .ui-resizable-ne,
-.flora.ui-dialog .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 29px; right: 0px; top: 0px; background: transparent url(i/dialog-ne.gif); }
+/* This file skins dialog */
+
+.flora .ui-dialog,
+.flora.ui-dialog {
+	background-color: #e6f7d4;
+}
+
+.flora .ui-dialog .ui-dialog-titlebar,
+.flora.ui-dialog .ui-dialog-titlebar {
+	border-bottom: 1px solid #d8d2aa;
+	background: #ff9900 url(i/dialog-title.gif) repeat-x;
+	padding: 0px;
+	height: 28px;
+	_height: 29px;
+}
+
+.flora .ui-dialog.ui-draggable .ui-dialog-titlebar,
+.flora.ui-dialog.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+
+.flora .ui-dialog .ui-dialog-titlebar-close,
+.flora.ui-dialog .ui-dialog-titlebar-close {
+	width: 16px;
+	height: 16px;
+	background: url(i/dialog-titlebar-close.png) no-repeat;
+	position:absolute;
+	top: 6px;
+	right: 7px;
+	cursor: default;
+}
+
+.flora .ui-dialog .ui-dialog-titlebar-close span,
+.flora.ui-dialog .ui-dialog-titlebar-close span {
+	display: none;
+}
+
+.flora .ui-dialog .ui-dialog-titlebar-close-hover,
+.flora.ui-dialog .ui-dialog-titlebar-close-hover {
+	background: url(i/dialog-titlebar-close-hover.png) no-repeat;
+}
+
+.flora .ui-dialog .ui-dialog-title,
+.flora.ui-dialog .ui-dialog-title {
+	margin-left: 5px;
+	color: white;
+	font-weight: bold;
+	position: relative;
+	top: 7px;
+	left: 4px;
+}
+
+.flora .ui-dialog .ui-dialog-content,
+.flora.ui-dialog .ui-dialog-content {
+	margin: 1.2em;
+}
+
+.flora .ui-dialog .ui-dialog-buttonpane,
+.flora.ui-dialog .ui-dialog-buttonpane {
+	position: absolute;
+	bottom: 8px;
+	right: 12px;
+	width: 100%;
+	text-align: right;
+}
+
+.flora .ui-dialog .ui-dialog-buttonpane button,
+.flora.ui-dialog .ui-dialog-buttonpane button {
+	margin: 6px;
+}
+
+/* Dialog handle styles */
+.flora .ui-dialog .ui-resizable-n,
+.flora.ui-dialog .ui-resizable-n { cursor: n-resize; height: 6px; width: 100%; top: 0px; left: 0px; background: transparent url(i/dialog-n.gif) repeat scroll center top; }
+
+.flora .ui-dialog .ui-resizable-s,
+.flora.ui-dialog .ui-resizable-s { cursor: s-resize; height: 8px; width: 100%; bottom: 0px; left: 0px; background: transparent url(i/dialog-s.gif) repeat scroll center top; }
+
+.flora .ui-dialog .ui-resizable-e,
+.flora.ui-dialog .ui-resizable-e { cursor: e-resize; width: 7px; right: 0px; top: 0px; height: 100%; background: transparent url(i/dialog-e.gif) repeat scroll right center; }
+
+.flora .ui-dialog .ui-resizable-w,
+.flora.ui-dialog .ui-resizable-w { cursor: w-resize; width: 7px; left: 0px; top: 0px; height: 100%; background: transparent url(i/dialog-w.gif) repeat scroll right center; }
+
+.flora .ui-dialog .ui-resizable-se,
+.flora.ui-dialog .ui-resizable-se { cursor: se-resize; width: 9px; height: 9px; right: 0px; bottom: 0px; background: transparent url(i/dialog-se.gif); }
+
+.flora .ui-dialog .ui-resizable-sw,
+.flora.ui-dialog .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: 0px; bottom: 0px; background: transparent url(i/dialog-sw.gif); }
+
+.flora .ui-dialog .ui-resizable-nw,
+.flora.ui-dialog .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 29px; left: 0px; top: 0px; background: transparent url(i/dialog-nw.gif); }
+
+.flora .ui-dialog .ui-resizable-ne,
+.flora.ui-dialog .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 29px; right: 0px; top: 0px; background: transparent url(i/dialog-ne.gif); }</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.dialog.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,20 +1,20 @@
-/* This file skins resizables */
-
-.ui-resizable { position: relative; }
-
-/* Global handle styles */
-.ui-resizable-handle { position: absolute; display: none; font-size: 0.1px; }
-.ui-resizable .ui-resizable-handle { display: block; }
-body .ui-resizable-disabled .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
-body .ui-resizable-autohide .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
-
-.ui-resizable-n { cursor: n-resize; height: 6px; width: 100%; top: 0px; left: 0px; background: transparent url(i/resizable-n.gif) repeat scroll center top; }
-.ui-resizable-s { cursor: s-resize; height: 6px; width: 100%; bottom: 0px; left: 0px; background: transparent url(i/resizable-s.gif) repeat scroll center top; }
-
-.ui-resizable-e { cursor: e-resize; width: 6px; right: 0px; top: 0px; height: 100%; background: transparent url(i/resizable-e.gif) repeat scroll right center; }
-.ui-resizable-w { cursor: w-resize; width: 6px; left: 0px; top: 0px; height: 100%; background: transparent url(i/resizable-w.gif) repeat scroll right center; }
-
-.ui-resizable-se { cursor: se-resize; width: 9px; height: 9px; right: 0px; bottom: 0px; background: transparent url(i/resizable-se.gif); }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: 0px; bottom: 0px; background: transparent url(i/resizable-sw.gif); }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: 0px; top: 0px; background: transparent url(i/resizable-nw.gif); }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: 0px; top: 0px; background: transparent url(i/resizable-ne.gif); }
+/* This file skins resizables */
+
+.ui-resizable { position: relative; }
+
+/* Global handle styles */
+.ui-resizable-handle { position: absolute; display: none; font-size: 0.1px; }
+.ui-resizable .ui-resizable-handle { display: block; }
+body .ui-resizable-disabled .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
+body .ui-resizable-autohide .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
+
+.ui-resizable-n { cursor: n-resize; height: 6px; width: 100%; top: 0px; left: 0px; background: transparent url(i/resizable-n.gif) repeat scroll center top; }
+.ui-resizable-s { cursor: s-resize; height: 6px; width: 100%; bottom: 0px; left: 0px; background: transparent url(i/resizable-s.gif) repeat scroll center top; }
+
+.ui-resizable-e { cursor: e-resize; width: 6px; right: 0px; top: 0px; height: 100%; background: transparent url(i/resizable-e.gif) repeat scroll right center; }
+.ui-resizable-w { cursor: w-resize; width: 6px; left: 0px; top: 0px; height: 100%; background: transparent url(i/resizable-w.gif) repeat scroll right center; }
+
+.ui-resizable-se { cursor: se-resize; width: 9px; height: 9px; right: 0px; bottom: 0px; background: transparent url(i/resizable-se.gif); }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: 0px; bottom: 0px; background: transparent url(i/resizable-sw.gif); }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: 0px; top: 0px; background: transparent url(i/resizable-nw.gif); }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: 0px; top: 0px; background: transparent url(i/resizable-ne.gif); }</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.resizable.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
-/* This file skins sliders */
-
-.ui-slider { width: 200px; height: 23px; position: relative; background-repeat: no-repeat; background-position: center center; }
-.ui-slider-handle { position: absolute; z-index: 1; height: 23px; width: 12px; top: 0px; left: 0px; background-image: url(i/slider-handle.gif);  }
-.ui-slider-handle-active { border: 1px dotted black;  }
-.ui-slider-disabled .ui-slider-handle { opacity: 0.5; filter: alpha(opacity=50); }
-.ui-slider-range { position: absolute; background: #50A029; opacity: 0.3; filter: alpha(opacity=30); width: 100%; height: 100%; }
-
-/* Default slider backgrounds */
-.ui-slider, .ui-slider-1 { background-image: url(i/slider-bg-1.png); }
-.ui-slider-2 { background-image: url(i/slider-bg-2.png); }
+/* This file skins sliders */
+
+.ui-slider { width: 200px; height: 23px; position: relative; background-repeat: no-repeat; background-position: center center; }
+.ui-slider-handle { position: absolute; z-index: 1; height: 23px; width: 12px; top: 0px; left: 0px; background-image: url(i/slider-handle.gif);  }
+.ui-slider-handle-active { border: 1px dotted black;  }
+.ui-slider-disabled .ui-slider-handle { opacity: 0.5; filter: alpha(opacity=50); }
+.ui-slider-range { position: absolute; background: #50A029; opacity: 0.3; filter: alpha(opacity=30); width: 100%; height: 100%; }
+
+/* Default slider backgrounds */
+.ui-slider, .ui-slider-1 { background-image: url(i/slider-bg-1.png); }
+.ui-slider-2 { background-image: url(i/slider-bg-2.png); }</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.slider.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,104 +1,104 @@
-@import &quot;flora.css&quot;;
-
-/* Caution! Ensure accessibility in print and other media types... */
-@media projection, screen { /* Use class for showing/hiding tab content, so that visibility can be better controlled in different media types... */
-    .ui-tabs-hide {
-        display: none;
-    }
-}
-
-/* Hide useless elements in print layouts... */
-@media print {
-    .ui-tabs-nav {
-        display: none;
-    }
-}
-
-/* Skin */
-.ui-tabs-nav, .ui-tabs-panel {
-    font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, Helvetica, Arial, sans-serif;
-    font-size: 12px;
-}
-.ui-tabs-nav {
-    list-style: none;
-    margin: 0;
-    padding: 0 0 0 3px;
-}
-.ui-tabs-nav:after { /* clearing without presentational markup, IE gets extra treatment */
-    display: block;
-    clear: both;
-    content: &quot; &quot;;
-}
-.ui-tabs-nav li {
-    float: left;
-    margin: 0 0 0 2px;
-    font-weight: bold;
-}
-.ui-tabs-nav a, .ui-tabs-nav a span {
-    float: left; /* fixes dir=ltr problem and other quirks IE */
-    padding: 0 12px;
-    background: url(i/tabs.png) no-repeat;
-}
-.ui-tabs-nav a {
-    margin: 5px 0 0; /* position: relative makes opacity fail for disabled tab in IE */
-    padding-left: 0;
-    background-position: 100% 0;
-    text-decoration: none;
-    white-space: nowrap; /* @ IE 6 */
-    outline: 0; /* @ Firefox, prevent dotted border after click */    
-}
-.ui-tabs-nav a:link, .ui-tabs-nav a:visited {
-    color: #fff;
-}
-.ui-tabs-nav .ui-tabs-selected a {
-    position: relative;
-    top: 1px;
-    z-index: 2;
-    margin-top: 0;
-    background-position: 100% -23px;
-}
-.ui-tabs-nav a span {
-    padding-top: 1px;
-    padding-right: 0;
-    height: 20px;
-    background-position: 0 0;
-    line-height: 20px;
-}
-.ui-tabs-nav .ui-tabs-selected a span {
-    padding-top: 0;
-    height: 27px;
-    background-position: 0 -23px;
-    line-height: 27px;
-}
-.ui-tabs-nav .ui-tabs-selected a:link, .ui-tabs-nav .ui-tabs-selected a:visited,
-.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited { /* @ Opera, use pseudo classes otherwise it confuses cursor... */
-    cursor: text;
-}
-.ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active,
-.ui-tabs-nav .ui-tabs-unselect a:hover, .ui-tabs-nav .ui-tabs-unselect a:focus, .ui-tabs-nav .ui-tabs-unselect a:active { /* @ Opera, we need to be explicit again here now... */
-    cursor: pointer;
-}
-.ui-tabs-disabled {
-    opacity: .4;
-    filter: alpha(opacity=40);
-}
-.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited {
-    color: #000;
-}
-.ui-tabs-panel {
-    border: 1px solid #519e2d;
-    padding: 10px;
-    background: #fff; /* declare background color for container to avoid distorted fonts in IE while fading */
-}
-/*.ui-tabs-loading em {
-    padding: 0 0 0 20px;
-    background: url(loading.gif) no-repeat 0 50%;
-}*/
-
-/* Additional IE specific bug fixes... */
-* html .ui-tabs-nav { /* auto clear @ IE 6 &amp; IE 7 Quirks Mode */
-    display: inline-block;
-}
-*:first-child+html .ui-tabs-nav  { /* auto clear @ IE 7 Standards Mode - do not group selectors, otherwise IE 6 will ignore complete rule (because of the unknown + combinator)... */
-    display: inline-block;
-}
+@import &quot;flora.css&quot;;
+
+/* Caution! Ensure accessibility in print and other media types... */
+@media projection, screen { /* Use class for showing/hiding tab content, so that visibility can be better controlled in different media types... */
+    .ui-tabs-hide {
+        display: none;
+    }
+}
+
+/* Hide useless elements in print layouts... */
+@media print {
+    .ui-tabs-nav {
+        display: none;
+    }
+}
+
+/* Skin */
+.ui-tabs-nav, .ui-tabs-panel {
+    font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, Helvetica, Arial, sans-serif;
+    font-size: 12px;
+}
+.ui-tabs-nav {
+    list-style: none;
+    margin: 0;
+    padding: 0 0 0 3px;
+}
+.ui-tabs-nav:after { /* clearing without presentational markup, IE gets extra treatment */
+    display: block;
+    clear: both;
+    content: &quot; &quot;;
+}
+.ui-tabs-nav li {
+    float: left;
+    margin: 0 0 0 2px;
+    font-weight: bold;
+}
+.ui-tabs-nav a, .ui-tabs-nav a span {
+    float: left; /* fixes dir=ltr problem and other quirks IE */
+    padding: 0 12px;
+    background: url(i/tabs.png) no-repeat;
+}
+.ui-tabs-nav a {
+    margin: 5px 0 0; /* position: relative makes opacity fail for disabled tab in IE */
+    padding-left: 0;
+    background-position: 100% 0;
+    text-decoration: none;
+    white-space: nowrap; /* @ IE 6 */
+    outline: 0; /* @ Firefox, prevent dotted border after click */    
+}
+.ui-tabs-nav a:link, .ui-tabs-nav a:visited {
+    color: #fff;
+}
+.ui-tabs-nav .ui-tabs-selected a {
+    position: relative;
+    top: 1px;
+    z-index: 2;
+    margin-top: 0;
+    background-position: 100% -23px;
+}
+.ui-tabs-nav a span {
+    padding-top: 1px;
+    padding-right: 0;
+    height: 20px;
+    background-position: 0 0;
+    line-height: 20px;
+}
+.ui-tabs-nav .ui-tabs-selected a span {
+    padding-top: 0;
+    height: 27px;
+    background-position: 0 -23px;
+    line-height: 27px;
+}
+.ui-tabs-nav .ui-tabs-selected a:link, .ui-tabs-nav .ui-tabs-selected a:visited,
+.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited { /* @ Opera, use pseudo classes otherwise it confuses cursor... */
+    cursor: text;
+}
+.ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active,
+.ui-tabs-nav .ui-tabs-unselect a:hover, .ui-tabs-nav .ui-tabs-unselect a:focus, .ui-tabs-nav .ui-tabs-unselect a:active { /* @ Opera, we need to be explicit again here now... */
+    cursor: pointer;
+}
+.ui-tabs-disabled {
+    opacity: .4;
+    filter: alpha(opacity=40);
+}
+.ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited {
+    color: #000;
+}
+.ui-tabs-panel {
+    border: 1px solid #519e2d;
+    padding: 10px;
+    background: #fff; /* declare background color for container to avoid distorted fonts in IE while fading */
+}
+/*.ui-tabs-loading em {
+    padding: 0 0 0 20px;
+    background: url(loading.gif) no-repeat 0 50%;
+}*/
+
+/* Additional IE specific bug fixes... */
+* html .ui-tabs-nav { /* auto clear @ IE 6 &amp; IE 7 Quirks Mode */
+    display: inline-block;
+}
+*:first-child+html .ui-tabs-nav  { /* auto clear @ IE 7 Standards Mode - do not group selectors, otherwise IE 6 will ignore complete rule (because of the unknown + combinator)... */
+    display: inline-block;
+}</diff>
      <filename>root/static/css/jquery.ui/themes/flora/flora.tabs.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,207 +1,207 @@
-/* Main Style Sheet for jQuery UI date picker */
-#ui-datepicker-div, .ui-datepicker-inline {
-	font-family: Arial, Helvetica, sans-serif;
-	font-size: 14px;
-	padding: 0;
-	margin: 0;
-	background: #ddd;
-	width: 185px;
-}
-#ui-datepicker-div {
-	display: none;
-	border: 1px solid #777;
-	z-index: 9999; /*must have*/
-}
-.ui-datepicker-inline {
-	float: left;
-	display: block;
-	border: 0;
-}
-.ui-datepicker-rtl {
-	direction: rtl;
-}
-.ui-datepicker-dialog {
-	padding: 5px !important;
-	border: 4px ridge #ddd !important;
-}
-button.ui-datepicker-trigger {
-	width: 25px;
-}
-img.ui-datepicker-trigger {
-	margin: 2px;
-	vertical-align: middle;
-}
-.ui-datepicker-prompt {
-	float: left;
-	padding: 2px;
-	background: #ddd;
-	color: #000;
-}
-* html .ui-datepicker-prompt {
-	width: 185px;
-}
-.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker {
-	clear: both;
-	float: left;
-	width: 100%;
-	color: #fff;
-}
-.ui-datepicker-control {
-	background: #400;
-	padding: 2px 0px;
-}
-.ui-datepicker-links {
-	background: #000;
-	padding: 2px 0px;
-}
-.ui-datepicker-control, .ui-datepicker-links {
-	font-weight: bold;
-	font-size: 80%;
-}
-.ui-datepicker-links label { /* disabled links */
-	padding: 2px 5px;
-	color: #888;
-}
-.ui-datepicker-clear, .ui-datepicker-prev {
-	float: left;
-	width: 34%;
-}
-.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev {
-	float: right;
-	text-align: right;
-}
-.ui-datepicker-current {
-	float: left;
-	width: 30%;
-	text-align: center;
-}
-.ui-datepicker-close, .ui-datepicker-next {
-	float: right;
-	width: 34%;
-	text-align: right;
-}
-.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next {
-	float: left;
-	text-align: left;
-}
-.ui-datepicker-header {
-	padding: 1px 0 3px;
-	background: #333;
-	text-align: center;
-	font-weight: bold;
-	height: 1.3em;
-}
-.ui-datepicker-header select {
-	background: #333;
-	color: #fff;
-	border: 0px;
-	font-weight: bold;
-}
-.ui-datepicker {
-	background: #ccc;
-	text-align: center;
-	font-size: 100%;
-}
-.ui-datepicker a {
-	display: block;
-	width: 100%;
-}
-.ui-datepicker-title-row {
-	background: #777;
-}
-.ui-datepicker-days-row {
-	background: #eee;
-	color: #666;
-}
-.ui-datepicker-week-col {
-	background: #777;
-	color: #fff;
-}
-.ui-datepicker-days-cell {
-	color: #000;
-	border: 1px solid #ddd;
-}
-.ui-datepicker-days-cell a{
-	display: block;
-}
-.ui-datepicker-week-end-cell {
-	background: #ddd;
-}
-.ui-datepicker-title-row .ui-datepicker-week-end-cell {
-	background: #777;
-}
-.ui-datepicker-days-cell-over {
-	background: #fff;
-	border: 1px solid #777;
-}
-.ui-datepicker-unselectable {
-	color: #888;
-}
-.ui-datepicker-today {
-	background: #fcc !important;
-}
-.ui-datepicker-current-day {
-	background: #999 !important;
-}
-.ui-datepicker-status {
-	background: #ddd;
-	width: 100%;
-	font-size: 80%;
-	text-align: center;
-}
-
-/* ________ Datepicker Links _______
-
-** Reset link properties and then override them with !important */
-#ui-datepicker-div a, .ui-datepicker-inline a {
-	cursor: pointer;
-	margin: 0;
-	padding: 0;
-	background: none;
-	color: #000;
-}
-.ui-datepicker-inline .ui-datepicker-links a {
-	padding: 0 5px !important;
-}
-.ui-datepicker-control a, .ui-datepicker-links a {
-	padding: 2px 5px !important;
-	color: #eee !important;
-}
-.ui-datepicker-title-row a {
-	color: #eee !important;
-}
-.ui-datepicker-control a:hover {
-	background: #fdd !important;
-	color: #333 !important;
-}
-.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover {
-	background: #ddd !important;
-	color: #333 !important;
-}
-
-/* ___________ MULTIPLE MONTHS _________*/
-
-.ui-datepicker-multi .ui-datepicker {
-	border: 1px solid #777;
-}
-.ui-datepicker-one-month {
-	float: left;
-	width: 185px;
-}
-.ui-datepicker-new-row {
-	clear: left;
-}
-
-/* ___________ IE6 IFRAME FIX ________ */
-
-.ui-datepicker-cover {
-    display: none; /*sorry for IE5*/
-    display/**/: block; /*sorry for IE5*/
-    position: absolute; /*must have*/
-    z-index: -1; /*must have*/
-    filter: mask(); /*must have*/
-    top: -4px; /*must have*/
-    left: -4px; /*must have*/
-    width: 200px; /*must have*/
-    height: 200px; /*must have*/
-}
+/* Main Style Sheet for jQuery UI date picker */
+#ui-datepicker-div, .ui-datepicker-inline {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 14px;
+	padding: 0;
+	margin: 0;
+	background: #ddd;
+	width: 185px;
+}
+#ui-datepicker-div {
+	display: none;
+	border: 1px solid #777;
+	z-index: 9999; /*must have*/
+}
+.ui-datepicker-inline {
+	float: left;
+	display: block;
+	border: 0;
+}
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-dialog {
+	padding: 5px !important;
+	border: 4px ridge #ddd !important;
+}
+button.ui-datepicker-trigger {
+	width: 25px;
+}
+img.ui-datepicker-trigger {
+	margin: 2px;
+	vertical-align: middle;
+}
+.ui-datepicker-prompt {
+	float: left;
+	padding: 2px;
+	background: #ddd;
+	color: #000;
+}
+* html .ui-datepicker-prompt {
+	width: 185px;
+}
+.ui-datepicker-control, .ui-datepicker-links, .ui-datepicker-header, .ui-datepicker {
+	clear: both;
+	float: left;
+	width: 100%;
+	color: #fff;
+}
+.ui-datepicker-control {
+	background: #400;
+	padding: 2px 0px;
+}
+.ui-datepicker-links {
+	background: #000;
+	padding: 2px 0px;
+}
+.ui-datepicker-control, .ui-datepicker-links {
+	font-weight: bold;
+	font-size: 80%;
+}
+.ui-datepicker-links label { /* disabled links */
+	padding: 2px 5px;
+	color: #888;
+}
+.ui-datepicker-clear, .ui-datepicker-prev {
+	float: left;
+	width: 34%;
+}
+.ui-datepicker-rtl .ui-datepicker-clear, .ui-datepicker-rtl .ui-datepicker-prev {
+	float: right;
+	text-align: right;
+}
+.ui-datepicker-current {
+	float: left;
+	width: 30%;
+	text-align: center;
+}
+.ui-datepicker-close, .ui-datepicker-next {
+	float: right;
+	width: 34%;
+	text-align: right;
+}
+.ui-datepicker-rtl .ui-datepicker-close, .ui-datepicker-rtl .ui-datepicker-next {
+	float: left;
+	text-align: left;
+}
+.ui-datepicker-header {
+	padding: 1px 0 3px;
+	background: #333;
+	text-align: center;
+	font-weight: bold;
+	height: 1.3em;
+}
+.ui-datepicker-header select {
+	background: #333;
+	color: #fff;
+	border: 0px;
+	font-weight: bold;
+}
+.ui-datepicker {
+	background: #ccc;
+	text-align: center;
+	font-size: 100%;
+}
+.ui-datepicker a {
+	display: block;
+	width: 100%;
+}
+.ui-datepicker-title-row {
+	background: #777;
+}
+.ui-datepicker-days-row {
+	background: #eee;
+	color: #666;
+}
+.ui-datepicker-week-col {
+	background: #777;
+	color: #fff;
+}
+.ui-datepicker-days-cell {
+	color: #000;
+	border: 1px solid #ddd;
+}
+.ui-datepicker-days-cell a{
+	display: block;
+}
+.ui-datepicker-week-end-cell {
+	background: #ddd;
+}
+.ui-datepicker-title-row .ui-datepicker-week-end-cell {
+	background: #777;
+}
+.ui-datepicker-days-cell-over {
+	background: #fff;
+	border: 1px solid #777;
+}
+.ui-datepicker-unselectable {
+	color: #888;
+}
+.ui-datepicker-today {
+	background: #fcc !important;
+}
+.ui-datepicker-current-day {
+	background: #999 !important;
+}
+.ui-datepicker-status {
+	background: #ddd;
+	width: 100%;
+	font-size: 80%;
+	text-align: center;
+}
+
+/* ________ Datepicker Links _______
+
+** Reset link properties and then override them with !important */
+#ui-datepicker-div a, .ui-datepicker-inline a {
+	cursor: pointer;
+	margin: 0;
+	padding: 0;
+	background: none;
+	color: #000;
+}
+.ui-datepicker-inline .ui-datepicker-links a {
+	padding: 0 5px !important;
+}
+.ui-datepicker-control a, .ui-datepicker-links a {
+	padding: 2px 5px !important;
+	color: #eee !important;
+}
+.ui-datepicker-title-row a {
+	color: #eee !important;
+}
+.ui-datepicker-control a:hover {
+	background: #fdd !important;
+	color: #333 !important;
+}
+.ui-datepicker-links a:hover, .ui-datepicker-title-row a:hover {
+	background: #ddd !important;
+	color: #333 !important;
+}
+
+/* ___________ MULTIPLE MONTHS _________*/
+
+.ui-datepicker-multi .ui-datepicker {
+	border: 1px solid #777;
+}
+.ui-datepicker-one-month {
+	float: left;
+	width: 185px;
+}
+.ui-datepicker-new-row {
+	clear: left;
+}
+
+/* ___________ IE6 IFRAME FIX ________ */
+
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}</diff>
      <filename>root/static/css/jquery.ui/themes/ui.datepicker.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,101 +1,101 @@
-/**
- * jQuery lightBox plugin
- * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
- * and adapted to me for use like a plugin from jQuery.
- * @name jquery-lightbox-0.4.css
- * @author Leandro Vieira Pinho - http://leandrovieira.com
- * @version 0.4
- * @date November 17, 2007
- * @category jQuery plugin
- * @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com)
- * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
- * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
- */
-#jquery-overlay {
-	position: absolute;
-	top: 0;
-	left: 0;
-	z-index: 90;
-	width: 100%;
-	height: 500px;
-}
-#jquery-lightbox {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 100%;
-	z-index: 100;
-	text-align: center;
-	line-height: 0;
-}
-#jquery-lightbox a img { border: none; }
-#lightbox-container-image-box {
-	position: relative;
-	background-color: #fff;
-	width: 250px;
-	height: 250px;
-	margin: 0 auto;
-}
-#lightbox-container-image { padding: 10px; }
-#lightbox-loading {
-	position: absolute;
-	top: 40%;
-	left: 0%;
-	height: 25%;
-	width: 100%;
-	text-align: center;
-	line-height: 0;
-}
-#lightbox-nav {
-	position: absolute;
-	top: 0;
-	left: 0;
-	height: 100%;
-	width: 100%;
-	z-index: 10;
-}
-#lightbox-container-image-box &gt; #lightbox-nav { left: 0; }
-#lightbox-nav a { outline: none;}
-#lightbox-nav-btnPrev, #lightbox-nav-btnNext {
-	width: 49%;
-	height: 100%;
-	zoom: 1;
-	display: block;
-}
-#lightbox-nav-btnPrev { 
-	left: 0; 
-	float: left;
-}
-#lightbox-nav-btnNext { 
-	right: 0; 
-	float: right;
-}
-#lightbox-container-image-data-box {
-	font: 10px Verdana, Helvetica, sans-serif;
-	background-color: #fff;
-	margin: 0 auto;
-	line-height: 1.4em;
-	overflow: auto;
-	width: 100%;
-	padding: 0 10px 0;
-}
-#lightbox-container-image-data {
-	padding: 0 10px; 
-	color: #666; 
-}
-#lightbox-container-image-data #lightbox-image-details { 
-	width: 70%; 
-	float: left; 
-	text-align: left; 
-}	
-#lightbox-image-details-caption { font-weight: bold; }
-#lightbox-image-details-currentNumber {
-	display: block; 
-	clear: left; 
-	padding-bottom: 1.0em;	
-}			
-#lightbox-secNav-btnClose {
-	width: 66px; 
-	float: right;
-	padding-bottom: 0.7em;	
+/**
+ * jQuery lightBox plugin
+ * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
+ * and adapted to me for use like a plugin from jQuery.
+ * @name jquery-lightbox-0.4.css
+ * @author Leandro Vieira Pinho - http://leandrovieira.com
+ * @version 0.4
+ * @date November 17, 2007
+ * @category jQuery plugin
+ * @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com)
+ * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
+ * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
+ */
+#jquery-overlay {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 90;
+	width: 100%;
+	height: 500px;
+}
+#jquery-lightbox {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	z-index: 100;
+	text-align: center;
+	line-height: 0;
+}
+#jquery-lightbox a img { border: none; }
+#lightbox-container-image-box {
+	position: relative;
+	background-color: #fff;
+	width: 250px;
+	height: 250px;
+	margin: 0 auto;
+}
+#lightbox-container-image { padding: 10px; }
+#lightbox-loading {
+	position: absolute;
+	top: 40%;
+	left: 0%;
+	height: 25%;
+	width: 100%;
+	text-align: center;
+	line-height: 0;
+}
+#lightbox-nav {
+	position: absolute;
+	top: 0;
+	left: 0;
+	height: 100%;
+	width: 100%;
+	z-index: 10;
+}
+#lightbox-container-image-box &gt; #lightbox-nav { left: 0; }
+#lightbox-nav a { outline: none;}
+#lightbox-nav-btnPrev, #lightbox-nav-btnNext {
+	width: 49%;
+	height: 100%;
+	zoom: 1;
+	display: block;
+}
+#lightbox-nav-btnPrev { 
+	left: 0; 
+	float: left;
+}
+#lightbox-nav-btnNext { 
+	right: 0; 
+	float: right;
+}
+#lightbox-container-image-data-box {
+	font: 10px Verdana, Helvetica, sans-serif;
+	background-color: #fff;
+	margin: 0 auto;
+	line-height: 1.4em;
+	overflow: auto;
+	width: 100%;
+	padding: 0 10px 0;
+}
+#lightbox-container-image-data {
+	padding: 0 10px; 
+	color: #666; 
+}
+#lightbox-container-image-data #lightbox-image-details { 
+	width: 70%; 
+	float: left; 
+	text-align: left; 
+}	
+#lightbox-image-details-caption { font-weight: bold; }
+#lightbox-image-details-currentNumber {
+	display: block; 
+	clear: left; 
+	padding-bottom: 1.0em;	
+}			
+#lightbox-secNav-btnClose {
+	width: 66px; 
+	float: right;
+	padding-bottom: 0.7em;	
 }
\ No newline at end of file</diff>
      <filename>root/static/css/jquery/jquery.lightbox-0.4.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,36 +1,36 @@
-{
-&quot;vlink&quot;:&quot;#ffffff&quot;,
-&quot;link&quot;:&quot;#c6c3c6&quot;,
-&quot;alink&quot;:&quot;#c6c3c6&quot;,
-&quot;hlink&quot;:&quot;#ffffff&quot;,
-
-&quot;bg_color&quot;:&quot;#000000&quot;,
-&quot;bg_fontcolor&quot;:&quot;#FFFFFF&quot;,
-&quot;bg_image&quot;:&quot;&quot;,
-
-&quot;tablewidth&quot;:97,
-&quot;tablebordercolor&quot;:&quot;#000000&quot;,
-
-&quot;titlecolor&quot;:&quot;#39596b&quot;,
-&quot;titlefont&quot;:&quot;#ffffff&quot;,
-
-&quot;forumcolor1&quot;:&quot;#525552&quot;,
-&quot;forumfont1&quot;:&quot;#ffffff&quot;,
-&quot;forumcolor2&quot;:&quot;#737173&quot;,
-&quot;forumfont2&quot;:&quot;#ffffff&quot;,
-
-&quot;replycolor1&quot;:&quot;#525552&quot;,
-&quot;replyfont1&quot;:&quot;#ffffff&quot;,
-&quot;replycolor2&quot;:&quot;#737173&quot;,
-&quot;replyfont2&quot;:&quot;#ffffff&quot;,
-
-&quot;misccolor1&quot;:&quot;#737173&quot;,
-&quot;miscfont1&quot;:&quot;#ffffff&quot;,
-&quot;misccolor2&quot;:&quot;#313031&quot;,
-&quot;miscfont2&quot;:&quot;#ffffff&quot;,
-
-
-&quot;semilight&quot;:&quot;#000066&quot;,
-&quot;highlight&quot;:&quot;#990000&quot;
-
+{
+&quot;vlink&quot;:&quot;#ffffff&quot;,
+&quot;link&quot;:&quot;#c6c3c6&quot;,
+&quot;alink&quot;:&quot;#c6c3c6&quot;,
+&quot;hlink&quot;:&quot;#ffffff&quot;,
+
+&quot;bg_color&quot;:&quot;#000000&quot;,
+&quot;bg_fontcolor&quot;:&quot;#FFFFFF&quot;,
+&quot;bg_image&quot;:&quot;&quot;,
+
+&quot;tablewidth&quot;:97,
+&quot;tablebordercolor&quot;:&quot;#000000&quot;,
+
+&quot;titlecolor&quot;:&quot;#39596b&quot;,
+&quot;titlefont&quot;:&quot;#ffffff&quot;,
+
+&quot;forumcolor1&quot;:&quot;#525552&quot;,
+&quot;forumfont1&quot;:&quot;#ffffff&quot;,
+&quot;forumcolor2&quot;:&quot;#737173&quot;,
+&quot;forumfont2&quot;:&quot;#ffffff&quot;,
+
+&quot;replycolor1&quot;:&quot;#525552&quot;,
+&quot;replyfont1&quot;:&quot;#ffffff&quot;,
+&quot;replycolor2&quot;:&quot;#737173&quot;,
+&quot;replyfont2&quot;:&quot;#ffffff&quot;,
+
+&quot;misccolor1&quot;:&quot;#737173&quot;,
+&quot;miscfont1&quot;:&quot;#ffffff&quot;,
+&quot;misccolor2&quot;:&quot;#313031&quot;,
+&quot;miscfont2&quot;:&quot;#ffffff&quot;,
+
+
+&quot;semilight&quot;:&quot;#000066&quot;,
+&quot;highlight&quot;:&quot;#990000&quot;
+
 }
\ No newline at end of file</diff>
      <filename>root/static/css/style/black.json</filename>
    </modified>
    <modified>
      <diff>@@ -1,36 +1,36 @@
-{
-&quot;vlink&quot;:&quot;#333333&quot;,
-&quot;link&quot;:&quot;#333333&quot;,
-&quot;alink&quot;:&quot;#333333&quot;,
-&quot;hlink&quot;:&quot;#333333&quot;,
-
-&quot;bg_color&quot;:&quot;#ffffff&quot;,
-&quot;bg_fontcolor&quot;:&quot;#000000&quot;,
-&quot;bg_image&quot;:&quot;&quot;,
-
-&quot;tablewidth&quot;:97,
-&quot;tablebordercolor&quot;:&quot;#000000&quot;,
-
-&quot;titlecolor&quot;:&quot;#61CDDF&quot;,
-&quot;titlefont&quot;:&quot;#000000&quot;,
-
-&quot;forumcolor1&quot;:&quot;#F8FCF1&quot;,
-&quot;forumfont1&quot;:&quot;#000000&quot;,
-&quot;forumcolor2&quot;:&quot;#FFFFFF&quot;,
-&quot;forumfont2&quot;:&quot;#000000&quot;,
-
-&quot;replycolor1&quot;:&quot;#F8FCF1&quot;,
-&quot;replyfont1&quot;:&quot;#000000&quot;,
-&quot;replycolor2&quot;:&quot;#F8FCF1&quot;,
-&quot;replyfont2&quot;:&quot;#000000&quot;,
-
-&quot;misccolor1&quot;:&quot;#FFFFFF&quot;,
-&quot;miscfont1&quot;:&quot;#000000&quot;,
-&quot;misccolor2&quot;:&quot;#F8FCF1&quot;,
-&quot;miscfont2&quot;:&quot;#000000&quot;,
-
-
-&quot;semilight&quot;:&quot;#000066&quot;,
-&quot;highlight&quot;:&quot;#990000&quot;
-
+{
+&quot;vlink&quot;:&quot;#333333&quot;,
+&quot;link&quot;:&quot;#333333&quot;,
+&quot;alink&quot;:&quot;#333333&quot;,
+&quot;hlink&quot;:&quot;#333333&quot;,
+
+&quot;bg_color&quot;:&quot;#ffffff&quot;,
+&quot;bg_fontcolor&quot;:&quot;#000000&quot;,
+&quot;bg_image&quot;:&quot;&quot;,
+
+&quot;tablewidth&quot;:97,
+&quot;tablebordercolor&quot;:&quot;#000000&quot;,
+
+&quot;titlecolor&quot;:&quot;#61CDDF&quot;,
+&quot;titlefont&quot;:&quot;#000000&quot;,
+
+&quot;forumcolor1&quot;:&quot;#F8FCF1&quot;,
+&quot;forumfont1&quot;:&quot;#000000&quot;,
+&quot;forumcolor2&quot;:&quot;#FFFFFF&quot;,
+&quot;forumfont2&quot;:&quot;#000000&quot;,
+
+&quot;replycolor1&quot;:&quot;#F8FCF1&quot;,
+&quot;replyfont1&quot;:&quot;#000000&quot;,
+&quot;replycolor2&quot;:&quot;#F8FCF1&quot;,
+&quot;replyfont2&quot;:&quot;#000000&quot;,
+
+&quot;misccolor1&quot;:&quot;#FFFFFF&quot;,
+&quot;miscfont1&quot;:&quot;#000000&quot;,
+&quot;misccolor2&quot;:&quot;#F8FCF1&quot;,
+&quot;miscfont2&quot;:&quot;#000000&quot;,
+
+
+&quot;semilight&quot;:&quot;#000066&quot;,
+&quot;highlight&quot;:&quot;#990000&quot;
+
 }
\ No newline at end of file</diff>
      <filename>root/static/css/style/green.json</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-&lt;a href=&quot;http://www.1313s.com&quot;&gt;1313s.com&lt;/a&gt;
+&lt;a href=&quot;http://www.1313s.com&quot;&gt;1313s.com&lt;/a&gt;</diff>
      <filename>root/static/images/bbcode/emot/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-&lt;a href=&quot;http://www.1313s.com&quot;&gt;1313s.com&lt;/a&gt;
+&lt;a href=&quot;http://www.1313s.com&quot;&gt;1313s.com&lt;/a&gt;</diff>
      <filename>root/static/images/bbcode/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,289 +1,289 @@
-/*
- * autoSave: Pain free automatic updates via ajax
- *
- * Version 1.1
- *
- * Copyright (c) 2007 Daemach (John Wilson) &lt;daemach@gmail.com&gt;, http://ideamill.synaptrixgroup.com
- * Licensed under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- * 
- * Includes: createCSSClass function by Sam Collett
- * See below for full credit information
- *
- * Special thanks to Blair Mitchelmore for patiently explaining closures :)
- *
- * ============================================================================================
- * Usage:  $(&quot;yourFormInputs&quot;).autoSave( Function, Map )     
- * 
- * Function: any ajax function.  The function is called in the scope of the element itself
- * so &quot;this&quot; refers to the element's properties: this.id, this.value, this.checked, etc.
- *
- * Map: key value pairs as parameters 
- *    delay(ms) - for text fields, how long to wait before posting.  default 1000ms
- *    beforeClass - class to apply to the element when the value has changed
- *    afterClass - class to apply to the element after the ajax call has returned
- *    onChange - function to run when the value changes.  By default applies beforeClass
- *    preSave - function to run just before the ajax function is run.  Returning a boolean 
- *              &quot;false&quot; from this function will prevent the ajax call from running and reverts 
- *              the field to its previous value.  All other return values allow the ajax call
- *              to run normally. ( Of limited use, but why not... )
- *
- *              ex: { preSave : function (){ return confirm('are you sure?'); } }
- *             
- *    postSave - function to run when the ajax call completes.  By default applies afterClass
- *
- * Caveats: Checkboxes have to be handled specially since they don't have separate values for 
- *          checked and unchecked states.  See below for one possible solution.
- *  
- * Example: 
- *
- *		$(document).ready(function(){
- *			$(&quot;:input&quot;).autoSave(function(){
- *				var ele = new Object();
- * 
- *				// remember that this function runs in the scope of the element itself.
- *				ele[this.name] = (this.type ==&quot;checkbox&quot;) ? this.value + &quot;|&quot; + this.checked : this.value;
- *				$.post(&quot;test.cfm&quot;, ele, function (data) {$(&quot;#ResultDiv&quot;).empty().append(data);} )
- *			});
- *		});
- *
- */
-
-jQuery.fn.autoSave = function (fcn, settings) {
-    $daemach = (typeof $daemach !== &quot;undefined&quot;) ? $daemach : {};
-    if (typeof $daemach.autoSave == &quot;undefined&quot;) {
-        $daemach.autoSave =  new Object();
-        $daemach.autoSave[&quot;timer&quot;] =  new Array();
-        $daemach.autoSave[&quot;fn&quot;] =  new Array();
-    }
-	 
-	 var _as = $daemach.autoSave;
-	 
-    settings = jQuery.extend( {
-        delay : 500,
-		  doClassChange: true,
-		  beforeClass : &quot;asBefore&quot;, 
-		  afterClass : &quot;asAfter&quot;, 
-		  onChange: null, 
-		  preSave : null,
-		  postSave : null,
-		  minLength: 0
-		  
-    }
-    , settings);
-	 
-	 if (settings.doClassChange){
-	 	if (settings.beforeClass == &quot;asBefore&quot;) { createCSSClass(&quot;.asBefore&quot;, &quot;background-color:#FFdddd&quot;); }
-    	if (settings.afterClass == &quot;asAfter&quot;) { createCSSClass(&quot;.asAfter&quot;, &quot;background-color:#ddFFdd&quot;); }
-	 }
-	 // Start building...
-    return this.each(function () {
-        var p = this.name;
-        if (typeof  _as[&quot;fn&quot;][p] == &quot;undefined&quot;) {
-            _as[&quot;fn&quot;][p] =  new Array();
-            _as[&quot;fn&quot;][p][0] = null;
-        }
-        var bindType;
-        var initialState;
-        switch (this.type) {
-            case &quot;text&quot;:
-                bindType = &quot;keyup&quot;;
-                 initialState = this.value;
-                break;
-            case &quot;hidden&quot;:
-                bindType = &quot;keyup&quot;;
-                 initialState = this.value;
-                break;
-            case &quot;textarea&quot;:
-                bindType = &quot;keyup&quot;;
-                 initialState = this.value;
-                break;
-            case &quot;password&quot;:
-                bindType = &quot;keyup&quot;;
-                 initialState = this.value;
-                break;
-            case &quot;select-one&quot;:
-                bindType = &quot;change&quot;;
-                 initialState = this.value;
-                break;
-            case &quot;select-multiple&quot;:
-                bindType = &quot;change&quot;;
-                 initialState = this.value;
-                break;
-            case &quot;radio&quot;:
-                bindType = &quot;click&quot;;
-                 initialState = this.value;
-                break;
-            case &quot;checkbox&quot;:
-                bindType = &quot;click&quot;;
-                 initialState = this.checked;
-                break;
-                default  : bindType = &quot;keyup&quot;;
-                 initialState = this.value;
-                break;
-        }
-        if (bindType == &quot;keyup&quot;) {
-             _as[&quot;timer&quot;][p] = null;
-        }
-        if (this.type !== &quot;radio&quot; || (this.type == &quot;radio&quot; &amp;&amp; this.checked)) {
-             _as[&quot;fn&quot;][p][0] =  initialState;
-        }
-         _as[&quot;fn&quot;][p][1] = function (e) {
-            if (e &amp;&amp; e.type == 'blur' &amp;&amp;  _as[&quot;fn&quot;][p][2]) {
-                if ( _as[&quot;timer&quot;][p]) window.clearTimeout( _as[&quot;timer&quot;][p]);
-            }
-				// check lock in case settings.onChange function contained something that caused the blur element to fire
-				if ( _as[&quot;fn&quot;][p][2]){
-					if ( _as[&quot;fn&quot;][p][0] !== this.value || (this.type == &quot;checkbox&quot;)) {
-						
-						if (settings.preSave) {
-							// lock again for preSave function
-							 _as[&quot;fn&quot;][p][2] = false;
-							
-							var proceed = settings.preSave.apply(this);
-							if (!(typeof proceed == &quot;boolean&quot; &amp;&amp; proceed == false)){
-								 _as[&quot;fn&quot;][p][2] = true;
-							}
-						}
-						
-						if ( _as[&quot;fn&quot;][p][2]){
-							 // call the main function
-							 fcn.apply(this); 
-							 // record new state
-							  _as[&quot;fn&quot;][p][0] = this.value;
-						} else {
-							// revert 
-							if (this.type == &quot;checkbox&quot;){
-								this.checked =  _as[&quot;fn&quot;][p][0];
-							} else {
-								this.value =  _as[&quot;fn&quot;][p][0];
-							}
-						}
-						 //run post save function
-						 if (settings.postSave) {
-							  settings.postSave.apply(this);
-						 }
-						 
-						 if (settings.doClassChange) {
-							jQuery(this).removeClass(settings.beforeClass).addClass(settings.afterClass);
-						 }
-					}
-				}
-        }
-		  // init locking mechanism
-		   _as[&quot;fn&quot;][p][2] = true;
-		  
-        jQuery(this).bind(bindType, function () {
-            if ( _as[&quot;fn&quot;][p][0] !== this.value || (this.type == &quot;checkbox&quot;)) {
-                if (settings.onChange) {
-						// lock handler in case onChange function causes this field to lose focus
-						 _as[&quot;fn&quot;][p][2] = false;
-						
-						var proceed = settings.onChange.apply(this);
-						if (!(typeof proceed == &quot;boolean&quot; &amp;&amp; proceed == false)){
-							 _as[&quot;fn&quot;][p][2] = true;
-						}
-                }
-					 if (settings.doClassChange) {
-						var ele = jQuery(this);
-						if (ele.is('.' + settings.afterClass))ele.removeClass(settings.afterClass);
-						if (!ele.is('.' + settings.beforeClass))ele.addClass(settings.beforeClass); 
-					 }
-
-                var me = this;
-                if (bindType == &quot;keyup&quot;) {
-						 if (this.value.length &gt;= settings.minLength){
-                    	 _as[&quot;timer&quot;][p] = window.setTimeout(function () { _as[&quot;fn&quot;][p][1].apply(me);}, settings.delay);
-						 }
-                }
-                else {
-                     _as[&quot;fn&quot;][p][1].apply(me);
-                }
-            }
-        }
-        );
-        if (bindType == &quot;keyup&quot;) {
-            jQuery(this).blur(function(){ if (this.value.length  &gt;= settings.minLength){  _as[&quot;fn&quot;][p][1] } });
-        }
-        if (bindType == &quot;keyup&quot;) {
-            jQuery(this).keydown(function () {
-                if ( _as[&quot;timer&quot;][p]){ window.clearTimeout( _as[&quot;timer&quot;][p]) };
-            }
-            );
-        }
-    }
-    );
-};
-
-if (typeof createCSSClass == &quot;undefined&quot;) {
-    function createCSSClass(selector, style) {
-        // Created by Sam Collett - 2007
-        // http://webdevel.blogspot.com/2006/06/create-css-class-javascript.html
-        //
-        // using information found at: http://www.quirksmode.org/dom/w3c_css.html
-        // doesn't work in older versions of Opera (&lt; 9) due to lack of styleSheets support
-        if (!document.styleSheets)return;
-        if (document.getElementsByTagName(&quot;head&quot;).length == 0)return;
-        var stylesheet;
-        var mediaType;
-        if (document.styleSheets.length &gt; 0) {
-            for (var i = 0; i &lt; document.styleSheets.length; i++) {
-                if (document.styleSheets[i].disabled)continue;
-                var media = document.styleSheets[i].media;
-                mediaType = typeof media;
-                // IE
-                if (mediaType == &quot;string&quot;) {
-                    if (media == &quot;&quot; || media.indexOf(&quot;screen&quot;) !=  - 1) {
-                        styleSheet = document.styleSheets[i];
-                    }
-                }
-                else if (mediaType == &quot;object&quot;) {
-                    if (media.mediaText == &quot;&quot; || media.mediaText.indexOf(&quot;screen&quot;) !=  - 1) {
-                        styleSheet = document.styleSheets[i];
-                    }
-                }
-                // stylesheet found, so break out of loop
-                if (typeof styleSheet != &quot;undefined&quot;)break;
-            }
-        }
-        // if no style sheet is found
-        if (typeof styleSheet == &quot;undefined&quot;) {
-            // create a new style sheet
-            var styleSheetElement = document.createElement(&quot;style&quot;);
-            styleSheetElement.type = &quot;text/css&quot;;
-            // add to &lt;head&gt;
-            document.getElementsByTagName(&quot;head&quot;)[0].appendChild(styleSheetElement);
-            // select it
-            for (var i = 0; i &lt; document.styleSheets.length; i++) {
-                if (document.styleSheets[i].disabled)continue;
-                styleSheet = document.styleSheets[i];
-            }
-            // get media type
-            var media = styleSheet.media;
-            mediaType = typeof media;
-        }
-        // IE
-        if (mediaType == &quot;string&quot;) {
-            for (var i = 0; i &lt; styleSheet.rules.length; i++) {
-                // if there is an existing rule set up, replace it
-                if (styleSheet.rules[i].selectorText.toLowerCase() == selector.toLowerCase()) {
-                    styleSheet.rules[i].style.cssText = style;
-                    return;
-                }
-            }
-            // or add a new rule
-            styleSheet.addRule(selector, style);
-        }
-        else if (mediaType == &quot;object&quot;) {
-            for (i = 0; i &lt; styleSheet.cssRules.length; i++) {
-                // if there is an existing rule set up, replace it
-                if (styleSheet.cssRules[i].selectorText.toLowerCase() == selector.toLowerCase()) {
-                    styleSheet.cssRules[i].style.cssText = style;
-                    return;
-                }
-            }
-            // or insert new rule
-            styleSheet.insertRule(selector + &quot;{&quot; + style + &quot;}&quot;, styleSheet.cssRules.length);
-        }
-    }
+/*
+ * autoSave: Pain free automatic updates via ajax
+ *
+ * Version 1.1
+ *
+ * Copyright (c) 2007 Daemach (John Wilson) &lt;daemach@gmail.com&gt;, http://ideamill.synaptrixgroup.com
+ * Licensed under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * 
+ * Includes: createCSSClass function by Sam Collett
+ * See below for full credit information
+ *
+ * Special thanks to Blair Mitchelmore for patiently explaining closures :)
+ *
+ * ============================================================================================
+ * Usage:  $(&quot;yourFormInputs&quot;).autoSave( Function, Map )     
+ * 
+ * Function: any ajax function.  The function is called in the scope of the element itself
+ * so &quot;this&quot; refers to the element's properties: this.id, this.value, this.checked, etc.
+ *
+ * Map: key value pairs as parameters 
+ *    delay(ms) - for text fields, how long to wait before posting.  default 1000ms
+ *    beforeClass - class to apply to the element when the value has changed
+ *    afterClass - class to apply to the element after the ajax call has returned
+ *    onChange - function to run when the value changes.  By default applies beforeClass
+ *    preSave - function to run just before the ajax function is run.  Returning a boolean 
+ *              &quot;false&quot; from this function will prevent the ajax call from running and reverts 
+ *              the field to its previous value.  All other return values allow the ajax call
+ *              to run normally. ( Of limited use, but why not... )
+ *
+ *              ex: { preSave : function (){ return confirm('are you sure?'); } }
+ *             
+ *    postSave - function to run when the ajax call completes.  By default applies afterClass
+ *
+ * Caveats: Checkboxes have to be handled specially since they don't have separate values for 
+ *          checked and unchecked states.  See below for one possible solution.
+ *  
+ * Example: 
+ *
+ *		$(document).ready(function(){
+ *			$(&quot;:input&quot;).autoSave(function(){
+ *				var ele = new Object();
+ * 
+ *				// remember that this function runs in the scope of the element itself.
+ *				ele[this.name] = (this.type ==&quot;checkbox&quot;) ? this.value + &quot;|&quot; + this.checked : this.value;
+ *				$.post(&quot;test.cfm&quot;, ele, function (data) {$(&quot;#ResultDiv&quot;).empty().append(data);} )
+ *			});
+ *		});
+ *
+ */
+
+jQuery.fn.autoSave = function (fcn, settings) {
+    $daemach = (typeof $daemach !== &quot;undefined&quot;) ? $daemach : {};
+    if (typeof $daemach.autoSave == &quot;undefined&quot;) {
+        $daemach.autoSave =  new Object();
+        $daemach.autoSave[&quot;timer&quot;] =  new Array();
+        $daemach.autoSave[&quot;fn&quot;] =  new Array();
+    }
+	 
+	 var _as = $daemach.autoSave;
+	 
+    settings = jQuery.extend( {
+        delay : 500,
+		  doClassChange: true,
+		  beforeClass : &quot;asBefore&quot;, 
+		  afterClass : &quot;asAfter&quot;, 
+		  onChange: null, 
+		  preSave : null,
+		  postSave : null,
+		  minLength: 0
+		  
+    }
+    , settings);
+	 
+	 if (settings.doClassChange){
+	 	if (settings.beforeClass == &quot;asBefore&quot;) { createCSSClass(&quot;.asBefore&quot;, &quot;background-color:#FFdddd&quot;); }
+    	if (settings.afterClass == &quot;asAfter&quot;) { createCSSClass(&quot;.asAfter&quot;, &quot;background-color:#ddFFdd&quot;); }
+	 }
+	 // Start building...
+    return this.each(function () {
+        var p = this.name;
+        if (typeof  _as[&quot;fn&quot;][p] == &quot;undefined&quot;) {
+            _as[&quot;fn&quot;][p] =  new Array();
+            _as[&quot;fn&quot;][p][0] = null;
+        }
+        var bindType;
+        var initialState;
+        switch (this.type) {
+            case &quot;text&quot;:
+                bindType = &quot;keyup&quot;;
+                 initialState = this.value;
+                break;
+            case &quot;hidden&quot;:
+                bindType = &quot;keyup&quot;;
+                 initialState = this.value;
+                break;
+            case &quot;textarea&quot;:
+                bindType = &quot;keyup&quot;;
+                 initialState = this.value;
+                break;
+            case &quot;password&quot;:
+                bindType = &quot;keyup&quot;;
+                 initialState = this.value;
+                break;
+            case &quot;select-one&quot;:
+                bindType = &quot;change&quot;;
+                 initialState = this.value;
+                break;
+            case &quot;select-multiple&quot;:
+                bindType = &quot;change&quot;;
+                 initialState = this.value;
+                break;
+            case &quot;radio&quot;:
+                bindType = &quot;click&quot;;
+                 initialState = this.value;
+                break;
+            case &quot;checkbox&quot;:
+                bindType = &quot;click&quot;;
+                 initialState = this.checked;
+                break;
+                default  : bindType = &quot;keyup&quot;;
+                 initialState = this.value;
+                break;
+        }
+        if (bindType == &quot;keyup&quot;) {
+             _as[&quot;timer&quot;][p] = null;
+        }
+        if (this.type !== &quot;radio&quot; || (this.type == &quot;radio&quot; &amp;&amp; this.checked)) {
+             _as[&quot;fn&quot;][p][0] =  initialState;
+        }
+         _as[&quot;fn&quot;][p][1] = function (e) {
+            if (e &amp;&amp; e.type == 'blur' &amp;&amp;  _as[&quot;fn&quot;][p][2]) {
+                if ( _as[&quot;timer&quot;][p]) window.clearTimeout( _as[&quot;timer&quot;][p]);
+            }
+				// check lock in case settings.onChange function contained something that caused the blur element to fire
+				if ( _as[&quot;fn&quot;][p][2]){
+					if ( _as[&quot;fn&quot;][p][0] !== this.value || (this.type == &quot;checkbox&quot;)) {
+						
+						if (settings.preSave) {
+							// lock again for preSave function
+							 _as[&quot;fn&quot;][p][2] = false;
+							
+							var proceed = settings.preSave.apply(this);
+							if (!(typeof proceed == &quot;boolean&quot; &amp;&amp; proceed == false)){
+								 _as[&quot;fn&quot;][p][2] = true;
+							}
+						}
+						
+						if ( _as[&quot;fn&quot;][p][2]){
+							 // call the main function
+							 fcn.apply(this); 
+							 // record new state
+							  _as[&quot;fn&quot;][p][0] = this.value;
+						} else {
+							// revert 
+							if (this.type == &quot;checkbox&quot;){
+								this.checked =  _as[&quot;fn&quot;][p][0];
+							} else {
+								this.value =  _as[&quot;fn&quot;][p][0];
+							}
+						}
+						 //run post save function
+						 if (settings.postSave) {
+							  settings.postSave.apply(this);
+						 }
+						 
+						 if (settings.doClassChange) {
+							jQuery(this).removeClass(settings.beforeClass).addClass(settings.afterClass);
+						 }
+					}
+				}
+        }
+		  // init locking mechanism
+		   _as[&quot;fn&quot;][p][2] = true;
+		  
+        jQuery(this).bind(bindType, function () {
+            if ( _as[&quot;fn&quot;][p][0] !== this.value || (this.type == &quot;checkbox&quot;)) {
+                if (settings.onChange) {
+						// lock handler in case onChange function causes this field to lose focus
+						 _as[&quot;fn&quot;][p][2] = false;
+						
+						var proceed = settings.onChange.apply(this);
+						if (!(typeof proceed == &quot;boolean&quot; &amp;&amp; proceed == false)){
+							 _as[&quot;fn&quot;][p][2] = true;
+						}
+                }
+					 if (settings.doClassChange) {
+						var ele = jQuery(this);
+						if (ele.is('.' + settings.afterClass))ele.removeClass(settings.afterClass);
+						if (!ele.is('.' + settings.beforeClass))ele.addClass(settings.beforeClass); 
+					 }
+
+                var me = this;
+                if (bindType == &quot;keyup&quot;) {
+						 if (this.value.length &gt;= settings.minLength){
+                    	 _as[&quot;timer&quot;][p] = window.setTimeout(function () { _as[&quot;fn&quot;][p][1].apply(me);}, settings.delay);
+						 }
+                }
+                else {
+                     _as[&quot;fn&quot;][p][1].apply(me);
+                }
+            }
+        }
+        );
+        if (bindType == &quot;keyup&quot;) {
+            jQuery(this).blur(function(){ if (this.value.length  &gt;= settings.minLength){  _as[&quot;fn&quot;][p][1] } });
+        }
+        if (bindType == &quot;keyup&quot;) {
+            jQuery(this).keydown(function () {
+                if ( _as[&quot;timer&quot;][p]){ window.clearTimeout( _as[&quot;timer&quot;][p]) };
+            }
+            );
+        }
+    }
+    );
+};
+
+if (typeof createCSSClass == &quot;undefined&quot;) {
+    function createCSSClass(selector, style) {
+        // Created by Sam Collett - 2007
+        // http://webdevel.blogspot.com/2006/06/create-css-class-javascript.html
+        //
+        // using information found at: http://www.quirksmode.org/dom/w3c_css.html
+        // doesn't work in older versions of Opera (&lt; 9) due to lack of styleSheets support
+        if (!document.styleSheets)return;
+        if (document.getElementsByTagName(&quot;head&quot;).length == 0)return;
+        var stylesheet;
+        var mediaType;
+        if (document.styleSheets.length &gt; 0) {
+            for (var i = 0; i &lt; document.styleSheets.length; i++) {
+                if (document.styleSheets[i].disabled)continue;
+                var media = document.styleSheets[i].media;
+                mediaType = typeof media;
+                // IE
+                if (mediaType == &quot;string&quot;) {
+                    if (media == &quot;&quot; || media.indexOf(&quot;screen&quot;) !=  - 1) {
+                        styleSheet = document.styleSheets[i];
+                    }
+                }
+                else if (mediaType == &quot;object&quot;) {
+                    if (media.mediaText == &quot;&quot; || media.mediaText.indexOf(&quot;screen&quot;) !=  - 1) {
+                        styleSheet = document.styleSheets[i];
+                    }
+                }
+                // stylesheet found, so break out of loop
+                if (typeof styleSheet != &quot;undefined&quot;)break;
+            }
+        }
+        // if no style sheet is found
+        if (typeof styleSheet == &quot;undefined&quot;) {
+            // create a new style sheet
+            var styleSheetElement = document.createElement(&quot;style&quot;);
+            styleSheetElement.type = &quot;text/css&quot;;
+            // add to &lt;head&gt;
+            document.getElementsByTagName(&quot;head&quot;)[0].appendChild(styleSheetElement);
+            // select it
+            for (var i = 0; i &lt; document.styleSheets.length; i++) {
+                if (document.styleSheets[i].disabled)continue;
+                styleSheet = document.styleSheets[i];
+            }
+            // get media type
+            var media = styleSheet.media;
+            mediaType = typeof media;
+        }
+        // IE
+        if (mediaType == &quot;string&quot;) {
+            for (var i = 0; i &lt; styleSheet.rules.length; i++) {
+                // if there is an existing rule set up, replace it
+                if (styleSheet.rules[i].selectorText.toLowerCase() == selector.toLowerCase()) {
+                    styleSheet.rules[i].style.cssText = style;
+                    return;
+                }
+            }
+            // or add a new rule
+            styleSheet.addRule(selector, style);
+        }
+        else if (mediaType == &quot;object&quot;) {
+            for (i = 0; i &lt; styleSheet.cssRules.length; i++) {
+                // if there is an existing rule set up, replace it
+                if (styleSheet.cssRules[i].selectorText.toLowerCase() == selector.toLowerCase()) {
+                    styleSheet.cssRules[i].style.cssText = style;
+                    return;
+                }
+            }
+            // or insert new rule
+            styleSheet.insertRule(selector + &quot;{&quot; + style + &quot;}&quot;, styleSheet.cssRules.length);
+        }
+    }
 }
\ No newline at end of file</diff>
      <filename>root/static/js/jquery/autosave.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,361 +1,361 @@
-/*
- * jQuery blockUI plugin
- * Version 1.33  (09/14/2007)
- * @requires jQuery v1.1.1
- *
- * $Id$
- *
- * Examples at: http://malsup.com/jquery/block/
- * Copyright (c) 2007 M. Alsup
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
- (function($) {
-/**
- * blockUI provides a mechanism for blocking user interaction with a page (or parts of a page).
- * This can be an effective way to simulate synchronous behavior during ajax operations without
- * locking the browser.  It will prevent user operations for the current page while it is
- * active ane will return the page to normal when it is deactivate.  blockUI accepts the following
- * two optional arguments:
- *
- *   message (String|Element|jQuery): The message to be displayed while the UI is blocked. The message
- *              argument can be a plain text string like &quot;Processing...&quot;, an HTML string like
- *              &quot;&lt;h1&gt;&lt;img src=&quot;busy.gif&quot; /&gt; Please wait...&lt;/h1&gt;&quot;, a DOM element, or a jQuery object.
- *              The default message is &quot;&lt;h1&gt;Please wait...&lt;/h1&gt;&quot;
- *
- *   css (Object):  Object which contains css property/values to override the default styles of
- *              the message.  Use this argument if you wish to override the default
- *              styles.  The css Object should be in a format suitable for the jQuery.css
- *              function.  For example:
- *              $.blockUI({
- *                    backgroundColor: '#ff8',
- *                    border: '5px solid #f00,
- *                    fontWeight: 'bold'
- *              });
- *
- * The default blocking message used when blocking the entire page is &quot;&lt;h1&gt;Please wait...&lt;/h1&gt;&quot;
- * but this can be overridden by assigning a value to $.blockUI.defaults.pageMessage in your
- * own code.  For example:
- *
- *      $.blockUI.defaults.pageMessage = &quot;&lt;h1&gt;Bitte Wartezeit&lt;/h1&gt;&quot;;
- *
- * The default message styling can also be overridden.  For example:
- *
- *      $.extend($.blockUI.defaults.pageMessageCSS, { color: '#00a', backgroundColor: '#0f0' });
- *
- * The default styles work well for simple messages like &quot;Please wait&quot;, but for longer messages
- * style overrides may be necessary.
- *
- * @example  $.blockUI();
- * @desc prevent user interaction with the page (and show the default message of 'Please wait...')
- *
- * @example  $.blockUI( { backgroundColor: '#f00', color: '#fff'} );
- * @desc prevent user interaction and override the default styles of the message to use a white on red color scheme
- *
- * @example  $.blockUI('Processing...');
- * @desc prevent user interaction and display the message &quot;Processing...&quot; instead of the default message
- *
- * @name blockUI
- * @param String|jQuery|Element message Message to display while the UI is blocked
- * @param Object css Style object to control look of the message
- * @cat Plugins/blockUI
- */
-$.blockUI = function(msg, css, opts) {
-    $.blockUI.impl.install(window, msg, css, opts);
-};
-
-// expose version number so other plugins can interogate
-$.blockUI.version = 1.33;
-
-/**
- * unblockUI removes the UI block that was put in place by blockUI
- *
- * @example  $.unblockUI();
- * @desc unblocks the page
- *
- * @name unblockUI
- * @cat Plugins/blockUI
- */
-$.unblockUI = function(opts) {
-    $.blockUI.impl.remove(window, opts);
-};
-
-/**
- * Blocks user interaction with the selected elements.  (Hat tip: Much of
- * this logic comes from Brandon Aaron's bgiframe plugin.  Thanks, Brandon!)
- * By default, no message is displayed when blocking elements.
- *
- * @example  $('div.special').block();
- * @desc prevent user interaction with all div elements with the 'special' class.
- *
- * @example  $('div.special').block('Please wait');
- * @desc prevent user interaction with all div elements with the 'special' class
- * and show a message over the blocked content.
- *
- * @name block
- * @type jQuery
- * @param String|jQuery|Element message Message to display while the element is blocked
- * @param Object css Style object to control look of the message
- * @cat Plugins/blockUI
- */
-$.fn.block = function(msg, css, opts) {
-    return this.each(function() {
-		if (!this.$pos_checked) {
-            if ($.css(this,&quot;position&quot;) == 'static')
-                this.style.position = 'relative';
-            if ($.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
-            this.$pos_checked = 1;
-        }
-        $.blockUI.impl.install(this, msg, css, opts);
-    });
-};
-
-/**
- * Unblocks content that was blocked by &quot;block()&quot;
- *
- * @example  $('div.special').unblock();
- * @desc unblocks all div elements with the 'special' class.
- *
- * @name unblock
- * @type jQuery
- * @cat Plugins/blockUI
- */
-$.fn.unblock = function(opts) {
-    return this.each(function() {
-        $.blockUI.impl.remove(this, opts);
-    });
-};
-
-/**
- * displays the first matched element in a &quot;display box&quot; above a page overlay.
- *
- * @example  $('#myImage').displayBox();
- * @desc displays &quot;myImage&quot; element in a box
- *
- * @name displayBox
- * @type jQuery
- * @cat Plugins/blockUI
- */
-$.fn.displayBox = function(css, fn, isFlash) {
-    var msg = this[0];
-    if (!msg) return;
-    var $msg = $(msg);
-    css = css || {};
-
-    var w = $msg.width()  || $msg.attr('width')  || css.width  || $.blockUI.defaults.displayBoxCSS.width;
-    var h = $msg.height() || $msg.attr('height') || css.height || $.blockUI.defaults.displayBoxCSS.height ;
-    if (w[w.length-1] == '%') {
-        var ww = document.documentElement.clientWidth || document.body.clientWidth;
-        w = parseInt(w) || 100;
-        w = (w * ww) / 100;
-    }
-    if (h[h.length-1] == '%') {
-        var hh = document.documentElement.clientHeight || document.body.clientHeight;
-        h = parseInt(h) || 100;
-        h = (h * hh) / 100;
-    }
-
-    var ml = '-' + parseInt(w)/2 + 'px';
-    var mt = '-' + parseInt(h)/2 + 'px';
-
-    // supress opacity on overlay if displaying flash content on mac/ff platform
-    var ua = navigator.userAgent.toLowerCase();
-    var opts = {
-        displayMode: fn || 1,
-        noalpha: isFlash &amp;&amp; /mac/.test(ua) &amp;&amp; /firefox/.test(ua)
-    };
-
-    $.blockUI.impl.install(window, msg, { width: w, height: h, marginTop: mt, marginLeft: ml }, opts);
-};
-
-
-// override these in your code to change the default messages and styles
-$.blockUI.defaults = {
-    // the message displayed when blocking the entire page
-    pageMessage:    '&lt;h1&gt;Please wait...&lt;/h1&gt;',
-    // the message displayed when blocking an element
-    elementMessage: '', // none
-    // styles for the overlay iframe
-    overlayCSS:  { backgroundColor: '#fff', opacity: '0.5' },
-    // styles for the message when blocking the entire page
-    pageMessageCSS:    { width:'250px', margin:'-50px 0 0 -125px', top:'50%', left:'50%', textAlign:'center', color:'#000', backgroundColor:'#fff', border:'3px solid #aaa' },
-    // styles for the message when blocking an element
-    elementMessageCSS: { width:'250px', padding:'10px', textAlign:'center', backgroundColor:'#fff'},
-    // styles for the displayBox
-    displayBoxCSS: { width: '400px', height: '400px', top:'50%', left:'50%' },
-    // allow body element to be stetched in ie6
-    ie6Stretch: 1,
-    // supress tab nav from leaving blocking content?
-    allowTabToLeave: 0,
-    // Title attribute for overlay when using displayBox
-    closeMessage: 'Click to close',
-    // use fadeOut effect when unblocking (can be overridden on unblock call)
-    fadeOut:  1,
-    // fadeOut transition time in millis
-    fadeTime: 400
-};
-
-// the gory details
-$.blockUI.impl = {
-    box: null,
-    boxCallback: null,
-    pageBlock: null,
-    pageBlockEls: [],
-    op8: window.opera &amp;&amp; window.opera.version() &lt; 9,
-    ie6: $.browser.msie &amp;&amp; /MSIE 6.0/.test(navigator.userAgent),
-    install: function(el, msg, css, opts) {
-        opts = opts || {};
-        this.boxCallback = typeof opts.displayMode == 'function' ? opts.displayMode : null;
-        this.box = opts.displayMode ? msg : null;
-        var full = (el == window);
-
-        // use logical settings for opacity support based on browser but allow overrides via opts arg
-        var noalpha = this.op8 || $.browser.mozilla &amp;&amp; /Linux/.test(navigator.platform);
-        if (typeof opts.alphaOverride != 'undefined')
-            noalpha = opts.alphaOverride == 0 ? 1 : 0;
-
-        if (full &amp;&amp; this.pageBlock) this.remove(window, {fadeOut:0});
-        // check to see if we were only passed the css object (a literal)
-        if (msg &amp;&amp; typeof msg == 'object' &amp;&amp; !msg.jquery &amp;&amp; !msg.nodeType) {
-            css = msg;
-            msg = null;
-        }
-        msg = msg ? (msg.nodeType ? $(msg) : msg) : full ? $.blockUI.defaults.pageMessage : $.blockUI.defaults.elementMessage;
-        if (opts.displayMode)
-            var basecss = jQuery.extend({}, $.blockUI.defaults.displayBoxCSS);
-        else
-            var basecss = jQuery.extend({}, full ? $.blockUI.defaults.pageMessageCSS : $.blockUI.defaults.elementMessageCSS);
-        css = jQuery.extend(basecss, css || {});
-        var f = ($.browser.msie) ? $('&lt;iframe class=&quot;blockUI&quot; style=&quot;z-index:1000;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0&quot; src=&quot;javascript:false;&quot;&gt;&lt;/iframe&gt;')
-                                 : $('&lt;div class=&quot;blockUI&quot; style=&quot;display:none&quot;&gt;&lt;/div&gt;');
-        var w = $('&lt;div class=&quot;blockUI&quot; style=&quot;z-index:1001;cursor:wait;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0&quot;&gt;&lt;/div&gt;');
-        var m = full ? $('&lt;div class=&quot;blockUI blockMsg&quot; style=&quot;z-index:1002;cursor:wait;padding:0;position:fixed&quot;&gt;&lt;/div&gt;')
-                     : $('&lt;div class=&quot;blockUI&quot; style=&quot;display:none;z-index:1002;cursor:wait;position:absolute&quot;&gt;&lt;/div&gt;');
-        w.css('position', full ? 'fixed' : 'absolute');
-        if (msg) m.css(css);
-        if (!noalpha) w.css($.blockUI.defaults.overlayCSS);
-        if (this.op8) w.css({ width:''+el.clientWidth,height:''+el.clientHeight }); // lame
-        if ($.browser.msie) f.css('opacity','0.0');
-
-        $([f[0],w[0],m[0]]).appendTo(full ? 'body' : el);
-
-        // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
-        var expr = $.browser.msie &amp;&amp; (!$.boxModel || $('object,embed', full ? null : el).length &gt; 0);
-        if (this.ie6 || expr) {
-            // stretch content area if it's short
-            if (full &amp;&amp; $.blockUI.defaults.ie6Stretch &amp;&amp; $.boxModel)
-                $('html,body').css('height','100%');
-
-            // fix ie6 problem when blocked element has a border width
-            if ((this.ie6 || !$.boxModel) &amp;&amp; !full) {
-                var t = this.sz(el,'borderTopWidth'), l = this.sz(el,'borderLeftWidth');
-                var fixT = t ? '(0 - '+t+')' : 0;
-                var fixL = l ? '(0 - '+l+')' : 0;
-            }
-
-            // simulate fixed position
-            $.each([f,w,m], function(i,o) {
-                var s = o[0].style;
-                s.position = 'absolute';
-                if (i &lt; 2) {
-                    full ? s.setExpression('height','document.body.scrollHeight &gt; document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + &quot;px&quot;')
-                         : s.setExpression('height','this.parentNode.offsetHeight + &quot;px&quot;');
-                    full ? s.setExpression('width','jQuery.boxModel &amp;&amp; document.documentElement.clientWidth || document.body.clientWidth + &quot;px&quot;')
-                         : s.setExpression('width','this.parentNode.offsetWidth + &quot;px&quot;');
-                    if (fixL) s.setExpression('left', fixL);
-                    if (fixT) s.setExpression('top', fixT);
-                }
-                else {
-                    if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + &quot;px&quot;');
-                    s.marginTop = 0;
-                }
-            });
-        }
-        if (opts.displayMode) {
-            w.css('cursor','default').attr('title', $.blockUI.defaults.closeMessage);
-            m.css('cursor','default');
-            $([f[0],w[0],m[0]]).removeClass('blockUI').addClass('displayBox');
-            $().click($.blockUI.impl.boxHandler).bind('keypress', $.blockUI.impl.boxHandler);
-        }
-        else
-            this.bind(1, el);
-        m.append(msg).show();
-        if (msg.jquery) msg.show();
-        if (opts.displayMode) return;
-        if (full) {
-            this.pageBlock = m[0];
-            this.pageBlockEls = $(':input:enabled:visible',this.pageBlock);
-            setTimeout(this.focus, 20);
-        }
-        else this.center(m[0]);
-    },
-    remove: function(el, opts) {
-        var o = $.extend({}, $.blockUI.defaults, opts);
-        this.bind(0, el);
-        var full = el == window;
-        var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el);
-        if (full) this.pageBlock = this.pageBlockEls = null;
-
-        if (o.fadeOut) {
-            els.fadeOut(o.fadeTime, function() {
-                if (this.parentNode) this.parentNode.removeChild(this);
-            });
-        }
-        else els.remove();
-    },
-    boxRemove: function(el) {
-        $().unbind('click',$.blockUI.impl.boxHandler).unbind('keypress', $.blockUI.impl.boxHandler);
-        if (this.boxCallback)
-            this.boxCallback(this.box);
-        $('body .displayBox').hide().remove();
-    },
-    // event handler to suppress keyboard/mouse events when blocking
-    handler: function(e) {
-        if (e.keyCode &amp;&amp; e.keyCode == 9) {
-            if ($.blockUI.impl.pageBlock &amp;&amp; !$.blockUI.defaults.allowTabToLeave) {
-                var els = $.blockUI.impl.pageBlockEls;
-                var fwd = !e.shiftKey &amp;&amp; e.target == els[els.length-1];
-                var back = e.shiftKey &amp;&amp; e.target == els[0];
-                if (fwd || back) {
-                    setTimeout(function(){$.blockUI.impl.focus(back)},10);
-                    return false;
-                }
-            }
-        }
-        if ($(e.target).parents('div.blockMsg').length &gt; 0)
-            return true;
-        return $(e.target).parents().children().filter('div.blockUI').length == 0;
-    },
-    boxHandler: function(e) {
-        if ((e.keyCode &amp;&amp; e.keyCode == 27) || (e.type == 'click' &amp;&amp; $(e.target).parents('div.blockMsg').length == 0))
-            $.blockUI.impl.boxRemove();
-        return true;
-    },
-    // bind/unbind the handler
-    bind: function(b, el) {
-        var full = el == window;
-        // don't bother unbinding if there is nothing to unbind
-        if (!b &amp;&amp; (full &amp;&amp; !this.pageBlock || !full &amp;&amp; !el.$blocked)) return;
-        if (!full) el.$blocked = b;
-        var $e = $(el).find('a,:input');
-        $.each(['mousedown','mouseup','keydown','keypress','click'], function(i,o) {
-            $e[b?'bind':'unbind'](o, $.blockUI.impl.handler);
-        });
-    },
-    focus: function(back) {
-        if (!$.blockUI.impl.pageBlockEls) return;
-        var e = $.blockUI.impl.pageBlockEls[back===true ? $.blockUI.impl.pageBlockEls.length-1 : 0];
-        if (e) e.focus();
-    },
-    center: function(el) {
-		var p = el.parentNode, s = el.style;
-        var l = ((p.offsetWidth - el.offsetWidth)/2) - this.sz(p,'borderLeftWidth');
-        var t = ((p.offsetHeight - el.offsetHeight)/2) - this.sz(p,'borderTopWidth');
-        s.left = l &gt; 0 ? (l+'px') : '0';
-        s.top  = t &gt; 0 ? (t+'px') : '0';
-    },
-    sz: function(el, p) { return parseInt($.css(el,p))||0; }
-};
-
-})(jQuery);
+/*
+ * jQuery blockUI plugin
+ * Version 1.33  (09/14/2007)
+ * @requires jQuery v1.1.1
+ *
+ * $Id$
+ *
+ * Examples at: http://malsup.com/jquery/block/
+ * Copyright (c) 2007 M. Alsup
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+ (function($) {
+/**
+ * blockUI provides a mechanism for blocking user interaction with a page (or parts of a page).
+ * This can be an effective way to simulate synchronous behavior during ajax operations without
+ * locking the browser.  It will prevent user operations for the current page while it is
+ * active ane will return the page to normal when it is deactivate.  blockUI accepts the following
+ * two optional arguments:
+ *
+ *   message (String|Element|jQuery): The message to be displayed while the UI is blocked. The message
+ *              argument can be a plain text string like &quot;Processing...&quot;, an HTML string like
+ *              &quot;&lt;h1&gt;&lt;img src=&quot;busy.gif&quot; /&gt; Please wait...&lt;/h1&gt;&quot;, a DOM element, or a jQuery object.
+ *              The default message is &quot;&lt;h1&gt;Please wait...&lt;/h1&gt;&quot;
+ *
+ *   css (Object):  Object which contains css property/values to override the default styles of
+ *              the message.  Use this argument if you wish to override the default
+ *              styles.  The css Object should be in a format suitable for the jQuery.css
+ *              function.  For example:
+ *              $.blockUI({
+ *                    backgroundColor: '#ff8',
+ *                    border: '5px solid #f00,
+ *                    fontWeight: 'bold'
+ *              });
+ *
+ * The default blocking message used when blocking the entire page is &quot;&lt;h1&gt;Please wait...&lt;/h1&gt;&quot;
+ * but this can be overridden by assigning a value to $.blockUI.defaults.pageMessage in your
+ * own code.  For example:
+ *
+ *      $.blockUI.defaults.pageMessage = &quot;&lt;h1&gt;Bitte Wartezeit&lt;/h1&gt;&quot;;
+ *
+ * The default message styling can also be overridden.  For example:
+ *
+ *      $.extend($.blockUI.defaults.pageMessageCSS, { color: '#00a', backgroundColor: '#0f0' });
+ *
+ * The default styles work well for simple messages like &quot;Please wait&quot;, but for longer messages
+ * style overrides may be necessary.
+ *
+ * @example  $.blockUI();
+ * @desc prevent user interaction with the page (and show the default message of 'Please wait...')
+ *
+ * @example  $.blockUI( { backgroundColor: '#f00', color: '#fff'} );
+ * @desc prevent user interaction and override the default styles of the message to use a white on red color scheme
+ *
+ * @example  $.blockUI('Processing...');
+ * @desc prevent user interaction and display the message &quot;Processing...&quot; instead of the default message
+ *
+ * @name blockUI
+ * @param String|jQuery|Element message Message to display while the UI is blocked
+ * @param Object css Style object to control look of the message
+ * @cat Plugins/blockUI
+ */
+$.blockUI = function(msg, css, opts) {
+    $.blockUI.impl.install(window, msg, css, opts);
+};
+
+// expose version number so other plugins can interogate
+$.blockUI.version = 1.33;
+
+/**
+ * unblockUI removes the UI block that was put in place by blockUI
+ *
+ * @example  $.unblockUI();
+ * @desc unblocks the page
+ *
+ * @name unblockUI
+ * @cat Plugins/blockUI
+ */
+$.unblockUI = function(opts) {
+    $.blockUI.impl.remove(window, opts);
+};
+
+/**
+ * Blocks user interaction with the selected elements.  (Hat tip: Much of
+ * this logic comes from Brandon Aaron's bgiframe plugin.  Thanks, Brandon!)
+ * By default, no message is displayed when blocking elements.
+ *
+ * @example  $('div.special').block();
+ * @desc prevent user interaction with all div elements with the 'special' class.
+ *
+ * @example  $('div.special').block('Please wait');
+ * @desc prevent user interaction with all div elements with the 'special' class
+ * and show a message over the blocked content.
+ *
+ * @name block
+ * @type jQuery
+ * @param String|jQuery|Element message Message to display while the element is blocked
+ * @param Object css Style object to control look of the message
+ * @cat Plugins/blockUI
+ */
+$.fn.block = function(msg, css, opts) {
+    return this.each(function() {
+		if (!this.$pos_checked) {
+            if ($.css(this,&quot;position&quot;) == 'static')
+                this.style.position = 'relative';
+            if ($.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
+            this.$pos_checked = 1;
+        }
+        $.blockUI.impl.install(this, msg, css, opts);
+    });
+};
+
+/**
+ * Unblocks content that was blocked by &quot;block()&quot;
+ *
+ * @example  $('div.special').unblock();
+ * @desc unblocks all div elements with the 'special' class.
+ *
+ * @name unblock
+ * @type jQuery
+ * @cat Plugins/blockUI
+ */
+$.fn.unblock = function(opts) {
+    return this.each(function() {
+        $.blockUI.impl.remove(this, opts);
+    });
+};
+
+/**
+ * displays the first matched element in a &quot;display box&quot; above a page overlay.
+ *
+ * @example  $('#myImage').displayBox();
+ * @desc displays &quot;myImage&quot; element in a box
+ *
+ * @name displayBox
+ * @type jQuery
+ * @cat Plugins/blockUI
+ */
+$.fn.displayBox = function(css, fn, isFlash) {
+    var msg = this[0];
+    if (!msg) return;
+    var $msg = $(msg);
+    css = css || {};
+
+    var w = $msg.width()  || $msg.attr('width')  || css.width  || $.blockUI.defaults.displayBoxCSS.width;
+    var h = $msg.height() || $msg.attr('height') || css.height || $.blockUI.defaults.displayBoxCSS.height ;
+    if (w[w.length-1] == '%') {
+        var ww = document.documentElement.clientWidth || document.body.clientWidth;
+        w = parseInt(w) || 100;
+        w = (w * ww) / 100;
+    }
+    if (h[h.length-1] == '%') {
+        var hh = document.documentElement.clientHeight || document.body.clientHeight;
+        h = parseInt(h) || 100;
+        h = (h * hh) / 100;
+    }
+
+    var ml = '-' + parseInt(w)/2 + 'px';
+    var mt = '-' + parseInt(h)/2 + 'px';
+
+    // supress opacity on overlay if displaying flash content on mac/ff platform
+    var ua = navigator.userAgent.toLowerCase();
+    var opts = {
+        displayMode: fn || 1,
+        noalpha: isFlash &amp;&amp; /mac/.test(ua) &amp;&amp; /firefox/.test(ua)
+    };
+
+    $.blockUI.impl.install(window, msg, { width: w, height: h, marginTop: mt, marginLeft: ml }, opts);
+};
+
+
+// override these in your code to change the default messages and styles
+$.blockUI.defaults = {
+    // the message displayed when blocking the entire page
+    pageMessage:    '&lt;h1&gt;Please wait...&lt;/h1&gt;',
+    // the message displayed when blocking an element
+    elementMessage: '', // none
+    // styles for the overlay iframe
+    overlayCSS:  { backgroundColor: '#fff', opacity: '0.5' },
+    // styles for the message when blocking the entire page
+    pageMessageCSS:    { width:'250px', margin:'-50px 0 0 -125px', top:'50%', left:'50%', textAlign:'center', color:'#000', backgroundColor:'#fff', border:'3px solid #aaa' },
+    // styles for the message when blocking an element
+    elementMessageCSS: { width:'250px', padding:'10px', textAlign:'center', backgroundColor:'#fff'},
+    // styles for the displayBox
+    displayBoxCSS: { width: '400px', height: '400px', top:'50%', left:'50%' },
+    // allow body element to be stetched in ie6
+    ie6Stretch: 1,
+    // supress tab nav from leaving blocking content?
+    allowTabToLeave: 0,
+    // Title attribute for overlay when using displayBox
+    closeMessage: 'Click to close',
+    // use fadeOut effect when unblocking (can be overridden on unblock call)
+    fadeOut:  1,
+    // fadeOut transition time in millis
+    fadeTime: 400
+};
+
+// the gory details
+$.blockUI.impl = {
+    box: null,
+    boxCallback: null,
+    pageBlock: null,
+    pageBlockEls: [],
+    op8: window.opera &amp;&amp; window.opera.version() &lt; 9,
+    ie6: $.browser.msie &amp;&amp; /MSIE 6.0/.test(navigator.userAgent),
+    install: function(el, msg, css, opts) {
+        opts = opts || {};
+        this.boxCallback = typeof opts.displayMode == 'function' ? opts.displayMode : null;
+        this.box = opts.displayMode ? msg : null;
+        var full = (el == window);
+
+        // use logical settings for opacity support based on browser but allow overrides via opts arg
+        var noalpha = this.op8 || $.browser.mozilla &amp;&amp; /Linux/.test(navigator.platform);
+        if (typeof opts.alphaOverride != 'undefined')
+            noalpha = opts.alphaOverride == 0 ? 1 : 0;
+
+        if (full &amp;&amp; this.pageBlock) this.remove(window, {fadeOut:0});
+        // check to see if we were only passed the css object (a literal)
+        if (msg &amp;&amp; typeof msg == 'object' &amp;&amp; !msg.jquery &amp;&amp; !msg.nodeType) {
+            css = msg;
+            msg = null;
+        }
+        msg = msg ? (msg.nodeType ? $(msg) : msg) : full ? $.blockUI.defaults.pageMessage : $.blockUI.defaults.elementMessage;
+        if (opts.displayMode)
+            var basecss = jQuery.extend({}, $.blockUI.defaults.displayBoxCSS);
+        else
+            var basecss = jQuery.extend({}, full ? $.blockUI.defaults.pageMessageCSS : $.blockUI.defaults.elementMessageCSS);
+        css = jQuery.extend(basecss, css || {});
+        var f = ($.browser.msie) ? $('&lt;iframe class=&quot;blockUI&quot; style=&quot;z-index:1000;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0&quot; src=&quot;javascript:false;&quot;&gt;&lt;/iframe&gt;')
+                                 : $('&lt;div class=&quot;blockUI&quot; style=&quot;display:none&quot;&gt;&lt;/div&gt;');
+        var w = $('&lt;div class=&quot;blockUI&quot; style=&quot;z-index:1001;cursor:wait;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0&quot;&gt;&lt;/div&gt;');
+        var m = full ? $('&lt;div class=&quot;blockUI blockMsg&quot; style=&quot;z-index:1002;cursor:wait;padding:0;position:fixed&quot;&gt;&lt;/div&gt;')
+                     : $('&lt;div class=&quot;blockUI&quot; style=&quot;display:none;z-index:1002;cursor:wait;position:absolute&quot;&gt;&lt;/div&gt;');
+        w.css('position', full ? 'fixed' : 'absolute');
+        if (msg) m.css(css);
+        if (!noalpha) w.css($.blockUI.defaults.overlayCSS);
+        if (this.op8) w.css({ width:''+el.clientWidth,height:''+el.clientHeight }); // lame
+        if ($.browser.msie) f.css('opacity','0.0');
+
+        $([f[0],w[0],m[0]]).appendTo(full ? 'body' : el);
+
+        // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
+        var expr = $.browser.msie &amp;&amp; (!$.boxModel || $('object,embed', full ? null : el).length &gt; 0);
+        if (this.ie6 || expr) {
+            // stretch content area if it's short
+            if (full &amp;&amp; $.blockUI.defaults.ie6Stretch &amp;&amp; $.boxModel)
+                $('html,body').css('height','100%');
+
+            // fix ie6 problem when blocked element has a border width
+            if ((this.ie6 || !$.boxModel) &amp;&amp; !full) {
+                var t = this.sz(el,'borderTopWidth'), l = this.sz(el,'borderLeftWidth');
+                var fixT = t ? '(0 - '+t+')' : 0;
+                var fixL = l ? '(0 - '+l+')' : 0;
+            }
+
+            // simulate fixed position
+            $.each([f,w,m], function(i,o) {
+                var s = o[0].style;
+                s.position = 'absolute';
+                if (i &lt; 2) {
+                    full ? s.setExpression('height','document.body.scrollHeight &gt; document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + &quot;px&quot;')
+                         : s.setExpression('height','this.parentNode.offsetHeight + &quot;px&quot;');
+                    full ? s.setExpression('width','jQuery.boxModel &amp;&amp; document.documentElement.clientWidth || document.body.clientWidth + &quot;px&quot;')
+                         : s.setExpression('width','this.parentNode.offsetWidth + &quot;px&quot;');
+                    if (fixL) s.setExpression('left', fixL);
+                    if (fixT) s.setExpression('top', fixT);
+                }
+                else {
+                    if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + &quot;px&quot;');
+                    s.marginTop = 0;
+                }
+            });
+        }
+        if (opts.displayMode) {
+            w.css('cursor','default').attr('title', $.blockUI.defaults.closeMessage);
+            m.css('cursor','default');
+            $([f[0],w[0],m[0]]).removeClass('blockUI').addClass('displayBox');
+            $().click($.blockUI.impl.boxHandler).bind('keypress', $.blockUI.impl.boxHandler);
+        }
+        else
+            this.bind(1, el);
+        m.append(msg).show();
+        if (msg.jquery) msg.show();
+        if (opts.displayMode) return;
+        if (full) {
+            this.pageBlock = m[0];
+            this.pageBlockEls = $(':input:enabled:visible',this.pageBlock);
+            setTimeout(this.focus, 20);
+        }
+        else this.center(m[0]);
+    },
+    remove: function(el, opts) {
+        var o = $.extend({}, $.blockUI.defaults, opts);
+        this.bind(0, el);
+        var full = el == window;
+        var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el);
+        if (full) this.pageBlock = this.pageBlockEls = null;
+
+        if (o.fadeOut) {
+            els.fadeOut(o.fadeTime, function() {
+                if (this.parentNode) this.parentNode.removeChild(this);
+            });
+        }
+        else els.remove();
+    },
+    boxRemove: function(el) {
+        $().unbind('click',$.blockUI.impl.boxHandler).unbind('keypress', $.blockUI.impl.boxHandler);
+        if (this.boxCallback)
+            this.boxCallback(this.box);
+        $('body .displayBox').hide().remove();
+    },
+    // event handler to suppress keyboard/mouse events when blocking
+    handler: function(e) {
+        if (e.keyCode &amp;&amp; e.keyCode == 9) {
+            if ($.blockUI.impl.pageBlock &amp;&amp; !$.blockUI.defaults.allowTabToLeave) {
+                var els = $.blockUI.impl.pageBlockEls;
+                var fwd = !e.shiftKey &amp;&amp; e.target == els[els.length-1];
+                var back = e.shiftKey &amp;&amp; e.target == els[0];
+                if (fwd || back) {
+                    setTimeout(function(){$.blockUI.impl.focus(back)},10);
+                    return false;
+                }
+            }
+        }
+        if ($(e.target).parents('div.blockMsg').length &gt; 0)
+            return true;
+        return $(e.target).parents().children().filter('div.blockUI').length == 0;
+    },
+    boxHandler: function(e) {
+        if ((e.keyCode &amp;&amp; e.keyCode == 27) || (e.type == 'click' &amp;&amp; $(e.target).parents('div.blockMsg').length == 0))
+            $.blockUI.impl.boxRemove();
+        return true;
+    },
+    // bind/unbind the handler
+    bind: function(b, el) {
+        var full = el == window;
+        // don't bother unbinding if there is nothing to unbind
+        if (!b &amp;&amp; (full &amp;&amp; !this.pageBlock || !full &amp;&amp; !el.$blocked)) return;
+        if (!full) el.$blocked = b;
+        var $e = $(el).find('a,:input');
+        $.each(['mousedown','mouseup','keydown','keypress','click'], function(i,o) {
+            $e[b?'bind':'unbind'](o, $.blockUI.impl.handler);
+        });
+    },
+    focus: function(back) {
+        if (!$.blockUI.impl.pageBlockEls) return;
+        var e = $.blockUI.impl.pageBlockEls[back===true ? $.blockUI.impl.pageBlockEls.length-1 : 0];
+        if (e) e.focus();
+    },
+    center: function(el) {
+		var p = el.parentNode, s = el.style;
+        var l = ((p.offsetWidth - el.offsetWidth)/2) - this.sz(p,'borderLeftWidth');
+        var t = ((p.offsetHeight - el.offsetHeight)/2) - this.sz(p,'borderTopWidth');
+        s.left = l &gt; 0 ? (l+'px') : '0';
+        s.top  = t &gt; 0 ? (t+'px') : '0';
+    },
+    sz: function(el, p) { return parseInt($.css(el,p))||0; }
+};
+
+})(jQuery);</diff>
      <filename>root/static/js/jquery/blockUI.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,164 +1,164 @@
-/*
- * jQuery corner plugin
- *
- * version 1.91 (9/21/2007)
- *
- * Dual licensed under the MIT and GPL licenses:
- *   http://www.opensource.org/licenses/mit-license.php
- *   http://www.gnu.org/licenses/gpl.html
- */
-
-/**
- * The corner() method provides a simple way of styling DOM elements.  
- *
- * corner() takes a single string argument:  $().corner(&quot;effect corners width&quot;)
- *
- *   effect:  The name of the effect to apply, such as round or bevel. 
- *            If you don't specify an effect, rounding is used.
- *
- *   corners: The corners can be one or more of top, bottom, tr, tl, br, or bl. 
- *            By default, all four corners are adorned. 
- *
- *   width:   The width specifies the width of the effect; in the case of rounded corners this 
- *            will be the radius of the width. 
- *            Specify this value using the px suffix such as 10px, and yes it must be pixels.
- *
- * For more details see: http://methvin.com/jquery/jq-corner.html
- * For a full demo see:  http://malsup.com/jquery/corner/
- *
- *
- * @example $('.adorn').corner();
- * @desc Create round, 10px corners 
- *
- * @example $('.adorn').corner(&quot;25px&quot;);
- * @desc Create round, 25px corners 
- *
- * @example $('.adorn').corner(&quot;notch bottom&quot;);
- * @desc Create notched, 10px corners on bottom only
- *
- * @example $('.adorn').corner(&quot;tr dog 25px&quot;);
- * @desc Create dogeared, 25px corner on the top-right corner only
- *
- * @example $('.adorn').corner(&quot;round 8px&quot;).parent().css('padding', '4px').corner(&quot;round 10px&quot;);
- * @desc Create a rounded border effect by styling both the element and its parent
- * 
- * @name corner
- * @type jQuery
- * @param String options Options which control the corner style
- * @cat Plugins/Corner
- * @return jQuery
- * @author Dave Methvin (dave.methvin@gmail.com)
- * @author Mike Alsup (malsup@gmail.com)
- */
-(function($) { 
-
-$.fn.corner = function(o) {
-    function hex2(s) {
-        var s = parseInt(s).toString(16);
-        return ( s.length &lt; 2 ) ? '0'+s : s;
-    };
-    function gpc(node) {
-        for ( ; node &amp;&amp; node.nodeName.toLowerCase() != 'html'; node = node.parentNode ) {
-            var v = $.css(node,'backgroundColor');
-            if ( v.indexOf('rgb') &gt;= 0 ) { 
-                if ($.browser.safari &amp;&amp; v == 'rgba(0, 0, 0, 0)')
-                    continue;
-                var rgb = v.match(/\d+/g); 
-                return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
-            }
-            if ( v &amp;&amp; v != 'transparent' )
-                return v;
-        }
-        return '#ffffff';
-    };
-    function getW(i) {
-        switch(fx) {
-        case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
-        case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
-        case 'sharp':  return Math.round(width*(1-Math.cos(Math.acos(i/width))));
-        case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
-        case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
-        case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
-        case 'curl':   return Math.round(width*(Math.atan(i)));
-        case 'tear':   return Math.round(width*(Math.cos(i)));
-        case 'wicked': return Math.round(width*(Math.tan(i)));
-        case 'long':   return Math.round(width*(Math.sqrt(i)));
-        case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
-        case 'dog':    return (i&amp;1) ? (i+1) : width;
-        case 'dog2':   return (i&amp;2) ? (i+1) : width;
-        case 'dog3':   return (i&amp;3) ? (i+1) : width;
-        case 'fray':   return (i%2)*width;
-        case 'notch':  return width; 
-        case 'bevel':  return i+1;
-        }
-    };
-    o = (o||&quot;&quot;).toLowerCase();
-    var keep = /keep/.test(o);                       // keep borders?
-    var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]);  // corner color
-    var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]);  // strip color
-    var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
-    var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/;
-    var fx = ((o.match(re)||['round'])[0]);
-    var edges = { T:0, B:1 };
-    var opts = {
-        TL:  /top|tl/.test(o),       TR:  /top|tr/.test(o),
-        BL:  /bottom|bl/.test(o),    BR:  /bottom|br/.test(o)
-    };
-    if ( !opts.TL &amp;&amp; !opts.TR &amp;&amp; !opts.BL &amp;&amp; !opts.BR )
-        opts = { TL:1, TR:1, BL:1, BR:1 };
-    var strip = document.createElement('div');
-    strip.style.overflow = 'hidden';
-    strip.style.height = '1px';
-    strip.style.backgroundColor = sc || 'transparent';
-    strip.style.borderStyle = 'solid';
-    return this.each(function(index){
-        var pad = {
-            T: parseInt($.css(this,'paddingTop'))||0,     R: parseInt($.css(this,'paddingRight'))||0,
-            B: parseInt($.css(this,'paddingBottom'))||0,  L: parseInt($.css(this,'paddingLeft'))||0
-        };
-
-        if ($.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
-        if (!keep) this.style.border = 'none';
-        strip.style.borderColor = cc || gpc(this.parentNode);
-        var cssHeight = $.curCSS(this, 'height');
-
-        for (var j in edges) {
-            var bot = edges[j];
-            // only add stips if needed
-            if ((bot &amp;&amp; (opts.BL || opts.BR)) || (!bot &amp;&amp; (opts.TL || opts.TR))) {
-                strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
-                var d = document.createElement('div');
-                $(d).addClass('jquery-corner');
-                var ds = d.style;
-
-                bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);
-
-                if (bot &amp;&amp; cssHeight != 'auto') {
-                    if ($.css(this,'position') == 'static')
-                        this.style.position = 'relative';
-                    ds.position = 'absolute';
-                    ds.bottom = ds.left = ds.padding = ds.margin = '0';
-                    if ($.browser.msie)
-                        ds.setExpression('width', 'this.parentNode.offsetWidth');
-                    else
-                        ds.width = '100%';
-                }
-                else {
-                    ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : 
-                                        (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';                
-                }
-
-                for (var i=0; i &lt; width; i++) {
-                    var w = Math.max(0,getW(i));
-                    var e = strip.cloneNode(false);
-                    e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
-                    bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
-                }
-            }
-        }
-    });
-};
-
-$.fn.uncorner = function(o) { return $('.jquery-corner', this).remove(); };
-    
-})(jQuery);
+/*
+ * jQuery corner plugin
+ *
+ * version 1.91 (9/21/2007)
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ */
+
+/**
+ * The corner() method provides a simple way of styling DOM elements.  
+ *
+ * corner() takes a single string argument:  $().corner(&quot;effect corners width&quot;)
+ *
+ *   effect:  The name of the effect to apply, such as round or bevel. 
+ *            If you don't specify an effect, rounding is used.
+ *
+ *   corners: The corners can be one or more of top, bottom, tr, tl, br, or bl. 
+ *            By default, all four corners are adorned. 
+ *
+ *   width:   The width specifies the width of the effect; in the case of rounded corners this 
+ *            will be the radius of the width. 
+ *            Specify this value using the px suffix such as 10px, and yes it must be pixels.
+ *
+ * For more details see: http://methvin.com/jquery/jq-corner.html
+ * For a full demo see:  http://malsup.com/jquery/corner/
+ *
+ *
+ * @example $('.adorn').corner();
+ * @desc Create round, 10px corners 
+ *
+ * @example $('.adorn').corner(&quot;25px&quot;);
+ * @desc Create round, 25px corners 
+ *
+ * @example $('.adorn').corner(&quot;notch bottom&quot;);
+ * @desc Create notched, 10px corners on bottom only
+ *
+ * @example $('.adorn').corner(&quot;tr dog 25px&quot;);
+ * @desc Create dogeared, 25px corner on the top-right corner only
+ *
+ * @example $('.adorn').corner(&quot;round 8px&quot;).parent().css('padding', '4px').corner(&quot;round 10px&quot;);
+ * @desc Create a rounded border effect by styling both the element and its parent
+ * 
+ * @name corner
+ * @type jQuery
+ * @param String options Options which control the corner style
+ * @cat Plugins/Corner
+ * @return jQuery
+ * @author Dave Methvin (dave.methvin@gmail.com)
+ * @author Mike Alsup (malsup@gmail.com)
+ */
+(function($) { 
+
+$.fn.corner = function(o) {
+    function hex2(s) {
+        var s = parseInt(s).toString(16);
+        return ( s.length &lt; 2 ) ? '0'+s : s;
+    };
+    function gpc(node) {
+        for ( ; node &amp;&amp; node.nodeName.toLowerCase() != 'html'; node = node.parentNode ) {
+            var v = $.css(node,'backgroundColor');
+            if ( v.indexOf('rgb') &gt;= 0 ) { 
+                if ($.browser.safari &amp;&amp; v == 'rgba(0, 0, 0, 0)')
+                    continue;
+                var rgb = v.match(/\d+/g); 
+                return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
+            }
+            if ( v &amp;&amp; v != 'transparent' )
+                return v;
+        }
+        return '#ffffff';
+    };
+    function getW(i) {
+        switch(fx) {
+        case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
+        case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
+        case 'sharp':  return Math.round(width*(1-Math.cos(Math.acos(i/width))));
+        case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
+        case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
+        case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
+        case 'curl':   return Math.round(width*(Math.atan(i)));
+        case 'tear':   return Math.round(width*(Math.cos(i)));
+        case 'wicked': return Math.round(width*(Math.tan(i)));
+        case 'long':   return Math.round(width*(Math.sqrt(i)));
+        case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
+        case 'dog':    return (i&amp;1) ? (i+1) : width;
+        case 'dog2':   return (i&amp;2) ? (i+1) : width;
+        case 'dog3':   return (i&amp;3) ? (i+1) : width;
+        case 'fray':   return (i%2)*width;
+        case 'notch':  return width; 
+        case 'bevel':  return i+1;
+        }
+    };
+    o = (o||&quot;&quot;).toLowerCase();
+    var keep = /keep/.test(o);                       // keep borders?
+    var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]);  // corner color
+    var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]);  // strip color
+    var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
+    var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/;
+    var fx = ((o.match(re)||['round'])[0]);
+    var edges = { T:0, B:1 };
+    var opts = {
+        TL:  /top|tl/.test(o),       TR:  /top|tr/.test(o),
+        BL:  /bottom|bl/.test(o),    BR:  /bottom|br/.test(o)
+    };
+    if ( !opts.TL &amp;&amp; !opts.TR &amp;&amp; !opts.BL &amp;&amp; !opts.BR )
+        opts = { TL:1, TR:1, BL:1, BR:1 };
+    var strip = document.createElement('div');
+    strip.style.overflow = 'hidden';
+    strip.style.height = '1px';
+    strip.style.backgroundColor = sc || 'transparent';
+    strip.style.borderStyle = 'solid';
+    return this.each(function(index){
+        var pad = {
+            T: parseInt($.css(this,'paddingTop'))||0,     R: parseInt($.css(this,'paddingRight'))||0,
+            B: parseInt($.css(this,'paddingBottom'))||0,  L: parseInt($.css(this,'paddingLeft'))||0
+        };
+
+        if ($.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
+        if (!keep) this.style.border = 'none';
+        strip.style.borderColor = cc || gpc(this.parentNode);
+        var cssHeight = $.curCSS(this, 'height');
+
+        for (var j in edges) {
+            var bot = edges[j];
+            // only add stips if needed
+            if ((bot &amp;&amp; (opts.BL || opts.BR)) || (!bot &amp;&amp; (opts.TL || opts.TR))) {
+                strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
+                var d = document.createElement('div');
+                $(d).addClass('jquery-corner');
+                var ds = d.style;
+
+                bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);
+
+                if (bot &amp;&amp; cssHeight != 'auto') {
+                    if ($.css(this,'position') == 'static')
+                        this.style.position = 'relative';
+                    ds.position = 'absolute';
+                    ds.bottom = ds.left = ds.padding = ds.margin = '0';
+                    if ($.browser.msie)
+                        ds.setExpression('width', 'this.parentNode.offsetWidth');
+                    else
+                        ds.width = '100%';
+                }
+                else {
+                    ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : 
+                                        (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';                
+                }
+
+                for (var i=0; i &lt; width; i++) {
+                    var w = Math.max(0,getW(i));
+                    var e = strip.cloneNode(false);
+                    e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
+                    bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
+                }
+            }
+        }
+    });
+};
+
+$.fn.uncorner = function(o) { return $('.jquery-corner', this).remove(); };
+    
+})(jQuery);</diff>
      <filename>root/static/js/jquery/corner.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,819 +1,819 @@
-/*
- * jQuery Form Plugin
- * @requires jQuery v1.1 or later
- *
- * Examples at: http://malsup.com/jquery/form/
- * Dual licensed under the MIT and GPL licenses:
- *   http://www.opensource.org/licenses/mit-license.php
- *   http://www.gnu.org/licenses/gpl.html
- *
- * Revision: $Id$
- */
- (function($) {
-/**
- * ajaxSubmit() provides a mechanism for submitting an HTML form using AJAX.
- *
- * ajaxSubmit accepts a single argument which can be either a success callback function
- * or an options Object.  If a function is provided it will be invoked upon successful
- * completion of the submit and will be passed the response from the server.
- * If an options Object is provided, the following attributes are supported:
- *
- *  target:   Identifies the element(s) in the page to be updated with the server response.
- *            This value may be specified as a jQuery selection string, a jQuery object,
- *            or a DOM element.
- *            default value: null
- *
- *  url:      URL to which the form data will be submitted.
- *            default value: value of form's 'action' attribute
- *
- *  type:     The method in which the form data should be submitted, 'GET' or 'POST'.
- *            default value: value of form's 'method' attribute (or 'GET' if none found)
- *
- *  data:     Additional data to add to the request, specified as key/value pairs (see $.ajax).
- *
- *  beforeSubmit:  Callback method to be invoked before the form is submitted.
- *            default value: null
- *
- *  success:  Callback method to be invoked after the form has been successfully submitted
- *            and the response has been returned from the server
- *            default value: null
- *
- *  dataType: Expected dataType of the response.  One of: null, 'xml', 'script', or 'json'
- *            default value: null
- *
- *  semantic: Boolean flag indicating whether data must be submitted in semantic order (slower).
- *            default value: false
- *
- *  resetForm: Boolean flag indicating whether the form should be reset if the submit is successful
- *
- *  clearForm: Boolean flag indicating whether the form should be cleared if the submit is successful
- *
- *
- * The 'beforeSubmit' callback can be provided as a hook for running pre-submit logic or for
- * validating the form data.  If the 'beforeSubmit' callback returns false then the form will
- * not be submitted. The 'beforeSubmit' callback is invoked with three arguments: the form data
- * in array format, the jQuery object, and the options object passed into ajaxSubmit.
- * The form data array takes the following form:
- *
- *     [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * If a 'success' callback method is provided it is invoked after the response has been returned
- * from the server.  It is passed the responseText or responseXML value (depending on dataType).
- * See jQuery.ajax for further details.
- *
- *
- * The dataType option provides a means for specifying how the server response should be handled.
- * This maps directly to the jQuery.httpData method.  The following values are supported:
- *
- *      'xml':    if dataType == 'xml' the server response is treated as XML and the 'success'
- *                   callback method, if specified, will be passed the responseXML value
- *      'json':   if dataType == 'json' the server response will be evaluted and passed to
- *                   the 'success' callback, if specified
- *      'script': if dataType == 'script' the server response is evaluated in the global context
- *
- *
- * Note that it does not make sense to use both the 'target' and 'dataType' options.  If both
- * are provided the target will be ignored.
- *
- * The semantic argument can be used to force form serialization in semantic order.
- * This is normally true anyway, unless the form contains input elements of type='image'.
- * If your form must be submitted with name/value pairs in semantic order and your form
- * contains an input of type='image&quot; then pass true for this arg, otherwise pass false
- * (or nothing) to avoid the overhead for this logic.
- *
- *
- * When used on its own, ajaxSubmit() is typically bound to a form's submit event like this:
- *
- * $(&quot;#form-id&quot;).submit(function() {
- *     $(this).ajaxSubmit(options);
- *     return false; // cancel conventional submit
- * });
- *
- * When using ajaxForm(), however, this is done for you.
- *
- * @example
- * $('#myForm').ajaxSubmit(function(data) {
- *     alert('Form submit succeeded! Server returned: ' + data);
- * });
- * @desc Submit form and alert server response
- *
- *
- * @example
- * var options = {
- *     target: '#myTargetDiv'
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Submit form and update page element with server response
- *
- *
- * @example
- * var options = {
- *     success: function(responseText) {
- *         alert(responseText);
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Submit form and alert the server response
- *
- *
- * @example
- * var options = {
- *     beforeSubmit: function(formArray, jqForm) {
- *         if (formArray.length == 0) {
- *             alert('Please enter data.');
- *             return false;
- *         }
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Pre-submit validation which aborts the submit operation if form data is empty
- *
- *
- * @example
- * var options = {
- *     url: myJsonUrl.php,
- *     dataType: 'json',
- *     success: function(data) {
- *        // 'data' is an object representing the the evaluated json data
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc json data returned and evaluated
- *
- *
- * @example
- * var options = {
- *     url: myXmlUrl.php,
- *     dataType: 'xml',
- *     success: function(responseXML) {
- *        // responseXML is XML document object
- *        var data = $('myElement', responseXML).text();
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc XML data returned from server
- *
- *
- * @example
- * var options = {
- *     resetForm: true
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc submit form and reset it if successful
- *
- * @example
- * $('#myForm).submit(function() {
- *    $(this).ajaxSubmit();
- *    return false;
- * });
- * @desc Bind form's submit event to use ajaxSubmit
- *
- *
- * @name ajaxSubmit
- * @type jQuery
- * @param options  object literal containing options which control the form submission process
- * @cat Plugins/Form
- * @return jQuery
- */
-$.fn.ajaxSubmit = function(options) {
-    if (typeof options == 'function')
-        options = { success: options };
-
-    options = $.extend({
-        url:  this.attr('action') || window.location,
-        type: this.attr('method') || 'GET'
-    }, options || {});
-
-    // hook for manipulating the form data before it is extracted;
-    // convenient for use with rich editors like tinyMCE or FCKEditor
-    var veto = {};
-    $.event.trigger('form.pre.serialize', [this, options, veto]);
-    if (veto.veto) return this;
-
-    var a = this.formToArray(options.semantic);
-	if (options.data) {
-	    for (var n in options.data)
-	        a.push( { name: n, value: options.data[n] } );
-	}
-
-    // give pre-submit callback an opportunity to abort the submit
-    if (options.beforeSubmit &amp;&amp; options.beforeSubmit(a, this, options) === false) return this;
-
-    // fire vetoable 'validate' event
-    $.event.trigger('form.submit.validate', [a, this, options, veto]);
-    if (veto.veto) return this;
-
-    var q = $.param(a);//.replace(/%20/g,'+');
-
-    if (options.type.toUpperCase() == 'GET') {
-        options.url += (options.url.indexOf('?') &gt;= 0 ? '&amp;' : '?') + q;
-        options.data = null;  // data is null for 'get'
-    }
-    else
-        options.data = q; // data is the query string for 'post'
-
-    var $form = this, callbacks = [];
-    if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
-    if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
-
-    // perform a load on the target only if dataType is not provided
-    if (!options.dataType &amp;&amp; options.target) {
-        var oldSuccess = options.success || function(){};
-        callbacks.push(function(data) {
-            if (this.evalScripts)
-                $(options.target).attr(&quot;innerHTML&quot;, data).evalScripts().each(oldSuccess, arguments);
-            else // jQuery v1.1.4
-                $(options.target).html(data).each(oldSuccess, arguments);
-        });
-    }
-    else if (options.success)
-        callbacks.push(options.success);
-
-    options.success = function(data, status) {
-        for (var i=0, max=callbacks.length; i &lt; max; i++)
-            callbacks[i](data, status, $form);
-    };
-
-    // are there files to upload?
-    var files = $('input:file', this).fieldValue();
-    var found = false;
-    for (var j=0; j &lt; files.length; j++)
-        if (files[j])
-            found = true;
-
-    if (options.iframe || found) // options.iframe allows user to force iframe mode
-        fileUpload();
-    else
-        $.ajax(options);
-
-    // fire 'notify' event
-    $.event.trigger('form.submit.notify', [this, options]);
-    return this;
-
-
-    // private function for handling file uploads (hat tip to YAHOO!)
-    function fileUpload() {
-        var form = $form[0];
-        var opts = $.extend({}, $.ajaxSettings, options);
-
-        var id = 'jqFormIO' + $.fn.ajaxSubmit.counter++;
-        var $io = $('&lt;iframe id=&quot;' + id + '&quot; name=&quot;' + id + '&quot; /&gt;');
-        var io = $io[0];
-        var op8 = $.browser.opera &amp;&amp; window.opera.version() &lt; 9;
-        if ($.browser.msie || op8) io.src = 'javascript:false;document.write(&quot;&quot;);';
-        $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
-
-        var xhr = { // mock object
-            responseText: null,
-            responseXML: null,
-            status: 0,
-            statusText: 'n/a',
-            getAllResponseHeaders: function() {},
-            getResponseHeader: function() {},
-            setRequestHeader: function() {}
-        };
-
-        var g = opts.global;
-        // trigger ajax global events so that activity/block indicators work like normal
-        if (g &amp;&amp; ! $.active++) $.event.trigger(&quot;ajaxStart&quot;);
-        if (g) $.event.trigger(&quot;ajaxSend&quot;, [xhr, opts]);
-
-        var cbInvoked = 0;
-        var timedOut = 0;
-
-        // take a breath so that pending repaints get some cpu time before the upload starts
-        setTimeout(function() {
-            $io.appendTo('body');
-            // jQuery's event binding doesn't work for iframe events in IE
-            io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
-
-            // make sure form attrs are set
-            var encAttr = form.encoding ? 'encoding' : 'enctype';
-            var t = $form.attr('target');
-            $form.attr({
-                target:   id,
-                method:  'POST',
-                action:   opts.url
-            });
-            form[encAttr] = 'multipart/form-data';
-
-            // support timout
-            if (opts.timeout)
-                setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
-
-            form.submit();
-            $form.attr('target', t); // reset target
-        }, 10);
-
-        function cb() {
-            if (cbInvoked++) return;
-
-            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
-
-            var ok = true;
-            try {
-                if (timedOut) throw 'timeout';
-                // extract the server response from the iframe
-                var data, doc;
-                doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
-                xhr.responseText = doc.body ? doc.body.innerHTML : null;
-                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
-
-                if (opts.dataType == 'json' || opts.dataType == 'script') {
-                    var ta = doc.getElementsByTagName('textarea')[0];
-                    data = ta ? ta.value : xhr.responseText;
-                    if (opts.dataType == 'json')
-                        eval(&quot;data = &quot; + data);
-                    else
-                        $.globalEval(data);
-                }
-                else if (opts.dataType == 'xml') {
-                    data = xhr.responseXML;
-                    if (!data &amp;&amp; xhr.responseText != null)
-                        data = toXml(xhr.responseText);
-                }
-                else {
-                    data = xhr.responseText;
-                }
-            }
-            catch(e){
-                ok = false;
-                $.handleError(opts, xhr, 'error', e);
-            }
-
-            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
-            if (ok) {
-                opts.success(data, 'success');
-                if (g) $.event.trigger(&quot;ajaxSuccess&quot;, [xhr, opts]);
-            }
-            if (g) $.event.trigger(&quot;ajaxComplete&quot;, [xhr, opts]);
-            if (g &amp;&amp; ! --$.active) $.event.trigger(&quot;ajaxStop&quot;);
-            if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
-
-            // clean up
-            setTimeout(function() {
-                $io.remove();
-                xhr.responseXML = null;
-            }, 100);
-        };
-
-        function toXml(s, doc) {
-            if (window.ActiveXObject) {
-                doc = new ActiveXObject('Microsoft.XMLDOM');
-                doc.async = 'false';
-                doc.loadXML(s);
-            }
-            else
-                doc = (new DOMParser()).parseFromString(s, 'text/xml');
-            return (doc &amp;&amp; doc.documentElement &amp;&amp; doc.documentElement.tagName != 'parsererror') ? doc : null;
-        };
-    };
-};
-$.fn.ajaxSubmit.counter = 0; // used to create unique iframe ids
-
-/**
- * ajaxForm() provides a mechanism for fully automating form submission.
- *
- * The advantages of using this method instead of ajaxSubmit() are:
- *
- * 1: This method will include coordinates for &lt;input type=&quot;image&quot; /&gt; elements (if the element
- *    is used to submit the form).
- * 2. This method will include the submit element's name/value data (for the element that was
- *    used to submit the form).
- * 3. This method binds the submit() method to the form for you.
- *
- * Note that for accurate x/y coordinates of image submit elements in all browsers
- * you need to also use the &quot;dimensions&quot; plugin (this method will auto-detect its presence).
- *
- * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
- * passes the options argument along after properly binding events for submit elements and
- * the form itself.  See ajaxSubmit for a full description of the options argument.
- *
- *
- * @example
- * var options = {
- *     target: '#myTargetDiv'
- * };
- * $('#myForm').ajaxSForm(options);
- * @desc Bind form's submit event so that 'myTargetDiv' is updated with the server response
- *       when the form is submitted.
- *
- *
- * @example
- * var options = {
- *     success: function(responseText) {
- *         alert(responseText);
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Bind form's submit event so that server response is alerted after the form is submitted.
- *
- *
- * @example
- * var options = {
- *     beforeSubmit: function(formArray, jqForm) {
- *         if (formArray.length == 0) {
- *             alert('Please enter data.');
- *             return false;
- *         }
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Bind form's submit event so that pre-submit callback is invoked before the form
- *       is submitted.
- *
- *
- * @name   ajaxForm
- * @param  options  object literal containing options which control the form submission process
- * @return jQuery
- * @cat    Plugins/Form
- * @type   jQuery
- */
-$.fn.ajaxForm = function(options) {
-    return this.ajaxFormUnbind().submit(submitHandler).each(function() {
-        // store options in hash
-        this.formPluginId = $.fn.ajaxForm.counter++;
-        $.fn.ajaxForm.optionHash[this.formPluginId] = options;
-        $(&quot;:submit,input:image&quot;, this).click(clickHandler);
-    });
-};
-
-$.fn.ajaxForm.counter = 1;
-$.fn.ajaxForm.optionHash = {};
-
-function clickHandler(e) {
-    var $form = this.form;
-    $form.clk = this;
-    if (this.type == 'image') {
-        if (e.offsetX != undefined) {
-            $form.clk_x = e.offsetX;
-            $form.clk_y = e.offsetY;
-        } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
-            var offset = $(this).offset();
-            $form.clk_x = e.pageX - offset.left;
-            $form.clk_y = e.pageY - offset.top;
-        } else {
-            $form.clk_x = e.pageX - this.offsetLeft;
-            $form.clk_y = e.pageY - this.offsetTop;
-        }
-    }
-    // clear form vars
-    setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10);
-};
-
-function submitHandler() {
-    // retrieve options from hash
-    var id = this.formPluginId;
-    var options = $.fn.ajaxForm.optionHash[id];
-    $(this).ajaxSubmit(options);
-    return false;
-};
-
-/**
- * ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
- *
- * @name   ajaxFormUnbind
- * @return jQuery
- * @cat    Plugins/Form
- * @type   jQuery
- */
-$.fn.ajaxFormUnbind = function() {
-    this.unbind('submit', submitHandler);
-    return this.each(function() {
-        $(&quot;:submit,input:image&quot;, this).unbind('click', clickHandler);
-    });
-
-};
-
-/**
- * formToArray() gathers form element data into an array of objects that can
- * be passed to any of the following ajax functions: $.get, $.post, or load.
- * Each object in the array has both a 'name' and 'value' property.  An example of
- * an array for a simple login form might be:
- *
- * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * It is this array that is passed to pre-submit callback functions provided to the
- * ajaxSubmit() and ajaxForm() methods.
- *
- * The semantic argument can be used to force form serialization in semantic order.
- * This is normally true anyway, unless the form contains input elements of type='image'.
- * If your form must be submitted with name/value pairs in semantic order and your form
- * contains an input of type='image&quot; then pass true for this arg, otherwise pass false
- * (or nothing) to avoid the overhead for this logic.
- *
- * @example var data = $(&quot;#myForm&quot;).formToArray();
- * $.post( &quot;myscript.cgi&quot;, data );
- * @desc Collect all the data from a form and submit it to the server.
- *
- * @name formToArray
- * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
- * @type Array&lt;Object&gt;
- * @cat Plugins/Form
- */
-$.fn.formToArray = function(semantic) {
-    var a = [];
-    if (this.length == 0) return a;
-
-    var form = this[0];
-    var els = semantic ? form.getElementsByTagName('*') : form.elements;
-    if (!els) return a;
-    for(var i=0, max=els.length; i &lt; max; i++) {
-        var el = els[i];
-        var n = el.name;
-        if (!n) continue;
-
-        if (semantic &amp;&amp; form.clk &amp;&amp; el.type == &quot;image&quot;) {
-            // handle image inputs on the fly when semantic == true
-            if(!el.disabled &amp;&amp; form.clk == el)
-                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-            continue;
-        }
-
-        var v = $.fieldValue(el, true);
-        if (v &amp;&amp; v.constructor == Array) {
-            for(var j=0, jmax=v.length; j &lt; jmax; j++)
-                a.push({name: n, value: v[j]});
-        }
-        else if (v !== null &amp;&amp; typeof v != 'undefined')
-            a.push({name: n, value: v});
-    }
-
-    if (!semantic &amp;&amp; form.clk) {
-        // input type=='image' are not found in elements array! handle them here
-        var inputs = form.getElementsByTagName(&quot;input&quot;);
-        for(var i=0, max=inputs.length; i &lt; max; i++) {
-            var input = inputs[i];
-            var n = input.name;
-            if(n &amp;&amp; !input.disabled &amp;&amp; input.type == &quot;image&quot; &amp;&amp; form.clk == input)
-                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-        }
-    }
-    return a;
-};
-
-
-/**
- * Serializes form data into a 'submittable' string. This method will return a string
- * in the format: name1=value1&amp;amp;name2=value2
- *
- * The semantic argument can be used to force form serialization in semantic order.
- * If your form must be submitted with name/value pairs in semantic order then pass
- * true for this arg, otherwise pass false (or nothing) to avoid the overhead for
- * this logic (which can be significant for very large forms).
- *
- * @example var data = $(&quot;#myForm&quot;).formSerialize();
- * $.ajax('POST', &quot;myscript.cgi&quot;, data);
- * @desc Collect all the data from a form into a single string
- *
- * @name formSerialize
- * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
- * @type String
- * @cat Plugins/Form
- */
-$.fn.formSerialize = function(semantic) {
-    //hand off to jQuery.param for proper encoding
-    return $.param(this.formToArray(semantic));
-};
-
-
-/**
- * Serializes all field elements in the jQuery object into a query string.
- * This method will return a string in the format: name1=value1&amp;amp;name2=value2
- *
- * The successful argument controls whether or not serialization is limited to
- * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true.
- *
- * @example var data = $(&quot;input&quot;).formSerialize();
- * @desc Collect the data from all successful input elements into a query string
- *
- * @example var data = $(&quot;:radio&quot;).formSerialize();
- * @desc Collect the data from all successful radio input elements into a query string
- *
- * @example var data = $(&quot;#myForm :checkbox&quot;).formSerialize();
- * @desc Collect the data from all successful checkbox input elements in myForm into a query string
- *
- * @example var data = $(&quot;#myForm :checkbox&quot;).formSerialize(false);
- * @desc Collect the data from all checkbox elements in myForm (even the unchecked ones) into a query string
- *
- * @example var data = $(&quot;:input&quot;).formSerialize();
- * @desc Collect the data from all successful input, select, textarea and button elements into a query string
- *
- * @name fieldSerialize
- * @param successful true if only successful controls should be serialized (default is true)
- * @type String
- * @cat Plugins/Form
- */
-$.fn.fieldSerialize = function(successful) {
-    var a = [];
-    this.each(function() {
-        var n = this.name;
-        if (!n) return;
-        var v = $.fieldValue(this, successful);
-        if (v &amp;&amp; v.constructor == Array) {
-            for (var i=0,max=v.length; i &lt; max; i++)
-                a.push({name: n, value: v[i]});
-        }
-        else if (v !== null &amp;&amp; typeof v != 'undefined')
-            a.push({name: this.name, value: v});
-    });
-    //hand off to jQuery.param for proper encoding
-    return $.param(a);
-};
-
-
-/**
- * Returns the value(s) of the element in the matched set.  For example, consider the following form:
- *
- *  &lt;form&gt;&lt;fieldset&gt;
- *      &lt;input name=&quot;A&quot; type=&quot;text&quot; /&gt;
- *      &lt;input name=&quot;A&quot; type=&quot;text&quot; /&gt;
- *      &lt;input name=&quot;B&quot; type=&quot;checkbox&quot; value=&quot;B1&quot; /&gt;
- *      &lt;input name=&quot;B&quot; type=&quot;checkbox&quot; value=&quot;B2&quot;/&gt;
- *      &lt;input name=&quot;C&quot; type=&quot;radio&quot; value=&quot;C1&quot; /&gt;
- *      &lt;input name=&quot;C&quot; type=&quot;radio&quot; value=&quot;C2&quot; /&gt;
- *  &lt;/fieldset&gt;&lt;/form&gt;
- *
- *  var v = $(':text').fieldValue();
- *  // if no values are entered into the text inputs
- *  v == ['','']
- *  // if values entered into the text inputs are 'foo' and 'bar'
- *  v == ['foo','bar']
- *
- *  var v = $(':checkbox').fieldValue();
- *  // if neither checkbox is checked
- *  v === undefined
- *  // if both checkboxes are checked
- *  v == ['B1', 'B2']
- *
- *  var v = $(':radio').fieldValue();
- *  // if neither radio is checked
- *  v === undefined
- *  // if first radio is checked
- *  v == ['C1']
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true.  If this value is false the value(s)
- * for each element is returned.
- *
- * Note: This method *always* returns an array.  If no valid value can be determined the
- *       array will be empty, otherwise it will contain one or more values.
- *
- * @example var data = $(&quot;#myPasswordElement&quot;).fieldValue();
- * alert(data[0]);
- * @desc Alerts the current value of the myPasswordElement element
- *
- * @example var data = $(&quot;#myForm :input&quot;).fieldValue();
- * @desc Get the value(s) of the form elements in myForm
- *
- * @example var data = $(&quot;#myForm :checkbox&quot;).fieldValue();
- * @desc Get the value(s) for the successful checkbox element(s) in the jQuery object.
- *
- * @example var data = $(&quot;#mySingleSelect&quot;).fieldValue();
- * @desc Get the value(s) of the select control
- *
- * @example var data = $(':text').fieldValue();
- * @desc Get the value(s) of the text input or textarea elements
- *
- * @example var data = $(&quot;#myMultiSelect&quot;).fieldValue();
- * @desc Get the values for the select-multiple control
- *
- * @name fieldValue
- * @param Boolean successful true if only the values for successful controls should be returned (default is true)
- * @type Array&lt;String&gt;
- * @cat Plugins/Form
- */
-$.fn.fieldValue = function(successful) {
-    for (var val=[], i=0, max=this.length; i &lt; max; i++) {
-        var el = this[i];
-        var v = $.fieldValue(el, successful);
-        if (v === null || typeof v == 'undefined' || (v.constructor == Array &amp;&amp; !v.length))
-            continue;
-        v.constructor == Array ? $.merge(val, v) : val.push(v);
-    }
-    return val;
-};
-
-/**
- * Returns the value of the field element.
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true.  If the given element is not
- * successful and the successful arg is not false then the returned value will be null.
- *
- * Note: If the successful flag is true (default) but the element is not successful, the return will be null
- * Note: The value returned for a successful select-multiple element will always be an array.
- * Note: If the element has no value the return value will be undefined.
- *
- * @example var data = jQuery.fieldValue($(&quot;#myPasswordElement&quot;)[0]);
- * @desc Gets the current value of the myPasswordElement element
- *
- * @name fieldValue
- * @param Element el The DOM element for which the value will be returned
- * @param Boolean successful true if value returned must be for a successful controls (default is true)
- * @type String or Array&lt;String&gt; or null or undefined
- * @cat Plugins/Form
- */
-$.fieldValue = function(el, successful) {
-    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
-    if (typeof successful == 'undefined') successful = true;
-
-    if (successful &amp;&amp; (!n || el.disabled || t == 'reset' || t == 'button' ||
-        (t == 'checkbox' || t == 'radio') &amp;&amp; !el.checked ||
-        (t == 'submit' || t == 'image') &amp;&amp; el.form &amp;&amp; el.form.clk != el ||
-        tag == 'select' &amp;&amp; el.selectedIndex == -1))
-            return null;
-
-    if (tag == 'select') {
-        var index = el.selectedIndex;
-        if (index &lt; 0) return null;
-        var a = [], ops = el.options;
-        var one = (t == 'select-one');
-        var max = (one ? index+1 : ops.length);
-        for(var i=(one ? index : 0); i &lt; max; i++) {
-            var op = ops[i];
-            if (op.selected) {
-                // extra pain for IE...
-                var v = $.browser.msie &amp;&amp; !(op.attributes['value'].specified) ? op.text : op.value;
-                if (one) return v;
-                a.push(v);
-            }
-        }
-        return a;
-    }
-    return el.value;
-};
-
-
-/**
- * Clears the form data.  Takes the following actions on the form's input fields:
- *  - input text fields will have their 'value' property set to the empty string
- *  - select elements will have their 'selectedIndex' property set to -1
- *  - checkbox and radio inputs will have their 'checked' property set to false
- *  - inputs of type submit, button, reset, and hidden will *not* be effected
- *  - button elements will *not* be effected
- *
- * @example $('form').clearForm();
- * @desc Clears all forms on the page.
- *
- * @name clearForm
- * @type jQuery
- * @cat Plugins/Form
- */
-$.fn.clearForm = function() {
-    return this.each(function() {
-        $('input,select,textarea', this).clearFields();
-    });
-};
-
-/**
- * Clears the selected form elements.  Takes the following actions on the matched elements:
- *  - input text fields will have their 'value' property set to the empty string
- *  - select elements will have their 'selectedIndex' property set to -1
- *  - checkbox and radio inputs will have their 'checked' property set to false
- *  - inputs of type submit, button, reset, and hidden will *not* be effected
- *  - button elements will *not* be effected
- *
- * @example $('.myInputs').clearFields();
- * @desc Clears all inputs with class myInputs
- *
- * @name clearFields
- * @type jQuery
- * @cat Plugins/Form
- */
-$.fn.clearFields = $.fn.clearInputs = function() {
-    return this.each(function() {
-        var t = this.type, tag = this.tagName.toLowerCase();
-        if (t == 'text' || t == 'password' || tag == 'textarea')
-            this.value = '';
-        else if (t == 'checkbox' || t == 'radio')
-            this.checked = false;
-        else if (tag == 'select')
-            this.selectedIndex = -1;
-    });
-};
-
-
-/**
- * Resets the form data.  Causes all form elements to be reset to their original value.
- *
- * @example $('form').resetForm();
- * @desc Resets all forms on the page.
- *
- * @name resetForm
- * @type jQuery
- * @cat Plugins/Form
- */
-$.fn.resetForm = function() {
-    return this.each(function() {
-        // guard against an input with the name of 'reset'
-        // note that IE reports the reset function as an 'object'
-        if (typeof this.reset == 'function' || (typeof this.reset == 'object' &amp;&amp; !this.reset.nodeType))
-            this.reset();
-    });
-};
-
-})(jQuery);
+/*
+ * jQuery Form Plugin
+ * @requires jQuery v1.1 or later
+ *
+ * Examples at: http://malsup.com/jquery/form/
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id$
+ */
+ (function($) {
+/**
+ * ajaxSubmit() provides a mechanism for submitting an HTML form using AJAX.
+ *
+ * ajaxSubmit accepts a single argument which can be either a success callback function
+ * or an options Object.  If a function is provided it will be invoked upon successful
+ * completion of the submit and will be passed the response from the server.
+ * If an options Object is provided, the following attributes are supported:
+ *
+ *  target:   Identifies the element(s) in the page to be updated with the server response.
+ *            This value may be specified as a jQuery selection string, a jQuery object,
+ *            or a DOM element.
+ *            default value: null
+ *
+ *  url:      URL to which the form data will be submitted.
+ *            default value: value of form's 'action' attribute
+ *
+ *  type:     The method in which the form data should be submitted, 'GET' or 'POST'.
+ *            default value: value of form's 'method' attribute (or 'GET' if none found)
+ *
+ *  data:     Additional data to add to the request, specified as key/value pairs (see $.ajax).
+ *
+ *  beforeSubmit:  Callback method to be invoked before the form is submitted.
+ *            default value: null
+ *
+ *  success:  Callback method to be invoked after the form has been successfully submitted
+ *            and the response has been returned from the server
+ *            default value: null
+ *
+ *  dataType: Expected dataType of the response.  One of: null, 'xml', 'script', or 'json'
+ *            default value: null
+ *
+ *  semantic: Boolean flag indicating whether data must be submitted in semantic order (slower).
+ *            default value: false
+ *
+ *  resetForm: Boolean flag indicating whether the form should be reset if the submit is successful
+ *
+ *  clearForm: Boolean flag indicating whether the form should be cleared if the submit is successful
+ *
+ *
+ * The 'beforeSubmit' callback can be provided as a hook for running pre-submit logic or for
+ * validating the form data.  If the 'beforeSubmit' callback returns false then the form will
+ * not be submitted. The 'beforeSubmit' callback is invoked with three arguments: the form data
+ * in array format, the jQuery object, and the options object passed into ajaxSubmit.
+ * The form data array takes the following form:
+ *
+ *     [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * If a 'success' callback method is provided it is invoked after the response has been returned
+ * from the server.  It is passed the responseText or responseXML value (depending on dataType).
+ * See jQuery.ajax for further details.
+ *
+ *
+ * The dataType option provides a means for specifying how the server response should be handled.
+ * This maps directly to the jQuery.httpData method.  The following values are supported:
+ *
+ *      'xml':    if dataType == 'xml' the server response is treated as XML and the 'success'
+ *                   callback method, if specified, will be passed the responseXML value
+ *      'json':   if dataType == 'json' the server response will be evaluted and passed to
+ *                   the 'success' callback, if specified
+ *      'script': if dataType == 'script' the server response is evaluated in the global context
+ *
+ *
+ * Note that it does not make sense to use both the 'target' and 'dataType' options.  If both
+ * are provided the target will be ignored.
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * This is normally true anyway, unless the form contains input elements of type='image'.
+ * If your form must be submitted with name/value pairs in semantic order and your form
+ * contains an input of type='image&quot; then pass true for this arg, otherwise pass false
+ * (or nothing) to avoid the overhead for this logic.
+ *
+ *
+ * When used on its own, ajaxSubmit() is typically bound to a form's submit event like this:
+ *
+ * $(&quot;#form-id&quot;).submit(function() {
+ *     $(this).ajaxSubmit(options);
+ *     return false; // cancel conventional submit
+ * });
+ *
+ * When using ajaxForm(), however, this is done for you.
+ *
+ * @example
+ * $('#myForm').ajaxSubmit(function(data) {
+ *     alert('Form submit succeeded! Server returned: ' + data);
+ * });
+ * @desc Submit form and alert server response
+ *
+ *
+ * @example
+ * var options = {
+ *     target: '#myTargetDiv'
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Submit form and update page element with server response
+ *
+ *
+ * @example
+ * var options = {
+ *     success: function(responseText) {
+ *         alert(responseText);
+ *     }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Submit form and alert the server response
+ *
+ *
+ * @example
+ * var options = {
+ *     beforeSubmit: function(formArray, jqForm) {
+ *         if (formArray.length == 0) {
+ *             alert('Please enter data.');
+ *             return false;
+ *         }
+ *     }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Pre-submit validation which aborts the submit operation if form data is empty
+ *
+ *
+ * @example
+ * var options = {
+ *     url: myJsonUrl.php,
+ *     dataType: 'json',
+ *     success: function(data) {
+ *        // 'data' is an object representing the the evaluated json data
+ *     }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc json data returned and evaluated
+ *
+ *
+ * @example
+ * var options = {
+ *     url: myXmlUrl.php,
+ *     dataType: 'xml',
+ *     success: function(responseXML) {
+ *        // responseXML is XML document object
+ *        var data = $('myElement', responseXML).text();
+ *     }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc XML data returned from server
+ *
+ *
+ * @example
+ * var options = {
+ *     resetForm: true
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc submit form and reset it if successful
+ *
+ * @example
+ * $('#myForm).submit(function() {
+ *    $(this).ajaxSubmit();
+ *    return false;
+ * });
+ * @desc Bind form's submit event to use ajaxSubmit
+ *
+ *
+ * @name ajaxSubmit
+ * @type jQuery
+ * @param options  object literal containing options which control the form submission process
+ * @cat Plugins/Form
+ * @return jQuery
+ */
+$.fn.ajaxSubmit = function(options) {
+    if (typeof options == 'function')
+        options = { success: options };
+
+    options = $.extend({
+        url:  this.attr('action') || window.location,
+        type: this.attr('method') || 'GET'
+    }, options || {});
+
+    // hook for manipulating the form data before it is extracted;
+    // convenient for use with rich editors like tinyMCE or FCKEditor
+    var veto = {};
+    $.event.trigger('form.pre.serialize', [this, options, veto]);
+    if (veto.veto) return this;
+
+    var a = this.formToArray(options.semantic);
+	if (options.data) {
+	    for (var n in options.data)
+	        a.push( { name: n, value: options.data[n] } );
+	}
+
+    // give pre-submit callback an opportunity to abort the submit
+    if (options.beforeSubmit &amp;&amp; options.beforeSubmit(a, this, options) === false) return this;
+
+    // fire vetoable 'validate' event
+    $.event.trigger('form.submit.validate', [a, this, options, veto]);
+    if (veto.veto) return this;
+
+    var q = $.param(a);//.replace(/%20/g,'+');
+
+    if (options.type.toUpperCase() == 'GET') {
+        options.url += (options.url.indexOf('?') &gt;= 0 ? '&amp;' : '?') + q;
+        options.data = null;  // data is null for 'get'
+    }
+    else
+        options.data = q; // data is the query string for 'post'
+
+    var $form = this, callbacks = [];
+    if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
+    if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
+
+    // perform a load on the target only if dataType is not provided
+    if (!options.dataType &amp;&amp; options.target) {
+        var oldSuccess = options.success || function(){};
+        callbacks.push(function(data) {
+            if (this.evalScripts)
+                $(options.target).attr(&quot;innerHTML&quot;, data).evalScripts().each(oldSuccess, arguments);
+            else // jQuery v1.1.4
+                $(options.target).html(data).each(oldSuccess, arguments);
+        });
+    }
+    else if (options.success)
+        callbacks.push(options.success);
+
+    options.success = function(data, status) {
+        for (var i=0, max=callbacks.length; i &lt; max; i++)
+            callbacks[i](data, status, $form);
+    };
+
+    // are there files to upload?
+    var files = $('input:file', this).fieldValue();
+    var found = false;
+    for (var j=0; j &lt; files.length; j++)
+        if (files[j])
+            found = true;
+
+    if (options.iframe || found) // options.iframe allows user to force iframe mode
+        fileUpload();
+    else
+        $.ajax(options);
+
+    // fire 'notify' event
+    $.event.trigger('form.submit.notify', [this, options]);
+    return this;
+
+
+    // private function for handling file uploads (hat tip to YAHOO!)
+    function fileUpload() {
+        var form = $form[0];
+        var opts = $.extend({}, $.ajaxSettings, options);
+
+        var id = 'jqFormIO' + $.fn.ajaxSubmit.counter++;
+        var $io = $('&lt;iframe id=&quot;' + id + '&quot; name=&quot;' + id + '&quot; /&gt;');
+        var io = $io[0];
+        var op8 = $.browser.opera &amp;&amp; window.opera.version() &lt; 9;
+        if ($.browser.msie || op8) io.src = 'javascript:false;document.write(&quot;&quot;);';
+        $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
+
+        var xhr = { // mock object
+            responseText: null,
+            responseXML: null,
+            status: 0,
+            statusText: 'n/a',
+            getAllResponseHeaders: function() {},
+            getResponseHeader: function() {},
+            setRequestHeader: function() {}
+        };
+
+        var g = opts.global;
+        // trigger ajax global events so that activity/block indicators work like normal
+        if (g &amp;&amp; ! $.active++) $.event.trigger(&quot;ajaxStart&quot;);
+        if (g) $.event.trigger(&quot;ajaxSend&quot;, [xhr, opts]);
+
+        var cbInvoked = 0;
+        var timedOut = 0;
+
+        // take a breath so that pending repaints get some cpu time before the upload starts
+        setTimeout(function() {
+            $io.appendTo('body');
+            // jQuery's event binding doesn't work for iframe events in IE
+            io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
+
+            // make sure form attrs are set
+            var encAttr = form.encoding ? 'encoding' : 'enctype';
+            var t = $form.attr('target');
+            $form.attr({
+                target:   id,
+                method:  'POST',
+                action:   opts.url
+            });
+            form[encAttr] = 'multipart/form-data';
+
+            // support timout
+            if (opts.timeout)
+                setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
+
+            form.submit();
+            $form.attr('target', t); // reset target
+        }, 10);
+
+        function cb() {
+            if (cbInvoked++) return;
+
+            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
+
+            var ok = true;
+            try {
+                if (timedOut) throw 'timeout';
+                // extract the server response from the iframe
+                var data, doc;
+                doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
+                xhr.responseText = doc.body ? doc.body.innerHTML : null;
+                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
+
+                if (opts.dataType == 'json' || opts.dataType == 'script') {
+                    var ta = doc.getElementsByTagName('textarea')[0];
+                    data = ta ? ta.value : xhr.responseText;
+                    if (opts.dataType == 'json')
+                        eval(&quot;data = &quot; + data);
+                    else
+                        $.globalEval(data);
+                }
+                else if (opts.dataType == 'xml') {
+                    data = xhr.responseXML;
+                    if (!data &amp;&amp; xhr.responseText != null)
+                        data = toXml(xhr.responseText);
+                }
+                else {
+                    data = xhr.responseText;
+                }
+            }
+            catch(e){
+                ok = false;
+                $.handleError(opts, xhr, 'error', e);
+            }
+
+            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
+            if (ok) {
+                opts.success(data, 'success');
+                if (g) $.event.trigger(&quot;ajaxSuccess&quot;, [xhr, opts]);
+            }
+            if (g) $.event.trigger(&quot;ajaxComplete&quot;, [xhr, opts]);
+            if (g &amp;&amp; ! --$.active) $.event.trigger(&quot;ajaxStop&quot;);
+            if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
+
+            // clean up
+            setTimeout(function() {
+                $io.remove();
+                xhr.responseXML = null;
+            }, 100);
+        };
+
+        function toXml(s, doc) {
+            if (window.ActiveXObject) {
+                doc = new ActiveXObject('Microsoft.XMLDOM');
+                doc.async = 'false';
+                doc.loadXML(s);
+            }
+            else
+                doc = (new DOMParser()).parseFromString(s, 'text/xml');
+            return (doc &amp;&amp; doc.documentElement &amp;&amp; doc.documentElement.tagName != 'parsererror') ? doc : null;
+        };
+    };
+};
+$.fn.ajaxSubmit.counter = 0; // used to create unique iframe ids
+
+/**
+ * ajaxForm() provides a mechanism for fully automating form submission.
+ *
+ * The advantages of using this method instead of ajaxSubmit() are:
+ *
+ * 1: This method will include coordinates for &lt;input type=&quot;image&quot; /&gt; elements (if the element
+ *    is used to submit the form).
+ * 2. This method will include the submit element's name/value data (for the element that was
+ *    used to submit the form).
+ * 3. This method binds the submit() method to the form for you.
+ *
+ * Note that for accurate x/y coordinates of image submit elements in all browsers
+ * you need to also use the &quot;dimensions&quot; plugin (this method will auto-detect its presence).
+ *
+ * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
+ * passes the options argument along after properly binding events for submit elements and
+ * the form itself.  See ajaxSubmit for a full description of the options argument.
+ *
+ *
+ * @example
+ * var options = {
+ *     target: '#myTargetDiv'
+ * };
+ * $('#myForm').ajaxSForm(options);
+ * @desc Bind form's submit event so that 'myTargetDiv' is updated with the server response
+ *       when the form is submitted.
+ *
+ *
+ * @example
+ * var options = {
+ *     success: function(responseText) {
+ *         alert(responseText);
+ *     }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Bind form's submit event so that server response is alerted after the form is submitted.
+ *
+ *
+ * @example
+ * var options = {
+ *     beforeSubmit: function(formArray, jqForm) {
+ *         if (formArray.length == 0) {
+ *             alert('Please enter data.');
+ *             return false;
+ *         }
+ *     }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Bind form's submit event so that pre-submit callback is invoked before the form
+ *       is submitted.
+ *
+ *
+ * @name   ajaxForm
+ * @param  options  object literal containing options which control the form submission process
+ * @return jQuery
+ * @cat    Plugins/Form
+ * @type   jQuery
+ */
+$.fn.ajaxForm = function(options) {
+    return this.ajaxFormUnbind().submit(submitHandler).each(function() {
+        // store options in hash
+        this.formPluginId = $.fn.ajaxForm.counter++;
+        $.fn.ajaxForm.optionHash[this.formPluginId] = options;
+        $(&quot;:submit,input:image&quot;, this).click(clickHandler);
+    });
+};
+
+$.fn.ajaxForm.counter = 1;
+$.fn.ajaxForm.optionHash = {};
+
+function clickHandler(e) {
+    var $form = this.form;
+    $form.clk = this;
+    if (this.type == 'image') {
+        if (e.offsetX != undefined) {
+            $form.clk_x = e.offsetX;
+            $form.clk_y = e.offsetY;
+        } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
+            var offset = $(this).offset();
+            $form.clk_x = e.pageX - offset.left;
+            $form.clk_y = e.pageY - offset.top;
+        } else {
+            $form.clk_x = e.pageX - this.offsetLeft;
+            $form.clk_y = e.pageY - this.offsetTop;
+        }
+    }
+    // clear form vars
+    setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10);
+};
+
+function submitHandler() {
+    // retrieve options from hash
+    var id = this.formPluginId;
+    var options = $.fn.ajaxForm.optionHash[id];
+    $(this).ajaxSubmit(options);
+    return false;
+};
+
+/**
+ * ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
+ *
+ * @name   ajaxFormUnbind
+ * @return jQuery
+ * @cat    Plugins/Form
+ * @type   jQuery
+ */
+$.fn.ajaxFormUnbind = function() {
+    this.unbind('submit', submitHandler);
+    return this.each(function() {
+        $(&quot;:submit,input:image&quot;, this).unbind('click', clickHandler);
+    });
+
+};
+
+/**
+ * formToArray() gathers form element data into an array of objects that can
+ * be passed to any of the following ajax functions: $.get, $.post, or load.
+ * Each object in the array has both a 'name' and 'value' property.  An example of
+ * an array for a simple login form might be:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * It is this array that is passed to pre-submit callback functions provided to the
+ * ajaxSubmit() and ajaxForm() methods.
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * This is normally true anyway, unless the form contains input elements of type='image'.
+ * If your form must be submitted with name/value pairs in semantic order and your form
+ * contains an input of type='image&quot; then pass true for this arg, otherwise pass false
+ * (or nothing) to avoid the overhead for this logic.
+ *
+ * @example var data = $(&quot;#myForm&quot;).formToArray();
+ * $.post( &quot;myscript.cgi&quot;, data );
+ * @desc Collect all the data from a form and submit it to the server.
+ *
+ * @name formToArray
+ * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
+ * @type Array&lt;Object&gt;
+ * @cat Plugins/Form
+ */
+$.fn.formToArray = function(semantic) {
+    var a = [];
+    if (this.length == 0) return a;
+
+    var form = this[0];
+    var els = semantic ? form.getElementsByTagName('*') : form.elements;
+    if (!els) return a;
+    for(var i=0, max=els.length; i &lt; max; i++) {
+        var el = els[i];
+        var n = el.name;
+        if (!n) continue;
+
+        if (semantic &amp;&amp; form.clk &amp;&amp; el.type == &quot;image&quot;) {
+            // handle image inputs on the fly when semantic == true
+            if(!el.disabled &amp;&amp; form.clk == el)
+                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+            continue;
+        }
+
+        var v = $.fieldValue(el, true);
+        if (v &amp;&amp; v.constructor == Array) {
+            for(var j=0, jmax=v.length; j &lt; jmax; j++)
+                a.push({name: n, value: v[j]});
+        }
+        else if (v !== null &amp;&amp; typeof v != 'undefined')
+            a.push({name: n, value: v});
+    }
+
+    if (!semantic &amp;&amp; form.clk) {
+        // input type=='image' are not found in elements array! handle them here
+        var inputs = form.getElementsByTagName(&quot;input&quot;);
+        for(var i=0, max=inputs.length; i &lt; max; i++) {
+            var input = inputs[i];
+            var n = input.name;
+            if(n &amp;&amp; !input.disabled &amp;&amp; input.type == &quot;image&quot; &amp;&amp; form.clk == input)
+                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+        }
+    }
+    return a;
+};
+
+
+/**
+ * Serializes form data into a 'submittable' string. This method will return a string
+ * in the format: name1=value1&amp;amp;name2=value2
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * If your form must be submitted with name/value pairs in semantic order then pass
+ * true for this arg, otherwise pass false (or nothing) to avoid the overhead for
+ * this logic (which can be significant for very large forms).
+ *
+ * @example var data = $(&quot;#myForm&quot;).formSerialize();
+ * $.ajax('POST', &quot;myscript.cgi&quot;, data);
+ * @desc Collect all the data from a form into a single string
+ *
+ * @name formSerialize
+ * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
+ * @type String
+ * @cat Plugins/Form
+ */
+$.fn.formSerialize = function(semantic) {
+    //hand off to jQuery.param for proper encoding
+    return $.param(this.formToArray(semantic));
+};
+
+
+/**
+ * Serializes all field elements in the jQuery object into a query string.
+ * This method will return a string in the format: name1=value1&amp;amp;name2=value2
+ *
+ * The successful argument controls whether or not serialization is limited to
+ * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true.
+ *
+ * @example var data = $(&quot;input&quot;).formSerialize();
+ * @desc Collect the data from all successful input elements into a query string
+ *
+ * @example var data = $(&quot;:radio&quot;).formSerialize();
+ * @desc Collect the data from all successful radio input elements into a query string
+ *
+ * @example var data = $(&quot;#myForm :checkbox&quot;).formSerialize();
+ * @desc Collect the data from all successful checkbox input elements in myForm into a query string
+ *
+ * @example var data = $(&quot;#myForm :checkbox&quot;).formSerialize(false);
+ * @desc Collect the data from all checkbox elements in myForm (even the unchecked ones) into a query string
+ *
+ * @example var data = $(&quot;:input&quot;).formSerialize();
+ * @desc Collect the data from all successful input, select, textarea and button elements into a query string
+ *
+ * @name fieldSerialize
+ * @param successful true if only successful controls should be serialized (default is true)
+ * @type String
+ * @cat Plugins/Form
+ */
+$.fn.fieldSerialize = function(successful) {
+    var a = [];
+    this.each(function() {
+        var n = this.name;
+        if (!n) return;
+        var v = $.fieldValue(this, successful);
+        if (v &amp;&amp; v.constructor == Array) {
+            for (var i=0,max=v.length; i &lt; max; i++)
+                a.push({name: n, value: v[i]});
+        }
+        else if (v !== null &amp;&amp; typeof v != 'undefined')
+            a.push({name: this.name, value: v});
+    });
+    //hand off to jQuery.param for proper encoding
+    return $.param(a);
+};
+
+
+/**
+ * Returns the value(s) of the element in the matched set.  For example, consider the following form:
+ *
+ *  &lt;form&gt;&lt;fieldset&gt;
+ *      &lt;input name=&quot;A&quot; type=&quot;text&quot; /&gt;
+ *      &lt;input name=&quot;A&quot; type=&quot;text&quot; /&gt;
+ *      &lt;input name=&quot;B&quot; type=&quot;checkbox&quot; value=&quot;B1&quot; /&gt;
+ *      &lt;input name=&quot;B&quot; type=&quot;checkbox&quot; value=&quot;B2&quot;/&gt;
+ *      &lt;input name=&quot;C&quot; type=&quot;radio&quot; value=&quot;C1&quot; /&gt;
+ *      &lt;input name=&quot;C&quot; type=&quot;radio&quot; value=&quot;C2&quot; /&gt;
+ *  &lt;/fieldset&gt;&lt;/form&gt;
+ *
+ *  var v = $(':text').fieldValue();
+ *  // if no values are entered into the text inputs
+ *  v == ['','']
+ *  // if values entered into the text inputs are 'foo' and 'bar'
+ *  v == ['foo','bar']
+ *
+ *  var v = $(':checkbox').fieldValue();
+ *  // if neither checkbox is checked
+ *  v === undefined
+ *  // if both checkboxes are checked
+ *  v == ['B1', 'B2']
+ *
+ *  var v = $(':radio').fieldValue();
+ *  // if neither radio is checked
+ *  v === undefined
+ *  // if first radio is checked
+ *  v == ['C1']
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true.  If this value is false the value(s)
+ * for each element is returned.
+ *
+ * Note: This method *always* returns an array.  If no valid value can be determined the
+ *       array will be empty, otherwise it will contain one or more values.
+ *
+ * @example var data = $(&quot;#myPasswordElement&quot;).fieldValue();
+ * alert(data[0]);
+ * @desc Alerts the current value of the myPasswordElement element
+ *
+ * @example var data = $(&quot;#myForm :input&quot;).fieldValue();
+ * @desc Get the value(s) of the form elements in myForm
+ *
+ * @example var data = $(&quot;#myForm :checkbox&quot;).fieldValue();
+ * @desc Get the value(s) for the successful checkbox element(s) in the jQuery object.
+ *
+ * @example var data = $(&quot;#mySingleSelect&quot;).fieldValue();
+ * @desc Get the value(s) of the select control
+ *
+ * @example var data = $(':text').fieldValue();
+ * @desc Get the value(s) of the text input or textarea elements
+ *
+ * @example var data = $(&quot;#myMultiSelect&quot;).fieldValue();
+ * @desc Get the values for the select-multiple control
+ *
+ * @name fieldValue
+ * @param Boolean successful true if only the values for successful controls should be returned (default is true)
+ * @type Array&lt;String&gt;
+ * @cat Plugins/Form
+ */
+$.fn.fieldValue = function(successful) {
+    for (var val=[], i=0, max=this.length; i &lt; max; i++) {
+        var el = this[i];
+        var v = $.fieldValue(el, successful);
+        if (v === null || typeof v == 'undefined' || (v.constructor == Array &amp;&amp; !v.length))
+            continue;
+        v.constructor == Array ? $.merge(val, v) : val.push(v);
+    }
+    return val;
+};
+
+/**
+ * Returns the value of the field element.
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true.  If the given element is not
+ * successful and the successful arg is not false then the returned value will be null.
+ *
+ * Note: If the successful flag is true (default) but the element is not successful, the return will be null
+ * Note: The value returned for a successful select-multiple element will always be an array.
+ * Note: If the element has no value the return value will be undefined.
+ *
+ * @example var data = jQuery.fieldValue($(&quot;#myPasswordElement&quot;)[0]);
+ * @desc Gets the current value of the myPasswordElement element
+ *
+ * @name fieldValue
+ * @param Element el The DOM element for which the value will be returned
+ * @param Boolean successful true if value returned must be for a successful controls (default is true)
+ * @type String or Array&lt;String&gt; or null or undefined
+ * @cat Plugins/Form
+ */
+$.fieldValue = function(el, successful) {
+    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+    if (typeof successful == 'undefined') successful = true;
+
+    if (successful &amp;&amp; (!n || el.disabled || t == 'reset' || t == 'button' ||
+        (t == 'checkbox' || t == 'radio') &amp;&amp; !el.checked ||
+        (t == 'submit' || t == 'image') &amp;&amp; el.form &amp;&amp; el.form.clk != el ||
+        tag == 'select' &amp;&amp; el.selectedIndex == -1))
+            return null;
+
+    if (tag == 'select') {
+        var index = el.selectedIndex;
+        if (index &lt; 0) return null;
+        var a = [], ops = el.options;
+        var one = (t == 'select-one');
+        var max = (one ? index+1 : ops.length);
+        for(var i=(one ? index : 0); i &lt; max; i++) {
+            var op = ops[i];
+            if (op.selected) {
+                // extra pain for IE...
+                var v = $.browser.msie &amp;&amp; !(op.attributes['value'].specified) ? op.text : op.value;
+                if (one) return v;
+                a.push(v);
+            }
+        }
+        return a;
+    }
+    return el.value;
+};
+
+
+/**
+ * Clears the form data.  Takes the following actions on the form's input fields:
+ *  - input text fields will have their 'value' property set to the empty string
+ *  - select elements will have their 'selectedIndex' property set to -1
+ *  - checkbox and radio inputs will have their 'checked' property set to false
+ *  - inputs of type submit, button, reset, and hidden will *not* be effected
+ *  - button elements will *not* be effected
+ *
+ * @example $('form').clearForm();
+ * @desc Clears all forms on the page.
+ *
+ * @name clearForm
+ * @type jQuery
+ * @cat Plugins/Form
+ */
+$.fn.clearForm = function() {
+    return this.each(function() {
+        $('input,select,textarea', this).clearFields();
+    });
+};
+
+/**
+ * Clears the selected form elements.  Takes the following actions on the matched elements:
+ *  - input text fields will have their 'value' property set to the empty string
+ *  - select elements will have their 'selectedIndex' property set to -1
+ *  - checkbox and radio inputs will have their 'checked' property set to false
+ *  - inputs of type submit, button, reset, and hidden will *not* be effected
+ *  - button elements will *not* be effected
+ *
+ * @example $('.myInputs').clearFields();
+ * @desc Clears all inputs with class myInputs
+ *
+ * @name clearFields
+ * @type jQuery
+ * @cat Plugins/Form
+ */
+$.fn.clearFields = $.fn.clearInputs = function() {
+    return this.each(function() {
+        var t = this.type, tag = this.tagName.toLowerCase();
+        if (t == 'text' || t == 'password' || tag == 'textarea')
+            this.value = '';
+        else if (t == 'checkbox' || t == 'radio')
+            this.checked = false;
+        else if (tag == 'select')
+            this.selectedIndex = -1;
+    });
+};
+
+
+/**
+ * Resets the form data.  Causes all form elements to be reset to their original value.
+ *
+ * @example $('form').resetForm();
+ * @desc Resets all forms on the page.
+ *
+ * @name resetForm
+ * @type jQuery
+ * @cat Plugins/Form
+ */
+$.fn.resetForm = function() {
+    return this.each(function() {
+        // guard against an input with the name of 'reset'
+        // note that IE reports the reset function as an 'object'
+        if (typeof this.reset == 'function' || (typeof this.reset == 'object' &amp;&amp; !this.reset.nodeType))
+            this.reset();
+    });
+};
+
+})(jQuery);</diff>
      <filename>root/static/js/jquery/form.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,114 +1,114 @@
-/*
- * jQuery pngfix plugin
- * Version 1.5  (23/07/2007)
- * @requires jQuery v1.1.3
- *
- * Examples at: http://khurshid.com/jquery/iepnghack/
- * Copyright (c) 2007 Khurshid M.
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
- /**
-  *
-  * @example
-  *
-  * $('img[@src$=.png], #panel').pngfix();
-  *
-  * @apply hack to all png images and #panel which icluded png img in its css
-  *
-  * @name pngfix
-  * @type jQuery
-  * @cat Plugins/Image
-  * @return jQuery
-  * @author jQuery Community
-  */
- 
-(function($) {
-	/**
-	 * helper variables and function
-	 */
-	var hack = {
-		ltie7 : $.browser.msie &amp;&amp; /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
-		pixel : 'images/pixel.gif',
-		filter : function(src) {
-			return &quot;progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='&quot;+src+&quot;')&quot;;
-		}
-	};
-	/**
-	 * Applies ie png hack to selected dom elements
-	 *
-	 * $('img[@src$=.png]').pngfix();
-	 * @desc apply hack to all images with png extensions
-	 *
-	 * $('#panel, img[@src$=.png]').pngfix();
-	 * @desc apply hack to element #panel and all images with png extensions
-	 *
-	 * @name pngfix
-	 * @type jQuery
-	 * @cat Plugins/pngfix
-	 */
-	$.fn.pngfix = hack.ltie7 ? function() {
-    	return this.each(function() {
-			var $$ = $(this);
-			var base = $('base').attr('href'); // need to use this in case you are using rewriting urls
-			if ($$.is('img') || $$.is('input')) { // hack image tags present in dom
-				if ($$.attr('src').match(/.*\.png$/i)) { // make sure it is png image
-					// use source tag value if set 
-					var source = (base &amp;&amp; $$.attr('src').substring(0,1)!='/') ? base + $$.attr('src') : $$.attr('src');
-					// apply filter
-					$$.css({filter:hack.filter(source), width:$$.width(), height:$$.height()})
-					  .attr({src:hack.pixel})
-					  .positionFix();
-				}
-			} else { // hack png css properties present inside css
-				var image = $$.css('backgroundImage');
-				if (image.match(/^url\([&quot;']?(.*\.png)[&quot;']?\)$/i)) {
-					image = RegExp.$1;
-					$$.css({backgroundImage:'none', filter:hack.filter(image)})
-					  .positionFix();
-				}
-			}
-		});
-	} : function() { return this; };
-	/**
-	 * Removes any png hack that may have been applied previously
-	 *
-	 * $('img[@src$=.png]').pngunfix();
-	 * @desc revert hack on all images with png extensions
-	 *
-	 * $('#panel, img[@src$=.png]').iepnghack();
-	 * @desc revert hack on element #panel and all images with png extensions
-	 *
-	 * @name pngunfix
-	 * @type jQuery
-	 * @cat Plugins/iepnghack
-	 */
-	$.fn.pngunfix = hack.ltie7 ? function() {
-    	return this.each(function() {
-			var $$ = $(this);
-			var src = $$.css('filter');
-			if (src.match(/src=[&quot;']?(.*\.png)[&quot;']?/i)) { // get img source from filter
-				src = RegExp.$1;
-				if ($$.is('img') || $$.is('input')) {
-					$$.attr({src:src}).css({filter:''});
-				} else {
-					$$.css({filter:'', background:'url('+src+')'});
-				}
-			}
-		});
-	} : function() { return this; };
-	/**
-	 * positions selected item relatively
-	 */
-	$.fn.positionFix = function() {
-		return this.each(function() {
-			var $$ = $(this);
-			var position = $$.css('position');
-			if (position != 'absolute' &amp;&amp; position != 'relative') {
-				$$.css({position:'relative'});
-			}
-		});
-	};
-
-})(jQuery);
+/*
+ * jQuery pngfix plugin
+ * Version 1.5  (23/07/2007)
+ * @requires jQuery v1.1.3
+ *
+ * Examples at: http://khurshid.com/jquery/iepnghack/
+ * Copyright (c) 2007 Khurshid M.
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+ /**
+  *
+  * @example
+  *
+  * $('img[@src$=.png], #panel').pngfix();
+  *
+  * @apply hack to all png images and #panel which icluded png img in its css
+  *
+  * @name pngfix
+  * @type jQuery
+  * @cat Plugins/Image
+  * @return jQuery
+  * @author jQuery Community
+  */
+ 
+(function($) {
+	/**
+	 * helper variables and function
+	 */
+	var hack = {
+		ltie7 : $.browser.msie &amp;&amp; /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
+		pixel : 'images/pixel.gif',
+		filter : function(src) {
+			return &quot;progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='&quot;+src+&quot;')&quot;;
+		}
+	};
+	/**
+	 * Applies ie png hack to selected dom elements
+	 *
+	 * $('img[@src$=.png]').pngfix();
+	 * @desc apply hack to all images with png extensions
+	 *
+	 * $('#panel, img[@src$=.png]').pngfix();
+	 * @desc apply hack to element #panel and all images with png extensions
+	 *
+	 * @name pngfix
+	 * @type jQuery
+	 * @cat Plugins/pngfix
+	 */
+	$.fn.pngfix = hack.ltie7 ? function() {
+    	return this.each(function() {
+			var $$ = $(this);
+			var base = $('base').attr('href'); // need to use this in case you are using rewriting urls
+			if ($$.is('img') || $$.is('input')) { // hack image tags present in dom
+				if ($$.attr('src').match(/.*\.png$/i)) { // make sure it is png image
+					// use source tag value if set 
+					var source = (base &amp;&amp; $$.attr('src').substring(0,1)!='/') ? base + $$.attr('src') : $$.attr('src');
+					// apply filter
+					$$.css({filter:hack.filter(source), width:$$.width(), height:$$.height()})
+					  .attr({src:hack.pixel})
+					  .positionFix();
+				}
+			} else { // hack png css properties present inside css
+				var image = $$.css('backgroundImage');
+				if (image.match(/^url\([&quot;']?(.*\.png)[&quot;']?\)$/i)) {
+					image = RegExp.$1;
+					$$.css({backgroundImage:'none', filter:hack.filter(image)})
+					  .positionFix();
+				}
+			}
+		});
+	} : function() { return this; };
+	/**
+	 * Removes any png hack that may have been applied previously
+	 *
+	 * $('img[@src$=.png]').pngunfix();
+	 * @desc revert hack on all images with png extensions
+	 *
+	 * $('#panel, img[@src$=.png]').iepnghack();
+	 * @desc revert hack on element #panel and all images with png extensions
+	 *
+	 * @name pngunfix
+	 * @type jQuery
+	 * @cat Plugins/iepnghack
+	 */
+	$.fn.pngunfix = hack.ltie7 ? function() {
+    	return this.each(function() {
+			var $$ = $(this);
+			var src = $$.css('filter');
+			if (src.match(/src=[&quot;']?(.*\.png)[&quot;']?/i)) { // get img source from filter
+				src = RegExp.$1;
+				if ($$.is('img') || $$.is('input')) {
+					$$.attr({src:src}).css({filter:''});
+				} else {
+					$$.css({filter:'', background:'url('+src+')'});
+				}
+			}
+		});
+	} : function() { return this; };
+	/**
+	 * positions selected item relatively
+	 */
+	$.fn.positionFix = function() {
+		return this.each(function() {
+			var $$ = $(this);
+			var position = $$.css('position');
+			if (position != 'absolute' &amp;&amp; position != 'relative') {
+				$$.css({position:'relative'});
+			}
+		});
+	};
+
+})(jQuery);</diff>
      <filename>root/static/js/jquery/iepnghack.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,446 +1,446 @@
-/**
- * jQuery lightBox plugin
- * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
- * and adapted to me for use like a plugin from jQuery.
- * @name jquery-lightbox-0.4.js
- * @author Leandro Vieira Pinho - http://leandrovieira.com
- * @version 0.4
- * @date November 17, 2007
- * @category jQuery plugin
- * @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com)
- * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
- * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
- */
-
-// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias
-(function($) {
-	/**
-	 * $ is an alias to jQuery object
-	 *
-	 */
-	$.fn.lightBox = function(settings) {
-		// Settings to configure the jQuery lightBox plugin how you like
-		settings = jQuery.extend({
-			// Configuration related to overlay
-			overlayBgColor: 		'#000',		// (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color.
-			overlayOpacity:			0.8,		// (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9
-			// Configuration related to images
-			imageLoading:			'images/lightbox-ico-loading.gif',		// (string) Path and the name of the loading icon
-			imageBtnPrev:			'images/lightbox-btn-prev.gif',			// (string) Path and the name of the prev button image
-			imageBtnNext:			'images/lightbox-btn-next.gif',			// (string) Path and the name of the next button image
-			imageBtnClose:			'images/lightbox-btn-close.gif',		// (string) Path and the name of the close btn
-			imageBlank:				'images/lightbox-blank.gif',			// (string) Path and the name of a blank image (one pixel)
-			// Configuration related to container image box
-			containerBorderSize:	10,			// (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value
-			containerResizeSpeed:	400,		// (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default.
-			// Configuration related to texts in caption. For example: Image 2 of 8. You can alter either &quot;Image&quot; and &quot;of&quot; texts.
-			txtImage:				'Image',	// (string) Specify text &quot;Image&quot;
-			txtOf:					'of',		// (string) Specify text &quot;of&quot;
-			// Configuration related to keyboard navigation
-			keyToClose:				'c',		// (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to.
-			keyToPrev:				'p',		// (string) (p = previous) Letter to show the previous image
-			keyToNext:				'n',		// (string) (n = next) Letter to show the next image.
-			// Don&#180;t alter these variables in any way
-			imageArray:				[],
-			activeImage:			0
-		},settings);
-		// Caching the jQuery object with all elements matched
-		var jQueryMatchedObj = this; // This, in this context, refer to jQuery object
-		/**
-		 * Initializing the plugin calling the start function
-		 *
-		 * @return boolean false
-		 */
-		function _initialize() {
-			_start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked
-			return false; // Avoid the browser following the link
-		}
-		/**
-		 * Start the jQuery lightBox plugin
-		 *
-		 * @param object objClicked The object (link) whick the user have clicked
-		 * @param object jQueryMatchedObj The jQuery object with all elements matched
-		 */
-		function _start(objClicked,jQueryMatchedObj) {
-			// Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
-			$('embed, object, select').css({ 'visibility' : 'hidden' });
-			// Call the function to create the markup structure; style some elements; assign events in some elements.
-			_set_interface();
-			// Unset total images in imageArray
-			settings.imageArray.length = 0;
-			// Unset image active information
-			settings.activeImage = 0;
-			// We have an image set? Or just an image? Let&#180;s see it.
-			if ( jQueryMatchedObj.length == 1 ) {
-				settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));
-			} else {
-				// Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references		
-				for ( var i = 0; i &lt; jQueryMatchedObj.length; i++ ) {
-					settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));
-				}
-			}
-			while ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href') ) {
-				settings.activeImage++;
-			}
-			// Call the function that prepares image exibition
-			_set_image_to_view();
-		}
-		/**
-		 * Create the jQuery lightBox plugin interface
-		 *
-		 * The HTML markup will be like that:
-			&lt;div id=&quot;jquery-overlay&quot;&gt;&lt;/div&gt;
-			&lt;div id=&quot;jquery-lightbox&quot;&gt;
-				&lt;div id=&quot;lightbox-container-image-box&quot;&gt;
-					&lt;div id=&quot;lightbox-container-image&quot;&gt;
-						&lt;img src=&quot;../fotos/XX.jpg&quot; id=&quot;lightbox-image&quot;&gt;
-						&lt;div id=&quot;lightbox-nav&quot;&gt;
-							&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnPrev&quot;&gt;&lt;/a&gt;
-							&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnNext&quot;&gt;&lt;/a&gt;
-						&lt;/div&gt;
-						&lt;div id=&quot;lightbox-loading&quot;&gt;
-							&lt;a href=&quot;#&quot; id=&quot;lightbox-loading-link&quot;&gt;
-								&lt;img src=&quot;../images/lightbox-ico-loading.gif&quot;&gt;
-							&lt;/a&gt;
-						&lt;/div&gt;
-					&lt;/div&gt;
-				&lt;/div&gt;
-				&lt;div id=&quot;lightbox-container-image-data-box&quot;&gt;
-					&lt;div id=&quot;lightbox-container-image-data&quot;&gt;
-						&lt;div id=&quot;lightbox-image-details&quot;&gt;
-							&lt;span id=&quot;lightbox-image-details-caption&quot;&gt;&lt;/span&gt;
-							&lt;span id=&quot;lightbox-image-details-currentNumber&quot;&gt;&lt;/span&gt;
-						&lt;/div&gt;
-						&lt;div id=&quot;lightbox-secNav&quot;&gt;
-							&lt;a href=&quot;#&quot; id=&quot;lightbox-secNav-btnClose&quot;&gt;
-								&lt;img src=&quot;../images/lightbox-btn-close.gif&quot;&gt;
-							&lt;/a&gt;
-						&lt;/div&gt;
-					&lt;/div&gt;
-				&lt;/div&gt;
-			&lt;/div&gt;
-		 *
-		 */
-		function _set_interface() {
-			// Apply the HTML markup into body tag
-			$('body').append('&lt;div id=&quot;jquery-overlay&quot;&gt;&lt;/div&gt;&lt;div id=&quot;jquery-lightbox&quot;&gt;&lt;div id=&quot;lightbox-container-image-box&quot;&gt;&lt;div id=&quot;lightbox-container-image&quot;&gt;&lt;img id=&quot;lightbox-image&quot;&gt;&lt;div style=&quot;&quot; id=&quot;lightbox-nav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnPrev&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnNext&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-loading&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-loading-link&quot;&gt;&lt;img src=&quot;' + settings.imageLoading + '&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-container-image-data-box&quot;&gt;&lt;div id=&quot;lightbox-container-image-data&quot;&gt;&lt;div id=&quot;lightbox-image-details&quot;&gt;&lt;span id=&quot;lightbox-image-details-caption&quot;&gt;&lt;/span&gt;&lt;span id=&quot;lightbox-image-details-currentNumber&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-secNav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-secNav-btnClose&quot;&gt;&lt;img src=&quot;' + settings.imageBtnClose + '&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;');	
-			// Get page sizes
-			var arrPageSizes = ___getPageSize();
-			// Style overlay and show it
-			$('#jquery-overlay').css({
-				backgroundColor:	settings.overlayBgColor,
-				opacity:			settings.overlayOpacity,
-				width:				arrPageSizes[0],
-				height:				arrPageSizes[1]
-			}).fadeIn();
-			// Get page scroll
-			var arrPageScroll = ___getPageScroll();
-			// Calculate top and left offset for the jquery-lightbox div object and show it
-			$('#jquery-lightbox').css({
-				top:	arrPageScroll[1] + (arrPageSizes[3] / 10),
-				left:	arrPageScroll[0]
-			}).show();
-			// Assigning click events in elements to close overlay
-			$('#jquery-overlay,#jquery-lightbox').click(function() {
-				_finish();									
-			});
-			// Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects
-			$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() {
-				_finish();
-				return false;
-			});
-			// If window was resized, calculate the new overlay dimensions
-			$(window).resize(function() {
-				// Get page sizes
-				var arrPageSizes = ___getPageSize();
-				// Style overlay and show it
-				$('#jquery-overlay').css({
-					width:		arrPageSizes[0],
-					height:		arrPageSizes[1]
-				});
-				// Get page scroll
-				var arrPageScroll = ___getPageScroll();
-				// Calculate top and left offset for the jquery-lightbox div object and show it
-				$('#jquery-lightbox').css({
-					top:	arrPageScroll[1] + (arrPageSizes[3] / 10),
-					left:	arrPageScroll[0]
-				});
-			});
-		}
-		/**
-		 * Prepares image exibition; doing a image&#180;s preloader to calculate it&#180;s size
-		 *
-		 */
-		function _set_image_to_view() { // show the loading
-			// Show the loading
-			$('#lightbox-loading').show();
-			// Hide some elements
-			$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
-			// Image preload process
-			var objImagePreloader = new Image();
-			objImagePreloader.onload = function() {
-				$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);
-				// Perfomance an effect in the image container resizing it
-				_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);
-				//	clear onLoad, IE behaves irratically with animated gifs otherwise
-				objImagePreloader.onload=function(){};
-			}
-			objImagePreloader.src = settings.imageArray[settings.activeImage][0];
-		};
-		/**
-		 * Perfomance an effect in the image container resizing it
-		 *
-		 * @param integer intImageWidth The image&#180;s width that will be showed
-		 * @param integer intImageHeight The image&#180;s height that will be showed
-		 */
-		function _resize_container_image_box(intImageWidth,intImageHeight) {
-			// Get current width and height
-			var intCurrentWidth = $('#lightbox-container-image-box').width();
-			var intCurrentHeight = $('#lightbox-container-image-box').height();
-			// Get the width and height of the selected image plus the padding
-			var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image&#180;s width and the left and right padding value
-			var intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image&#180;s height and the left and right padding value
-			// Diferences
-			var intDiffW = intCurrentWidth - intWidth;
-			var intDiffH = intCurrentHeight - intHeight;
-			// Perfomance the effect
-			$('#lightbox-container-image-box').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); });
-			if ( ( intDiffW == 0 ) &amp;&amp; ( intDiffH == 0 ) ) {
-				if ( $.browser.msie ) {
-					___pause(250);
-				} else {
-					___pause(100);	
-				}
-			}
-			$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: intImageHeight + (settings.containerBorderSize * 2) }); 
-			$('#lightbox-container-image-data-box').css({ width: intImageWidth });
-		};
-		/**
-		 * Show the prepared image
-		 *
-		 */
-		function _show_image() {
-			$('#lightbox-loading').hide();
-			$('#lightbox-image').fadeIn(function() {
-				_show_image_data();
-				_set_navigation();
-			});
-			_preload_neighbor_images();
-		};
-		/**
-		 * Show the image information
-		 *
-		 */
-		function _show_image_data() {
-			$('#lightbox-container-image-data-box').slideDown('fast');
-			$('#lightbox-image-details-caption').hide();
-			if ( settings.imageArray[settings.activeImage][1] ) {
-				$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();
-			}
-			// If we have a image set, display 'Image X of X'
-			if ( settings.imageArray.length &gt; 1 ) {
-				$('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + ( settings.activeImage + 1 ) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show();
-			}		
-		}
-		/**
-		 * Display the button navigations
-		 *
-		 */
-		function _set_navigation() {
-			$('#lightbox-nav').show();
-
-			// Instead to define this configuration in CSS file, we define here. And it&#180;s need to IE. Just.
-			$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
-			
-			// Show the prev button, if not the first image in set
-			if ( settings.activeImage != 0 ) {
-				// Show the images button for Next buttons
-				$('#lightbox-nav-btnPrev').unbind().hover(function() {
-					$(this).css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' });
-				},function() {
-					$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
-				}).show().bind('click',function() {
-					settings.activeImage = settings.activeImage - 1;
-					_set_image_to_view();
-					return false;
-				});
-			}
-			
-			// Show the next button, if not the last image in set
-			if ( settings.activeImage != ( settings.imageArray.length -1 ) ) {
-				// Show the images button for Next buttons
-				$('#lightbox-nav-btnNext').unbind().hover(function() {
-					$(this).css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' });
-				},function() {
-					$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
-				}).show().bind('click',function() {
-					settings.activeImage = settings.activeImage + 1;
-					_set_image_to_view();
-					return false;
-				});
-			}
-			// Enable keyboard navigation
-			_enable_keyboard_navigation();
-		}
-		/**
-		 * Enable a support to keyboard navigation
-		 *
-		 */
-		function _enable_keyboard_navigation() {
-			$(document).keydown(function(objEvent) {
-				_keyboard_action(objEvent);
-			});
-		}
-		/**
-		 * Disable the support to keyboard navigation
-		 *
-		 */
-		function _disable_keyboard_navigation() {
-			$(document).unbind();
-		}
-		/**
-		 * Perform the keyboard actions
-		 *
-		 */
-		function _keyboard_action(objEvent) {
-			// To ie
-			if ( objEvent == null ) {
-				keycode = event.keyCode;
-				escapeKey = 27;
-			// To Mozilla
-			} else {
-				keycode = objEvent.keyCode;
-				escapeKey = objEvent.DOM_VK_ESCAPE;
-			}
-			// Get the key in lower case form
-			key = String.fromCharCode(keycode).toLowerCase();
-			// Verify the keys to close the ligthBox
-			if ( ( key == settings.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) {
-				_finish();
-			}
-			// Verify the key to show the previous image
-			if ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) {
-				// If we&#180;re not showing the first image, call the previous
-				if ( settings.activeImage != 0 ) {
-					settings.activeImage = settings.activeImage - 1;
-					_set_image_to_view();
-					_disable_keyboard_navigation();
-				}
-			}
-			// Verify the key to show the next image
-			if ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) {
-				// If we&#180;re not showing the last image, call the next
-				if ( settings.activeImage != ( settings.imageArray.length - 1 ) ) {
-					settings.activeImage = settings.activeImage + 1;
-					_set_image_to_view();
-					_disable_keyboard_navigation();
-				}
-			}
-		}
-		/**
-		 * Preload prev and next images being showed
-		 *
-		 */
-		function _preload_neighbor_images() {
-			if ( (settings.imageArray.length -1) &gt; settings.activeImage ) {
-				objNext = new Image();
-				objNext.src = settings.imageArray[settings.activeImage + 1][0];
-			}
-			if ( settings.activeImage &gt; 0 ) {
-				objPrev = new Image();
-				objPrev.src = settings.imageArray[settings.activeImage -1][0];
-			}
-		}
-		/**
-		 * Remove jQuery lightBox plugin HTML markup
-		 *
-		 */
-		function _finish() {
-			$('#jquery-lightbox').remove();
-			$('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); });
-			// Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
-			$('embed, object, select').css({ 'visibility' : 'visible' });
-		}
-		/**
-		 / THIRD FUNCTION
-		 * getPageSize() by quirksmode.com
-		 *
-		 * @return Array Return an array with page width, height and window width, height
-		 */
-		function ___getPageSize() {
-			var xScroll, yScroll;
-			if (window.innerHeight &amp;&amp; window.scrollMaxY) {	
-				xScroll = window.innerWidth + window.scrollMaxX;
-				yScroll = window.innerHeight + window.scrollMaxY;
-			} else if (document.body.scrollHeight &gt; document.body.offsetHeight){ // all but Explorer Mac
-				xScroll = document.body.scrollWidth;
-				yScroll = document.body.scrollHeight;
-			} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
-				xScroll = document.body.offsetWidth;
-				yScroll = document.body.offsetHeight;
-			}
-			var windowWidth, windowHeight;
-			if (self.innerHeight) {	// all except Explorer
-				if(document.documentElement.clientWidth){
-					windowWidth = document.documentElement.clientWidth; 
-				} else {
-					windowWidth = self.innerWidth;
-				}
-				windowHeight = self.innerHeight;
-			} else if (document.documentElement &amp;&amp; document.documentElement.clientHeight) { // Explorer 6 Strict Mode
-				windowWidth = document.documentElement.clientWidth;
-				windowHeight = document.documentElement.clientHeight;
-			} else if (document.body) { // other Explorers
-				windowWidth = document.body.clientWidth;
-				windowHeight = document.body.clientHeight;
-			}	
-			// for small pages with total height less then height of the viewport
-			if(yScroll &lt; windowHeight){
-				pageHeight = windowHeight;
-			} else { 
-				pageHeight = yScroll;
-			}
-			// for small pages with total width less then width of the viewport
-			if(xScroll &lt; windowWidth){	
-				pageWidth = xScroll;		
-			} else {
-				pageWidth = windowWidth;
-			}
-			arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
-			return arrayPageSize;
-		};
-		/**
-		 / THIRD FUNCTION
-		 * getPageScroll() by quirksmode.com
-		 *
-		 * @return Array Return an array with x,y page scroll values.
-		 */
-		function ___getPageScroll() {
-			var xScroll, yScroll;
-			if (self.pageYOffset) {
-				yScroll = self.pageYOffset;
-				xScroll = self.pageXOffset;
-			} else if (document.documentElement &amp;&amp; document.documentElement.scrollTop) {	 // Explorer 6 Strict
-				yScroll = document.documentElement.scrollTop;
-				xScroll = document.documentElement.scrollLeft;
-			} else if (document.body) {// all other Explorers
-				yScroll = document.body.scrollTop;
-				xScroll = document.body.scrollLeft;	
-			}
-			arrayPageScroll = new Array(xScroll,yScroll) 
-			return arrayPageScroll;
-		};
-		 /**
-		  * Stop the code execution from a escified time in milisecond
-		  *
-		  */
-		 function ___pause(ms) {
-			var date = new Date(); 
-			curDate = null;
-			do { var curDate = new Date(); }
-			while ( curDate - date &lt; ms);
-		 };
-		// Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
-		return this.unbind('click').click(_initialize);
-	};
+/**
+ * jQuery lightBox plugin
+ * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
+ * and adapted to me for use like a plugin from jQuery.
+ * @name jquery-lightbox-0.4.js
+ * @author Leandro Vieira Pinho - http://leandrovieira.com
+ * @version 0.4
+ * @date November 17, 2007
+ * @category jQuery plugin
+ * @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com)
+ * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
+ * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
+ */
+
+// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias
+(function($) {
+	/**
+	 * $ is an alias to jQuery object
+	 *
+	 */
+	$.fn.lightBox = function(settings) {
+		// Settings to configure the jQuery lightBox plugin how you like
+		settings = jQuery.extend({
+			// Configuration related to overlay
+			overlayBgColor: 		'#000',		// (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color.
+			overlayOpacity:			0.8,		// (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9
+			// Configuration related to images
+			imageLoading:			'images/lightbox-ico-loading.gif',		// (string) Path and the name of the loading icon
+			imageBtnPrev:			'images/lightbox-btn-prev.gif',			// (string) Path and the name of the prev button image
+			imageBtnNext:			'images/lightbox-btn-next.gif',			// (string) Path and the name of the next button image
+			imageBtnClose:			'images/lightbox-btn-close.gif',		// (string) Path and the name of the close btn
+			imageBlank:				'images/lightbox-blank.gif',			// (string) Path and the name of a blank image (one pixel)
+			// Configuration related to container image box
+			containerBorderSize:	10,			// (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value
+			containerResizeSpeed:	400,		// (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default.
+			// Configuration related to texts in caption. For example: Image 2 of 8. You can alter either &quot;Image&quot; and &quot;of&quot; texts.
+			txtImage:				'Image',	// (string) Specify text &quot;Image&quot;
+			txtOf:					'of',		// (string) Specify text &quot;of&quot;
+			// Configuration related to keyboard navigation
+			keyToClose:				'c',		// (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to.
+			keyToPrev:				'p',		// (string) (p = previous) Letter to show the previous image
+			keyToNext:				'n',		// (string) (n = next) Letter to show the next image.
+			// Don&#180;t alter these variables in any way
+			imageArray:				[],
+			activeImage:			0
+		},settings);
+		// Caching the jQuery object with all elements matched
+		var jQueryMatchedObj = this; // This, in this context, refer to jQuery object
+		/**
+		 * Initializing the plugin calling the start function
+		 *
+		 * @return boolean false
+		 */
+		function _initialize() {
+			_start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked
+			return false; // Avoid the browser following the link
+		}
+		/**
+		 * Start the jQuery lightBox plugin
+		 *
+		 * @param object objClicked The object (link) whick the user have clicked
+		 * @param object jQueryMatchedObj The jQuery object with all elements matched
+		 */
+		function _start(objClicked,jQueryMatchedObj) {
+			// Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
+			$('embed, object, select').css({ 'visibility' : 'hidden' });
+			// Call the function to create the markup structure; style some elements; assign events in some elements.
+			_set_interface();
+			// Unset total images in imageArray
+			settings.imageArray.length = 0;
+			// Unset image active information
+			settings.activeImage = 0;
+			// We have an image set? Or just an image? Let&#180;s see it.
+			if ( jQueryMatchedObj.length == 1 ) {
+				settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));
+			} else {
+				// Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references		
+				for ( var i = 0; i &lt; jQueryMatchedObj.length; i++ ) {
+					settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));
+				}
+			}
+			while ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href') ) {
+				settings.activeImage++;
+			}
+			// Call the function that prepares image exibition
+			_set_image_to_view();
+		}
+		/**
+		 * Create the jQuery lightBox plugin interface
+		 *
+		 * The HTML markup will be like that:
+			&lt;div id=&quot;jquery-overlay&quot;&gt;&lt;/div&gt;
+			&lt;div id=&quot;jquery-lightbox&quot;&gt;
+				&lt;div id=&quot;lightbox-container-image-box&quot;&gt;
+					&lt;div id=&quot;lightbox-container-image&quot;&gt;
+						&lt;img src=&quot;../fotos/XX.jpg&quot; id=&quot;lightbox-image&quot;&gt;
+						&lt;div id=&quot;lightbox-nav&quot;&gt;
+							&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnPrev&quot;&gt;&lt;/a&gt;
+							&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnNext&quot;&gt;&lt;/a&gt;
+						&lt;/div&gt;
+						&lt;div id=&quot;lightbox-loading&quot;&gt;
+							&lt;a href=&quot;#&quot; id=&quot;lightbox-loading-link&quot;&gt;
+								&lt;img src=&quot;../images/lightbox-ico-loading.gif&quot;&gt;
+							&lt;/a&gt;
+						&lt;/div&gt;
+					&lt;/div&gt;
+				&lt;/div&gt;
+				&lt;div id=&quot;lightbox-container-image-data-box&quot;&gt;
+					&lt;div id=&quot;lightbox-container-image-data&quot;&gt;
+						&lt;div id=&quot;lightbox-image-details&quot;&gt;
+							&lt;span id=&quot;lightbox-image-details-caption&quot;&gt;&lt;/span&gt;
+							&lt;span id=&quot;lightbox-image-details-currentNumber&quot;&gt;&lt;/span&gt;
+						&lt;/div&gt;
+						&lt;div id=&quot;lightbox-secNav&quot;&gt;
+							&lt;a href=&quot;#&quot; id=&quot;lightbox-secNav-btnClose&quot;&gt;
+								&lt;img src=&quot;../images/lightbox-btn-close.gif&quot;&gt;
+							&lt;/a&gt;
+						&lt;/div&gt;
+					&lt;/div&gt;
+				&lt;/div&gt;
+			&lt;/div&gt;
+		 *
+		 */
+		function _set_interface() {
+			// Apply the HTML markup into body tag
+			$('body').append('&lt;div id=&quot;jquery-overlay&quot;&gt;&lt;/div&gt;&lt;div id=&quot;jquery-lightbox&quot;&gt;&lt;div id=&quot;lightbox-container-image-box&quot;&gt;&lt;div id=&quot;lightbox-container-image&quot;&gt;&lt;img id=&quot;lightbox-image&quot;&gt;&lt;div style=&quot;&quot; id=&quot;lightbox-nav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnPrev&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnNext&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-loading&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-loading-link&quot;&gt;&lt;img src=&quot;' + settings.imageLoading + '&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-container-image-data-box&quot;&gt;&lt;div id=&quot;lightbox-container-image-data&quot;&gt;&lt;div id=&quot;lightbox-image-details&quot;&gt;&lt;span id=&quot;lightbox-image-details-caption&quot;&gt;&lt;/span&gt;&lt;span id=&quot;lightbox-image-details-currentNumber&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-secNav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-secNav-btnClose&quot;&gt;&lt;img src=&quot;' + settings.imageBtnClose + '&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;');	
+			// Get page sizes
+			var arrPageSizes = ___getPageSize();
+			// Style overlay and show it
+			$('#jquery-overlay').css({
+				backgroundColor:	settings.overlayBgColor,
+				opacity:			settings.overlayOpacity,
+				width:				arrPageSizes[0],
+				height:				arrPageSizes[1]
+			}).fadeIn();
+			// Get page scroll
+			var arrPageScroll = ___getPageScroll();
+			// Calculate top and left offset for the jquery-lightbox div object and show it
+			$('#jquery-lightbox').css({
+				top:	arrPageScroll[1] + (arrPageSizes[3] / 10),
+				left:	arrPageScroll[0]
+			}).show();
+			// Assigning click events in elements to close overlay
+			$('#jquery-overlay,#jquery-lightbox').click(function() {
+				_finish();									
+			});
+			// Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects
+			$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() {
+				_finish();
+				return false;
+			});
+			// If window was resized, calculate the new overlay dimensions
+			$(window).resize(function() {
+				// Get page sizes
+				var arrPageSizes = ___getPageSize();
+				// Style overlay and show it
+				$('#jquery-overlay').css({
+					width:		arrPageSizes[0],
+					height:		arrPageSizes[1]
+				});
+				// Get page scroll
+				var arrPageScroll = ___getPageScroll();
+				// Calculate top and left offset for the jquery-lightbox div object and show it
+				$('#jquery-lightbox').css({
+					top:	arrPageScroll[1] + (arrPageSizes[3] / 10),
+					left:	arrPageScroll[0]
+				});
+			});
+		}
+		/**
+		 * Prepares image exibition; doing a image&#180;s preloader to calculate it&#180;s size
+		 *
+		 */
+		function _set_image_to_view() { // show the loading
+			// Show the loading
+			$('#lightbox-loading').show();
+			// Hide some elements
+			$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
+			// Image preload process
+			var objImagePreloader = new Image();
+			objImagePreloader.onload = function() {
+				$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);
+				// Perfomance an effect in the image container resizing it
+				_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);
+				//	clear onLoad, IE behaves irratically with animated gifs otherwise
+				objImagePreloader.onload=function(){};
+			}
+			objImagePreloader.src = settings.imageArray[settings.activeImage][0];
+		};
+		/**
+		 * Perfomance an effect in the image container resizing it
+		 *
+		 * @param integer intImageWidth The image&#180;s width that will be showed
+		 * @param integer intImageHeight The image&#180;s height that will be showed
+		 */
+		function _resize_container_image_box(intImageWidth,intImageHeight) {
+			// Get current width and height
+			var intCurrentWidth = $('#lightbox-container-image-box').width();
+			var intCurrentHeight = $('#lightbox-container-image-box').height();
+			// Get the width and height of the selected image plus the padding
+			var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image&#180;s width and the left and right padding value
+			var intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image&#180;s height and the left and right padding value
+			// Diferences
+			var intDiffW = intCurrentWidth - intWidth;
+			var intDiffH = intCurrentHeight - intHeight;
+			// Perfomance the effect
+			$('#lightbox-container-image-box').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); });
+			if ( ( intDiffW == 0 ) &amp;&amp; ( intDiffH == 0 ) ) {
+				if ( $.browser.msie ) {
+					___pause(250);
+				} else {
+					___pause(100);	
+				}
+			}
+			$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: intImageHeight + (settings.containerBorderSize * 2) }); 
+			$('#lightbox-container-image-data-box').css({ width: intImageWidth });
+		};
+		/**
+		 * Show the prepared image
+		 *
+		 */
+		function _show_image() {
+			$('#lightbox-loading').hide();
+			$('#lightbox-image').fadeIn(function() {
+				_show_image_data();
+				_set_navigation();
+			});
+			_preload_neighbor_images();
+		};
+		/**
+		 * Show the image information
+		 *
+		 */
+		function _show_image_data() {
+			$('#lightbox-container-image-data-box').slideDown('fast');
+			$('#lightbox-image-details-caption').hide();
+			if ( settings.imageArray[settings.activeImage][1] ) {
+				$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();
+			}
+			// If we have a image set, display 'Image X of X'
+			if ( settings.imageArray.length &gt; 1 ) {
+				$('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + ( settings.activeImage + 1 ) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show();
+			}		
+		}
+		/**
+		 * Display the button navigations
+		 *
+		 */
+		function _set_navigation() {
+			$('#lightbox-nav').show();
+
+			// Instead to define this configuration in CSS file, we define here. And it&#180;s need to IE. Just.
+			$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
+			
+			// Show the prev button, if not the first image in set
+			if ( settings.activeImage != 0 ) {
+				// Show the images button for Next buttons
+				$('#lightbox-nav-btnPrev').unbind().hover(function() {
+					$(this).css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' });
+				},function() {
+					$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
+				}).show().bind('click',function() {
+					settings.activeImage = settings.activeImage - 1;
+					_set_image_to_view();
+					return false;
+				});
+			}
+			
+			// Show the next button, if not the last image in set
+			if ( settings.activeImage != ( settings.imageArray.length -1 ) ) {
+				// Show the images button for Next buttons
+				$('#lightbox-nav-btnNext').unbind().hover(function() {
+					$(this).css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' });
+				},function() {
+					$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
+				}).show().bind('click',function() {
+					settings.activeImage = settings.activeImage + 1;
+					_set_image_to_view();
+					return false;
+				});
+			}
+			// Enable keyboard navigation
+			_enable_keyboard_navigation();
+		}
+		/**
+		 * Enable a support to keyboard navigation
+		 *
+		 */
+		function _enable_keyboard_navigation() {
+			$(document).keydown(function(objEvent) {
+				_keyboard_action(objEvent);
+			});
+		}
+		/**
+		 * Disable the support to keyboard navigation
+		 *
+		 */
+		function _disable_keyboard_navigation() {
+			$(document).unbind();
+		}
+		/**
+		 * Perform the keyboard actions
+		 *
+		 */
+		function _keyboard_action(objEvent) {
+			// To ie
+			if ( objEvent == null ) {
+				keycode = event.keyCode;
+				escapeKey = 27;
+			// To Mozilla
+			} else {
+				keycode = objEvent.keyCode;
+				escapeKey = objEvent.DOM_VK_ESCAPE;
+			}
+			// Get the key in lower case form
+			key = String.fromCharCode(keycode).toLowerCase();
+			// Verify the keys to close the ligthBox
+			if ( ( key == settings.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) {
+				_finish();
+			}
+			// Verify the key to show the previous image
+			if ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) {
+				// If we&#180;re not showing the first image, call the previous
+				if ( settings.activeImage != 0 ) {
+					settings.activeImage = settings.activeImage - 1;
+					_set_image_to_view();
+					_disable_keyboard_navigation();
+				}
+			}
+			// Verify the key to show the next image
+			if ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) {
+				// If we&#180;re not showing the last image, call the next
+				if ( settings.activeImage != ( settings.imageArray.length - 1 ) ) {
+					settings.activeImage = settings.activeImage + 1;
+					_set_image_to_view();
+					_disable_keyboard_navigation();
+				}
+			}
+		}
+		/**
+		 * Preload prev and next images being showed
+		 *
+		 */
+		function _preload_neighbor_images() {
+			if ( (settings.imageArray.length -1) &gt; settings.activeImage ) {
+				objNext = new Image();
+				objNext.src = settings.imageArray[settings.activeImage + 1][0];
+			}
+			if ( settings.activeImage &gt; 0 ) {
+				objPrev = new Image();
+				objPrev.src = settings.imageArray[settings.activeImage -1][0];
+			}
+		}
+		/**
+		 * Remove jQuery lightBox plugin HTML markup
+		 *
+		 */
+		function _finish() {
+			$('#jquery-lightbox').remove();
+			$('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); });
+			// Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
+			$('embed, object, select').css({ 'visibility' : 'visible' });
+		}
+		/**
+		 / THIRD FUNCTION
+		 * getPageSize() by quirksmode.com
+		 *
+		 * @return Array Return an array with page width, height and window width, height
+		 */
+		function ___getPageSize() {
+			var xScroll, yScroll;
+			if (window.innerHeight &amp;&amp; window.scrollMaxY) {	
+				xScroll = window.innerWidth + window.scrollMaxX;
+				yScroll = window.innerHeight + window.scrollMaxY;
+			} else if (document.body.scrollHeight &gt; document.body.offsetHeight){ // all but Explorer Mac
+				xScroll = document.body.scrollWidth;
+				yScroll = document.body.scrollHeight;
+			} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
+				xScroll = document.body.offsetWidth;
+				yScroll = document.body.offsetHeight;
+			}
+			var windowWidth, windowHeight;
+			if (self.innerHeight) {	// all except Explorer
+				if(document.documentElement.clientWidth){
+					windowWidth = document.documentElement.clientWidth; 
+				} else {
+					windowWidth = self.innerWidth;
+				}
+				windowHeight = self.innerHeight;
+			} else if (document.documentElement &amp;&amp; document.documentElement.clientHeight) { // Explorer 6 Strict Mode
+				windowWidth = document.documentElement.clientWidth;
+				windowHeight = document.documentElement.clientHeight;
+			} else if (document.body) { // other Explorers
+				windowWidth = document.body.clientWidth;
+				windowHeight = document.body.clientHeight;
+			}	
+			// for small pages with total height less then height of the viewport
+			if(yScroll &lt; windowHeight){
+				pageHeight = windowHeight;
+			} else { 
+				pageHeight = yScroll;
+			}
+			// for small pages with total width less then width of the viewport
+			if(xScroll &lt; windowWidth){	
+				pageWidth = xScroll;		
+			} else {
+				pageWidth = windowWidth;
+			}
+			arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
+			return arrayPageSize;
+		};
+		/**
+		 / THIRD FUNCTION
+		 * getPageScroll() by quirksmode.com
+		 *
+		 * @return Array Return an array with x,y page scroll values.
+		 */
+		function ___getPageScroll() {
+			var xScroll, yScroll;
+			if (self.pageYOffset) {
+				yScroll = self.pageYOffset;
+				xScroll = self.pageXOffset;
+			} else if (document.documentElement &amp;&amp; document.documentElement.scrollTop) {	 // Explorer 6 Strict
+				yScroll = document.documentElement.scrollTop;
+				xScroll = document.documentElement.scrollLeft;
+			} else if (document.body) {// all other Explorers
+				yScroll = document.body.scrollTop;
+				xScroll = document.body.scrollLeft;	
+			}
+			arrayPageScroll = new Array(xScroll,yScroll) 
+			return arrayPageScroll;
+		};
+		 /**
+		  * Stop the code execution from a escified time in milisecond
+		  *
+		  */
+		 function ___pause(ms) {
+			var date = new Date(); 
+			curDate = null;
+			do { var curDate = new Date(); }
+			while ( curDate - date &lt; ms);
+		 };
+		// Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
+		return this.unbind('click').click(_initialize);
+	};
 })(jQuery); // Call and execute the function immediately passing the jQuery object
\ No newline at end of file</diff>
      <filename>root/static/js/jquery/jquery.lightbox-0.4.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,24 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Language: CN
- * Author: Fayland Lam &lt;fayland at gmail dot com&gt;
- */
-jQuery.extend(jQuery.validator.messages, {
-        required: &quot;&#24517;&#36984;&#23383;&#27573;&quot;,
-		remote: &quot;&#35531;&#20462;&#27491;&#35442;&#23383;&#27573;&quot;,
-		email: &quot;&#35531;&#36664;&#20837;&#27491;&#30906;&#26684;&#24335;&#30340;&#38651;&#23376;&#37109;&#20214;&quot;,
-		url: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#32178;&#22336;&quot;,
-		date: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#26085;&#26399;&quot;,
-		dateISO: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#26085;&#26399; (ISO).&quot;,
-		number: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#25976;&#23383;&quot;,
-		digits: &quot;&#21482;&#33021;&#36664;&#20837;&#25972;&#25976;&quot;,
-		creditcard: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#20449;&#29992;&#21345;&#34399;&quot;,
-		equalTo: &quot;&#35531;&#20877;&#27425;&#36664;&#20837;&#30456;&#21516;&#30340;&#20540;&quot;,
-		accept: &quot;&#35531;&#36664;&#20837;&#25793;&#26377;&#21512;&#27861;&#24460;&#32180;&#21517;&#30340;&#23383;&#31526;&#20018;&quot;,
-		maxLength: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#38263;&#24230;&#26368;&#22810;&#26159; {0} &#30340;&#23383;&#31526;&#20018;&quot;),
-		minLength: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#38263;&#24230;&#26368;&#23569;&#26159; {0} &#30340;&#23383;&#31526;&#20018;&quot;),
-		rangeLength: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#38263;&#24230;&#20171;&#20110; {0} &#21644; {1} &#20043;&#38291;&#30340;&#23383;&#31526;&#20018;&quot;),
-		rangeValue: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#20171;&#20110; {0} &#21644; {1} &#20043;&#38291;&#30340;&#20540;&quot;),
-		maxValue: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#26368;&#22823;&#28858; {0} &#30340;&#20540;&quot;),
-		minValue: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#26368;&#23567;&#28858; {0} &#30340;&#20540;&quot;)
+/*
+ * Translated default messages for the jQuery validation plugin.
+ * Language: CN
+ * Author: Fayland Lam &lt;fayland at gmail dot com&gt;
+ */
+jQuery.extend(jQuery.validator.messages, {
+        required: &quot;&#24517;&#36984;&#23383;&#27573;&quot;,
+		remote: &quot;&#35531;&#20462;&#27491;&#35442;&#23383;&#27573;&quot;,
+		email: &quot;&#35531;&#36664;&#20837;&#27491;&#30906;&#26684;&#24335;&#30340;&#38651;&#23376;&#37109;&#20214;&quot;,
+		url: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#32178;&#22336;&quot;,
+		date: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#26085;&#26399;&quot;,
+		dateISO: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#26085;&#26399; (ISO).&quot;,
+		number: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#25976;&#23383;&quot;,
+		digits: &quot;&#21482;&#33021;&#36664;&#20837;&#25972;&#25976;&quot;,
+		creditcard: &quot;&#35531;&#36664;&#20837;&#21512;&#27861;&#30340;&#20449;&#29992;&#21345;&#34399;&quot;,
+		equalTo: &quot;&#35531;&#20877;&#27425;&#36664;&#20837;&#30456;&#21516;&#30340;&#20540;&quot;,
+		accept: &quot;&#35531;&#36664;&#20837;&#25793;&#26377;&#21512;&#27861;&#24460;&#32180;&#21517;&#30340;&#23383;&#31526;&#20018;&quot;,
+		maxLength: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#38263;&#24230;&#26368;&#22810;&#26159; {0} &#30340;&#23383;&#31526;&#20018;&quot;),
+		minLength: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#38263;&#24230;&#26368;&#23569;&#26159; {0} &#30340;&#23383;&#31526;&#20018;&quot;),
+		rangeLength: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#38263;&#24230;&#20171;&#20110; {0} &#21644; {1} &#20043;&#38291;&#30340;&#23383;&#31526;&#20018;&quot;),
+		rangeValue: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#20171;&#20110; {0} &#21644; {1} &#20043;&#38291;&#30340;&#20540;&quot;),
+		maxValue: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#26368;&#22823;&#28858; {0} &#30340;&#20540;&quot;),
+		minValue: jQuery.format(&quot;&#35531;&#36664;&#20837;&#19968;&#20491;&#26368;&#23567;&#28858; {0} &#30340;&#20540;&quot;)
 });
\ No newline at end of file</diff>
      <filename>root/static/js/jquery/validate/messages_tw.js</filename>
    </modified>
    <modified>
      <diff>@@ -2,31 +2,31 @@
 function _start(objClicked,jQueryMatchedObj){$('embed, object, select').css({'visibility':'hidden'});_set_interface();settings.imageArray.length=0;settings.activeImage=0;if(jQueryMatchedObj.length==1){settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));}else{for(var i=0;i&lt;jQueryMatchedObj.length;i++){settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));}}
 while(settings.imageArray[settings.activeImage][0]!=objClicked.getAttribute('href')){settings.activeImage++;}
 _set_image_to_view();}
-function _set_interface(){$('body').append('&lt;div id=&quot;jquery-overlay&quot;&gt;&lt;/div&gt;&lt;div id=&quot;jquery-lightbox&quot;&gt;&lt;div id=&quot;lightbox-container-image-box&quot;&gt;&lt;div id=&quot;lightbox-container-image&quot;&gt;&lt;img id=&quot;lightbox-image&quot;&gt;&lt;div style=&quot;&quot; id=&quot;lightbox-nav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnPrev&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnNext&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-loading&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-loading-link&quot;&gt;&lt;img src=&quot;'+settings.imageLoading+'&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-container-image-data-box&quot;&gt;&lt;div id=&quot;lightbox-container-image-data&quot;&gt;&lt;div id=&quot;lightbox-image-details&quot;&gt;&lt;span id=&quot;lightbox-image-details-caption&quot;&gt;&lt;/span&gt;&lt;span id=&quot;lightbox-image-details-currentNumber&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-secNav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-secNav-btnClose&quot;&gt;&lt;img src=&quot;'+settings.imageBtnClose+'&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;');var arrPageSizes=___getPageSize();$('#jquery-overlay').css({backgroundColor:settings.overlayBgColor,opacity:settings.overlayOpacity,width:arrPageSizes[0],height:arrPageSizes[1]}).fadeIn();var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/ 10),
-				left:	arrPageScroll[0]
-			}).show();
-			// Assigning click events in elements to close overlay
-			$('#jquery-overlay,#jquery-lightbox').click(function() {
-				_finish();									
-			});
-			// Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects
-			$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() {
-				_finish();
-				return false;
-			});
-			// If window was resized, calculate the new overlay dimensions
-			$(window).resize(function() {
-				// Get page sizes
-				var arrPageSizes = ___getPageSize();
-				// Style overlay and show it
-				$('#jquery-overlay').css({
-					width:		arrPageSizes[0],
-					height:		arrPageSizes[1]
-				});
-				// Get page scroll
-				var arrPageScroll = ___getPageScroll();
-				// Calculate top and left offset for the jquery-lightbox div object and show it
-				$('#jquery-lightbox').css({
+function _set_interface(){$('body').append('&lt;div id=&quot;jquery-overlay&quot;&gt;&lt;/div&gt;&lt;div id=&quot;jquery-lightbox&quot;&gt;&lt;div id=&quot;lightbox-container-image-box&quot;&gt;&lt;div id=&quot;lightbox-container-image&quot;&gt;&lt;img id=&quot;lightbox-image&quot;&gt;&lt;div style=&quot;&quot; id=&quot;lightbox-nav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnPrev&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-nav-btnNext&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-loading&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-loading-link&quot;&gt;&lt;img src=&quot;'+settings.imageLoading+'&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-container-image-data-box&quot;&gt;&lt;div id=&quot;lightbox-container-image-data&quot;&gt;&lt;div id=&quot;lightbox-image-details&quot;&gt;&lt;span id=&quot;lightbox-image-details-caption&quot;&gt;&lt;/span&gt;&lt;span id=&quot;lightbox-image-details-currentNumber&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;lightbox-secNav&quot;&gt;&lt;a href=&quot;#&quot; id=&quot;lightbox-secNav-btnClose&quot;&gt;&lt;img src=&quot;'+settings.imageBtnClose+'&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;');var arrPageSizes=___getPageSize();$('#jquery-overlay').css({backgroundColor:settings.overlayBgColor,opacity:settings.overlayOpacity,width:arrPageSizes[0],height:arrPageSizes[1]}).fadeIn();var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/ 10),
+				left:	arrPageScroll[0]
+			}).show();
+			// Assigning click events in elements to close overlay
+			$('#jquery-overlay,#jquery-lightbox').click(function() {
+				_finish();									
+			});
+			// Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects
+			$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() {
+				_finish();
+				return false;
+			});
+			// If window was resized, calculate the new overlay dimensions
+			$(window).resize(function() {
+				// Get page sizes
+				var arrPageSizes = ___getPageSize();
+				// Style overlay and show it
+				$('#jquery-overlay').css({
+					width:		arrPageSizes[0],
+					height:		arrPageSizes[1]
+				});
+				// Get page scroll
+				var arrPageScroll = ___getPageScroll();
+				// Calculate top and left offset for the jquery-lightbox div object and show it
+				$('#jquery-lightbox').css({
 					top:	arrPageScroll[1] + (arrPageSizes[3] /10),left:arrPageScroll[0]});});}
 function _set_image_to_view(){$('#lightbox-loading').show();$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();var objImagePreloader=new Image();objImagePreloader.onload=function(){$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);objImagePreloader.onload=function(){};}
 objImagePreloader.src=settings.imageArray[settings.activeImage][0];};function _resize_container_image_box(intImageWidth,intImageHeight){var intCurrentWidth=$('#lightbox-container-image-box').width();var intCurrentHeight=$('#lightbox-container-image-box').height();var intWidth=(intImageWidth+(settings.containerBorderSize*2));var intHeight=(intImageHeight+(settings.containerBorderSize*2));var intDiffW=intCurrentWidth-intWidth;var intDiffH=intCurrentHeight-intHeight;$('#lightbox-container-image-box').animate({width:intWidth,height:intHeight},settings.containerResizeSpeed,function(){_show_image();});if((intDiffW==0)&amp;&amp;(intDiffH==0)){if($.browser.msie){___pause(250);}else{___pause(100);}}</diff>
      <filename>root/static/js/min/jquery/jquery.lightbox-0.4.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,203 +1,203 @@
-function emot(smilietext) {
-    var input_text = document.getElementById('text');
-	smilietext=' :'+smilietext+': ';
-	if (input_text.createTextRange &amp;&amp; input_text.caretPos) {
-		var caretPos = input_text.caretPos;
-		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? smilietext + ' ' : smilietext;
-		input_text.focus();
-	} else {
-		input_text.value += smilietext;
-		input_text.focus();
-	}
-}
-
-var helpstat = false;
-var basic = false;
-var stprompt = true;
-
-function thelp(swtch) {
-    if (swtch == 1){
-        basic = false;
-        stprompt = false;
-        helpstat = true;
-    } else if (swtch == 0) {
-        helpstat = false;
-        stprompt = false;
-        basic = true;
-    } else if (swtch == 2) {
-        helpstat = false;
-        basic = false;
-        stprompt = true;
-    }
-}
-
-function AddText(NewCode) {
-    var input_text = document.getElementById('text');
-    input_text.value += NewCode;
-}
-
-function showcolor(color) {
-    if (helpstat) {
-        alert(hpshowcolorhelppre+color+hpshowcolorhelpmid+color+hpshowcolorhelppost);
-    } else if (basic) {
-        AddText(&quot;[color=&quot; + color + &quot;][/color]&quot;);
-    } else {
-        txt = prompt(&quot;The color you picked is: &quot; + color, hpText);
-        if(txt != null) {
-            AddText(&quot;[color=&quot;+color+&quot;]&quot; + txt + &quot;[/color]&quot;);
-        }
-    }
-}
-
-function showsize(size) {
-    if (helpstat) {
-        alert(hpshowsizehelppre+size+hpshowsizehelpmid+size+hpshowsizehelppost);
-    } else if (basic) {
-        AddText(&quot;[size=&quot; + size + &quot;][/size]&quot;);
-    } else {
-        txt = prompt(hpSize + size, hpText);
-        if (txt != null) {
-            AddText(&quot;[size=&quot; + size + &quot;]&quot; + txt + &quot;[/size]&quot;);
-        }
-    }
-} 
-
-function showfont(font) {
-    if (helpstat) {
-        alert(&quot;&#23383;&#20307;&#26631;&#35760;\r\n\r\n&#32473;&#25991;&#23383;&#35774;&#32622;&#23383;&#20307;.\r\n\r\n&#29992;&#27861;: [font=&quot;+font+&quot;]&#25913;&#21464;&#25991;&#23383;&#23383;&#20307;&#20026;&quot;+font+&quot;[/font]&quot;);
-    } else if (basic) {
-        AddText(&quot;[font=&quot; + font + &quot;][/font]&quot;);
-    } else {
-        txt = prompt(hpFont + font, hpText);
-        if (txt != null) {
-            AddText(&quot;[font=&quot; + font + &quot;]&quot; + txt + &quot;[/font]&quot;);
-        }
-    }  
-}
-
-function bold() {
-    if (helpstat) {
-        alert(&quot;&#21152;&#31895;&#26631;&#35760;\r\n\r\n&#20351;&#25991;&#26412;&#21152;&#31895;.\r\n\r\n&#29992;&#27861;: [b]&#36825;&#26159;&#21152;&#31895;&#30340;&#25991;&#23383;[/b]&quot;);
-    } else if (basic) {
-        AddTxt=&quot;[b][/b]&quot;;AddText(AddTxt);
-    } else {
-        txt = prompt(&quot;&#25991;&#23383;&#23558;&#34987;&#21464;&#31895;.&quot;, hpText);
-        if (txt != null) {
-            AddText(&quot;[b]&quot; + txt + &quot;[/b]&quot;);
-        }
-    }
-}
-function italicize() {
-    if (helpstat) {
-        alert(&quot;&#26012;&#20307;&#26631;&#35760;\r\n\r\n&#20351;&#25991;&#26412;&#23383;&#20307;&#21464;&#20026;&#26012;&#20307;.\r\n\r\n&#29992;&#27861;: [i]&#36825;&#26159;&#26012;&#20307;&#23383;[/i]&quot;);
-    } else if (basic) {
-        AddText(&quot;[i][/i]&quot;);
-    } else {
-        txt=prompt(&quot;&#25991;&#23383;&#23558;&#21464;&#26012;&#20307;&quot;, hpText);
-        if (txt!=null) {
-            AddText(&quot;[i]&quot; + txt + &quot;[/i]&quot;);
-        }
-    }
-}
-
-function underline() {
-    if (helpstat) {
-        alert(&quot;&#19979;&#21010;&#32447;&#26631;&#35760;\r\n\r\n&#32473;&#25991;&#23383;&#21152;&#19979;&#21010;&#32447;.\r\n\r\n&#29992;&#27861;: [u]&#35201;&#21152;&#19979;&#21010;&#32447;&#30340;&#25991;&#23383;[/u]&quot;);
-    } else if (basic) {
-         AddText(&quot;[u][/u]&quot;);
-    } else {
-        txt=prompt(&quot;&#19979;&#21010;&#32447;&#25991;&#23383;.&quot;, hpText);
-        if (txt!=null) {
-            AddText(&quot;[u]&quot; + txt + &quot;[/u]&quot;);
-        }
-    }
-}
-
-function center() {
-    if (helpstat) {
-        alert(&quot;&#23545;&#40784;&#26631;&#35760;\r\n\r\n&#20351;&#29992;&#36825;&#20010;&#26631;&#35760;, &#21487;&#20197;&#20351;&#25991;&#26412;&#24038;&#23545;&#40784;&#12289;&#23621;&#20013;&#12289;&#21491;&#23545;&#40784;.\r\n\r\n&#29992;&#27861;: [align=center|left|right]&#35201;&#23545;&#40784;&#30340;&#25991;&#26412;[/align]&quot;);
-    } else if (basic) {
-         AddTxt=&quot;[align=center|left|right][/align]&quot;;AddText(AddTxt);
-    } else {
-        txt2=prompt(&quot;&#23545;&#40784;&#26679;&#24335;\r\n\r\n&#36755;&#20837; 'center' &#34920;&#31034;&#23621;&#20013;, 'left' &#34920;&#31034;&#24038;&#23545;&#40784;, 'right' &#34920;&#31034;&#21491;&#23545;&#40784;.&quot;,&quot;center&quot;);
-        while ((txt2!=&quot;&quot;) &amp;&amp; (txt2!=&quot;center&quot;) &amp;&amp; (txt2!=&quot;left&quot;) &amp;&amp; (txt2!=&quot;right&quot;) &amp;&amp; (txt2!=null)) {
-            txt2=prompt(&quot;&#38169;&#35823;!\r\n\r\n&#31867;&#22411;&#21482;&#33021;&#36755;&#20837; 'center' &#12289; 'left' &#25110;&#32773; 'right'.&quot;,&quot;&quot;);
-        }
-        txt=prompt(&quot;&#35201;&#23545;&#40784;&#30340;&#25991;&#26412;&quot;, hpText);
-        if (txt!=null) {
-            AddTxt=&quot;[align=&quot;+txt2+&quot;]&quot;+txt;AddText(AddTxt);AddTxt=&quot;[/align]&quot;;AddText(AddTxt);
-        }
-    }
-}
-
-function hyperlink() {
-    if (helpstat) {
-        alert(&quot;&#36229;&#32423;&#38142;&#25509;&#26631;&#35760;\r\n\r\n&#25554;&#20837;&#19968;&#20010;&#36229;&#32423;&#38142;&#25509;&#26631;&#35760;\r\n\r\n&#20351;&#29992;&#26041;&#27861;: [url]http://www.1313s.com[/url]\r\n\r\nUSE: [url=http://www.1313s.com]&#38142;&#25509;&#25991;&#23383;[/url]&quot;);
-    } else if (basic) {
-        AddText('[url][/url]');
-    } else {
-        txt2=prompt(&quot;&#38142;&#25509;&#25991;&#26412;&#26174;&#31034;.\r\n\r\n&#22914;&#26524;&#19981;&#24819;&#20351;&#29992;, &#21487;&#20197;&#20026;&#31354;, &#23558;&#21482;&#26174;&#31034;&#36229;&#32423;&#38142;&#25509;&#22320;&#22336;. &quot;,&quot;&quot;); 
-        if (txt2!=null) {
-            txt = prompt(&quot;&#36229;&#32423;&#38142;&#25509;.&quot;,&quot;http://&quot;);
-            if (txt!=null) {
-                if (txt2==&quot;&quot;) {
-                    AddText(&quot;[url]&quot; + txt + &quot;[/url]&quot;);
-                } else {
-                    AddText(&quot;[url=&quot; + txt + &quot;]&quot; + txt2 + &quot;[/url]&quot;);
-                }
-            }
-        }
-    }
-}
-
-function image() {
-    if (helpstat) {
-        alert(&quot;&#22270;&#29255;&#26631;&#35760;\r\n\r\n&#25554;&#20837;&#22270;&#29255;\r\n\r\n&#29992;&#27861;&#65306; [img]http:\/\/www.1313s.com\/baby.jpg[/img]&quot;);
-    } else if (basic) {
-        AddText(&quot;[img][/img]&quot;);
-    } else {
-        txt = prompt(&quot;&#22270;&#29255;&#30340; URL&quot;,&quot;http://&quot;);
-        if(txt != null) {
-            AddText(&quot;[img]&quot; + txt + &quot;[/img]&quot;);
-        }
-    }
-}
-
-function quote() {
-    if (helpstat) {
-        alert(&quot;&#24341;&#29992;&#26631;&#35760;\r\n\r\n&#24341;&#29992;&#19968;&#20123;&#25991;&#23383;.\r\n\r\n&#29992;&#27861;: [quote]&#24341;&#29992;&#20869;&#23481;[/quote]&quot;);
-    } else if (basic) {
-        AddText(&quot;[quote][/quote]&quot;);
-    } else {
-        txt=prompt(&quot;&#34987;&#24341;&#29992;&#30340;&#25991;&#23383;&quot;, hpText);
-        if(txt!=null) {
-            AddText(&quot;[quote]&quot; + txt + &quot;[/quote]&quot;);
-        }
-    }
-}
-
-function flash() {
-    if (helpstat){
-        alert(&quot;Flash &#21160;&#30011;\r\n\r\n&#25554;&#20837; Flash &#21160;&#30011;.\r\n\r\n&#29992;&#27861;: [flash]Flash &#25991;&#20214;&#30340;&#22320;&#22336;[/flash]&quot;);
-    } else if (basic) {
-        AddText(&quot;[swf][/swf]&quot;);
-    } else {
-        txt=prompt(&quot;Flash &#25991;&#20214;&#30340;&#22320;&#22336;&quot;,&quot;http://&quot;);
-        if (txt!=null) {
-            AddText(&quot;[flash]&quot; + txt + &quot;[/flash]&quot;);
-        }
-    }  
-}
-
-function music() {
-    if (helpstat){
-        alert(&quot;&#22312;&#32447;&#38899;/&#35270;&#39057;&#25773;&#25918;\r\n\r\n&#25773;&#25918; URL &#22320;&#22336;\r\n\r\n&#29992;&#27861;&#65306; [muisc]http:\/\/www.CGIer.com\/demo.wmv[/muisc]&quot;);
-    } else if (basic) {
-        AddText(&quot;[muisc][/muisc]&quot;);
-    } else {
-        txt=prompt(&quot;&#22312;&#32447;&#38899;/&#35270;&#39057;&#25773;&#25918; (mms&#21450;http&#22343;&#21487;)&quot;, &quot;http://&quot;);
-        if(txt!=null) {
-            AddText(&quot;[muisc]&quot; + txt + &quot;[/muisc]&quot;);
-        }
-    }
+function emot(smilietext) {
+    var input_text = document.getElementById('text');
+	smilietext=' :'+smilietext+': ';
+	if (input_text.createTextRange &amp;&amp; input_text.caretPos) {
+		var caretPos = input_text.caretPos;
+		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? smilietext + ' ' : smilietext;
+		input_text.focus();
+	} else {
+		input_text.value += smilietext;
+		input_text.focus();
+	}
+}
+
+var helpstat = false;
+var basic = false;
+var stprompt = true;
+
+function thelp(swtch) {
+    if (swtch == 1){
+        basic = false;
+        stprompt = false;
+        helpstat = true;
+    } else if (swtch == 0) {
+        helpstat = false;
+        stprompt = false;
+        basic = true;
+    } else if (swtch == 2) {
+        helpstat = false;
+        basic = false;
+        stprompt = true;
+    }
+}
+
+function AddText(NewCode) {
+    var input_text = document.getElementById('text');
+    input_text.value += NewCode;
+}
+
+function showcolor(color) {
+    if (helpstat) {
+        alert(hpshowcolorhelppre+color+hpshowcolorhelpmid+color+hpshowcolorhelppost);
+    } else if (basic) {
+        AddText(&quot;[color=&quot; + color + &quot;][/color]&quot;);
+    } else {
+        txt = prompt(&quot;The color you picked is: &quot; + color, hpText);
+        if(txt != null) {
+            AddText(&quot;[color=&quot;+color+&quot;]&quot; + txt + &quot;[/color]&quot;);
+        }
+    }
+}
+
+function showsize(size) {
+    if (helpstat) {
+        alert(hpshowsizehelppre+size+hpshowsizehelpmid+size+hpshowsizehelppost);
+    } else if (basic) {
+        AddText(&quot;[size=&quot; + size + &quot;][/size]&quot;);
+    } else {
+        txt = prompt(hpSize + size, hpText);
+        if (txt != null) {
+            AddText(&quot;[size=&quot; + size + &quot;]&quot; + txt + &quot;[/size]&quot;);
+        }
+    }
+} 
+
+function showfont(font) {
+    if (helpstat) {
+        alert(&quot;&#23383;&#20307;&#26631;&#35760;\r\n\r\n&#32473;&#25991;&#23383;&#35774;&#32622;&#23383;&#20307;.\r\n\r\n&#29992;&#27861;: [font=&quot;+font+&quot;]&#25913;&#21464;&#25991;&#23383;&#23383;&#20307;&#20026;&quot;+font+&quot;[/font]&quot;);
+    } else if (basic) {
+        AddText(&quot;[font=&quot; + font + &quot;][/font]&quot;);
+    } else {
+        txt = prompt(hpFont + font, hpText);
+        if (txt != null) {
+            AddText(&quot;[font=&quot; + font + &quot;]&quot; + txt + &quot;[/font]&quot;);
+        }
+    }  
+}
+
+function bold() {
+    if (helpstat) {
+        alert(&quot;&#21152;&#31895;&#26631;&#35760;\r\n\r\n&#20351;&#25991;&#26412;&#21152;&#31895;.\r\n\r\n&#29992;&#27861;: [b]&#36825;&#26159;&#21152;&#31895;&#30340;&#25991;&#23383;[/b]&quot;);
+    } else if (basic) {
+        AddTxt=&quot;[b][/b]&quot;;AddText(AddTxt);
+    } else {
+        txt = prompt(&quot;&#25991;&#23383;&#23558;&#34987;&#21464;&#31895;.&quot;, hpText);
+        if (txt != null) {
+            AddText(&quot;[b]&quot; + txt + &quot;[/b]&quot;);
+        }
+    }
+}
+function italicize() {
+    if (helpstat) {
+        alert(&quot;&#26012;&#20307;&#26631;&#35760;\r\n\r\n&#20351;&#25991;&#26412;&#23383;&#20307;&#21464;&#20026;&#26012;&#20307;.\r\n\r\n&#29992;&#27861;: [i]&#36825;&#26159;&#26012;&#20307;&#23383;[/i]&quot;);
+    } else if (basic) {
+        AddText(&quot;[i][/i]&quot;);
+    } else {
+        txt=prompt(&quot;&#25991;&#23383;&#23558;&#21464;&#26012;&#20307;&quot;, hpText);
+        if (txt!=null) {
+            AddText(&quot;[i]&quot; + txt + &quot;[/i]&quot;);
+        }
+    }
+}
+
+function underline() {
+    if (helpstat) {
+        alert(&quot;&#19979;&#21010;&#32447;&#26631;&#35760;\r\n\r\n&#32473;&#25991;&#23383;&#21152;&#19979;&#21010;&#32447;.\r\n\r\n&#29992;&#27861;: [u]&#35201;&#21152;&#19979;&#21010;&#32447;&#30340;&#25991;&#23383;[/u]&quot;);
+    } else if (basic) {
+         AddText(&quot;[u][/u]&quot;);
+    } else {
+        txt=prompt(&quot;&#19979;&#21010;&#32447;&#25991;&#23383;.&quot;, hpText);
+        if (txt!=null) {
+            AddText(&quot;[u]&quot; + txt + &quot;[/u]&quot;);
+        }
+    }
+}
+
+function center() {
+    if (helpstat) {
+        alert(&quot;&#23545;&#40784;&#26631;&#35760;\r\n\r\n&#20351;&#29992;&#36825;&#20010;&#26631;&#35760;, &#21487;&#20197;&#20351;&#25991;&#26412;&#24038;&#23545;&#40784;&#12289;&#23621;&#20013;&#12289;&#21491;&#23545;&#40784;.\r\n\r\n&#29992;&#27861;: [align=center|left|right]&#35201;&#23545;&#40784;&#30340;&#25991;&#26412;[/align]&quot;);
+    } else if (basic) {
+         AddTxt=&quot;[align=center|left|right][/align]&quot;;AddText(AddTxt);
+    } else {
+        txt2=prompt(&quot;&#23545;&#40784;&#26679;&#24335;\r\n\r\n&#36755;&#20837; 'center' &#34920;&#31034;&#23621;&#20013;, 'left' &#34920;&#31034;&#24038;&#23545;&#40784;, 'right' &#34920;&#31034;&#21491;&#23545;&#40784;.&quot;,&quot;center&quot;);
+        while ((txt2!=&quot;&quot;) &amp;&amp; (txt2!=&quot;center&quot;) &amp;&amp; (txt2!=&quot;left&quot;) &amp;&amp; (txt2!=&quot;right&quot;) &amp;&amp; (txt2!=null)) {
+            txt2=prompt(&quot;&#38169;&#35823;!\r\n\r\n&#31867;&#22411;&#21482;&#33021;&#36755;&#20837; 'center' &#12289; 'left' &#25110;&#32773; 'right'.&quot;,&quot;&quot;);
+        }
+        txt=prompt(&quot;&#35201;&#23545;&#40784;&#30340;&#25991;&#26412;&quot;, hpText);
+        if (txt!=null) {
+            AddTxt=&quot;[align=&quot;+txt2+&quot;]&quot;+txt;AddText(AddTxt);AddTxt=&quot;[/align]&quot;;AddText(AddTxt);
+        }
+    }
+}
+
+function hyperlink() {
+    if (helpstat) {
+        alert(&quot;&#36229;&#32423;&#38142;&#25509;&#26631;&#35760;\r\n\r\n&#25554;&#20837;&#19968;&#20010;&#36229;&#32423;&#38142;&#25509;&#26631;&#35760;\r\n\r\n&#20351;&#29992;&#26041;&#27861;: [url]http://www.1313s.com[/url]\r\n\r\nUSE: [url=http://www.1313s.com]&#38142;&#25509;&#25991;&#23383;[/url]&quot;);
+    } else if (basic) {
+        AddText('[url][/url]');
+    } else {
+        txt2=prompt(&quot;&#38142;&#25509;&#25991;&#26412;&#26174;&#31034;.\r\n\r\n&#22914;&#26524;&#19981;&#24819;&#20351;&#29992;, &#21487;&#20197;&#20026;&#31354;, &#23558;&#21482;&#26174;&#31034;&#36229;&#32423;&#38142;&#25509;&#22320;&#22336;. &quot;,&quot;&quot;); 
+        if (txt2!=null) {
+            txt = prompt(&quot;&#36229;&#32423;&#38142;&#25509;.&quot;,&quot;http://&quot;);
+            if (txt!=null) {
+                if (txt2==&quot;&quot;) {
+                    AddText(&quot;[url]&quot; + txt + &quot;[/url]&quot;);
+                } else {
+                    AddText(&quot;[url=&quot; + txt + &quot;]&quot; + txt2 + &quot;[/url]&quot;);
+                }
+            }
+        }
+    }
+}
+
+function image() {
+    if (helpstat) {
+        alert(&quot;&#22270;&#29255;&#26631;&#35760;\r\n\r\n&#25554;&#20837;&#22270;&#29255;\r\n\r\n&#29992;&#27861;&#65306; [img]http:\/\/www.1313s.com\/baby.jpg[/img]&quot;);
+    } else if (basic) {
+        AddText(&quot;[img][/img]&quot;);
+    } else {
+        txt = prompt(&quot;&#22270;&#29255;&#30340; URL&quot;,&quot;http://&quot;);
+        if(txt != null) {
+            AddText(&quot;[img]&quot; + txt + &quot;[/img]&quot;);
+        }
+    }
+}
+
+function quote() {
+    if (helpstat) {
+        alert(&quot;&#24341;&#29992;&#26631;&#35760;\r\n\r\n&#24341;&#29992;&#19968;&#20123;&#25991;&#23383;.\r\n\r\n&#29992;&#27861;: [quote]&#24341;&#29992;&#20869;&#23481;[/quote]&quot;);
+    } else if (basic) {
+        AddText(&quot;[quote][/quote]&quot;);
+    } else {
+        txt=prompt(&quot;&#34987;&#24341;&#29992;&#30340;&#25991;&#23383;&quot;, hpText);
+        if(txt!=null) {
+            AddText(&quot;[quote]&quot; + txt + &quot;[/quote]&quot;);
+        }
+    }
+}
+
+function flash() {
+    if (helpstat){
+        alert(&quot;Flash &#21160;&#30011;\r\n\r\n&#25554;&#20837; Flash &#21160;&#30011;.\r\n\r\n&#29992;&#27861;: [flash]Flash &#25991;&#20214;&#30340;&#22320;&#22336;[/flash]&quot;);
+    } else if (basic) {
+        AddText(&quot;[swf][/swf]&quot;);
+    } else {
+        txt=prompt(&quot;Flash &#25991;&#20214;&#30340;&#22320;&#22336;&quot;,&quot;http://&quot;);
+        if (txt!=null) {
+            AddText(&quot;[flash]&quot; + txt + &quot;[/flash]&quot;);
+        }
+    }  
+}
+
+function music() {
+    if (helpstat){
+        alert(&quot;&#22312;&#32447;&#38899;/&#35270;&#39057;&#25773;&#25918;\r\n\r\n&#25773;&#25918; URL &#22320;&#22336;\r\n\r\n&#29992;&#27861;&#65306; [muisc]http:\/\/www.CGIer.com\/demo.wmv[/muisc]&quot;);
+    } else if (basic) {
+        AddText(&quot;[muisc][/muisc]&quot;);
+    } else {
+        txt=prompt(&quot;&#22312;&#32447;&#38899;/&#35270;&#39057;&#25773;&#25918; (mms&#21450;http&#22343;&#21487;)&quot;, &quot;http://&quot;);
+        if(txt!=null) {
+            AddText(&quot;[muisc]&quot; + txt + &quot;[/muisc]&quot;);
+        }
+    }
 }
\ No newline at end of file</diff>
      <filename>root/static/js/site/formatter/ubb.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
-hpshowcolorhelppre = &quot;&#39068;&#33394;&#26631;&#35760;\r\n\r\n&#35774;&#32622;&#25991;&#26412;&#39068;&#33394;.  &#20219;&#20309;&#39068;&#33394;&#21517;&#37117;&#21487;&#20197;&#34987;&#20351;&#29992;.\r\n\r\n&#29992;&#27861;: [color=&quot;;
-hpshowcolorhelpmid = &quot;]&#39068;&#33394;&#35201;&#25913;&#21464;&#20026;&quot;;
-hpshowcolorhelppost = &quot;&#30340;&#25991;&#23383;[/color]&quot;;
-
-hpshowsizehelppre = &quot;&#25991;&#23383;&#22823;&#23567;&#26631;&#35760;\r\n\r\n&#35774;&#32622;&#25991;&#23383;&#22823;&#23567;.\r\n\r\n&#21487;&#21464;&#33539;&#22260; 1 - 6.\r\n\r\n 1 &#20026;&#26368;&#23567; 6 &#20026;&#26368;&#22823;.\r\n\r\n&#29992;&#27861;: [size=&quot;;
-hpshowsizehelpmid = &quot;]&#36825;&#26159; &quot;;
-hpshowsizehelppost = &quot; &#25991;&#23383;[/size]&quot;;
-
-hpText = '&#25991;&#26412;';
-hpFont = '&#23383;&#20307;:';
+hpshowcolorhelppre = &quot;&#39068;&#33394;&#26631;&#35760;\r\n\r\n&#35774;&#32622;&#25991;&#26412;&#39068;&#33394;.  &#20219;&#20309;&#39068;&#33394;&#21517;&#37117;&#21487;&#20197;&#34987;&#20351;&#29992;.\r\n\r\n&#29992;&#27861;: [color=&quot;;
+hpshowcolorhelpmid = &quot;]&#39068;&#33394;&#35201;&#25913;&#21464;&#20026;&quot;;
+hpshowcolorhelppost = &quot;&#30340;&#25991;&#23383;[/color]&quot;;
+
+hpshowsizehelppre = &quot;&#25991;&#23383;&#22823;&#23567;&#26631;&#35760;\r\n\r\n&#35774;&#32622;&#25991;&#23383;&#22823;&#23567;.\r\n\r\n&#21487;&#21464;&#33539;&#22260; 1 - 6.\r\n\r\n 1 &#20026;&#26368;&#23567; 6 &#20026;&#26368;&#22823;.\r\n\r\n&#29992;&#27861;: [size=&quot;;
+hpshowsizehelpmid = &quot;]&#36825;&#26159; &quot;;
+hpshowsizehelppost = &quot; &#25991;&#23383;[/size]&quot;;
+
+hpText = '&#25991;&#26412;';
+hpFont = '&#23383;&#20307;:';
 hpSize = '&#22823;&#23567;:';
\ No newline at end of file</diff>
      <filename>root/static/js/site/formatter/ubbhelp-cn.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
-hpshowcolorhelppre = &quot;Color\r\n\r\nSet Text Color.\r\n\r\nUsage:[color=&quot;;
-hpshowcolorhelpmid = &quot;]Text Color changed to &quot;;
-hpshowcolorhelppost = &quot;[/color]&quot;;
-
-
-
-hpText = 'Text';
-hpFont = 'Font:';
+hpshowcolorhelppre = &quot;Color\r\n\r\nSet Text Color.\r\n\r\nUsage:[color=&quot;;
+hpshowcolorhelpmid = &quot;]Text Color changed to &quot;;
+hpshowcolorhelppost = &quot;[/color]&quot;;
+
+
+
+hpText = 'Text';
+hpFont = 'Font:';
 hpSize = 'Size:';
\ No newline at end of file</diff>
      <filename>root/static/js/site/formatter/ubbhelp-en.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
-hpshowcolorhelppre = &quot;&#38991;&#33394;&#27161;&#35352;\r\n\r\n&#35373;&#32622;&#25991;&#26412;&#38991;&#33394;.  &#20219;&#20309;&#38991;&#33394;&#21517;&#37117;&#21487;&#20197;&#34987;&#20351;&#29992;.\r\n\r\n&#29992;&#27861;: [color=&quot;;
-hpshowcolorhelpmid = &quot;]&#38991;&#33394;&#35201;&#25913;&#35722;&#28858;&quot;;
-hpshowcolorhelppost = &quot;&#30340;&#25991;&#23383;[/color]&quot;;
-
-hpshowsizehelppre = &quot;&#25991;&#23383;&#22823;&#23567;&#27161;&#35352;\r\n\r\n&#35373;&#32622;&#25991;&#23383;&#22823;&#23567;.\r\n\r\n&#21487;&#35722;&#31684;&#22285; 1 - 6.\r\n\r\n 1 &#28858;&#26368;&#23567; 6 &#28858;&#26368;&#22823;.\r\n\r\n&#29992;&#27861;: [size=&quot;;
-hpshowsizehelpmid = &quot;]&#36889;&#26159; &quot;;
-hpshowsizehelppost = &quot; &#25991;&#23383;[/size]&quot;;
-
-hpText = '&#25991;&#26412;';
-hpFont = '&#23383;&#39636;:';
+hpshowcolorhelppre = &quot;&#38991;&#33394;&#27161;&#35352;\r\n\r\n&#35373;&#32622;&#25991;&#26412;&#38991;&#33394;.  &#20219;&#20309;&#38991;&#33394;&#21517;&#37117;&#21487;&#20197;&#34987;&#20351;&#29992;.\r\n\r\n&#29992;&#27861;: [color=&quot;;
+hpshowcolorhelpmid = &quot;]&#38991;&#33394;&#35201;&#25913;&#35722;&#28858;&quot;;
+hpshowcolorhelppost = &quot;&#30340;&#25991;&#23383;[/color]&quot;;
+
+hpshowsizehelppre = &quot;&#25991;&#23383;&#22823;&#23567;&#27161;&#35352;\r\n\r\n&#35373;&#32622;&#25991;&#23383;&#22823;&#23567;.\r\n\r\n&#21487;&#35722;&#31684;&#22285; 1 - 6.\r\n\r\n 1 &#28858;&#26368;&#23567; 6 &#28858;&#26368;&#22823;.\r\n\r\n&#29992;&#27861;: [size=&quot;;
+hpshowsizehelpmid = &quot;]&#36889;&#26159; &quot;;
+hpshowsizehelppost = &quot; &#25991;&#23383;[/size]&quot;;
+
+hpText = '&#25991;&#26412;';
+hpFont = '&#23383;&#39636;:';
 hpSize = '&#22823;&#23567;:';
\ No newline at end of file</diff>
      <filename>root/static/js/site/formatter/ubbhelp-tw.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
-$(document).ready(function() {
-    $.get('/ajax/new_message', function(data) {
-        $('#new_message').html(data);
-    } );
+$(document).ready(function() {
+    $.get('/ajax/new_message', function(data) {
+        $('#new_message').html(data);
+    } );
 } );
\ No newline at end of file</diff>
      <filename>root/static/js/site/message.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,26 +1,26 @@
-function switch_formatter() {
-    var selected_format = $('input[@name=formatter]:checked').val();
-    if (selected_format == 'ubb') {
-        $('.ubb').show();
-        $('.wiki').hide();
-    } else if (selected_format == 'wiki') {
-        $('.ubb').hide();
-        $('.wiki').show();
-    } else {
-        $('.ubb').hide();
-        $('.wiki').hide();
-    }
-}
-
-function preview() {
-    var formatter = $('input[@name=formatter]:checked').val();
-    var ctext = $('#text').val();
-    
-    $.post('/ajax/preview', { 'formatter': formatter, 'text': ctext }, function(data) {
-        $('#preview').html(data);
-    } );
-}
-
-$(document).ready(function() {
-    switch_formatter();
+function switch_formatter() {
+    var selected_format = $('input[@name=formatter]:checked').val();
+    if (selected_format == 'ubb') {
+        $('.ubb').show();
+        $('.wiki').hide();
+    } else if (selected_format == 'wiki') {
+        $('.ubb').hide();
+        $('.wiki').show();
+    } else {
+        $('.ubb').hide();
+        $('.wiki').hide();
+    }
+}
+
+function preview() {
+    var formatter = $('input[@name=formatter]:checked').val();
+    var ctext = $('#text').val();
+    
+    $.post('/ajax/preview', { 'formatter': formatter, 'text': ctext }, function(data) {
+        $('#preview').html(data);
+    } );
+}
+
+$(document).ready(function() {
+    switch_formatter();
 } );
\ No newline at end of file</diff>
      <filename>root/static/js/site/new_post.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,19 +1,19 @@
-function star(obj_type, obj_id, obj_div) {
-    $.get('/ajax/star', { 'obj_type': obj_type, 'obj_id': obj_id }, function(data) {
-        if (data == 1) {
-            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/star_on.gif&quot; /&gt;');
-        } else {
-            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/star_off.gif&quot; /&gt;');
-        }
-    } );
-}
-
-function share(obj_type, obj_id, obj_div) {
-    $.get('/ajax/share', { 'obj_type': obj_type, 'obj_id': obj_id }, function(data) {
-        if (data == 1) {
-            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/unshare.gif&quot; /&gt;');
-        } else {
-            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/share.gif&quot; /&gt;');
-        }
-    } );
+function star(obj_type, obj_id, obj_div) {
+    $.get('/ajax/star', { 'obj_type': obj_type, 'obj_id': obj_id }, function(data) {
+        if (data == 1) {
+            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/star_on.gif&quot; /&gt;');
+        } else {
+            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/star_off.gif&quot; /&gt;');
+        }
+    } );
+}
+
+function share(obj_type, obj_id, obj_div) {
+    $.get('/ajax/share', { 'obj_type': obj_type, 'obj_id': obj_id }, function(data) {
+        if (data == 1) {
+            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/unshare.gif&quot; /&gt;');
+        } else {
+            $('#' + obj_div).html('&lt;img src=&quot;/static/images/site/t/share.gif&quot; /&gt;');
+        }
+    } );
 }
\ No newline at end of file</diff>
      <filename>root/static/js/site/star.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,70 +1,70 @@
-$(function() {
-
-    $(document.forms).each( function(theform) {
-        
-        // disabled the Submit and Reset when submit a form
-        // to avoid duplicate submit
-        $(theform).submit( function() {
-            $('input:submit').attr( { disabled : 'disabled' } );
-            $('input:reset').attr(  { disabled : 'disabled' } );
-        } );
-        
-        // Press Ctrl+Enter to submit the form. like QQ.
-        $(theform).keypress( function(evt) {
-            var x = evt.keyCode;
-            var q = evt.ctrlKey;
-            
-            if (q &amp;&amp; (x == 13 || x == 10)) {
-                theform.submit();
-            }
-        } );
-    } );
-    
-    // follows are copied from datePicker/date.js
-    // utility method
-    var _zeroPad = function(num) {
-        var s = '0'+num;
-        return s.substring(s.length-2)
-        //return ('0'+num).substring(-2); // doesn't work on IE :(
-    };
-    
-   $(&quot;.date&quot;).each(function (i) {
-        var s = $(this).text();
-        if (! s) { return false; }
-
-        var f = this.id; //format
-        if (! f) {
-            f = 'yyyy-mm-dd hh:ii:ss';
-        }
-        
-        var d = new Date(1997, 1, 1, 1, 1, 1);
-        var iY = f.indexOf('yyyy');
-        if (iY &gt; -1) {
-            d.setFullYear(Number(s.substr(iY, 4)));
-        }
-        var iM = f.indexOf('mm');
-        if (iM &gt; -1) {
-            d.setMonth(Number(s.substr(iM, 2)) - 1);
-        }
-        d.setDate(Number(s.substr(f.indexOf('dd'), 2)));
-        d.setHours(Number(s.substr(f.indexOf('hh'), 2)));
-        d.setMinutes(Number(s.substr(f.indexOf('ii'), 2)));
-        d.setSeconds(Number(s.substr(f.indexOf('ss'), 2)));
-        
-        var timezoneOffset = -(new Date().getTimezoneOffset());
-        d.setMinutes(d.getMinutes() + timezoneOffset);
-        
-        if (! isNaN(d.getFullYear()) &amp;&amp; d.getFullYear() &gt; 1997) {
-            var t = f
-                .split('yyyy').join(d.getFullYear())
-                .split('mm').join(_zeroPad(d.getMonth()+1))
-                .split('dd').join(_zeroPad(d.getDate()))
-                .split('hh').join(_zeroPad(d.getHours()))
-                .split('ii').join(_zeroPad(d.getMinutes()))
-                .split('ss').join(_zeroPad(d.getSeconds()))
-                ;
-        
-            $(this).text(t);
-        }
-   } );
+$(function() {
+
+    $(document.forms).each( function(theform) {
+        
+        // disabled the Submit and Reset when submit a form
+        // to avoid duplicate submit
+        $(theform).submit( function() {
+            $('input:submit').attr( { disabled : 'disabled' } );
+            $('input:reset').attr(  { disabled : 'disabled' } );
+        } );
+        
+        // Press Ctrl+Enter to submit the form. like QQ.
+        $(theform).keypress( function(evt) {
+            var x = evt.keyCode;
+            var q = evt.ctrlKey;
+            
+            if (q &amp;&amp; (x == 13 || x == 10)) {
+                theform.submit();
+            }
+        } );
+    } );
+    
+    // follows are copied from datePicker/date.js
+    // utility method
+    var _zeroPad = function(num) {
+        var s = '0'+num;
+        return s.substring(s.length-2)
+        //return ('0'+num).substring(-2); // doesn't work on IE :(
+    };
+    
+   $(&quot;.date&quot;).each(function (i) {
+        var s = $(this).text();
+        if (! s) { return false; }
+
+        var f = this.id; //format
+        if (! f) {
+            f = 'yyyy-mm-dd hh:ii:ss';
+        }
+        
+        var d = new Date(1997, 1, 1, 1, 1, 1);
+        var iY = f.indexOf('yyyy');
+        if (iY &gt; -1) {
+            d.setFullYear(Number(s.substr(iY, 4)));
+        }
+        var iM = f.indexOf('mm');
+        if (iM &gt; -1) {
+            d.setMonth(Number(s.substr(iM, 2)) - 1);
+        }
+        d.setDate(Number(s.substr(f.indexOf('dd'), 2)));
+        d.setHours(Number(s.substr(f.indexOf('hh'), 2)));
+        d.setMinutes(Number(s.substr(f.indexOf('ii'), 2)));
+        d.setSeconds(Number(s.substr(f.indexOf('ss'), 2)));
+        
+        var timezoneOffset = -(new Date().getTimezoneOffset());
+        d.setMinutes(d.getMinutes() + timezoneOffset);
+        
+        if (! isNaN(d.getFullYear()) &amp;&amp; d.getFullYear() &gt; 1997) {
+            var t = f
+                .split('yyyy').join(d.getFullYear())
+                .split('mm').join(_zeroPad(d.getMonth()+1))
+                .split('dd').join(_zeroPad(d.getDate()))
+                .split('hh').join(_zeroPad(d.getHours()))
+                .split('ii').join(_zeroPad(d.getMinutes()))
+                .split('ss').join(_zeroPad(d.getSeconds()))
+                ;
+        
+            $(this).text(t);
+        }
+   } );
 } );
\ No newline at end of file</diff>
      <filename>root/static/js/utils.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,64 +1,64 @@
-&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
-&lt;HTML&gt;
- &lt;HEAD&gt;
-   &lt;TITLE&gt; [PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-   &lt;/TITLE&gt;
-   &lt;LINK REL=&quot;Index&quot; HREF=&quot;index.html&quot; &gt;
-   &lt;LINK REL=&quot;made&quot; HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Fgb2312%3Fb%3FUGVybCA1LjEwILeisry45bet0us%3D%3F%3D&amp;In-Reply-To=47789679.3010301%40gmail.com&quot;&gt;
-   &lt;META NAME=&quot;robots&quot; CONTENT=&quot;index,nofollow&quot;&gt;
-   &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
-   
-   &lt;LINK REL=&quot;Next&quot;  HREF=&quot;001127.html&quot;&gt;
-
- &lt;/HEAD&gt;
- &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
-   &lt;H1&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&lt;/H1&gt;
-    &lt;B&gt;purl lamp&lt;/B&gt; 
-    &lt;A HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Fgb2312%3Fb%3FUGVybCA1LjEwILeisry45bet0us%3D%3F%3D&amp;In-Reply-To=47789679.3010301%40gmail.com&quot;
-       TITLE=&quot;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&quot;&gt;lamp.purl at gmail.com
-       &lt;/A&gt;&lt;BR&gt;
-    &lt;I&gt;Tue Jan  1 22:23:52 PST 2008&lt;/I&gt;
-    &lt;P&gt;&lt;UL&gt;
-
-        
-        &lt;LI&gt;Next message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;/li&gt;
-         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
-              &lt;a href=&quot;date.html#1126&quot;&gt;[ date ]&lt;/a&gt;
-              &lt;a href=&quot;thread.html#1126&quot;&gt;[ thread ]&lt;/a&gt;
-              &lt;a href=&quot;subject.html#1126&quot;&gt;[ subject ]&lt;/a&gt;
-              &lt;a href=&quot;author.html#1126&quot;&gt;[ author ]&lt;/a&gt;
-
-         &lt;/LI&gt;
-       &lt;/UL&gt;
-    &lt;HR&gt;  
-&lt;!--beginarticle--&gt;
-&lt;PRE&gt;&#23545;&#20110;&#24320;&#21457;&#26469;&#35828;&#65292; everything is nothing (beside my favorite thing :)
-&#21487;&#33021;&#25226;&#27880;&#24847;&#21147;&#36716;&#31227;&#21040;&#31649;&#29702;&#30456;&#20851;&#30340;&#24320;&#21457;&#25165;&#26159;&#19968;&#20010;&#38271;&#36828;&#30340;&#29233;&#22909;&#12290;
--------------- next part --------------
-An HTML attachment was scrubbed...
-URL: &lt;A HREF=&quot;http://mail.pm.org/pipermail/china-pm/attachments/20080102/4ea70f8b/attachment.html&quot;&gt;http://mail.pm.org/pipermail/china-pm/attachments/20080102/4ea70f8b/attachment.html&lt;/A&gt; 
-&lt;/PRE&gt;
-
-
-&lt;!--endarticle--&gt;
-    &lt;HR&gt;
-    &lt;P&gt;&lt;UL&gt;
-
-        &lt;!--threads--&gt;
-	
-	&lt;LI&gt;Next message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;/li&gt;
-         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
-              &lt;a href=&quot;date.html#1126&quot;&gt;[ date ]&lt;/a&gt;
-              &lt;a href=&quot;thread.html#1126&quot;&gt;[ thread ]&lt;/a&gt;
-              &lt;a href=&quot;subject.html#1126&quot;&gt;[ subject ]&lt;/a&gt;
-
-              &lt;a href=&quot;author.html#1126&quot;&gt;[ author ]&lt;/a&gt;
-         &lt;/LI&gt;
-       &lt;/UL&gt;
-
-&lt;hr&gt;
-&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More information about the China-pm
-mailing list&lt;/a&gt;&lt;br&gt;
-&lt;/body&gt;&lt;/html&gt;
+&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+   &lt;TITLE&gt; [PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+   &lt;/TITLE&gt;
+   &lt;LINK REL=&quot;Index&quot; HREF=&quot;index.html&quot; &gt;
+   &lt;LINK REL=&quot;made&quot; HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Fgb2312%3Fb%3FUGVybCA1LjEwILeisry45bet0us%3D%3F%3D&amp;In-Reply-To=47789679.3010301%40gmail.com&quot;&gt;
+   &lt;META NAME=&quot;robots&quot; CONTENT=&quot;index,nofollow&quot;&gt;
+   &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
+   
+   &lt;LINK REL=&quot;Next&quot;  HREF=&quot;001127.html&quot;&gt;
+
+ &lt;/HEAD&gt;
+ &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
+   &lt;H1&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&lt;/H1&gt;
+    &lt;B&gt;purl lamp&lt;/B&gt; 
+    &lt;A HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Fgb2312%3Fb%3FUGVybCA1LjEwILeisry45bet0us%3D%3F%3D&amp;In-Reply-To=47789679.3010301%40gmail.com&quot;
+       TITLE=&quot;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&quot;&gt;lamp.purl at gmail.com
+       &lt;/A&gt;&lt;BR&gt;
+    &lt;I&gt;Tue Jan  1 22:23:52 PST 2008&lt;/I&gt;
+    &lt;P&gt;&lt;UL&gt;
+
+        
+        &lt;LI&gt;Next message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;/li&gt;
+         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
+              &lt;a href=&quot;date.html#1126&quot;&gt;[ date ]&lt;/a&gt;
+              &lt;a href=&quot;thread.html#1126&quot;&gt;[ thread ]&lt;/a&gt;
+              &lt;a href=&quot;subject.html#1126&quot;&gt;[ subject ]&lt;/a&gt;
+              &lt;a href=&quot;author.html#1126&quot;&gt;[ author ]&lt;/a&gt;
+
+         &lt;/LI&gt;
+       &lt;/UL&gt;
+    &lt;HR&gt;  
+&lt;!--beginarticle--&gt;
+&lt;PRE&gt;&#23545;&#20110;&#24320;&#21457;&#26469;&#35828;&#65292; everything is nothing (beside my favorite thing :)
+&#21487;&#33021;&#25226;&#27880;&#24847;&#21147;&#36716;&#31227;&#21040;&#31649;&#29702;&#30456;&#20851;&#30340;&#24320;&#21457;&#25165;&#26159;&#19968;&#20010;&#38271;&#36828;&#30340;&#29233;&#22909;&#12290;
+-------------- next part --------------
+An HTML attachment was scrubbed...
+URL: &lt;A HREF=&quot;http://mail.pm.org/pipermail/china-pm/attachments/20080102/4ea70f8b/attachment.html&quot;&gt;http://mail.pm.org/pipermail/china-pm/attachments/20080102/4ea70f8b/attachment.html&lt;/A&gt; 
+&lt;/PRE&gt;
+
+
+&lt;!--endarticle--&gt;
+    &lt;HR&gt;
+    &lt;P&gt;&lt;UL&gt;
+
+        &lt;!--threads--&gt;
+	
+	&lt;LI&gt;Next message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;/li&gt;
+         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
+              &lt;a href=&quot;date.html#1126&quot;&gt;[ date ]&lt;/a&gt;
+              &lt;a href=&quot;thread.html#1126&quot;&gt;[ thread ]&lt;/a&gt;
+              &lt;a href=&quot;subject.html#1126&quot;&gt;[ subject ]&lt;/a&gt;
+
+              &lt;a href=&quot;author.html#1126&quot;&gt;[ author ]&lt;/a&gt;
+         &lt;/LI&gt;
+       &lt;/UL&gt;
+
+&lt;hr&gt;
+&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More information about the China-pm
+mailing list&lt;/a&gt;&lt;br&gt;
+&lt;/body&gt;&lt;/html&gt;</diff>
      <filename>t/scraper/01mailman/001126.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,120 +1,120 @@
-&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
-&lt;HTML&gt;
- &lt;HEAD&gt;
-   &lt;TITLE&gt; [PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-   &lt;/TITLE&gt;
-   &lt;LINK REL=&quot;Index&quot; HREF=&quot;index.html&quot; &gt;
-   &lt;LINK REL=&quot;made&quot; HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Futf-8%3Fb%3FUGVybCA1LjEwIOWPkeW4g%2Beov%2Be/u%2BivkQ%3D%3D%3F%3D&amp;In-Reply-To=3629857d0712282356y2dcecdcfo1055863f15acc227%40mail.gmail.com&quot;&gt;
-   &lt;META NAME=&quot;robots&quot; CONTENT=&quot;index,nofollow&quot;&gt;
-   &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
-   &lt;LINK REL=&quot;Previous&quot;  HREF=&quot;001127.html&quot;&gt;
-
-   &lt;LINK REL=&quot;Next&quot;  HREF=&quot;001131.html&quot;&gt;
- &lt;/HEAD&gt;
- &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
-   &lt;H1&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&lt;/H1&gt;
-    &lt;B&gt;Qiang ( James ) Li&lt;/B&gt; 
-    &lt;A HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Futf-8%3Fb%3FUGVybCA1LjEwIOWPkeW4g%2Beov%2Be/u%2BivkQ%3D%3D%3F%3D&amp;In-Reply-To=3629857d0712282356y2dcecdcfo1055863f15acc227%40mail.gmail.com&quot;
-       TITLE=&quot;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&quot;&gt;shijialee at gmail.com
-       &lt;/A&gt;&lt;BR&gt;
-    &lt;I&gt;Thu Jan  3 17:47:07 PST 2008&lt;/I&gt;
-
-    &lt;P&gt;&lt;UL&gt;
-        &lt;LI&gt;Previous message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;/li&gt;
-        &lt;LI&gt;Next message: &lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;/li&gt;
-         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
-              &lt;a href=&quot;date.html#1128&quot;&gt;[ date ]&lt;/a&gt;
-              &lt;a href=&quot;thread.html#1128&quot;&gt;[ thread ]&lt;/a&gt;
-
-              &lt;a href=&quot;subject.html#1128&quot;&gt;[ subject ]&lt;/a&gt;
-              &lt;a href=&quot;author.html#1128&quot;&gt;[ author ]&lt;/a&gt;
-         &lt;/LI&gt;
-       &lt;/UL&gt;
-    &lt;HR&gt;  
-&lt;!--beginarticle--&gt;
-&lt;PRE&gt;Barret wrote:
-&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://news.csdn.net/n/20071228/112240.html&quot;&gt;http://news.csdn.net/n/20071228/112240.html&lt;/A&gt;
-
-&lt;/I&gt;&amp;gt;&lt;i&gt; 
-&lt;/I&gt;&amp;gt;&lt;i&gt;  Perl&#30340;&#35821;&#27861;&#28789;&#27963;&#24615;&#26377;&#26102;&#20351;&#23427;&#21464;&#24471;&#38590;&#20197;&#38405;&#35835;&#65292;&#32780;&#20687;Python&#30001;&#20110;&#22266;&#23450;&#30340;&#35821;&#27861;&#32467;&#26500;&#22312;&#36825;&#20123;&#24180;&#24050;&#32463;&#32988;&#36807;&#20102;Perl&#12290;&#32780;&#19988;Web&#24320;&#21457;&#30340;&#33050;&#26412;&#35821;&#35328;&#27604;&#22914;PHP&#12289;Ruby&#31561;&#20063;&#24050;&#32463;&#24320;&#22987;&#28176;&#28176;&#21462;&#20195;&#20102;Perl&#19968;&#24230;&#25317;&#26377;&#30340;&#20248;&#21183;&#12290;20&#24180;&#26469;Perl&#30340;&#22659;&#20917;&#27599;&#20917;&#24840;&#19979;&#65292;&#21040;&#20170;&#22825;&#24050;&#22914;&#27531;&#28891;&#12290;
-&lt;/I&gt;&amp;gt;&lt;i&gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#28689;&#24067;&#27735;&#12290;
-&lt;/I&gt;&amp;gt;&lt;i&gt; 
-&lt;/I&gt;
-&#24590;&#20040;&#25630;&#30340;? &#36825;&#26679;&#30340;&#25991;&#31456;&#21457;&#36824;&#19981;&#22914;&#19981;&#21457;.  &amp;gt;:-
-
-Qiang
-
-
-&amp;gt;&lt;i&gt; On 12/27/07, hoowa sun &amp;lt;&lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;hoowa.sun at gmail.com&lt;/A&gt;&amp;gt; wrote:
-&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt; &#22909;&#20037;&#27809;&#35828;&#35805;&#20102;&#12290;&#25105;&#21457;&#21040;&#25105;&#30340;Blog&#20013;&#12290;
-&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt;
-
-&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt; &#21487;&#33021;&#26377;&#26426;&#20250;&#22312;CSDN&#30340;&#39318;&#39029;&#26174;&#31034;&#12290;
-&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt; On 12/26/07, Fayland Lam &amp;lt;&lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;fayland at gmail.com&lt;/A&gt;&amp;gt; wrote:
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Qiang (James) Li wrote:
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; hello,
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; PerlChina &#30340; klaus &#24050;&#32463;&#32763;&#35793;&#20102; Perl 5.10 &#30340;&#21457;&#24067;&#31295;&#65292;&#36825;&#20010;&#21457;&#24067;&#31295;&#20250;&#25104;&#20026; Perl &#22522;&#37329;&#20250;&#30340;&#22810;&#22269;&#35821;&#35328;&#32763;&#35793;&#30340;&#19968;&#37096;&#20998;&#12290;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#32763;&#35793;&#25105;&#24050;&#32463;&#25918;&#21040; perlchina &#30340; wiki &#31449;&#65292;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://wiki.perlchina.org/index.php/Perl_5.10_%E5%8F%91%E5%B8%83%E7%A8%BF&quot;&gt;http://wiki.perlchina.org/index.php/Perl_5.10_%E5%8F%91%E5%B8%83%E7%A8%BF&lt;/A&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#35841;&#26377;&#20851;&#31995;&#21487;&#20197;&#35797;&#35797;&#21435;&#31243;&#24207;&#21592;&#21457;&#24067;&#19979;&#12290;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#24076;&#26395;&#22823;&#23478;&#23457;&#38405;&#19968;&#19979;&#12290;&#20320;&#21487;&#20197;&#30452;&#25509;&#22312; wiki &#19978;&#20462;&#25913;&#65288;&#27809;&#27880;&#20876;&#30340;&#29992;&#25143;&#38656;&#35201;&#20808;&#27880;&#20876;&#65289;&#65292;&#28982;&#21518;&#25105;&#22823;&#27010;&#20250;&#22312;1&#26376;2&#21495;&#24038;&#21491;&#23558;&#26368;&#21518;&#32467;&#26524;&#36716;&#32473; Perl &#22522;&#37329;&#20250;&#12290;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#26032;&#24180;&#24555;&#20048;&#65281;
-
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Qiang
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; _______________________________________________
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; China-pm mailing list
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;China-pm at pm.org&lt;/A&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;http://mail.pm.org/mailman/listinfo/china-pm&lt;/A&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; --
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Fayland Lam // &lt;A HREF=&quot;http://www.fayland.org/&quot;&gt;http://www.fayland.org/&lt;/A&gt;
-
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Foorum based on Catalyst // &lt;A HREF=&quot;http://www.foorumbbs.com/&quot;&gt;http://www.foorumbbs.com/&lt;/A&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; _______________________________________________
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; China-pm mailing list
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;China-pm at pm.org&lt;/A&gt;
-&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;http://mail.pm.org/mailman/listinfo/china-pm&lt;/A&gt;
-&lt;/I&gt;&amp;gt;&lt;i&gt; 
-&lt;/I&gt;&amp;gt;&lt;i&gt; 
-
-&lt;/I&gt;&lt;/PRE&gt;
-
-
-
-&lt;!--endarticle--&gt;
-    &lt;HR&gt;
-    &lt;P&gt;&lt;UL&gt;
-        &lt;!--threads--&gt;
-	&lt;LI&gt;Previous message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;/li&gt;
-	&lt;LI&gt;Next message: &lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-
-&lt;/A&gt;&lt;/li&gt;
-         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
-              &lt;a href=&quot;date.html#1128&quot;&gt;[ date ]&lt;/a&gt;
-              &lt;a href=&quot;thread.html#1128&quot;&gt;[ thread ]&lt;/a&gt;
-              &lt;a href=&quot;subject.html#1128&quot;&gt;[ subject ]&lt;/a&gt;
-              &lt;a href=&quot;author.html#1128&quot;&gt;[ author ]&lt;/a&gt;
-         &lt;/LI&gt;
-
-       &lt;/UL&gt;
-
-&lt;hr&gt;
-&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More information about the China-pm
-mailing list&lt;/a&gt;&lt;br&gt;
-&lt;/body&gt;&lt;/html&gt;
+&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+   &lt;TITLE&gt; [PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+   &lt;/TITLE&gt;
+   &lt;LINK REL=&quot;Index&quot; HREF=&quot;index.html&quot; &gt;
+   &lt;LINK REL=&quot;made&quot; HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Futf-8%3Fb%3FUGVybCA1LjEwIOWPkeW4g%2Beov%2Be/u%2BivkQ%3D%3D%3F%3D&amp;In-Reply-To=3629857d0712282356y2dcecdcfo1055863f15acc227%40mail.gmail.com&quot;&gt;
+   &lt;META NAME=&quot;robots&quot; CONTENT=&quot;index,nofollow&quot;&gt;
+   &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
+   &lt;LINK REL=&quot;Previous&quot;  HREF=&quot;001127.html&quot;&gt;
+
+   &lt;LINK REL=&quot;Next&quot;  HREF=&quot;001131.html&quot;&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
+   &lt;H1&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&lt;/H1&gt;
+    &lt;B&gt;Qiang ( James ) Li&lt;/B&gt; 
+    &lt;A HREF=&quot;mailto:china-pm%40pm.org?Subject=%5BPerlChina%5D%20%3D%3Futf-8%3Fb%3FUGVybCA1LjEwIOWPkeW4g%2Beov%2Be/u%2BivkQ%3D%3D%3F%3D&amp;In-Reply-To=3629857d0712282356y2dcecdcfo1055863f15acc227%40mail.gmail.com&quot;
+       TITLE=&quot;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;&quot;&gt;shijialee at gmail.com
+       &lt;/A&gt;&lt;BR&gt;
+    &lt;I&gt;Thu Jan  3 17:47:07 PST 2008&lt;/I&gt;
+
+    &lt;P&gt;&lt;UL&gt;
+        &lt;LI&gt;Previous message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;/li&gt;
+        &lt;LI&gt;Next message: &lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;/li&gt;
+         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
+              &lt;a href=&quot;date.html#1128&quot;&gt;[ date ]&lt;/a&gt;
+              &lt;a href=&quot;thread.html#1128&quot;&gt;[ thread ]&lt;/a&gt;
+
+              &lt;a href=&quot;subject.html#1128&quot;&gt;[ subject ]&lt;/a&gt;
+              &lt;a href=&quot;author.html#1128&quot;&gt;[ author ]&lt;/a&gt;
+         &lt;/LI&gt;
+       &lt;/UL&gt;
+    &lt;HR&gt;  
+&lt;!--beginarticle--&gt;
+&lt;PRE&gt;Barret wrote:
+&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://news.csdn.net/n/20071228/112240.html&quot;&gt;http://news.csdn.net/n/20071228/112240.html&lt;/A&gt;
+
+&lt;/I&gt;&amp;gt;&lt;i&gt; 
+&lt;/I&gt;&amp;gt;&lt;i&gt;  Perl&#30340;&#35821;&#27861;&#28789;&#27963;&#24615;&#26377;&#26102;&#20351;&#23427;&#21464;&#24471;&#38590;&#20197;&#38405;&#35835;&#65292;&#32780;&#20687;Python&#30001;&#20110;&#22266;&#23450;&#30340;&#35821;&#27861;&#32467;&#26500;&#22312;&#36825;&#20123;&#24180;&#24050;&#32463;&#32988;&#36807;&#20102;Perl&#12290;&#32780;&#19988;Web&#24320;&#21457;&#30340;&#33050;&#26412;&#35821;&#35328;&#27604;&#22914;PHP&#12289;Ruby&#31561;&#20063;&#24050;&#32463;&#24320;&#22987;&#28176;&#28176;&#21462;&#20195;&#20102;Perl&#19968;&#24230;&#25317;&#26377;&#30340;&#20248;&#21183;&#12290;20&#24180;&#26469;Perl&#30340;&#22659;&#20917;&#27599;&#20917;&#24840;&#19979;&#65292;&#21040;&#20170;&#22825;&#24050;&#22914;&#27531;&#28891;&#12290;
+&lt;/I&gt;&amp;gt;&lt;i&gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#28689;&#24067;&#27735;&#12290;
+&lt;/I&gt;&amp;gt;&lt;i&gt; 
+&lt;/I&gt;
+&#24590;&#20040;&#25630;&#30340;? &#36825;&#26679;&#30340;&#25991;&#31456;&#21457;&#36824;&#19981;&#22914;&#19981;&#21457;.  &amp;gt;:-
+
+Qiang
+
+
+&amp;gt;&lt;i&gt; On 12/27/07, hoowa sun &amp;lt;&lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;hoowa.sun at gmail.com&lt;/A&gt;&amp;gt; wrote:
+&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt; &#22909;&#20037;&#27809;&#35828;&#35805;&#20102;&#12290;&#25105;&#21457;&#21040;&#25105;&#30340;Blog&#20013;&#12290;
+&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt;
+
+&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt; &#21487;&#33021;&#26377;&#26426;&#20250;&#22312;CSDN&#30340;&#39318;&#39029;&#26174;&#31034;&#12290;
+&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&lt;i&gt; On 12/26/07, Fayland Lam &amp;lt;&lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;fayland at gmail.com&lt;/A&gt;&amp;gt; wrote:
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Qiang (James) Li wrote:
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; hello,
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; PerlChina &#30340; klaus &#24050;&#32463;&#32763;&#35793;&#20102; Perl 5.10 &#30340;&#21457;&#24067;&#31295;&#65292;&#36825;&#20010;&#21457;&#24067;&#31295;&#20250;&#25104;&#20026; Perl &#22522;&#37329;&#20250;&#30340;&#22810;&#22269;&#35821;&#35328;&#32763;&#35793;&#30340;&#19968;&#37096;&#20998;&#12290;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#32763;&#35793;&#25105;&#24050;&#32463;&#25918;&#21040; perlchina &#30340; wiki &#31449;&#65292;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://wiki.perlchina.org/index.php/Perl_5.10_%E5%8F%91%E5%B8%83%E7%A8%BF&quot;&gt;http://wiki.perlchina.org/index.php/Perl_5.10_%E5%8F%91%E5%B8%83%E7%A8%BF&lt;/A&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#35841;&#26377;&#20851;&#31995;&#21487;&#20197;&#35797;&#35797;&#21435;&#31243;&#24207;&#21592;&#21457;&#24067;&#19979;&#12290;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#24076;&#26395;&#22823;&#23478;&#23457;&#38405;&#19968;&#19979;&#12290;&#20320;&#21487;&#20197;&#30452;&#25509;&#22312; wiki &#19978;&#20462;&#25913;&#65288;&#27809;&#27880;&#20876;&#30340;&#29992;&#25143;&#38656;&#35201;&#20808;&#27880;&#20876;&#65289;&#65292;&#28982;&#21518;&#25105;&#22823;&#27010;&#20250;&#22312;1&#26376;2&#21495;&#24038;&#21491;&#23558;&#26368;&#21518;&#32467;&#26524;&#36716;&#32473; Perl &#22522;&#37329;&#20250;&#12290;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &#26032;&#24180;&#24555;&#20048;&#65281;
+
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Qiang
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; _______________________________________________
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; China-pm mailing list
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;China-pm at pm.org&lt;/A&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;http://mail.pm.org/mailman/listinfo/china-pm&lt;/A&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; --
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Fayland Lam // &lt;A HREF=&quot;http://www.fayland.org/&quot;&gt;http://www.fayland.org/&lt;/A&gt;
+
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; Foorum based on Catalyst // &lt;A HREF=&quot;http://www.foorumbbs.com/&quot;&gt;http://www.foorumbbs.com/&lt;/A&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; _______________________________________________
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; China-pm mailing list
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;China-pm at pm.org&lt;/A&gt;
+&lt;/I&gt;&amp;gt;&amp;gt;&amp;gt;&lt;i&gt; &lt;A HREF=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;http://mail.pm.org/mailman/listinfo/china-pm&lt;/A&gt;
+&lt;/I&gt;&amp;gt;&lt;i&gt; 
+&lt;/I&gt;&amp;gt;&lt;i&gt; 
+
+&lt;/I&gt;&lt;/PRE&gt;
+
+
+
+&lt;!--endarticle--&gt;
+    &lt;HR&gt;
+    &lt;P&gt;&lt;UL&gt;
+        &lt;!--threads--&gt;
+	&lt;LI&gt;Previous message: &lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;/li&gt;
+	&lt;LI&gt;Next message: &lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+
+&lt;/A&gt;&lt;/li&gt;
+         &lt;LI&gt; &lt;B&gt;Messages sorted by:&lt;/B&gt; 
+              &lt;a href=&quot;date.html#1128&quot;&gt;[ date ]&lt;/a&gt;
+              &lt;a href=&quot;thread.html#1128&quot;&gt;[ thread ]&lt;/a&gt;
+              &lt;a href=&quot;subject.html#1128&quot;&gt;[ subject ]&lt;/a&gt;
+              &lt;a href=&quot;author.html#1128&quot;&gt;[ author ]&lt;/a&gt;
+         &lt;/LI&gt;
+
+       &lt;/UL&gt;
+
+&lt;hr&gt;
+&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More information about the China-pm
+mailing list&lt;/a&gt;&lt;br&gt;
+&lt;/body&gt;&lt;/html&gt;</diff>
      <filename>t/scraper/01mailman/001128.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,83 +1,83 @@
-&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
-&lt;HTML&gt;
-  &lt;HEAD&gt;
-     &lt;title&gt;The China-pm January 2008 Archive by date&lt;/title&gt;
-     &lt;META NAME=&quot;robots&quot; CONTENT=&quot;noindex,follow&quot;&gt;
-     &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
-  &lt;/HEAD&gt;
-  &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
-      &lt;a name=&quot;start&quot;&gt;&lt;/A&gt;
-
-      &lt;h1&gt;January 2008 Archives by date&lt;/h1&gt;
-      &lt;ul&gt;
-         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
-	        &lt;a href=&quot;thread.html#start&quot;&gt;[ thread ]&lt;/a&gt;
-		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
-		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
-
-		
-
-	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
-                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
-      &lt;/ul&gt;
-      &lt;p&gt;&lt;b&gt;Starting:&lt;/b&gt; &lt;i&gt;Tue Jan  1 22:23:52 PST 2008&lt;/i&gt;&lt;br&gt;
-         &lt;b&gt;Ending:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
-         &lt;b&gt;Messages:&lt;/b&gt; 6&lt;p&gt;
-
-     &lt;ul&gt;
-
-&lt;LI&gt;&lt;A HREF=&quot;001126.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1126&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;purl lamp
-&lt;/I&gt;
-
-&lt;LI&gt;&lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1127&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;Achilles Xu
-&lt;/I&gt;
-
-&lt;LI&gt;&lt;A HREF=&quot;001128.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1128&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;Qiang ( James ) Li
-&lt;/I&gt;
-
-&lt;LI&gt;&lt;A HREF=&quot;001129.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1129&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;Jeff Pang
-&lt;/I&gt;
-
-&lt;LI&gt;&lt;A HREF=&quot;001130.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1130&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;Qiang ( James ) Li
-&lt;/I&gt;
-
-&lt;LI&gt;&lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1131&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;truncatei
-&lt;/I&gt;
-
-    &lt;/ul&gt;
-
-    &lt;p&gt;
-      &lt;a name=&quot;end&quot;&gt;&lt;b&gt;Last message date:&lt;/b&gt;&lt;/a&gt; 
-       &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
-    &lt;b&gt;Archived on:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:29 PST 2008&lt;/i&gt;
-    &lt;p&gt;
-   &lt;ul&gt;
-         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
-
-	        &lt;a href=&quot;thread.html#start&quot;&gt;[ thread ]&lt;/a&gt;
-		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
-		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
-		
-	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
-                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
-     &lt;/ul&gt;
-     &lt;p&gt;
-     &lt;hr&gt;
-
-     &lt;i&gt;This archive was generated by
-     Pipermail 0.09 (Mailman edition).&lt;/i&gt;
-  &lt;/BODY&gt;
-&lt;/HTML&gt;
-
+&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
+&lt;HTML&gt;
+  &lt;HEAD&gt;
+     &lt;title&gt;The China-pm January 2008 Archive by date&lt;/title&gt;
+     &lt;META NAME=&quot;robots&quot; CONTENT=&quot;noindex,follow&quot;&gt;
+     &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
+  &lt;/HEAD&gt;
+  &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
+      &lt;a name=&quot;start&quot;&gt;&lt;/A&gt;
+
+      &lt;h1&gt;January 2008 Archives by date&lt;/h1&gt;
+      &lt;ul&gt;
+         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
+	        &lt;a href=&quot;thread.html#start&quot;&gt;[ thread ]&lt;/a&gt;
+		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
+		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
+
+		
+
+	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
+                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;p&gt;&lt;b&gt;Starting:&lt;/b&gt; &lt;i&gt;Tue Jan  1 22:23:52 PST 2008&lt;/i&gt;&lt;br&gt;
+         &lt;b&gt;Ending:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
+         &lt;b&gt;Messages:&lt;/b&gt; 6&lt;p&gt;
+
+     &lt;ul&gt;
+
+&lt;LI&gt;&lt;A HREF=&quot;001126.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1126&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;purl lamp
+&lt;/I&gt;
+
+&lt;LI&gt;&lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1127&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;Achilles Xu
+&lt;/I&gt;
+
+&lt;LI&gt;&lt;A HREF=&quot;001128.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1128&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;Qiang ( James ) Li
+&lt;/I&gt;
+
+&lt;LI&gt;&lt;A HREF=&quot;001129.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1129&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;Jeff Pang
+&lt;/I&gt;
+
+&lt;LI&gt;&lt;A HREF=&quot;001130.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1130&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;Qiang ( James ) Li
+&lt;/I&gt;
+
+&lt;LI&gt;&lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1131&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;truncatei
+&lt;/I&gt;
+
+    &lt;/ul&gt;
+
+    &lt;p&gt;
+      &lt;a name=&quot;end&quot;&gt;&lt;b&gt;Last message date:&lt;/b&gt;&lt;/a&gt; 
+       &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
+    &lt;b&gt;Archived on:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:29 PST 2008&lt;/i&gt;
+    &lt;p&gt;
+   &lt;ul&gt;
+         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
+
+	        &lt;a href=&quot;thread.html#start&quot;&gt;[ thread ]&lt;/a&gt;
+		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
+		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
+		
+	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
+                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
+     &lt;/ul&gt;
+     &lt;p&gt;
+     &lt;hr&gt;
+
+     &lt;i&gt;This archive was generated by
+     Pipermail 0.09 (Mailman edition).&lt;/i&gt;
+  &lt;/BODY&gt;
+&lt;/HTML&gt;
+</diff>
      <filename>t/scraper/01mailman/date.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,94 +1,94 @@
-&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
-&lt;HTML&gt;
-  &lt;HEAD&gt;
-     &lt;title&gt;The China-pm January 2008 Archive by thread&lt;/title&gt;
-     &lt;META NAME=&quot;robots&quot; CONTENT=&quot;noindex,follow&quot;&gt;
-     &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
-  &lt;/HEAD&gt;
-  &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
-      &lt;a name=&quot;start&quot;&gt;&lt;/A&gt;
-
-      &lt;h1&gt;January 2008 Archives by thread&lt;/h1&gt;
-      &lt;ul&gt;
-         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
-	        
-		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
-		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
-		&lt;a href=&quot;date.html#start&quot;&gt;[ date ]&lt;/a&gt;
-
-	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
-                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
-      &lt;/ul&gt;
-      &lt;p&gt;&lt;b&gt;Starting:&lt;/b&gt; &lt;i&gt;Tue Jan  1 22:23:52 PST 2008&lt;/i&gt;&lt;br&gt;
-         &lt;b&gt;Ending:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
-         &lt;b&gt;Messages:&lt;/b&gt; 6&lt;p&gt;
-
-     &lt;ul&gt;
-
-&lt;!--0 01199255032- --&gt;
-&lt;LI&gt;&lt;A HREF=&quot;001126.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1126&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;purl lamp
-&lt;/I&gt;
-
-&lt;UL&gt;
-&lt;!--1 01199255032-01199266984- --&gt;
-&lt;LI&gt;&lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1127&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;Achilles Xu
-&lt;/I&gt;
-
-&lt;/UL&gt;
-
-&lt;!--0 01199411227- --&gt;
-&lt;LI&gt;&lt;A HREF=&quot;001128.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1128&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;Qiang ( James ) Li
-&lt;/I&gt;
-
-&lt;UL&gt;
-&lt;!--1 01199411227-01199417353- --&gt;
-&lt;LI&gt;&lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1131&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;truncatei
-&lt;/I&gt;
-
-&lt;/UL&gt;
-&lt;!--0 01199413936- --&gt;
-&lt;LI&gt;&lt;A HREF=&quot;001129.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1129&quot;&gt;&amp;nbsp;&lt;/A&gt;
-
-&lt;I&gt;Jeff Pang
-&lt;/I&gt;
-
-&lt;!--0 01199415440- --&gt;
-&lt;LI&gt;&lt;A HREF=&quot;001130.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
-&lt;/A&gt;&lt;A NAME=&quot;1130&quot;&gt;&amp;nbsp;&lt;/A&gt;
-&lt;I&gt;Qiang ( James ) Li
-&lt;/I&gt;
-
-    &lt;/ul&gt;
-    &lt;p&gt;
-      &lt;a name=&quot;end&quot;&gt;&lt;b&gt;Last message date:&lt;/b&gt;&lt;/a&gt; 
-       &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
-
-    &lt;b&gt;Archived on:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:29 PST 2008&lt;/i&gt;
-    &lt;p&gt;
-   &lt;ul&gt;
-         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
-	        
-		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
-		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
-
-		&lt;a href=&quot;date.html#start&quot;&gt;[ date ]&lt;/a&gt;
-	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
-                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
-     &lt;/ul&gt;
-     &lt;p&gt;
-     &lt;hr&gt;
-     &lt;i&gt;This archive was generated by
-     Pipermail 0.09 (Mailman edition).&lt;/i&gt;
-  &lt;/BODY&gt;
-
-&lt;/HTML&gt;
-
+&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 3.2//EN&quot;&gt;
+&lt;HTML&gt;
+  &lt;HEAD&gt;
+     &lt;title&gt;The China-pm January 2008 Archive by thread&lt;/title&gt;
+     &lt;META NAME=&quot;robots&quot; CONTENT=&quot;noindex,follow&quot;&gt;
+     &lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
+  &lt;/HEAD&gt;
+  &lt;BODY BGCOLOR=&quot;#ffffff&quot;&gt;
+      &lt;a name=&quot;start&quot;&gt;&lt;/A&gt;
+
+      &lt;h1&gt;January 2008 Archives by thread&lt;/h1&gt;
+      &lt;ul&gt;
+         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
+	        
+		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
+		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
+		&lt;a href=&quot;date.html#start&quot;&gt;[ date ]&lt;/a&gt;
+
+	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
+                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
+      &lt;/ul&gt;
+      &lt;p&gt;&lt;b&gt;Starting:&lt;/b&gt; &lt;i&gt;Tue Jan  1 22:23:52 PST 2008&lt;/i&gt;&lt;br&gt;
+         &lt;b&gt;Ending:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
+         &lt;b&gt;Messages:&lt;/b&gt; 6&lt;p&gt;
+
+     &lt;ul&gt;
+
+&lt;!--0 01199255032- --&gt;
+&lt;LI&gt;&lt;A HREF=&quot;001126.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1126&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;purl lamp
+&lt;/I&gt;
+
+&lt;UL&gt;
+&lt;!--1 01199255032-01199266984- --&gt;
+&lt;LI&gt;&lt;A HREF=&quot;001127.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1127&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;Achilles Xu
+&lt;/I&gt;
+
+&lt;/UL&gt;
+
+&lt;!--0 01199411227- --&gt;
+&lt;LI&gt;&lt;A HREF=&quot;001128.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1128&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;Qiang ( James ) Li
+&lt;/I&gt;
+
+&lt;UL&gt;
+&lt;!--1 01199411227-01199417353- --&gt;
+&lt;LI&gt;&lt;A HREF=&quot;001131.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1131&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;truncatei
+&lt;/I&gt;
+
+&lt;/UL&gt;
+&lt;!--0 01199413936- --&gt;
+&lt;LI&gt;&lt;A HREF=&quot;001129.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1129&quot;&gt;&amp;nbsp;&lt;/A&gt;
+
+&lt;I&gt;Jeff Pang
+&lt;/I&gt;
+
+&lt;!--0 01199415440- --&gt;
+&lt;LI&gt;&lt;A HREF=&quot;001130.html&quot;&gt;[PerlChina] Perl 5.10 &#21457;&#24067;&#31295;&#32763;&#35793;
+&lt;/A&gt;&lt;A NAME=&quot;1130&quot;&gt;&amp;nbsp;&lt;/A&gt;
+&lt;I&gt;Qiang ( James ) Li
+&lt;/I&gt;
+
+    &lt;/ul&gt;
+    &lt;p&gt;
+      &lt;a name=&quot;end&quot;&gt;&lt;b&gt;Last message date:&lt;/b&gt;&lt;/a&gt; 
+       &lt;i&gt;Thu Jan  3 19:29:13 PST 2008&lt;/i&gt;&lt;br&gt;
+
+    &lt;b&gt;Archived on:&lt;/b&gt; &lt;i&gt;Thu Jan  3 19:29:29 PST 2008&lt;/i&gt;
+    &lt;p&gt;
+   &lt;ul&gt;
+         &lt;li&gt; &lt;b&gt;Messages sorted by:&lt;/b&gt;
+	        
+		&lt;a href=&quot;subject.html#start&quot;&gt;[ subject ]&lt;/a&gt;
+		&lt;a href=&quot;author.html#start&quot;&gt;[ author ]&lt;/a&gt;
+
+		&lt;a href=&quot;date.html#start&quot;&gt;[ date ]&lt;/a&gt;
+	     &lt;li&gt;&lt;b&gt;&lt;a href=&quot;http://mail.pm.org/mailman/listinfo/china-pm&quot;&gt;More info on this list...
+                    &lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
+     &lt;/ul&gt;
+     &lt;p&gt;
+     &lt;hr&gt;
+     &lt;i&gt;This archive was generated by
+     Pipermail 0.09 (Mailman edition).&lt;/i&gt;
+  &lt;/BODY&gt;
+
+&lt;/HTML&gt;
+</diff>
      <filename>t/scraper/01mailman/thread.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,32 +1,32 @@
-[% WRAPPER 'admin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;&lt;td&gt;Ban IP&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td&gt;
-    &lt;table border='0' style='margin: 2em'&gt;
-    &lt;tr class='title'&gt;&lt;td&gt;IP CIDR&lt;/td&gt;&lt;td&gt;IP Range&lt;/td&gt;&lt;td&gt;Action&lt;/td&gt;&lt;/tr&gt;
-    [% FOREACH ip IN cidr_ips %]
-    &lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
-        &lt;td&gt;[% ip.cidr_ip %]&lt;/td&gt;&lt;td&gt;[% ip.range %]&lt;/td&gt;&lt;td&gt; &lt;a href='/admin/banip/remove?ip_id=[% ip.ip_id %]'&gt;Remove&lt;/a&gt; &lt;/td&gt;
-    &lt;/tr&gt;
-    [% END %]
-    &lt;/table&gt;
-    
-    &lt;p&gt;&lt;/p&gt;
-    
-    &lt;form action='/admin/banip/add' method='POST'&gt;
-    &lt;table border='0' style='margin: 2em'&gt;
-        &lt;tr class='title'&gt;&lt;td&gt; Add a new IP Range &lt;/td&gt;&lt;/tr&gt;
-        &lt;tr&gt;
-            &lt;td&gt; From IP: &lt;input type='text' name='from_ip' /&gt; eg: 222.137.238.1&lt;br /&gt;
-                 End &amp;nbsp; IP: &lt;input type='text' name='end_ip' /&gt;eg: 222.137.238.255&lt;br /&gt;
-                 &lt;input type='submit' /&gt;
-            &lt;/td&gt;
-        &lt;/tr&gt;
-    &lt;/table&gt;
-&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
+[% WRAPPER 'admin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;&lt;td&gt;Ban IP&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;
+    &lt;table border='0' style='margin: 2em'&gt;
+    &lt;tr class='title'&gt;&lt;td&gt;IP CIDR&lt;/td&gt;&lt;td&gt;IP Range&lt;/td&gt;&lt;td&gt;Action&lt;/td&gt;&lt;/tr&gt;
+    [% FOREACH ip IN cidr_ips %]
+    &lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
+        &lt;td&gt;[% ip.cidr_ip %]&lt;/td&gt;&lt;td&gt;[% ip.range %]&lt;/td&gt;&lt;td&gt; &lt;a href='/admin/banip/remove?ip_id=[% ip.ip_id %]'&gt;Remove&lt;/a&gt; &lt;/td&gt;
+    &lt;/tr&gt;
+    [% END %]
+    &lt;/table&gt;
+    
+    &lt;p&gt;&lt;/p&gt;
+    
+    &lt;form action='/admin/banip/add' method='POST'&gt;
+    &lt;table border='0' style='margin: 2em'&gt;
+        &lt;tr class='title'&gt;&lt;td&gt; Add a new IP Range &lt;/td&gt;&lt;/tr&gt;
+        &lt;tr&gt;
+            &lt;td&gt; From IP: &lt;input type='text' name='from_ip' /&gt; eg: 222.137.238.1&lt;br /&gt;
+                 End &amp;nbsp; IP: &lt;input type='text' name='end_ip' /&gt;eg: 222.137.238.255&lt;br /&gt;
+                 &lt;input type='submit' /&gt;
+            &lt;/td&gt;
+        &lt;/tr&gt;
+    &lt;/table&gt;
+&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/ban_ip/default.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,57 +1,57 @@
-[% url_base = '/admin' %]
-
-&lt;script type=&quot;text/javascript&quot;&gt;
-    google.load(&quot;jqueryui&quot;, &quot;1.5.3&quot;);
-&lt;/script&gt;
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='admin_tabs' class='tabs'&gt;
-    &lt;ul&gt;
-        &lt;li&gt;&lt;a href='#menu'&gt;&lt;span&gt;Menu&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#forum'&gt;&lt;span&gt;Forum&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#topic'&gt;&lt;span&gt;Topic&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#user'&gt;&lt;span&gt;User&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#settings'&gt;&lt;span&gt;Settings&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#ban'&gt;&lt;span&gt;Ban&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#tools'&gt;&lt;span&gt;Tools&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#log'&gt;&lt;span&gt;Log&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div id='menu'&gt;
-        &lt;a href='[% url_base %]'&gt;Site Map&lt;/a&gt;
-    &lt;/div&gt;
-    &lt;div id='forum'&gt;
-        &lt;a href='[% url_base %]/forum'&gt;Forum Lists&lt;/a&gt; | &lt;a href='/forum/create'&gt;Create a Forum&lt;/a&gt; | &lt;a href='[% url_base %]/forum/merge_forums'&gt;Merge Forums&lt;/a&gt;
-    &lt;/div&gt;
-    &lt;div id='topic'&gt;
-        &lt;a href='[% url_base %]/topic'&gt;Topic Lists&lt;/a&gt;
-    &lt;/div&gt;
-    &lt;div id='user'&gt;
-        &lt;a href='[% url_base %]/user'&gt;User Lists&lt;/a&gt; | &lt;a href='[% url_base %]/user/edit'&gt;Edit User&lt;/a&gt;
-    &lt;/div&gt;
-    &lt;div id='settings'&gt;
-        &lt;a href='[% url_base %]/settings'&gt;Global Settings&lt;/a&gt;
-    &lt;/div&gt;
-    &lt;div id='ban'&gt;
-        &lt;a href='[% url_base %]/banip'&gt;Ban IP&lt;/a&gt;
-    &lt;/div&gt;
-    &lt;div id='tools'&gt;
-        &lt;a href='/admin/tools/flush_cache'&gt;Flush Cache&lt;/a&gt; | &lt;a href='/admin/tools/cache_stat'&gt;Cache Stats&lt;/a&gt;
-    &lt;/div&gt;
-    &lt;div id='log'&gt;
-        &lt;a href='/admin/log/error_log'&gt;Error Log&lt;/a&gt; | &lt;a href='/admin/log/path_log'&gt;Path Log&lt;/a&gt;
-    &lt;/div&gt;
-&lt;/div&gt;
-
-&lt;script&gt;
-    $(function() {
-        $('#admin_tabs &gt; ul').tabs();
-        $('#admin_tabs &gt; ul').tabs('select', [% IF c.req.path.match('forum') %]1[% ELSIF c.req.path.match('user') %]2[% ELSIF c.req.path.match('settings') %]3[% ELSIF c.req.path.match('ban') %]4[% ELSIF c.req.path.match('tools') %]5[% ELSIF c.req.path.match('log') %]6[% ELSE %]0[% END %]);
-    });
-&lt;/script&gt;
-
-&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
-
-&lt;table align='center' class='tablewidth'&gt;
-&lt;tr&gt;&lt;td valign='top' width='*'&gt;
-[% content %]
+[% url_base = '/admin' %]
+
+&lt;script type=&quot;text/javascript&quot;&gt;
+    google.load(&quot;jqueryui&quot;, &quot;1.5.3&quot;);
+&lt;/script&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='admin_tabs' class='tabs'&gt;
+    &lt;ul&gt;
+        &lt;li&gt;&lt;a href='#menu'&gt;&lt;span&gt;Menu&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#forum'&gt;&lt;span&gt;Forum&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#topic'&gt;&lt;span&gt;Topic&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#user'&gt;&lt;span&gt;User&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#settings'&gt;&lt;span&gt;Settings&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#ban'&gt;&lt;span&gt;Ban&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#tools'&gt;&lt;span&gt;Tools&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#log'&gt;&lt;span&gt;Log&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div id='menu'&gt;
+        &lt;a href='[% url_base %]'&gt;Site Map&lt;/a&gt;
+    &lt;/div&gt;
+    &lt;div id='forum'&gt;
+        &lt;a href='[% url_base %]/forum'&gt;Forum Lists&lt;/a&gt; | &lt;a href='/forum/create'&gt;Create a Forum&lt;/a&gt; | &lt;a href='[% url_base %]/forum/merge_forums'&gt;Merge Forums&lt;/a&gt;
+    &lt;/div&gt;
+    &lt;div id='topic'&gt;
+        &lt;a href='[% url_base %]/topic'&gt;Topic Lists&lt;/a&gt;
+    &lt;/div&gt;
+    &lt;div id='user'&gt;
+        &lt;a href='[% url_base %]/user'&gt;User Lists&lt;/a&gt; | &lt;a href='[% url_base %]/user/edit'&gt;Edit User&lt;/a&gt;
+    &lt;/div&gt;
+    &lt;div id='settings'&gt;
+        &lt;a href='[% url_base %]/settings'&gt;Global Settings&lt;/a&gt;
+    &lt;/div&gt;
+    &lt;div id='ban'&gt;
+        &lt;a href='[% url_base %]/banip'&gt;Ban IP&lt;/a&gt;
+    &lt;/div&gt;
+    &lt;div id='tools'&gt;
+        &lt;a href='/admin/tools/flush_cache'&gt;Flush Cache&lt;/a&gt; | &lt;a href='/admin/tools/cache_stat'&gt;Cache Stats&lt;/a&gt;
+    &lt;/div&gt;
+    &lt;div id='log'&gt;
+        &lt;a href='/admin/log/error_log'&gt;Error Log&lt;/a&gt; | &lt;a href='/admin/log/path_log'&gt;Path Log&lt;/a&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+
+&lt;script&gt;
+    $(function() {
+        $('#admin_tabs &gt; ul').tabs();
+        $('#admin_tabs &gt; ul').tabs('select', [% IF c.req.path.match('forum') %]1[% ELSIF c.req.path.match('user') %]2[% ELSIF c.req.path.match('settings') %]3[% ELSIF c.req.path.match('ban') %]4[% ELSIF c.req.path.match('tools') %]5[% ELSIF c.req.path.match('log') %]6[% ELSE %]0[% END %]);
+    });
+&lt;/script&gt;
+
+&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
+
+&lt;table align='center' class='tablewidth'&gt;
+&lt;tr&gt;&lt;td valign='top' width='*'&gt;
+[% content %]
 &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
\ No newline at end of file</diff>
      <filename>templates/admin/bar.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,15 @@
-[% WRAPPER 'admin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;&lt;td colspan='4'&gt;Forum List&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;CODE&lt;/td&gt;&lt;td&gt;NAME&lt;/td&gt;&lt;td&gt;ACTION&lt;/td&gt;&lt;/tr&gt;
-[% FOREACH f IN forums %]
-&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
-    &lt;td&gt;[% f.forum_id %]&lt;/td&gt;&lt;td&gt;[% f.forum_code %]&lt;/td&gt;&lt;td&gt;&lt;a href='/forum/[% f.forum_code %]'&gt;[% f.name %]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href='/forumadmin/[% f.forum_id %]/basic'&gt;Edit&lt;/a&gt; | &lt;a href='/admin/forum/remove?forum_id=[% f.forum_id %]'&gt;Delete&lt;/a&gt; | &lt;a href='/forumadmin/[% f.forum_id %]/style'&gt;Edit Style&lt;/a&gt; &lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;/table&gt;
-&lt;/div&gt;
-
+[% WRAPPER 'admin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;&lt;td colspan='4'&gt;Forum List&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;CODE&lt;/td&gt;&lt;td&gt;NAME&lt;/td&gt;&lt;td&gt;ACTION&lt;/td&gt;&lt;/tr&gt;
+[% FOREACH f IN forums %]
+&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
+    &lt;td&gt;[% f.forum_id %]&lt;/td&gt;&lt;td&gt;[% f.forum_code %]&lt;/td&gt;&lt;td&gt;&lt;a href='/forum/[% f.forum_code %]'&gt;[% f.name %]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href='/forumadmin/[% f.forum_id %]/basic'&gt;Edit&lt;/a&gt; | &lt;a href='/admin/forum/remove?forum_id=[% f.forum_id %]'&gt;Delete&lt;/a&gt; | &lt;a href='/forumadmin/[% f.forum_id %]/style'&gt;Edit Style&lt;/a&gt; &lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;/table&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/forum/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,20 +1,20 @@
-[% WRAPPER 'admin/bar.html' %]
-
-
-[% IF message; message; ELSE %]
-
-&lt;div class='one'&gt;
-&lt;form method='get'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;&lt;td&gt;Merge FOrum&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td class='misc2' align='center'&gt;
-    Merge OLD Forum ID &lt;input type='text' name='from_id' /&gt; To NEW forum ID &lt;input type='text' name='to_id' /&gt;&lt;br /&gt;
-    &lt;input type='submit' /&gt;
-&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-[% END %]
-
+[% WRAPPER 'admin/bar.html' %]
+
+
+[% IF message; message; ELSE %]
+
+&lt;div class='one'&gt;
+&lt;form method='get'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;&lt;td&gt;Merge FOrum&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td class='misc2' align='center'&gt;
+    Merge OLD Forum ID &lt;input type='text' name='from_id' /&gt; To NEW forum ID &lt;input type='text' name='to_id' /&gt;&lt;br /&gt;
+    &lt;input type='submit' /&gt;
+&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+[% END %]
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/forum/merge_forums.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,15 @@
-[% WRAPPER 'admin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='forum1'&gt;&lt;td&gt;
-[% IF c.req.param('m') || message %]
-&lt;pre&gt;&lt;span class='highlight'&gt;[% c.req.param('m') || message %]&lt;/span&gt;&lt;/pre&gt;
-[% ELSE %]
-Explaination for Forum Administrator's Actions.
-[% END %]
-&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
+[% WRAPPER 'admin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='forum1'&gt;&lt;td&gt;
+[% IF c.req.param('m') || message %]
+&lt;pre&gt;&lt;span class='highlight'&gt;[% c.req.param('m') || message %]&lt;/span&gt;&lt;/pre&gt;
+[% ELSE %]
+Explaination for Forum Administrator's Actions.
+[% END %]
+&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,31 +1,31 @@
-[% PROCESS sub/date.html %]
-
-[% WRAPPER 'admin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='misc2'&gt;&lt;td colspan='4'&gt;
-    &lt;span style='float:right; clear: right'&gt;
-        &lt;form method='get'&gt;
-        Search Text: &lt;input type='text' name='text' /&gt;&lt;input type='submit' /&gt;
-        &lt;/form&gt;
-    &lt;/span&gt;
-    Type: &lt;a href='[% url_prefix %]'&gt;ALL&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=info'&gt;Info&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=debug'&gt;Debug&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=warn'&gt;Warn&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=error'&gt;Error&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=fatal'&gt;Fatal&lt;/a&gt;
-&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='title'&gt;&lt;td&gt;ID&lt;/td&gt;
-    [% UNLESS has_level %]&lt;td&gt;Level&lt;/td&gt;[% END %]
-    &lt;td&gt;Text&lt;/td&gt;&lt;td&gt;Time&lt;/td&gt;&lt;/tr&gt;
-[% FOREACH error IN errors %]
-&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
-    &lt;td&gt;[% error.error_id %]&lt;/td&gt;
-    [% UNLESS has_level %]&lt;td&gt;[% error.level %]&lt;/td&gt;[% END %]
-    &lt;td&gt;&lt;textarea cols='85'&gt;[% error.text | html %]&lt;/textarea&gt;&lt;/td&gt;
-    &lt;td&gt;[% date_format(error.time) %]&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
+[% PROCESS sub/date.html %]
+
+[% WRAPPER 'admin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='misc2'&gt;&lt;td colspan='4'&gt;
+    &lt;span style='float:right; clear: right'&gt;
+        &lt;form method='get'&gt;
+        Search Text: &lt;input type='text' name='text' /&gt;&lt;input type='submit' /&gt;
+        &lt;/form&gt;
+    &lt;/span&gt;
+    Type: &lt;a href='[% url_prefix %]'&gt;ALL&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=info'&gt;Info&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=debug'&gt;Debug&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=warn'&gt;Warn&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=error'&gt;Error&lt;/a&gt; | &lt;a href='[% url_prefix %]?level=fatal'&gt;Fatal&lt;/a&gt;
+&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='title'&gt;&lt;td&gt;ID&lt;/td&gt;
+    [% UNLESS has_level %]&lt;td&gt;Level&lt;/td&gt;[% END %]
+    &lt;td&gt;Text&lt;/td&gt;&lt;td&gt;Time&lt;/td&gt;&lt;/tr&gt;
+[% FOREACH error IN errors %]
+&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
+    &lt;td&gt;[% error.error_id %]&lt;/td&gt;
+    [% UNLESS has_level %]&lt;td&gt;[% error.level %]&lt;/td&gt;[% END %]
+    &lt;td&gt;&lt;textarea cols='85'&gt;[% error.text | html %]&lt;/textarea&gt;&lt;/td&gt;
+    &lt;td&gt;[% date_format(error.time) %]&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/log/error_log.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,30 +1,30 @@
-[% PROCESS sub/date.html %]
-
-[% WRAPPER 'admin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='misc1'&gt;&lt;td colspan='6'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='title'&gt;
-    &lt;td&gt;User ID&lt;/td&gt;
-    &lt;td&gt;Path&lt;/td&gt;
-    &lt;td&gt;Get&lt;/td&gt;
-    &lt;td width='220'&gt;Post&lt;/td&gt;
-    &lt;td&gt;Time&lt;/td&gt;
-    &lt;td&gt;Load Time&lt;/td&gt;
-&lt;/tr&gt;
-[% FOREACH path IN paths %]
-&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
-    &lt;td&gt;[% path.user_id %]&lt;/td&gt;
-    &lt;td&gt;[% path.path %]&lt;/td&gt;
-    &lt;td&gt;[% path.get %]&lt;/td&gt;
-    &lt;td&gt;&lt;textarea cols='30'&gt;[% path.post %]&lt;/textarea&gt;&lt;/td&gt;
-    &lt;td&gt;[% date_format(path.time) %]&lt;/td&gt;
-    &lt;td&gt;[% path.loadtime %]&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr class='misc1'&gt;&lt;td colspan='6'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
+[% PROCESS sub/date.html %]
+
+[% WRAPPER 'admin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='misc1'&gt;&lt;td colspan='6'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='title'&gt;
+    &lt;td&gt;User ID&lt;/td&gt;
+    &lt;td&gt;Path&lt;/td&gt;
+    &lt;td&gt;Get&lt;/td&gt;
+    &lt;td width='220'&gt;Post&lt;/td&gt;
+    &lt;td&gt;Time&lt;/td&gt;
+    &lt;td&gt;Load Time&lt;/td&gt;
+&lt;/tr&gt;
+[% FOREACH path IN paths %]
+&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
+    &lt;td&gt;[% path.user_id %]&lt;/td&gt;
+    &lt;td&gt;[% path.path %]&lt;/td&gt;
+    &lt;td&gt;[% path.get %]&lt;/td&gt;
+    &lt;td&gt;&lt;textarea cols='30'&gt;[% path.post %]&lt;/textarea&gt;&lt;/td&gt;
+    &lt;td&gt;[% date_format(path.time) %]&lt;/td&gt;
+    &lt;td&gt;[% path.loadtime %]&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr class='misc1'&gt;&lt;td colspan='6'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/log/path_log.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,67 +1,67 @@
-[% USE FillInForm %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-[% c.load_once(&quot;jquery/validate.js&quot;) %]
-
-
-[% WRAPPER 'admin/bar.html' %]
-
-[% FILTER fillinform fdat =&gt; fulfill || c.req.params %]
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	[% IF thanks %]
-    &lt;tr class='misc2'&gt;&lt;td colspan='2' align=&quot;center&quot;&gt;&lt;strong&gt;&lt;span class='highlight'&gt;Settings OK&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Site&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;
-	    &lt;td align='right'&gt;&lt;label for='site_domain'&gt;Site Domain:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='text' name='site_domain' id='site_domain' value='[% c.req.base %]' size='32' /&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Function On/Off&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;
-	    &lt;td width='40%' align='right'&gt;&lt;label for='maintain'&gt;Site Maintain:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='radio' name='maintain' id='maintain' checked='checked' value='1' /&gt;On &lt;input type='radio' name='maintain' id='maintain' value='0' /&gt;Off&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;
-	    &lt;td align='right'&gt;&lt;label for='register'&gt;Register:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='radio' name='register' id='register' checked='checked' value='1' /&gt;On &lt;input type='radio' name='register' id='register' value='0' /&gt;Off&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;
-	    &lt;td align='right'&gt;&lt;label for='create_forum'&gt;Create Forum:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='radio' name='create_forum' id='create_forum' checked='checked' value='1' /&gt;On &lt;input type='radio' name='create_forum' id='create_forum' value='0' /&gt;Off&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;
-	    &lt;td align='right'&gt;&lt;label for='create_forum'&gt;Poll:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='radio' name='poll' id='poll' checked='checked' value='1' /&gt;On &lt;input type='radio' name='poll' id='poll' value='0' /&gt;Off&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Items Per Page&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;
-	    &lt;td width='40%' align='right'&gt;&lt;label for='forum_per_page'&gt;Forum:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='text' name='forum_per_page' id='forum_per_page' size='3' /&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;
-	    &lt;td width='40%' align='right'&gt;&lt;label for='topic_per_page'&gt;Topic:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='text' name='topic_per_page' id='topic_per_page' size='3' /&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;
-	    &lt;td width='40%' align='right'&gt;&lt;label for='message_per_page'&gt;Message:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='text' name='message_per_page' id='message_per_page' size='3' /&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Items Per Day&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;
-	    &lt;td width='40%' align='right'&gt;&lt;label for='most_deletion_topic'&gt;Most Topics Deleted:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='text' name='most_deletion_topic' id='most_deletion_topic' size='3' /&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-[% END %]
-
-    &lt;/div&gt;
-&lt;/div&gt;
-
+[% USE FillInForm %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+[% c.load_once(&quot;jquery/validate.js&quot;) %]
+
+
+[% WRAPPER 'admin/bar.html' %]
+
+[% FILTER fillinform fdat =&gt; fulfill || c.req.params %]
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	[% IF thanks %]
+    &lt;tr class='misc2'&gt;&lt;td colspan='2' align=&quot;center&quot;&gt;&lt;strong&gt;&lt;span class='highlight'&gt;Settings OK&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Site&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;
+	    &lt;td align='right'&gt;&lt;label for='site_domain'&gt;Site Domain:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='text' name='site_domain' id='site_domain' value='[% c.req.base %]' size='32' /&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Function On/Off&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;
+	    &lt;td width='40%' align='right'&gt;&lt;label for='maintain'&gt;Site Maintain:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='radio' name='maintain' id='maintain' checked='checked' value='1' /&gt;On &lt;input type='radio' name='maintain' id='maintain' value='0' /&gt;Off&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;
+	    &lt;td align='right'&gt;&lt;label for='register'&gt;Register:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='radio' name='register' id='register' checked='checked' value='1' /&gt;On &lt;input type='radio' name='register' id='register' value='0' /&gt;Off&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;
+	    &lt;td align='right'&gt;&lt;label for='create_forum'&gt;Create Forum:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='radio' name='create_forum' id='create_forum' checked='checked' value='1' /&gt;On &lt;input type='radio' name='create_forum' id='create_forum' value='0' /&gt;Off&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;
+	    &lt;td align='right'&gt;&lt;label for='create_forum'&gt;Poll:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='radio' name='poll' id='poll' checked='checked' value='1' /&gt;On &lt;input type='radio' name='poll' id='poll' value='0' /&gt;Off&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Items Per Page&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;
+	    &lt;td width='40%' align='right'&gt;&lt;label for='forum_per_page'&gt;Forum:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='text' name='forum_per_page' id='forum_per_page' size='3' /&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;
+	    &lt;td width='40%' align='right'&gt;&lt;label for='topic_per_page'&gt;Topic:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='text' name='topic_per_page' id='topic_per_page' size='3' /&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;
+	    &lt;td width='40%' align='right'&gt;&lt;label for='message_per_page'&gt;Message:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='text' name='message_per_page' id='message_per_page' size='3' /&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Items Per Day&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;
+	    &lt;td width='40%' align='right'&gt;&lt;label for='most_deletion_topic'&gt;Most Topics Deleted:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='text' name='most_deletion_topic' id='most_deletion_topic' size='3' /&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+[% END %]
+
+    &lt;/div&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/settings/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,39 +1,39 @@
-[% WRAPPER 'admin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;form method='POST' action='/admin/topic/batch_ban'&gt;
-
-&lt;p&gt;&lt;input type='submit' name='ban' value='Batch Ban' /&gt;&lt;/p&gt;
-&lt;p&gt;&lt;input type='button' name='selectall' value='Select All' onclick='javascript:SelectAll()' /&gt;
-   &lt;input type='button' name='selectnone' value='Select None' onclick='javascript:SelectNone()' /&gt;
-&lt;/p&gt;
-
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;&lt;td colspan='3'&gt;Topic List&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;Title&lt;/td&gt;&lt;td&gt;ACTION&lt;/td&gt;&lt;/tr&gt;
-[% FOREACH t IN topics %]
-&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
-    &lt;td&gt;&lt;input type='checkbox' name='topic_id' value='[% t.topic_id %]' /&gt; [% t.topic_id %]&lt;/td&gt;&lt;td&gt;&lt;a href='/forum/[% t.forum_id %]/[% t.topic_id %]'&gt;[% t.title %]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href='/forum/[% t.forum_id %]/topic/[% t.topic_id %]/ban'&gt;Ban&lt;/a&gt; &lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr class='misc1'&gt;&lt;td colspan='3'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-&lt;/form&gt;
-
-[% END %]
-
-&lt;script type=&quot;text/javascript&quot;&gt;
-
-function SelectAll() {
-    $(&quot;input[name=topic_id]&quot;).each(function() {
-        this.checked = true;
-    } );
-}
-function SelectNone() {
-    $(&quot;input[name=topic_id]&quot;).each(function() {
-        this.checked = false;
-    } );
-}
-
+[% WRAPPER 'admin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;form method='POST' action='/admin/topic/batch_ban'&gt;
+
+&lt;p&gt;&lt;input type='submit' name='ban' value='Batch Ban' /&gt;&lt;/p&gt;
+&lt;p&gt;&lt;input type='button' name='selectall' value='Select All' onclick='javascript:SelectAll()' /&gt;
+   &lt;input type='button' name='selectnone' value='Select None' onclick='javascript:SelectNone()' /&gt;
+&lt;/p&gt;
+
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;&lt;td colspan='3'&gt;Topic List&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;Title&lt;/td&gt;&lt;td&gt;ACTION&lt;/td&gt;&lt;/tr&gt;
+[% FOREACH t IN topics %]
+&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
+    &lt;td&gt;&lt;input type='checkbox' name='topic_id' value='[% t.topic_id %]' /&gt; [% t.topic_id %]&lt;/td&gt;&lt;td&gt;&lt;a href='/forum/[% t.forum_id %]/[% t.topic_id %]'&gt;[% t.title %]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href='/forum/[% t.forum_id %]/topic/[% t.topic_id %]/ban'&gt;Ban&lt;/a&gt; &lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr class='misc1'&gt;&lt;td colspan='3'&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+&lt;/form&gt;
+
+[% END %]
+
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+function SelectAll() {
+    $(&quot;input[name=topic_id]&quot;).each(function() {
+        this.checked = true;
+    } );
+}
+function SelectNone() {
+    $(&quot;input[name=topic_id]&quot;).each(function() {
+        this.checked = false;
+    } );
+}
+
 &lt;/script&gt;
\ No newline at end of file</diff>
      <filename>templates/admin/topic/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,52 +1,52 @@
-[% WRAPPER 'admin/bar.html' %]
-
-[% url_base = '/admin/user' %]
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td class='misc1'&gt;
-
-[% IF error %]
-&lt;h2&gt;&lt;span class='highlight'&gt;
-[% SWITCH error %]
-[% CASE 'NO_RECORD' %]
-No such user.
-[% CASE %]
-[% error %]
-[% END %]
-&lt;/h2&gt;
-[% END %]
-
-&lt;form method='get' action='/admin/user/edit'&gt;
-&lt;table border='0'&gt;
-&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;UserID&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='user_id' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td&gt;OR&lt;/td&gt;&lt;td&gt;Username&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td&gt;OR&lt;/td&gt;&lt;td&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td colspan='3'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-
-[% IF user %]
-&lt;br /&gt;&lt;h2&gt;&lt;span class='highlight'&gt;Edit User&lt;/span&gt;&lt;/h2&gt;
-&lt;form method='post' action='/admin/user/edit'&gt;
-&lt;input type='hidden' name='user_id' value='[% user.user_id %]' /&gt;
-&lt;table&gt;
-&lt;tr class='misc2'&gt;&lt;td align='right'&gt;UserID&lt;/td&gt;&lt;td&gt;[% user.user_id %] (&lt;a href='/admin/user/ban?username=[% user.username %]'&gt;Ban&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
-[% FOREACH col IN ['username', 'email', 'nickname', 'threads', 'replies'] %]
-&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;&lt;td align='right'&gt;[% col | ucfirst %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='[% col %]' value='[% user.${col} %]' /&gt;&lt;/td&gt;&lt;/tr&gt;
-[% END %]
-&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Status:&lt;/td&gt;&lt;td&gt;
-    &lt;select name='status'&gt;
-        [% FOREACH st IN ['banned','blocked','verified','unverified','terminated'] %]
-        &lt;option value='[% st %]'[% IF user.status == st %]selected='selected'[% END %]&gt;[% st | ucfirst %]&lt;/option&gt;
-        [% END %]
-    &lt;/select&gt;
-&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-[% END %]
-
-&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-
+[% WRAPPER 'admin/bar.html' %]
+
+[% url_base = '/admin/user' %]
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td class='misc1'&gt;
+
+[% IF error %]
+&lt;h2&gt;&lt;span class='highlight'&gt;
+[% SWITCH error %]
+[% CASE 'NO_RECORD' %]
+No such user.
+[% CASE %]
+[% error %]
+[% END %]
+&lt;/h2&gt;
+[% END %]
+
+&lt;form method='get' action='/admin/user/edit'&gt;
+&lt;table border='0'&gt;
+&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;UserID&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='user_id' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;OR&lt;/td&gt;&lt;td&gt;Username&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;OR&lt;/td&gt;&lt;td&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td colspan='3'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+
+[% IF user %]
+&lt;br /&gt;&lt;h2&gt;&lt;span class='highlight'&gt;Edit User&lt;/span&gt;&lt;/h2&gt;
+&lt;form method='post' action='/admin/user/edit'&gt;
+&lt;input type='hidden' name='user_id' value='[% user.user_id %]' /&gt;
+&lt;table&gt;
+&lt;tr class='misc2'&gt;&lt;td align='right'&gt;UserID&lt;/td&gt;&lt;td&gt;[% user.user_id %] (&lt;a href='/admin/user/ban?username=[% user.username %]'&gt;Ban&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
+[% FOREACH col IN ['username', 'email', 'nickname', 'threads', 'replies'] %]
+&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;&lt;td align='right'&gt;[% col | ucfirst %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='[% col %]' value='[% user.${col} %]' /&gt;&lt;/td&gt;&lt;/tr&gt;
+[% END %]
+&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Status:&lt;/td&gt;&lt;td&gt;
+    &lt;select name='status'&gt;
+        [% FOREACH st IN ['banned','blocked','verified','unverified','terminated'] %]
+        &lt;option value='[% st %]'[% IF user.status == st %]selected='selected'[% END %]&gt;[% st | ucfirst %]&lt;/option&gt;
+        [% END %]
+    &lt;/select&gt;
+&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+[% END %]
+
+&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/user/edit.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,21 +1,21 @@
-[% WRAPPER 'admin/bar.html' %]
-
-[% url_base = '/admin/user' %]
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;&lt;td colspan='4'&gt;User Lists&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;NAME&lt;/td&gt;&lt;td&gt;Status&lt;/td&gt;&lt;td&gt;ACTION&lt;/td&gt;&lt;/tr&gt;
-[% FOREACH u IN users %]
-&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
-    &lt;td&gt;[% u.user_id %]&lt;/td&gt;
-    &lt;td&gt;[% u.username %]&lt;/td&gt;
-    &lt;td&gt;[% u.status %]&lt;/td&gt;
-    &lt;td&gt; &lt;a href='[% url_base %]/edit?user_id=[% u.user_id %]'&gt;Edit&lt;/a&gt; &lt;a href='[% url_base %]/ban?username=[% u.username %]'&gt;Ban&lt;/a&gt;&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
+[% WRAPPER 'admin/bar.html' %]
+
+[% url_base = '/admin/user' %]
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;&lt;td colspan='4'&gt;User Lists&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;NAME&lt;/td&gt;&lt;td&gt;Status&lt;/td&gt;&lt;td&gt;ACTION&lt;/td&gt;&lt;/tr&gt;
+[% FOREACH u IN users %]
+&lt;tr class='misc[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
+    &lt;td&gt;[% u.user_id %]&lt;/td&gt;
+    &lt;td&gt;[% u.username %]&lt;/td&gt;
+    &lt;td&gt;[% u.status %]&lt;/td&gt;
+    &lt;td&gt; &lt;a href='[% url_base %]/edit?user_id=[% u.user_id %]'&gt;Edit&lt;/a&gt; &lt;a href='[% url_base %]/ban?username=[% u.username %]'&gt;Ban&lt;/a&gt;&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr class='misc1'&gt;&lt;td colspan='4'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/admin/user/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,139 +1,139 @@
-[% USE FillInForm %]
-
-[% IF mode == 'edit' %]
-[% UNLESS c.req.method == 'POST';
-    comment_title = comment.title | decodeHTML;
-    filldata = {
-        title =&gt; comment_title,
-        text  =&gt; comment.text,
-        formatter =&gt; comment.formatter,
-    };
-END; %]
-[% ELSIF mode == 'topic' %]
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-[% END %]
-
-[% FILTER fillinform fdat =&gt; filldata || c.req.params %]
-
-&lt;div class='one'&gt;
-&lt;form method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
-&lt;table align='center' border='1' cellpadding='6'&gt;
-  &lt;tr class='title'&gt;&lt;td colspan='2'&gt;
-    [% IF mode == 'edit' %]Eidt a Comment[% ELSIF mode == 'reply' %]Reply a Comment[% ELSIF mode == 'topic' %][% c.loc(&quot;New Topic&quot;) %][% END %]
-  &lt;/td&gt;&lt;/tr&gt;
-  [% IF mode == 'reply' AND comment %]
-  &lt;tr class='forum2'&gt;&lt;td colspan='2' align='center'&gt;
-    &lt;table style='width:80%'&gt;
-        &lt;tr&gt;&lt;td colspan='2' class='title'&gt;[% comment.title %]&lt;/td&gt;&lt;/tr&gt;
-        &lt;tr class='forum1'&gt;&lt;td width='150' valign='top'&gt;
-            [% INCLUDE 'include/user_profile_simple.html' user = comment.author %]
-        &lt;/td&gt;&lt;td&gt;
-            [% comment.text %]
-        &lt;/td&gt;&lt;/tr&gt;
-    &lt;/table&gt;
-  &lt;/td&gt;&lt;/tr&gt;
-  [% END %]
-  &lt;tr class='forum1'&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' size='60' maxlength='80' name='title' /&gt;
-  [% IF c.form.error('title') %]title should be 1-80 chars.[% END %]
-  &lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum2'&gt;&lt;td align=&quot;right&quot;&gt;[% c.loc(&quot;Formatter&quot;) %]&lt;/td&gt;
-    &lt;td&gt;&lt;input type='radio' name='formatter' value='ubb' checked='yes' onclick=&quot;javascript:switch_formatter()&quot; /&gt;UBB &amp;nbsp; &lt;input type='radio' name='formatter' value='textile' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Textile &amp;nbsp; &lt;input type='radio' name='formatter' value='wiki' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Wiki &amp;nbsp; &lt;input type='radio' name='formatter' value='pod' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Pod &amp;nbsp; &lt;input type='radio' name='formatter' value='plain' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Plain &amp;nbsp;[% IF roles.site.admin %] &lt;input type='radio' name='formatter' value='html' onclick=&quot;javascript:switch_formatter()&quot; /&gt;HTML &amp;nbsp;[% END %] &lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr class='forum1'&gt;
-    &lt;td align='center' valign='middle'&gt;
-    
-    &lt;div class='ubb'&gt;
-    [% INCLUDE format/emot.html %]
-    &lt;/div&gt;
-    &lt;div class='wiki' style='display:none'&gt;
-&lt;strong&gt;Wiki Markup Help&lt;/strong&gt;&lt;br /&gt;
-=Heading1=&lt;br /&gt;
-==Heading2==&lt;br /&gt;
-===Heading3===&lt;br /&gt;
-&lt;br /&gt;
-*bold*&lt;br /&gt;
-_italic_&lt;br /&gt;
-~~strike~~&lt;br /&gt;
-^superscript^&lt;br /&gt;
-,,subscript,,&lt;br /&gt;
-`inline code`&lt;br /&gt;
-&lt;br /&gt;
-Indent lists 2 spaces:&lt;br /&gt;
-  * bullet item&lt;br /&gt;
-  # numbered list&lt;br /&gt;
-&lt;br /&gt;
-{{{&lt;br /&gt;
-verbatim code block&lt;br /&gt;
-}}}&lt;br /&gt;
-&lt;br /&gt;
-[http://domain/page label]&lt;br /&gt;
-http://domain/page&lt;br /&gt;
-&lt;br /&gt;
-|| table || cells ||
-    &lt;/div&gt;
-    
-    &lt;/td&gt;&lt;td&gt;
-
-    &lt;div class='ubb'&gt;
-    [% WRAPPER 'format/bbcode.html' %]
-    &lt;/div&gt;
-
-	&lt;textarea name=&quot;text&quot; id='text' style='width: 90%' rows=&quot;15&quot;&gt;&lt;/textarea&gt;
-	[% IF c.form.error('text') %]text is required.[% END %]
-
-	&lt;div class='ubb'&gt;
-	[% END %]
-    &lt;/div&gt;
-
-  &lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum2'&gt;&lt;td align='right'&gt;[% c.loc('Upload Attachment') %]&lt;/td&gt;&lt;td&gt;
-  [% IF mode == 'edit' AND upload %]
-  [% USE Math %]
-
-  [% upload_id = upload.upload_id;
-     filetype  = upload.filetype;
-     dir1 = upload_id / 3200 / 3200;
-     dir1 = Math.int(dir1);
-     dir2 = upload_id / 3200;
-     dir2 = Math.int(dir2);
-  %]
-  &lt;input type='radio' name='attachment_action' value='stay' checked='yes' /&gt; Stay as before [ &lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot;&gt;[% upload.filename %]&lt;/a&gt; ]&lt;br /&gt;
-  &lt;input type='radio' name='attachment_action' value='delete' /&gt; Delete it&lt;br /&gt;
-  &lt;input type='radio' name='attachment_action' value='replace' /&gt; Replace it&lt;br /&gt;
-  [% END %]
-  [% INCLUDE upload/input.html %]
-  &lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum1'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt; &lt;input type='button' value='Preview' name='btn_preview' onclick=&quot;javascript:preview()&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum2'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;div id='preview'&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-[% END %]
-
-[% IF mode == 'topic' %]
-    &lt;/div&gt;
-&lt;/div&gt;
-[% END %]
-
+[% USE FillInForm %]
+
+[% IF mode == 'edit' %]
+[% UNLESS c.req.method == 'POST';
+    comment_title = comment.title | decodeHTML;
+    filldata = {
+        title =&gt; comment_title,
+        text  =&gt; comment.text,
+        formatter =&gt; comment.formatter,
+    };
+END; %]
+[% ELSIF mode == 'topic' %]
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+[% END %]
+
+[% FILTER fillinform fdat =&gt; filldata || c.req.params %]
+
+&lt;div class='one'&gt;
+&lt;form method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
+&lt;table align='center' border='1' cellpadding='6'&gt;
+  &lt;tr class='title'&gt;&lt;td colspan='2'&gt;
+    [% IF mode == 'edit' %]Eidt a Comment[% ELSIF mode == 'reply' %]Reply a Comment[% ELSIF mode == 'topic' %][% c.loc(&quot;New Topic&quot;) %][% END %]
+  &lt;/td&gt;&lt;/tr&gt;
+  [% IF mode == 'reply' AND comment %]
+  &lt;tr class='forum2'&gt;&lt;td colspan='2' align='center'&gt;
+    &lt;table style='width:80%'&gt;
+        &lt;tr&gt;&lt;td colspan='2' class='title'&gt;[% comment.title %]&lt;/td&gt;&lt;/tr&gt;
+        &lt;tr class='forum1'&gt;&lt;td width='150' valign='top'&gt;
+            [% INCLUDE 'include/user_profile_simple.html' user = comment.author %]
+        &lt;/td&gt;&lt;td&gt;
+            [% comment.text %]
+        &lt;/td&gt;&lt;/tr&gt;
+    &lt;/table&gt;
+  &lt;/td&gt;&lt;/tr&gt;
+  [% END %]
+  &lt;tr class='forum1'&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' size='60' maxlength='80' name='title' /&gt;
+  [% IF c.form.error('title') %]title should be 1-80 chars.[% END %]
+  &lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum2'&gt;&lt;td align=&quot;right&quot;&gt;[% c.loc(&quot;Formatter&quot;) %]&lt;/td&gt;
+    &lt;td&gt;&lt;input type='radio' name='formatter' value='ubb' checked='yes' onclick=&quot;javascript:switch_formatter()&quot; /&gt;UBB &amp;nbsp; &lt;input type='radio' name='formatter' value='textile' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Textile &amp;nbsp; &lt;input type='radio' name='formatter' value='wiki' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Wiki &amp;nbsp; &lt;input type='radio' name='formatter' value='pod' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Pod &amp;nbsp; &lt;input type='radio' name='formatter' value='plain' onclick=&quot;javascript:switch_formatter()&quot; /&gt;Plain &amp;nbsp;[% IF roles.site.admin %] &lt;input type='radio' name='formatter' value='html' onclick=&quot;javascript:switch_formatter()&quot; /&gt;HTML &amp;nbsp;[% END %] &lt;/td&gt;
+  &lt;/tr&gt;
+  &lt;tr class='forum1'&gt;
+    &lt;td align='center' valign='middle'&gt;
+    
+    &lt;div class='ubb'&gt;
+    [% INCLUDE format/emot.html %]
+    &lt;/div&gt;
+    &lt;div class='wiki' style='display:none'&gt;
+&lt;strong&gt;Wiki Markup Help&lt;/strong&gt;&lt;br /&gt;
+=Heading1=&lt;br /&gt;
+==Heading2==&lt;br /&gt;
+===Heading3===&lt;br /&gt;
+&lt;br /&gt;
+*bold*&lt;br /&gt;
+_italic_&lt;br /&gt;
+~~strike~~&lt;br /&gt;
+^superscript^&lt;br /&gt;
+,,subscript,,&lt;br /&gt;
+`inline code`&lt;br /&gt;
+&lt;br /&gt;
+Indent lists 2 spaces:&lt;br /&gt;
+  * bullet item&lt;br /&gt;
+  # numbered list&lt;br /&gt;
+&lt;br /&gt;
+{{{&lt;br /&gt;
+verbatim code block&lt;br /&gt;
+}}}&lt;br /&gt;
+&lt;br /&gt;
+[http://domain/page label]&lt;br /&gt;
+http://domain/page&lt;br /&gt;
+&lt;br /&gt;
+|| table || cells ||
+    &lt;/div&gt;
+    
+    &lt;/td&gt;&lt;td&gt;
+
+    &lt;div class='ubb'&gt;
+    [% WRAPPER 'format/bbcode.html' %]
+    &lt;/div&gt;
+
+	&lt;textarea name=&quot;text&quot; id='text' style='width: 90%' rows=&quot;15&quot;&gt;&lt;/textarea&gt;
+	[% IF c.form.error('text') %]text is required.[% END %]
+
+	&lt;div class='ubb'&gt;
+	[% END %]
+    &lt;/div&gt;
+
+  &lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum2'&gt;&lt;td align='right'&gt;[% c.loc('Upload Attachment') %]&lt;/td&gt;&lt;td&gt;
+  [% IF mode == 'edit' AND upload %]
+  [% USE Math %]
+
+  [% upload_id = upload.upload_id;
+     filetype  = upload.filetype;
+     dir1 = upload_id / 3200 / 3200;
+     dir1 = Math.int(dir1);
+     dir2 = upload_id / 3200;
+     dir2 = Math.int(dir2);
+  %]
+  &lt;input type='radio' name='attachment_action' value='stay' checked='yes' /&gt; Stay as before [ &lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot;&gt;[% upload.filename %]&lt;/a&gt; ]&lt;br /&gt;
+  &lt;input type='radio' name='attachment_action' value='delete' /&gt; Delete it&lt;br /&gt;
+  &lt;input type='radio' name='attachment_action' value='replace' /&gt; Replace it&lt;br /&gt;
+  [% END %]
+  [% INCLUDE upload/input.html %]
+  &lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum1'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt; &lt;input type='button' value='Preview' name='btn_preview' onclick=&quot;javascript:preview()&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum2'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;div id='preview'&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+[% END %]
+
+[% IF mode == 'topic' %]
+    &lt;/div&gt;
+&lt;/div&gt;
+[% END %]
+
 [% c.load_once(&quot;site/new_post.js&quot;) %]
\ No newline at end of file</diff>
      <filename>templates/comment/new.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,16 @@
-[% IF c.user_exists %]
-&lt;br /&gt;
-&lt;div class='one'&gt;
-&lt;form method='post' action='/comment/post' enctype=&quot;multipart/form-data&quot;&gt;
-&lt;table align='center'&gt;
-    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Post A Comment&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' size='64' maxlength='80' /&gt;&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;&lt;td&gt;&lt;textarea name='text' style='width: 100%' rows=&quot;15&quot;&gt;&lt;/textarea&gt;&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Upload Attachment') %]&lt;/td&gt;&lt;td&gt;
-    [% INCLUDE upload/input.html %]
-    &lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
+[% IF c.user_exists %]
+&lt;br /&gt;
+&lt;div class='one'&gt;
+&lt;form method='post' action='/comment/post' enctype=&quot;multipart/form-data&quot;&gt;
+&lt;table align='center'&gt;
+    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Post A Comment&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' size='64' maxlength='80' /&gt;&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;&lt;td&gt;&lt;textarea name='text' style='width: 100%' rows=&quot;15&quot;&gt;&lt;/textarea&gt;&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Upload Attachment') %]&lt;/td&gt;&lt;td&gt;
+    [% INCLUDE upload/input.html %]
+    &lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/comment/post.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,89 +1,89 @@
-[% PROCESS sub/date.html %]
-
-[% FOREACH comment IN comments %]
-&lt;a name=&quot;c[% comment.comment_id %]&quot;&gt;&lt;/a&gt;
-&lt;div class='multi'[% IF comment.level %]style=&quot;margin-left: [% comment.level * 15 %]px&quot;[% END %]&gt;
-&lt;table align='center'&gt;
-&lt;tr class='reply[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
-    &lt;td valign='top' width='157'&gt;
-        [% INCLUDE include/user_profile.html user = comment.author %]
-    &lt;/td&gt;
-	&lt;td valign='top' width='*'&gt;
-	  &lt;div&gt;&lt;b&gt;[% comment.title %]&lt;/b&gt;&lt;!-- [% comment.comment_id %] --&gt;&lt;/div&gt;
-	  &lt;div class='horizontal'&gt;&lt;/div&gt;
-	  &lt;table width='100%' cellpadding='0' cellspacing='0' height='120' style=&quot;TABLE-LAYOUT: fixed&quot;&gt;
-	  &lt;tr valign='top'&gt;&lt;td class=&quot;textbody&quot;&gt;
-	  &lt;span class=&quot;postclass&quot; id='comment_text'&gt;
-	  [% IF comment.author.status == 'banned' %]
-	    The author is banned.
-	  [% ELSE %]
-	    [% IF comment.upload %]
-	    [% PROCESS upload/upload.html upload = comment.upload %]
-	    [% END %]
-	    [% comment.text %]
-	    [% comment_text = comment.text;
-	       IF comment_text.search('&lt;img'); global_has_photos = 1; END; %]
-	  [% END %]
-	  &lt;/span&gt;
-      &lt;/td&gt;&lt;/tr&gt;
-      &lt;/table&gt;
-      &lt;br&gt;
-      &lt;div class='horizontal'&gt;&lt;/div&gt;
-       [% IF topic AND topic.closed; no_reply = 1; END %]
-       [% IF forum.settings.can_post_replies AND forum.settings.can_post_replies == 'N'; no_reply = 1; END %]
-       [% UNLESS no_reply %]
-       &lt;a href='/comment/[% comment.comment_id %]/reply'&gt;&lt;img src='[% c.config.dir.images %]/replynow.gif' width='16' height='15' align='absmiddle'&gt; Reply&lt;/a&gt;
-       [% END %]
-       [% IF c.user_exists AND comment.author.user_id == c.user.user_id %]
-       &lt;a href='/comment/[% comment.comment_id %]/edit'&gt;&lt;img src='[% c.config.dir.images %]/edit.gif' width='16' height='15' align='absmiddle'&gt; Edit&lt;/a&gt;
-       [% END %]
-       [% IF c.user_exists AND roles.is_moderator %]
-       &lt;a href='/comment/[% comment.comment_id %]/delete'&gt;&lt;img src='[% c.config.dir.images %]/del.gif' width='16' height='15' align='absmiddle'&gt; Delete&lt;/a&gt;
-       [% END %]
-       &lt;img src='[% c.config.dir.images %]/posttime.gif' width='16' height='15' align='absmiddle'&gt; &lt;span class='date'&gt;[% date_format(comment.post_on) %]&lt;/span&gt;
-    &lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-[% IF comments.size %]
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;&lt;td&gt;[% INCLUDE 'sub/pager.html' pager = comments_pager %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-
-[% IF global_has_photos == 1 %]
-
-[% c.load_once('jquery/jquery.lightbox-0.4.css') %]
-[% c.load_once('jquery/jquery.lightbox-0.4.js') %]
-
-&lt;script&gt;
-    $(function() {
-        if ($('span.postclass img').length) {
-            $('span.postclass img').filter(function (index) {
-                return $(this).width() &gt; 640;
-            } ).width(640).filter(function(index) {
-                var parentTag = $(this).parent().get(0).tagName;
-                if (parentTag != 'A') {
-                    $(this).wrap(&quot;&lt;a href='&quot; + $(this).attr('src') + &quot;'&gt;&lt;/a&gt;&quot;);
-                } else if ($(this).attr('src') != $(this).parent().attr('href')) {
-                    return false;
-                }
-                return true;
-            } )
-            if ($('span.postclass a img').length) {
-                $('span.postclass a img').parent().lightBox( {
-                	imageLoading:  '[% c.config.dir.images %]/lightbox/lightbox-ico-loading.gif',
-                	imageBtnClose: '[% c.config.dir.images %]/lightbox/lightbox-btn-close.gif',
-                	imageBtnPrev:  '[% c.config.dir.images %]/lightbox/lightbox-btn-prev.gif',
-                	imageBtnNext:  '[% c.config.dir.images %]/lightbox/lightbox-btn-next.gif',
-                	imageBlank:    '[% c.config.dir.images %]/lightbox/lightbox-blank.gif'
-                } );
-            }
-        }
-    });
-&lt;/script&gt;
-
+[% PROCESS sub/date.html %]
+
+[% FOREACH comment IN comments %]
+&lt;a name=&quot;c[% comment.comment_id %]&quot;&gt;&lt;/a&gt;
+&lt;div class='multi'[% IF comment.level %]style=&quot;margin-left: [% comment.level * 15 %]px&quot;[% END %]&gt;
+&lt;table align='center'&gt;
+&lt;tr class='reply[% IF loop.count mod 2;'2';ELSE;'1';END; %]'&gt;
+    &lt;td valign='top' width='157'&gt;
+        [% INCLUDE include/user_profile.html user = comment.author %]
+    &lt;/td&gt;
+	&lt;td valign='top' width='*'&gt;
+	  &lt;div&gt;&lt;b&gt;[% comment.title %]&lt;/b&gt;&lt;!-- [% comment.comment_id %] --&gt;&lt;/div&gt;
+	  &lt;div class='horizontal'&gt;&lt;/div&gt;
+	  &lt;table width='100%' cellpadding='0' cellspacing='0' height='120' style=&quot;TABLE-LAYOUT: fixed&quot;&gt;
+	  &lt;tr valign='top'&gt;&lt;td class=&quot;textbody&quot;&gt;
+	  &lt;span class=&quot;postclass&quot; id='comment_text'&gt;
+	  [% IF comment.author.status == 'banned' %]
+	    The author is banned.
+	  [% ELSE %]
+	    [% IF comment.upload %]
+	    [% PROCESS upload/upload.html upload = comment.upload %]
+	    [% END %]
+	    [% comment.text %]
+	    [% comment_text = comment.text;
+	       IF comment_text.search('&lt;img'); global_has_photos = 1; END; %]
+	  [% END %]
+	  &lt;/span&gt;
+      &lt;/td&gt;&lt;/tr&gt;
+      &lt;/table&gt;
+      &lt;br&gt;
+      &lt;div class='horizontal'&gt;&lt;/div&gt;
+       [% IF topic AND topic.closed; no_reply = 1; END %]
+       [% IF forum.settings.can_post_replies AND forum.settings.can_post_replies == 'N'; no_reply = 1; END %]
+       [% UNLESS no_reply %]
+       &lt;a href='/comment/[% comment.comment_id %]/reply'&gt;&lt;img src='[% c.config.dir.images %]/replynow.gif' width='16' height='15' align='absmiddle'&gt; Reply&lt;/a&gt;
+       [% END %]
+       [% IF c.user_exists AND comment.author.user_id == c.user.user_id %]
+       &lt;a href='/comment/[% comment.comment_id %]/edit'&gt;&lt;img src='[% c.config.dir.images %]/edit.gif' width='16' height='15' align='absmiddle'&gt; Edit&lt;/a&gt;
+       [% END %]
+       [% IF c.user_exists AND roles.is_moderator %]
+       &lt;a href='/comment/[% comment.comment_id %]/delete'&gt;&lt;img src='[% c.config.dir.images %]/del.gif' width='16' height='15' align='absmiddle'&gt; Delete&lt;/a&gt;
+       [% END %]
+       &lt;img src='[% c.config.dir.images %]/posttime.gif' width='16' height='15' align='absmiddle'&gt; &lt;span class='date'&gt;[% date_format(comment.post_on) %]&lt;/span&gt;
+    &lt;/td&gt;
+&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+[% IF comments.size %]
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;&lt;td&gt;[% INCLUDE 'sub/pager.html' pager = comments_pager %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+
+[% IF global_has_photos == 1 %]
+
+[% c.load_once('jquery/jquery.lightbox-0.4.css') %]
+[% c.load_once('jquery/jquery.lightbox-0.4.js') %]
+
+&lt;script&gt;
+    $(function() {
+        if ($('span.postclass img').length) {
+            $('span.postclass img').filter(function (index) {
+                return $(this).width() &gt; 640;
+            } ).width(640).filter(function(index) {
+                var parentTag = $(this).parent().get(0).tagName;
+                if (parentTag != 'A') {
+                    $(this).wrap(&quot;&lt;a href='&quot; + $(this).attr('src') + &quot;'&gt;&lt;/a&gt;&quot;);
+                } else if ($(this).attr('src') != $(this).parent().attr('href')) {
+                    return false;
+                }
+                return true;
+            } )
+            if ($('span.postclass a img').length) {
+                $('span.postclass a img').parent().lightBox( {
+                	imageLoading:  '[% c.config.dir.images %]/lightbox/lightbox-ico-loading.gif',
+                	imageBtnClose: '[% c.config.dir.images %]/lightbox/lightbox-btn-close.gif',
+                	imageBtnPrev:  '[% c.config.dir.images %]/lightbox/lightbox-btn-prev.gif',
+                	imageBtnNext:  '[% c.config.dir.images %]/lightbox/lightbox-btn-next.gif',
+                	imageBlank:    '[% c.config.dir.images %]/lightbox/lightbox-blank.gif'
+                } );
+            }
+        }
+    });
+&lt;/script&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/comment/show.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,12 @@
-[% IF comments.size %]
-
-&lt;br /&gt;
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;
-&lt;td&gt;Comments&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% INCLUDE comment/show.html %]
-
+[% IF comments.size %]
+
+&lt;br /&gt;
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;
+&lt;td&gt;Comments&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% INCLUDE comment/show.html %]
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/comment/show_with_head.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,3 @@
-[% config.all_colors =  ['#333333', '#FFFFFF', '#FFFFF2', '#FFFFE5', '#FFFFD8', '#FFFFCC', '#FFFFBF', '#FFFFB2', '#FFFFA5', '#FFFF99', '#FFFF8C', '#FFFF7F', '#FFFF72', '#FFFF66', '#FFFF59', '#FFFF4C', '#FFFF3F', '#FFFF33', '#FFFF26', '#FFFF19', '#FFFF0C', '#FFFF00', '#FFFF00', '#F2FF00', '#E5FF00', '#D8FF00', '#CCFF00', '#BFFF00', '#B2FF00', '#A5FF00', '#99FF00', '#8CFF00', '#7FFF00', '#72FF00', '#66FF00', '#59FF00', '#4CFF00', '#3FFF00', '#33FF00', '#26FF00', '#19FF00', '#0CFF00', '#00FF00', '#00FF00', '#00FF0C', '#00FF19', '#00FF26', '#00FF33', '#00FF3F', '#00FF4C', '#00FF59', '#00FF66', '#00FF72', '#00FF7F', '#00FF8C', '#00FF99', '#00FFA5', '#00FFB2', '#00FFBF', '#00FFCC', '#00FFD8', '#00FFE5', '#00FFF2', '#00FFFF', '#00FFFF', '#00F2FF', '#00E5FF', '#00D8FF', '#00CCFF', '#00BFFF', '#00B2FF', '#00A5FF', '#0099FF', '#008CFF', '#007FFF', '#0072FF', '#0066FF', '#0059FF', '#004CFF', '#003FFF', '#0033FF', '#0026FF', '#0019FF', '#000CFF', '#0000FF', '#0000FF', '#0C00FF', '#1900FF', '#2600FF', '#3300FF', '#3F00FF', '#4C00FF', '#5900FF', '#6600FF', '#7200FF', '#7F00FF', '#8C00FF', '#9900FF', '#A500FF', '#B200FF', '#BF00FF', '#CC00FF', '#D800FF', '#E500FF', '#F200FF', '#FF00FF', '#FF00FF', '#FF00F2', '#FF00E5', '#FF00D8', '#FF00CC', '#FF00BF', '#FF00B2', '#FF00A5', '#FF0099', '#FF008C', '#FF007F', '#FF0072', '#FF0066', '#FF0059', '#FF004C', '#FF003F', '#FF0033', '#FF0026', '#FF0019', '#FF000C', '#FF0000', '#FF0000', '#F20000', '#E50000', '#D80000', '#CC0000', '#BF0000', '#B20000', '#A50000', '#990000', '#8C0000', '#7F0000', '#720000', '#660000', '#590000', '#4C0000', '#3F0000', '#330000', '#260000', '#190000', '#0C0000', '#000000'] %]
-
-[% config.all_fonts = [&quot;&#23435;&#20307;&quot;, &quot;&#26999;&#20307;_GB2312&quot;, &quot;&#26032;&#23435;&#20307;&quot;, &quot;&#40657;&#20307;&quot;, &quot;&#38582;&#20070;&quot;, &quot;Andale Mono&quot;, &quot;Arial&quot;, &quot;Arial Black&quot;, &quot;Book Antiqua&quot;, &quot;Century Gothic&quot;, &quot;Comic Sans MS&quot;, &quot;Courier New&quot;, &quot;Georgia&quot;, &quot;Impact&quot;, &quot;Tahoma&quot;, &quot;Times New Roman&quot;, &quot;Trebuchet MS&quot;, &quot;Script MT Bold&quot;, &quot;Stencil&quot;, &quot;Verdana&quot;, &quot;Lucida Console&quot;] %]
+[% config.all_colors =  ['#333333', '#FFFFFF', '#FFFFF2', '#FFFFE5', '#FFFFD8', '#FFFFCC', '#FFFFBF', '#FFFFB2', '#FFFFA5', '#FFFF99', '#FFFF8C', '#FFFF7F', '#FFFF72', '#FFFF66', '#FFFF59', '#FFFF4C', '#FFFF3F', '#FFFF33', '#FFFF26', '#FFFF19', '#FFFF0C', '#FFFF00', '#FFFF00', '#F2FF00', '#E5FF00', '#D8FF00', '#CCFF00', '#BFFF00', '#B2FF00', '#A5FF00', '#99FF00', '#8CFF00', '#7FFF00', '#72FF00', '#66FF00', '#59FF00', '#4CFF00', '#3FFF00', '#33FF00', '#26FF00', '#19FF00', '#0CFF00', '#00FF00', '#00FF00', '#00FF0C', '#00FF19', '#00FF26', '#00FF33', '#00FF3F', '#00FF4C', '#00FF59', '#00FF66', '#00FF72', '#00FF7F', '#00FF8C', '#00FF99', '#00FFA5', '#00FFB2', '#00FFBF', '#00FFCC', '#00FFD8', '#00FFE5', '#00FFF2', '#00FFFF', '#00FFFF', '#00F2FF', '#00E5FF', '#00D8FF', '#00CCFF', '#00BFFF', '#00B2FF', '#00A5FF', '#0099FF', '#008CFF', '#007FFF', '#0072FF', '#0066FF', '#0059FF', '#004CFF', '#003FFF', '#0033FF', '#0026FF', '#0019FF', '#000CFF', '#0000FF', '#0000FF', '#0C00FF', '#1900FF', '#2600FF', '#3300FF', '#3F00FF', '#4C00FF', '#5900FF', '#6600FF', '#7200FF', '#7F00FF', '#8C00FF', '#9900FF', '#A500FF', '#B200FF', '#BF00FF', '#CC00FF', '#D800FF', '#E500FF', '#F200FF', '#FF00FF', '#FF00FF', '#FF00F2', '#FF00E5', '#FF00D8', '#FF00CC', '#FF00BF', '#FF00B2', '#FF00A5', '#FF0099', '#FF008C', '#FF007F', '#FF0072', '#FF0066', '#FF0059', '#FF004C', '#FF003F', '#FF0033', '#FF0026', '#FF0019', '#FF000C', '#FF0000', '#FF0000', '#F20000', '#E50000', '#D80000', '#CC0000', '#BF0000', '#B20000', '#A50000', '#990000', '#8C0000', '#7F0000', '#720000', '#660000', '#590000', '#4C0000', '#3F0000', '#330000', '#260000', '#190000', '#0C0000', '#000000'] %]
+
+[% config.all_fonts = [&quot;&#23435;&#20307;&quot;, &quot;&#26999;&#20307;_GB2312&quot;, &quot;&#26032;&#23435;&#20307;&quot;, &quot;&#40657;&#20307;&quot;, &quot;&#38582;&#20070;&quot;, &quot;Andale Mono&quot;, &quot;Arial&quot;, &quot;Arial Black&quot;, &quot;Book Antiqua&quot;, &quot;Century Gothic&quot;, &quot;Comic Sans MS&quot;, &quot;Courier New&quot;, &quot;Georgia&quot;, &quot;Impact&quot;, &quot;Tahoma&quot;, &quot;Times New Roman&quot;, &quot;Trebuchet MS&quot;, &quot;Script MT Bold&quot;, &quot;Stencil&quot;, &quot;Verdana&quot;, &quot;Lucida Console&quot;] %]</diff>
      <filename>templates/config/format.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,50 +1,50 @@
-[% PROCESS 'config/format.html' %]
-[% c.load_once(&quot;jquery/localisation.js&quot;) %]
-&lt;script type=&quot;text/javascript&quot;&gt;
-$(document).ready(function() {
-    $.localise('[% c.config.dir.js %]/site/formatter/ubbhelp', {loadBase: false, language: '[% lang %]'});
-} );
-&lt;/script&gt;
-[% c.load_once(&quot;site/formatter/ubb.js&quot;) %]
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;&lt;td&gt;
-        &lt;select onchange='showfont(this.options[this.selectedIndex].value)' name='font'&gt;
-        [% FOREACH font IN config.all_fonts %]
-        &lt;option style=&quot;font-family: [% font %]&quot; value=&quot;[% font %]&quot;&gt;[% font %]&lt;/option&gt;
-        [% END %]
-        &lt;/select&gt;
-        &lt;select onchange='showsize(this.options[this.selectedIndex].value)' name='size'&gt;
-        [% FOREACH font_size IN [8 .. 16] %]
-        &lt;option style='font-size: [% font_size %]pt' value='[% font_size %]'&gt;[% font_size %]&lt;/font&gt;
-        [% END %]
-        &lt;/select&gt;
-        &lt;select onchange='showcolor(this.options[this.selectedIndex].value)' name='color'&gt;
-        [% FOREACH color IN config.all_colors %]
-        &lt;option style=&quot;background-color:[% color %];color:[% color %]&quot; value=&quot;[% color %]&quot;&gt;[% color %]&lt;/option&gt;
-        [% END %]
-        &lt;/select&gt;
-    &lt;br /&gt;
-        &lt;img onclick='bold()' height='22' alt='Bold' src='[% c.config.dir.images %]/bbcode/bold.gif' width='23'&gt;
-        &lt;img onclick='italicize()' height='22' alt='Italicize' src='[% c.config.dir.images %]/bbcode/italicize.gif' width='23'&gt;
-        &lt;img onclick='underline()' height='22' alt='Underline' src='[% c.config.dir.images %]/bbcode/underline.gif' width='23'&gt;
-        &lt;img onclick='center()' height='22' alt='Center' src='[% c.config.dir.images %]/bbcode/center.gif' width='23'&gt;
-        &lt;img onclick='hyperlink()' height='22' alt='Hyperlink' src='[% c.config.dir.images %]/bbcode/url.gif' width='23'&gt;
-        &lt;img onclick='image()' height='22' alt='Image' src='[% c.config.dir.images %]/bbcode/image.gif' width='23'&gt; 
-        &lt;img onclick='quote()' height='22' alt='Quote' src='[% c.config.dir.images %]/bbcode/quote.gif' width='23'&gt;
-        &lt;img onclick='flash()' height='22' alt='Flash' src='[% c.config.dir.images %]/bbcode/swf.gif' width='23'&gt;
-        &lt;img onclick='music()' height='22' alt='Realplayer' src='[% c.config.dir.images %]/bbcode/rm.gif' width='23'&gt;
-        &lt;img onclick='music()' height='22' alt='Media Player' src='[% c.config.dir.images %]/bbcode/wm.gif' width='23'&gt;
-    &lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-[% content %]
-
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;&lt;td&gt;
-        Mode:&lt;input type=&quot;radio&quot; name=&quot;mode&quot; value=&quot;help&quot; onClick=&quot;thelp(1)&quot;&gt; Help &lt;input type=&quot;radio&quot; name=&quot;mode&quot; value=&quot;prompt&quot; checked='yes' onClick=&quot;thelp(2)&quot;&gt; Full &lt;input type=&quot;radio&quot; name=&quot;mode&quot; value=&quot;basic&quot;  onClick=&quot;thelp(0)&quot;&gt; Basic
-    &lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
+[% PROCESS 'config/format.html' %]
+[% c.load_once(&quot;jquery/localisation.js&quot;) %]
+&lt;script type=&quot;text/javascript&quot;&gt;
+$(document).ready(function() {
+    $.localise('[% c.config.dir.js %]/site/formatter/ubbhelp', {loadBase: false, language: '[% lang %]'});
+} );
+&lt;/script&gt;
+[% c.load_once(&quot;site/formatter/ubb.js&quot;) %]
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;&lt;td&gt;
+        &lt;select onchange='showfont(this.options[this.selectedIndex].value)' name='font'&gt;
+        [% FOREACH font IN config.all_fonts %]
+        &lt;option style=&quot;font-family: [% font %]&quot; value=&quot;[% font %]&quot;&gt;[% font %]&lt;/option&gt;
+        [% END %]
+        &lt;/select&gt;
+        &lt;select onchange='showsize(this.options[this.selectedIndex].value)' name='size'&gt;
+        [% FOREACH font_size IN [8 .. 16] %]
+        &lt;option style='font-size: [% font_size %]pt' value='[% font_size %]'&gt;[% font_size %]&lt;/font&gt;
+        [% END %]
+        &lt;/select&gt;
+        &lt;select onchange='showcolor(this.options[this.selectedIndex].value)' name='color'&gt;
+        [% FOREACH color IN config.all_colors %]
+        &lt;option style=&quot;background-color:[% color %];color:[% color %]&quot; value=&quot;[% color %]&quot;&gt;[% color %]&lt;/option&gt;
+        [% END %]
+        &lt;/select&gt;
+    &lt;br /&gt;
+        &lt;img onclick='bold()' height='22' alt='Bold' src='[% c.config.dir.images %]/bbcode/bold.gif' width='23'&gt;
+        &lt;img onclick='italicize()' height='22' alt='Italicize' src='[% c.config.dir.images %]/bbcode/italicize.gif' width='23'&gt;
+        &lt;img onclick='underline()' height='22' alt='Underline' src='[% c.config.dir.images %]/bbcode/underline.gif' width='23'&gt;
+        &lt;img onclick='center()' height='22' alt='Center' src='[% c.config.dir.images %]/bbcode/center.gif' width='23'&gt;
+        &lt;img onclick='hyperlink()' height='22' alt='Hyperlink' src='[% c.config.dir.images %]/bbcode/url.gif' width='23'&gt;
+        &lt;img onclick='image()' height='22' alt='Image' src='[% c.config.dir.images %]/bbcode/image.gif' width='23'&gt; 
+        &lt;img onclick='quote()' height='22' alt='Quote' src='[% c.config.dir.images %]/bbcode/quote.gif' width='23'&gt;
+        &lt;img onclick='flash()' height='22' alt='Flash' src='[% c.config.dir.images %]/bbcode/swf.gif' width='23'&gt;
+        &lt;img onclick='music()' height='22' alt='Realplayer' src='[% c.config.dir.images %]/bbcode/rm.gif' width='23'&gt;
+        &lt;img onclick='music()' height='22' alt='Media Player' src='[% c.config.dir.images %]/bbcode/wm.gif' width='23'&gt;
+    &lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+[% content %]
+
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;&lt;td&gt;
+        Mode:&lt;input type=&quot;radio&quot; name=&quot;mode&quot; value=&quot;help&quot; onClick=&quot;thelp(1)&quot;&gt; Help &lt;input type=&quot;radio&quot; name=&quot;mode&quot; value=&quot;prompt&quot; checked='yes' onClick=&quot;thelp(2)&quot;&gt; Full &lt;input type=&quot;radio&quot; name=&quot;mode&quot; value=&quot;basic&quot;  onClick=&quot;thelp(0)&quot;&gt; Basic
+    &lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/format/bbcode.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-[% FOREACH em IN ['wink', 'sad', 'biggrin', 'cheesy', 'confused', 'cool', 'angry', 'sads', 'smile', 'smiled', 'unhappy', 'dozingoff', 'blink', 'blush', 'crazy', 'cry', 'bigsmile', 'inlove', 'notify', 'shifty', 'sick', 'sleeping', 'sneaky2', 'tounge', 'unsure', 'wacko', 'why', 'wow', 'mad', 'Oo'] %]
-&lt;img src=&quot;[% c.config.dir.images %]/bbcode/emot/[% em %].gif&quot; onclick=&quot;javascript:emot('[% em %]');&quot; style=&quot;cursor:hand;padding:1px;&quot;&gt;
-[% IF loop.count % 6 == 0 %]&lt;br /&gt;[% END %]
+[% FOREACH em IN ['wink', 'sad', 'biggrin', 'cheesy', 'confused', 'cool', 'angry', 'sads', 'smile', 'smiled', 'unhappy', 'dozingoff', 'blink', 'blush', 'crazy', 'cry', 'bigsmile', 'inlove', 'notify', 'shifty', 'sick', 'sleeping', 'sneaky2', 'tounge', 'unsure', 'wacko', 'why', 'wow', 'mad', 'Oo'] %]
+&lt;img src=&quot;[% c.config.dir.images %]/bbcode/emot/[% em %].gif&quot; onclick=&quot;javascript:emot('[% em %]');&quot; style=&quot;cursor:hand;padding:1px;&quot;&gt;
+[% IF loop.count % 6 == 0 %]&lt;br /&gt;[% END %]
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/format/emot.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,47 +1,47 @@
-[% PROCESS sub/date.html %]
-
-[% title = 'About ' _ forum.name %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/about'&gt;&lt;span&gt;About&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td&gt;
-    &lt;ul&gt;
-        &lt;li&gt;Can [% IF forum.settings.can_post_threads == 'N' %]&lt;b&gt;NOT&lt;/b&gt;[% END %] Post Threads&lt;/li&gt;
-        &lt;li&gt;Can [% IF forum.settings.can_post_replies == 'N' %]&lt;b&gt;NOT&lt;/b&gt;[% END %] Post Replies&lt;/li&gt;
-        &lt;li&gt;Can [% IF forum.settings.can_post_polls == 'N' %]&lt;b&gt;NOT&lt;/b&gt;[% END %] Post Polls&lt;/li&gt;
-        &lt;li&gt;Created On [% date_format(settings.created_time) %]&lt;/li&gt;
-        &lt;li&gt;Admin: &lt;a href='/u/[% forum_roles.${forum.forum_id}.admin.username %]'&gt;[% forum_roles.${forum.forum_id}.admin.nickname %]&lt;/a&gt;
-[% FOREACH moderator IN forum_roles.${forum.forum_id}.moderator %]
-[% IF loop.first %], [% END %]&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
-[% END %]&lt;/li&gt;
-    &lt;/ul&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% PROCESS sub/date.html %]
+
+[% title = 'About ' _ forum.name %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/about'&gt;&lt;span&gt;About&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td&gt;
+    &lt;ul&gt;
+        &lt;li&gt;Can [% IF forum.settings.can_post_threads == 'N' %]&lt;b&gt;NOT&lt;/b&gt;[% END %] Post Threads&lt;/li&gt;
+        &lt;li&gt;Can [% IF forum.settings.can_post_replies == 'N' %]&lt;b&gt;NOT&lt;/b&gt;[% END %] Post Replies&lt;/li&gt;
+        &lt;li&gt;Can [% IF forum.settings.can_post_polls == 'N' %]&lt;b&gt;NOT&lt;/b&gt;[% END %] Post Polls&lt;/li&gt;
+        &lt;li&gt;Created On [% date_format(settings.created_time) %]&lt;/li&gt;
+        &lt;li&gt;Admin: &lt;a href='/u/[% forum_roles.${forum.forum_id}.admin.username %]'&gt;[% forum_roles.${forum.forum_id}.admin.nickname %]&lt;/a&gt;
+[% FOREACH moderator IN forum_roles.${forum.forum_id}.moderator %]
+[% IF loop.first %], [% END %]&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
+[% END %]&lt;/li&gt;
+    &lt;/ul&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/forum/about.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,59 +1,59 @@
-[% PROCESS sub/date.html %]
-
-[% title = 'Action Logs Of ' _ forum.name %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/about'&gt;&lt;span&gt;About&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tr class='title' align='center'&gt;
-	&lt;td width='80'&gt;[% c.loc('Operator') %]&lt;/td&gt;
-	&lt;td width='50'&gt;[% c.loc('Action') %]&lt;/td&gt;
-	&lt;td align='left'&gt;[% c.loc('Object') %]&lt;/td&gt;
-	&lt;td width='120'&gt;[% c.loc('Date') %]&lt;/td&gt;
-	&lt;/tr&gt;
-[% FOREACH log IN logs %]
-&lt;tr align='center'&gt;
-	&lt;td class='forum2'&gt;&lt;a href='/u/[% log.operator.username %]'&gt;[% log.operator.nickname %]&lt;/a&gt;&lt;/td&gt;
-	&lt;td class='forum1'&gt;[% log.action | ucfirst %]&lt;/td&gt;
-	&lt;td class='forum2' align='left'&gt;
-	    [% IF log.object_type == 'topic' AND log.action != 'delete' %]
-	    &lt;a href='[% forum.forum_url %]/topic/[% log.object_id %]'&gt;[% log.text %]&lt;/a&gt;
-	    [% ELSE %]
-	    [% log.text %]
-	    [% END %]
-	&lt;/td&gt;
-	&lt;td class='forum1'&gt;&lt;span class='date'&gt;[% date_format(log.time) %]&lt;/span&gt;&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr class='forum1'&gt;
-	&lt;td colspan='4' align='right'&gt;
-	[% INCLUDE 'sub/pager.html' url_prefix = forum.forum_url _ '/action_log' %]
-	&lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% PROCESS sub/date.html %]
+
+[% title = 'Action Logs Of ' _ forum.name %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/about'&gt;&lt;span&gt;About&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tr class='title' align='center'&gt;
+	&lt;td width='80'&gt;[% c.loc('Operator') %]&lt;/td&gt;
+	&lt;td width='50'&gt;[% c.loc('Action') %]&lt;/td&gt;
+	&lt;td align='left'&gt;[% c.loc('Object') %]&lt;/td&gt;
+	&lt;td width='120'&gt;[% c.loc('Date') %]&lt;/td&gt;
+	&lt;/tr&gt;
+[% FOREACH log IN logs %]
+&lt;tr align='center'&gt;
+	&lt;td class='forum2'&gt;&lt;a href='/u/[% log.operator.username %]'&gt;[% log.operator.nickname %]&lt;/a&gt;&lt;/td&gt;
+	&lt;td class='forum1'&gt;[% log.action | ucfirst %]&lt;/td&gt;
+	&lt;td class='forum2' align='left'&gt;
+	    [% IF log.object_type == 'topic' AND log.action != 'delete' %]
+	    &lt;a href='[% forum.forum_url %]/topic/[% log.object_id %]'&gt;[% log.text %]&lt;/a&gt;
+	    [% ELSE %]
+	    [% log.text %]
+	    [% END %]
+	&lt;/td&gt;
+	&lt;td class='forum1'&gt;&lt;span class='date'&gt;[% date_format(log.time) %]&lt;/span&gt;&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr class='forum1'&gt;
+	&lt;td colspan='4' align='right'&gt;
+	[% INCLUDE 'sub/pager.html' url_prefix = forum.forum_url _ '/action_log' %]
+	&lt;/td&gt;
+&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/forum/action_log.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,75 +1,75 @@
-[% USE date %]
-[% PROCESS sub/date.html %]
-
-[% RSS_URL = '/site/recent/rss' %]
-
-&lt;div class='one'&gt;
-&lt;table height='28' align='center'&gt;
-	&lt;tr class=&quot;title&quot; align='center'&gt;
-	&lt;td width='42'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;
-	&lt;td width='*'&gt;[% c.loc(&quot;Forum Name&quot;) %]&lt;/td&gt;
-	&lt;td width='80'&gt;[% c.loc(&quot;Moderators&quot;) %]&lt;/td&gt;
-	&lt;td width='60'&gt;[% c.loc(&quot;Threads&quot;) %]&lt;/td&gt;
-	&lt;td width='60'&gt;[% c.loc(&quot;Replies&quot;) %]&lt;/td&gt;
-	&lt;td width='190'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-[% mytime = date.now - 86000 %]
-[% FOREACH f IN forums %]
-[% IF f.last_post.last_update_date &amp;&amp; f.last_post.last_update_date &gt; mytime %]
-[% status = 'on' %]
-[% ELSE %]
-[% status = 'off' %]
-[% END %]
-&lt;div class='multi'&gt;
-&lt;table align='center'&gt;
-	&lt;tr align='center'&gt;
-	&lt;td class='forum1' width='42'&gt;
-	    [% IF f.policy == 'private' %]
-	    &lt;img src='[% c.config.dir.images %]/board/locked.gif' /&gt;
-	    [% ELSE %]
-	    &lt;img src='[% c.config.dir.images %]/board/[% status %].gif' /&gt;
-	    [% END %]
-	&lt;/td&gt;
-	&lt;td class='forum2' valign='top' width='*'&gt;
-		&lt;table&gt;
-			&lt;tr&gt;
-			&lt;td align=&quot;left&quot;&gt;&lt;a href='/forum/[% f.forum_code %]'&gt;&lt;span class='semilight'&gt;[% f.name %]&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
-			&lt;/tr&gt;
-			&lt;tr&gt;
-			&lt;td align=&quot;left&quot;&gt;[% f.description %]&lt;/td&gt;
-			&lt;/tr&gt;
-		&lt;/table&gt;
-	&lt;/td&gt;
-	&lt;td class='forum1' width='80'&gt;
-	    &lt;a href='/u/[% forum_roles.${f.forum_id}.admin.username %]'&gt;[% forum_roles.${f.forum_id}.admin.nickname %]&lt;/a&gt;
-	    [% FOREACH moderator IN forum_roles.${f.forum_id}.moderator %]
-	    &lt;br /&gt;&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;
-	    [% END %]
-	&lt;/td&gt;
-	&lt;td class='forum2' width='60'&gt;
-	    [% IF status == 'on' %]
-	    &lt;span class='highlight'&gt;&lt;b&gt;[% f.total_topics %]&lt;/b&gt;&lt;/span&gt;
-	    [% ELSE %]
-	    [% f.total_topics %]
-	    [% END %]
-	&lt;/td&gt;
-	&lt;td class='forum2' width='60'&gt;
-	    [% IF status == 'on' %]
-	    &lt;span class='highlight'&gt;&lt;b&gt;[% f.total_replies %]&lt;/b&gt;&lt;/span&gt;
-	    [% ELSE %]
-	    [% f.total_replies %]
-	    [% END %]
-	&lt;/td&gt;
-    &lt;td class='forum1' width='190' align='left'&gt;
-        [% IF f.policy == 'private' %]
-        Private
-        [% ELSE %]
-        &lt;a href='/forum/[% f.forum_code _ '/topic/' _ f.last_post.topic_id %]/t[% f.last_post.topic_id %]-[% f.last_post.title | be_url_part %]' title=&quot;[% f.last_post.title.replace('&quot;', '\&quot;') %]&quot;&gt;[% f.last_post.title | truncate(28) %]&lt;/a&gt;&lt;br /&gt;&lt;a href='/u/[% f.last_post.updator.username %]'&gt;[% f.last_post.updator.nickname %]&lt;/a&gt;&lt;br /&gt;&lt;span class='date'&gt;[% date_format(f.last_post.last_update_date) %]&lt;/span&gt;
-        [% END %]
-    &lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-&lt;br /&gt;
+[% USE date %]
+[% PROCESS sub/date.html %]
+
+[% RSS_URL = '/site/recent/rss' %]
+
+&lt;div class='one'&gt;
+&lt;table height='28' align='center'&gt;
+	&lt;tr class=&quot;title&quot; align='center'&gt;
+	&lt;td width='42'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;
+	&lt;td width='*'&gt;[% c.loc(&quot;Forum Name&quot;) %]&lt;/td&gt;
+	&lt;td width='80'&gt;[% c.loc(&quot;Moderators&quot;) %]&lt;/td&gt;
+	&lt;td width='60'&gt;[% c.loc(&quot;Threads&quot;) %]&lt;/td&gt;
+	&lt;td width='60'&gt;[% c.loc(&quot;Replies&quot;) %]&lt;/td&gt;
+	&lt;td width='190'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+[% mytime = date.now - 86000 %]
+[% FOREACH f IN forums %]
+[% IF f.last_post.last_update_date &amp;&amp; f.last_post.last_update_date &gt; mytime %]
+[% status = 'on' %]
+[% ELSE %]
+[% status = 'off' %]
+[% END %]
+&lt;div class='multi'&gt;
+&lt;table align='center'&gt;
+	&lt;tr align='center'&gt;
+	&lt;td class='forum1' width='42'&gt;
+	    [% IF f.policy == 'private' %]
+	    &lt;img src='[% c.config.dir.images %]/board/locked.gif' /&gt;
+	    [% ELSE %]
+	    &lt;img src='[% c.config.dir.images %]/board/[% status %].gif' /&gt;
+	    [% END %]
+	&lt;/td&gt;
+	&lt;td class='forum2' valign='top' width='*'&gt;
+		&lt;table&gt;
+			&lt;tr&gt;
+			&lt;td align=&quot;left&quot;&gt;&lt;a href='/forum/[% f.forum_code %]'&gt;&lt;span class='semilight'&gt;[% f.name %]&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
+			&lt;/tr&gt;
+			&lt;tr&gt;
+			&lt;td align=&quot;left&quot;&gt;[% f.description %]&lt;/td&gt;
+			&lt;/tr&gt;
+		&lt;/table&gt;
+	&lt;/td&gt;
+	&lt;td class='forum1' width='80'&gt;
+	    &lt;a href='/u/[% forum_roles.${f.forum_id}.admin.username %]'&gt;[% forum_roles.${f.forum_id}.admin.nickname %]&lt;/a&gt;
+	    [% FOREACH moderator IN forum_roles.${f.forum_id}.moderator %]
+	    &lt;br /&gt;&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;
+	    [% END %]
+	&lt;/td&gt;
+	&lt;td class='forum2' width='60'&gt;
+	    [% IF status == 'on' %]
+	    &lt;span class='highlight'&gt;&lt;b&gt;[% f.total_topics %]&lt;/b&gt;&lt;/span&gt;
+	    [% ELSE %]
+	    [% f.total_topics %]
+	    [% END %]
+	&lt;/td&gt;
+	&lt;td class='forum2' width='60'&gt;
+	    [% IF status == 'on' %]
+	    &lt;span class='highlight'&gt;&lt;b&gt;[% f.total_replies %]&lt;/b&gt;&lt;/span&gt;
+	    [% ELSE %]
+	    [% f.total_replies %]
+	    [% END %]
+	&lt;/td&gt;
+    &lt;td class='forum1' width='190' align='left'&gt;
+        [% IF f.policy == 'private' %]
+        Private
+        [% ELSE %]
+        &lt;a href='/forum/[% f.forum_code _ '/topic/' _ f.last_post.topic_id %]/t[% f.last_post.topic_id %]-[% f.last_post.title | be_url_part %]' title=&quot;[% f.last_post.title.replace('&quot;', '\&quot;') %]&quot;&gt;[% f.last_post.title | truncate(28) %]&lt;/a&gt;&lt;br /&gt;&lt;a href='/u/[% f.last_post.updator.username %]'&gt;[% f.last_post.updator.nickname %]&lt;/a&gt;&lt;br /&gt;&lt;span class='date'&gt;[% date_format(f.last_post.last_update_date) %]&lt;/span&gt;
+        [% END %]
+    &lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+&lt;br /&gt;</diff>
      <filename>templates/forum/board.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,52 +1,52 @@
-
-[% USE FillInForm %]
-[% FILTER fillinform fdat =&gt; data || c.req.params %]
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Create a Forum&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc1'&gt;&lt;td&gt;Forum Code:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='forum_code' /&gt;
-    [% IF c.form.error('forum_code') %]
-	    [% IF c.form.error('forum_code', 'HAS_BLANK') %]
-	    don't put blank in your forum_code.
-	    [% ELSIF c.form.error('forum_code', 'REGEX') %]
-	    only A-Z, a-z, 0-9, - is allowed. and contain one 'A-Z, a-z' at least
-	    [% ELSIF c.form.error('forum_code', 'HAS_RESERVED') %]
-	    this forum_code is reserved.
-	    [% ELSIF c.form.error('forum_code', 'DBIC_UNIQUE') %]
-	    This forum_code is used by another one.
-	    [% ELSE %]
-	    forum_code should be 6-20 chars.
-	    [% END %]
-	[% END %]&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc1'&gt;&lt;td&gt;Forum Name:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='name' /&gt;
-    [% IF c.form.error('name') %]
-	the length of forum name should be more than 1 and less than 40
-	[% END %]&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td&gt;Forum Description&lt;/td&gt;&lt;td&gt;&lt;textarea name='description'&gt;&lt;/textarea&gt;
-    [% IF c.form.error('description') %]
-	&lt;br /&gt;description should be 1-200 chars.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	
-&lt;tr class='misc1'&gt;&lt;td&gt;Forum Admin&lt;/td&gt;&lt;td&gt;
-    [% IF roles.site.admin %]
-    &lt;input type='text' name='admin' /&gt;
-        [% IF c.form.error('admin') %]
-    	no such user
-    	[% END %]
-    [% ELSE %]
-    [% c.user.username %]
-    [% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td&gt;Forum Moderators&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='moderators' /&gt; use ',' to split if there are more than 1 moderator
-    [% IF c.form.error('moderators') %]
-	&lt;br /&gt;no such user [% non_existence_user %]
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc1'&gt;&lt;td&gt;Policy&lt;/td&gt;&lt;td&gt;&lt;input type='checkbox' name='private' value='1' /&gt; Private&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td colspan='2'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-[% END %]
+
+[% USE FillInForm %]
+[% FILTER fillinform fdat =&gt; data || c.req.params %]
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Create a Forum&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc1'&gt;&lt;td&gt;Forum Code:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='forum_code' /&gt;
+    [% IF c.form.error('forum_code') %]
+	    [% IF c.form.error('forum_code', 'HAS_BLANK') %]
+	    don't put blank in your forum_code.
+	    [% ELSIF c.form.error('forum_code', 'REGEX') %]
+	    only A-Z, a-z, 0-9, - is allowed. and contain one 'A-Z, a-z' at least
+	    [% ELSIF c.form.error('forum_code', 'HAS_RESERVED') %]
+	    this forum_code is reserved.
+	    [% ELSIF c.form.error('forum_code', 'DBIC_UNIQUE') %]
+	    This forum_code is used by another one.
+	    [% ELSE %]
+	    forum_code should be 6-20 chars.
+	    [% END %]
+	[% END %]&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc1'&gt;&lt;td&gt;Forum Name:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='name' /&gt;
+    [% IF c.form.error('name') %]
+	the length of forum name should be more than 1 and less than 40
+	[% END %]&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td&gt;Forum Description&lt;/td&gt;&lt;td&gt;&lt;textarea name='description'&gt;&lt;/textarea&gt;
+    [% IF c.form.error('description') %]
+	&lt;br /&gt;description should be 1-200 chars.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	
+&lt;tr class='misc1'&gt;&lt;td&gt;Forum Admin&lt;/td&gt;&lt;td&gt;
+    [% IF roles.site.admin %]
+    &lt;input type='text' name='admin' /&gt;
+        [% IF c.form.error('admin') %]
+    	no such user
+    	[% END %]
+    [% ELSE %]
+    [% c.user.username %]
+    [% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td&gt;Forum Moderators&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='moderators' /&gt; use ',' to split if there are more than 1 moderator
+    [% IF c.form.error('moderators') %]
+	&lt;br /&gt;no such user [% non_existence_user %]
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc1'&gt;&lt;td&gt;Policy&lt;/td&gt;&lt;td&gt;&lt;input type='checkbox' name='private' value='1' /&gt; Private&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td colspan='2'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+[% END %]</diff>
      <filename>templates/forum/create.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,144 +1,144 @@
-[% PROCESS sub/date.html %]
-
-[% title = forum.name %]
-[% IF forum.policy == 'public' %]
-[% RSS_URL = forum.forum_url _ '/rss' %]
-[% END %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF c.config.function_on.poll %]
-        [% UNLESS poll_count == 0 AND forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls ([% poll_count %])&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/about'&gt;&lt;span&gt;About&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF c.user_exists AND roles.is_admin %]
-        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id %]'&gt;&lt;span&gt;[% c.loc('Forum Admin') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-[% IF forum.policy == 'private' %]
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td class='title' width='40'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;&lt;td class='forum1'&gt;We have &lt;a href='[% forum.forum_url %]/members'&gt;[% forum.total_members %] users&lt;/a&gt; and &lt;a href='[% forum.forum_url %]/members/pending'&gt;[% pending_count %] pending users&lt;/a&gt;.
-[% IF pending_count AND roles.is_moderator %]
-&lt;div class='highlight' style='font-weight: bolder'&gt;Tips: You need approval the &lt;a href='[% forum.forum_url %]/members/pending'&gt;pending requests&lt;/a&gt;&lt;/div&gt;
-[% END %]
-&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-
-[% IF announcement %]
-&lt;div class=&quot;one&quot;&gt;
-&lt;table align=&quot;center&quot;&gt;
-&lt;tr&gt;
-    &lt;td class='title' width='100' valign=&quot;top&quot;&gt;[ [% c.loc(&quot;Announcement&quot;) %] ]: [% announcement.title %]&lt;/td&gt;
-&lt;/tr&gt;
-&lt;tr&gt;&lt;td class='forum1'&gt;
-    [% announcement.text %]
-&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td width='*' align='right' valign='bottom'&gt;
-Admin: &lt;a href='/u/[% forum_roles.${forum.forum_id}.admin.username %]'&gt;[% forum_roles.${forum.forum_id}.admin.nickname %]&lt;/a&gt;
-[% FOREACH moderator IN forum_roles.${forum.forum_id}.moderator %]
-[% IF loop.first %], [% END %]&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
-[% END %]
-&lt;td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-&lt;div class='one'&gt;
-&lt;table height='28' align='center'&gt;
-	&lt;tr class=&quot;title&quot; align='center'&gt;
-	&lt;td width='42'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;
-	&lt;td width='*'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
-	&lt;td width='80'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
-	&lt;td width='40'&gt;[% c.loc(&quot;Reply&quot;) %]&lt;/td&gt;
-	&lt;td width='40'&gt;[% c.loc(&quot;Hit&quot;) %]&lt;/td&gt;
-	&lt;td width='200'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-[% FOREACH t IN topics %]
-&lt;div class='multi'&gt;
-&lt;table align='center'&gt;
-	&lt;tr align='center'&gt;
-	&lt;td class='forum1' width='42'&gt;[% IF t.sticky %]&lt;img src='[% c.config.dir.images %]/site/top.gif' /&gt;[% ELSIF t.closed %]&lt;img src='[% c.config.dir.images %]/site/locked.gif' /&gt;[% END %]&lt;/td&gt;
-	&lt;td class='forum2' valign='top' width='*'&gt;
-		&lt;table&gt;
-			&lt;tr&gt;
-			&lt;td align=&quot;left&quot;&gt;
-			    [% IF t.elite %]
-			    &lt;a href='[% forum.forum_url %]/elite'&gt;&lt;img src='[% c.config.dir.images %]/site/elite.gif' /&gt;&lt;/a&gt; 
-			    [% END %]
-			    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/t[% t.topic_id %]-[% t.title | be_url_part %]'&gt;&lt;span class='semilight'&gt;[% t.title %]&lt;/span&gt;&lt;/a&gt;
-			    [% IF c.user_exists AND NOT is_visited.topic.${t.topic_id} %]
-			    &lt;img src='[% c.config.dir.images %]/site/new.gif' /&gt;
-			    [% END %]
-			    [% IF roles.is_moderator %]
-            	&lt;div style='float:right'&gt;
-            	    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/[% IF t.sticky %]unsticky[% ELSE %]sticky[% END %]'&gt;[% IF t.sticky %][% c.loc('Unsticky') %][% ELSE %][% c.loc('Sticky') %][% END %]&lt;/a&gt; |
-                    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/[% IF t.closed %]unlock[% ELSE %]lock[% END %]'&gt;[% IF t.closed %][% c.loc('Unlock') %][% ELSE %][% c.loc('Lock') %][% END %]&lt;/a&gt; |
-                    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/[% IF t.elite %]unelite[% ELSE %]elite[% END %]'&gt;[% IF t.elite %][% c.loc('Unelite') %][% ELSE %][% c.loc('Elite') %][% END %]
-                &lt;/div&gt;
-                [% END %]
-			&lt;/td&gt;
-			&lt;/tr&gt;
-    	&lt;/table&gt;
-	&lt;/td&gt;
-	&lt;td class='forum1' width='80'&gt;&lt;a href='/u/[% t.author.username %]'&gt;[% t.author.nickname %]&lt;/a&gt;&lt;/td&gt;
-	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.total_replies  	 %]&lt;/span&gt;&lt;/td&gt;
-	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.hit %]&lt;/span&gt;&lt;/td&gt;
-	&lt;td class='forum1' width='200' align='right'&gt;&lt;a href='/u/[% t.last_updator.username %]'&gt;[% t.last_updator.nickname %]&lt;/a&gt; | &lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;
-        &lt;td&gt;[% INCLUDE 'sub/pager.html' url_prefix = forum.forum_url %]&lt;/td&gt;
-    &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-[% IF forum_links.size %]
-&lt;div class=&quot;one&quot;&gt;
-&lt;table align=&quot;center&quot;&gt;
-    &lt;tr&gt;&lt;td colspan='5' class=&quot;title&quot;&gt;Forum Links&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr&gt;
-        [% FOREACH forum_link IN forum_links %]
-        &lt;td width=&quot;20%&quot; align=&quot;center&quot;&gt;&lt;a href=&quot;[% forum_link.url %]&quot; target=&quot;_blank&quot;&gt;[% forum_link.text %]&lt;/a&gt;&lt;/td&gt;
-        [% IF loop.count == 5 AND forum_links.size &gt; 5 %]&lt;/tr&gt;&lt;tr&gt;[% END %]
-        [% END %]
-        [% IF forum_links.size != 5 AND forum_links.size != 10 %]
-        [% cols = 10 - forum_links.size; cols = cols - 5 IF cols &gt; 5 %]
-        &lt;td colspan=&quot;[% cols %]&quot;&gt;&amp;nbsp;&lt;/td&gt;
-        [% END %]
-    &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-
-    &lt;/div&gt;
+[% PROCESS sub/date.html %]
+
+[% title = forum.name %]
+[% IF forum.policy == 'public' %]
+[% RSS_URL = forum.forum_url _ '/rss' %]
+[% END %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF c.config.function_on.poll %]
+        [% UNLESS poll_count == 0 AND forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls ([% poll_count %])&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/about'&gt;&lt;span&gt;About&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF c.user_exists AND roles.is_admin %]
+        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id %]'&gt;&lt;span&gt;[% c.loc('Forum Admin') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+[% IF forum.policy == 'private' %]
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td class='title' width='40'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;&lt;td class='forum1'&gt;We have &lt;a href='[% forum.forum_url %]/members'&gt;[% forum.total_members %] users&lt;/a&gt; and &lt;a href='[% forum.forum_url %]/members/pending'&gt;[% pending_count %] pending users&lt;/a&gt;.
+[% IF pending_count AND roles.is_moderator %]
+&lt;div class='highlight' style='font-weight: bolder'&gt;Tips: You need approval the &lt;a href='[% forum.forum_url %]/members/pending'&gt;pending requests&lt;/a&gt;&lt;/div&gt;
+[% END %]
+&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+
+[% IF announcement %]
+&lt;div class=&quot;one&quot;&gt;
+&lt;table align=&quot;center&quot;&gt;
+&lt;tr&gt;
+    &lt;td class='title' width='100' valign=&quot;top&quot;&gt;[ [% c.loc(&quot;Announcement&quot;) %] ]: [% announcement.title %]&lt;/td&gt;
+&lt;/tr&gt;
+&lt;tr&gt;&lt;td class='forum1'&gt;
+    [% announcement.text %]
+&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td width='*' align='right' valign='bottom'&gt;
+Admin: &lt;a href='/u/[% forum_roles.${forum.forum_id}.admin.username %]'&gt;[% forum_roles.${forum.forum_id}.admin.nickname %]&lt;/a&gt;
+[% FOREACH moderator IN forum_roles.${forum.forum_id}.moderator %]
+[% IF loop.first %], [% END %]&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
+[% END %]
+&lt;td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+&lt;div class='one'&gt;
+&lt;table height='28' align='center'&gt;
+	&lt;tr class=&quot;title&quot; align='center'&gt;
+	&lt;td width='42'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;
+	&lt;td width='*'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
+	&lt;td width='80'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
+	&lt;td width='40'&gt;[% c.loc(&quot;Reply&quot;) %]&lt;/td&gt;
+	&lt;td width='40'&gt;[% c.loc(&quot;Hit&quot;) %]&lt;/td&gt;
+	&lt;td width='200'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+[% FOREACH t IN topics %]
+&lt;div class='multi'&gt;
+&lt;table align='center'&gt;
+	&lt;tr align='center'&gt;
+	&lt;td class='forum1' width='42'&gt;[% IF t.sticky %]&lt;img src='[% c.config.dir.images %]/site/top.gif' /&gt;[% ELSIF t.closed %]&lt;img src='[% c.config.dir.images %]/site/locked.gif' /&gt;[% END %]&lt;/td&gt;
+	&lt;td class='forum2' valign='top' width='*'&gt;
+		&lt;table&gt;
+			&lt;tr&gt;
+			&lt;td align=&quot;left&quot;&gt;
+			    [% IF t.elite %]
+			    &lt;a href='[% forum.forum_url %]/elite'&gt;&lt;img src='[% c.config.dir.images %]/site/elite.gif' /&gt;&lt;/a&gt; 
+			    [% END %]
+			    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/t[% t.topic_id %]-[% t.title | be_url_part %]'&gt;&lt;span class='semilight'&gt;[% t.title %]&lt;/span&gt;&lt;/a&gt;
+			    [% IF c.user_exists AND NOT is_visited.topic.${t.topic_id} %]
+			    &lt;img src='[% c.config.dir.images %]/site/new.gif' /&gt;
+			    [% END %]
+			    [% IF roles.is_moderator %]
+            	&lt;div style='float:right'&gt;
+            	    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/[% IF t.sticky %]unsticky[% ELSE %]sticky[% END %]'&gt;[% IF t.sticky %][% c.loc('Unsticky') %][% ELSE %][% c.loc('Sticky') %][% END %]&lt;/a&gt; |
+                    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/[% IF t.closed %]unlock[% ELSE %]lock[% END %]'&gt;[% IF t.closed %][% c.loc('Unlock') %][% ELSE %][% c.loc('Lock') %][% END %]&lt;/a&gt; |
+                    &lt;a href='[% forum.forum_url %]/topic/[% t.topic_id %]/[% IF t.elite %]unelite[% ELSE %]elite[% END %]'&gt;[% IF t.elite %][% c.loc('Unelite') %][% ELSE %][% c.loc('Elite') %][% END %]
+                &lt;/div&gt;
+                [% END %]
+			&lt;/td&gt;
+			&lt;/tr&gt;
+    	&lt;/table&gt;
+	&lt;/td&gt;
+	&lt;td class='forum1' width='80'&gt;&lt;a href='/u/[% t.author.username %]'&gt;[% t.author.nickname %]&lt;/a&gt;&lt;/td&gt;
+	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.total_replies  	 %]&lt;/span&gt;&lt;/td&gt;
+	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.hit %]&lt;/span&gt;&lt;/td&gt;
+	&lt;td class='forum1' width='200' align='right'&gt;&lt;a href='/u/[% t.last_updator.username %]'&gt;[% t.last_updator.nickname %]&lt;/a&gt; | &lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;
+        &lt;td&gt;[% INCLUDE 'sub/pager.html' url_prefix = forum.forum_url %]&lt;/td&gt;
+    &lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+[% IF forum_links.size %]
+&lt;div class=&quot;one&quot;&gt;
+&lt;table align=&quot;center&quot;&gt;
+    &lt;tr&gt;&lt;td colspan='5' class=&quot;title&quot;&gt;Forum Links&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;
+        [% FOREACH forum_link IN forum_links %]
+        &lt;td width=&quot;20%&quot; align=&quot;center&quot;&gt;&lt;a href=&quot;[% forum_link.url %]&quot; target=&quot;_blank&quot;&gt;[% forum_link.text %]&lt;/a&gt;&lt;/td&gt;
+        [% IF loop.count == 5 AND forum_links.size &gt; 5 %]&lt;/tr&gt;&lt;tr&gt;[% END %]
+        [% END %]
+        [% IF forum_links.size != 5 AND forum_links.size != 10 %]
+        [% cols = 10 - forum_links.size; cols = cols - 5 IF cols &gt; 5 %]
+        &lt;td colspan=&quot;[% cols %]&quot;&gt;&amp;nbsp;&lt;/td&gt;
+        [% END %]
+    &lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/forum/forum.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,25 +1,25 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-[% USE date %]
-[% PROCESS sub/date.html %]
-[% forum.forum_url = c.req.base _ forum.forum_url %]
-&lt;rss version=&quot;2.0&quot;&gt;
-&lt;channel&gt;
-&lt;title&gt;&lt;![CDATA[[% forum.name %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% forum.forum_url %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% forum.description %]]]&gt;&lt;/description&gt;
-&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
-&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
-&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
-
-[% FOREACH t IN topics %]
-&lt;item&gt;
-&lt;title&gt;&lt;![CDATA[[% t.title %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% forum.forum_url _ '/topic/' _ t.topic_id %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% t.text %]]]&gt;&lt;/description&gt;
-&lt;guid isPermaLink=&quot;true&quot;&gt;[% forum.forum_url _ '/topic/' _ t.topic_id %]&lt;/guid&gt;
-&lt;pubDate&gt;[% date_format(t.last_update_date, '%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
-&lt;/item&gt;
-[% END %]
-
-&lt;/channel&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+[% USE date %]
+[% PROCESS sub/date.html %]
+[% forum.forum_url = c.req.base _ forum.forum_url %]
+&lt;rss version=&quot;2.0&quot;&gt;
+&lt;channel&gt;
+&lt;title&gt;&lt;![CDATA[[% forum.name %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% forum.forum_url %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% forum.description %]]]&gt;&lt;/description&gt;
+&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
+&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
+&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
+
+[% FOREACH t IN topics %]
+&lt;item&gt;
+&lt;title&gt;&lt;![CDATA[[% t.title %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% forum.forum_url _ '/topic/' _ t.topic_id %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% t.text %]]]&gt;&lt;/description&gt;
+&lt;guid isPermaLink=&quot;true&quot;&gt;[% forum.forum_url _ '/topic/' _ t.topic_id %]&lt;/guid&gt;
+&lt;pubDate&gt;[% date_format(t.last_update_date, '%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
+&lt;/item&gt;
+[% END %]
+
+&lt;/channel&gt;
 &lt;/rss&gt;
\ No newline at end of file</diff>
      <filename>templates/forum/forum.rss.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
-[% title = 'Join to ' _ forum.name %]
-
-[% msg = BLOCK %]
-&lt;form method='POST'&gt;
-&lt;p&gt;It's a private forum. u must send a request to the admin and wait until admin approval your request.&lt;/p&gt;
-&lt;input type='submit' value='Join Us' /&gt;
-&lt;input type='button' value=&quot;No, Thanks&quot; onclick='javascript:history.back()' /&gt;
-&lt;/form&gt;
-[% END %]
-
-[% INCLUDE 'simple/message.html' message.msg = msg %]
+[% title = 'Join to ' _ forum.name %]
+
+[% msg = BLOCK %]
+&lt;form method='POST'&gt;
+&lt;p&gt;It's a private forum. u must send a request to the admin and wait until admin approval your request.&lt;/p&gt;
+&lt;input type='submit' value='Join Us' /&gt;
+&lt;input type='button' value=&quot;No, Thanks&quot; onclick='javascript:history.back()' /&gt;
+&lt;/form&gt;
+[% END %]
+
+[% INCLUDE 'simple/message.html' message.msg = msg %]</diff>
      <filename>templates/forum/join_us.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,90 +1,90 @@
-[% PROCESS sub/date.html %]
-[% title = 'Members Of ' _ forum.name %]
-
-[% IF c.user_exists AND roles.is_admin %]
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/basic'&gt;&lt;span&gt;[% c.loc('Basic Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/style'&gt;&lt;span&gt;[% c.loc('Style Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% TRY %]
-        [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
-        [% USE File( css_file ) %]
-        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/del_style'&gt;&lt;span&gt;[% c.loc('Delete Style') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% CATCH File %]
-        [% END %]
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/members'&gt;&lt;span&gt;[% c.loc('Members Settings') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/announcement'&gt;&lt;span&gt;[% c.loc('Announcement Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-[% END %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tr class='title' align='center'&gt;
-	&lt;td&gt;[% c.loc('NickName') %]&lt;/td&gt;
-	&lt;td&gt;[% c.loc('Role') %]&lt;/td&gt;
-	&lt;td&gt;[% c.loc('Gender') %]&lt;/td&gt;
-	&lt;td&gt;[% c.loc('Register On') %]&lt;/td&gt;
-    [% IF roles.is_moderator %]&lt;td width='220'&gt;[% c.loc('Action') %]&lt;/td&gt;[% END %]
-	&lt;/tr&gt;
-[% FOREACH user IN user_roles %]
-&lt;tr align='center'&gt;
-	&lt;td class='forum2'&gt;&lt;a href='/u/[% members.${user.user_id}.username %]'&gt;[% members.${user.user_id}.nickname %]&lt;/a&gt;&lt;/td&gt;
-	&lt;td class='forum1'&gt;[% user.status | ucfirst %]&lt;/td&gt;
-	&lt;td class='forum2'&gt;[% SWITCH members.${user.user_id}.gender;CASE 'F';'Female';CASE 'M';'Male';CASE;'Secret';END; %]&lt;/td&gt;
-	&lt;td class='forum1'&gt;[% date_format(members.${user.user_id}.register_time) %]&lt;/td&gt;
-	[% IF roles.is_moderator %]
-	&lt;td class='forum2'&gt;
-	[% IF user.status == 'admin' OR user.status == 'moderator' %]
-	-
-	[% ELSE %]
-	    &lt;select id='div_r_[% user.user_id %]'&gt;
-	    [% FOREACH m_type IN ['user', 'rejected', 'blocked'] %]
-	    [% IF user.status != m_type %]&lt;option value='[% m_type %]'&gt;[% m_type | ucfirst %]&lt;/option&gt;[% END %]
-	    [% END %]
-        &lt;/select&gt;
-        &lt;input type='button' value='Change Membership' onclick=&quot;javascript:ChangeMemberType('[% user.user_id %]', '[% user.status %]')&quot; /&gt;
-    [% END %]
-    &lt;/td&gt;
-	[% END %]
-&lt;/tr&gt;
-[% END %]
-&lt;tr class='forum2'&gt;
-    &lt;td colspan='2' align='right'&gt;
-    [% c.loc('View:') %] &lt;select name='member_type' id='member_type' onchange='javascript:ChangeView()'&gt;
-    &lt;option value='user'[% IF member_type == 'user' %] selected='selected'[% END %]&gt;[% c.loc('Members') %]&lt;/option&gt;
-    &lt;option value='pending'[% IF member_type == 'pending' %] selected='selected'[% END %]&gt;[% c.loc('Pending') %]&lt;/option&gt;
-    &lt;option value='blocked'[% IF member_type == 'blocked' %] selected='selected'[% END %]&gt;[% c.loc('Blocked') %]&lt;/option&gt;
-    &lt;option value='rejected'[% IF member_type == 'rejected' %] selected='selected'[% END %]&gt;[% c.loc('Rejected') %]&lt;/option&gt;
-    &lt;/select&gt;
-    &lt;/td&gt;
-	&lt;td colspan='[% IF roles.is_moderator %]3[% ELSE %]2[% END %]' align='right'&gt;
-	[% INCLUDE 'sub/pager.html' %]
-	&lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-&lt;script&gt;
-
-function ChangeView() {
-    var member_type = $('#member_type').val();
-    if (member_type == 'user') { member_type = ''; }
-    window.location = '[% forum.forum_url %]/members/' + member_type;
-}
-
-[% IF roles.is_moderator %]
-function ChangeMemberType(user_id, from) {
-    var m_type = $('#div_r_'+user_id).val();
-    
-    $.get('/forumadmin/[% forum.forum_id %]/change_membership', { 'user_id': user_id, 'from': from, 'to': m_type }, function(data) {
-        alert(data);
-    } );
-}
-[% END %]
-&lt;/script&gt;
-
-[% IF c.user_exists AND roles.is_admin %]
-    &lt;/div&gt;
-&lt;/div&gt;
-[% END %]
+[% PROCESS sub/date.html %]
+[% title = 'Members Of ' _ forum.name %]
+
+[% IF c.user_exists AND roles.is_admin %]
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/basic'&gt;&lt;span&gt;[% c.loc('Basic Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/style'&gt;&lt;span&gt;[% c.loc('Style Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% TRY %]
+        [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
+        [% USE File( css_file ) %]
+        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/del_style'&gt;&lt;span&gt;[% c.loc('Delete Style') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% CATCH File %]
+        [% END %]
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/members'&gt;&lt;span&gt;[% c.loc('Members Settings') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id  %]/announcement'&gt;&lt;span&gt;[% c.loc('Announcement Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+[% END %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tr class='title' align='center'&gt;
+	&lt;td&gt;[% c.loc('NickName') %]&lt;/td&gt;
+	&lt;td&gt;[% c.loc('Role') %]&lt;/td&gt;
+	&lt;td&gt;[% c.loc('Gender') %]&lt;/td&gt;
+	&lt;td&gt;[% c.loc('Register On') %]&lt;/td&gt;
+    [% IF roles.is_moderator %]&lt;td width='220'&gt;[% c.loc('Action') %]&lt;/td&gt;[% END %]
+	&lt;/tr&gt;
+[% FOREACH user IN user_roles %]
+&lt;tr align='center'&gt;
+	&lt;td class='forum2'&gt;&lt;a href='/u/[% members.${user.user_id}.username %]'&gt;[% members.${user.user_id}.nickname %]&lt;/a&gt;&lt;/td&gt;
+	&lt;td class='forum1'&gt;[% user.status | ucfirst %]&lt;/td&gt;
+	&lt;td class='forum2'&gt;[% SWITCH members.${user.user_id}.gender;CASE 'F';'Female';CASE 'M';'Male';CASE;'Secret';END; %]&lt;/td&gt;
+	&lt;td class='forum1'&gt;[% date_format(members.${user.user_id}.register_time) %]&lt;/td&gt;
+	[% IF roles.is_moderator %]
+	&lt;td class='forum2'&gt;
+	[% IF user.status == 'admin' OR user.status == 'moderator' %]
+	-
+	[% ELSE %]
+	    &lt;select id='div_r_[% user.user_id %]'&gt;
+	    [% FOREACH m_type IN ['user', 'rejected', 'blocked'] %]
+	    [% IF user.status != m_type %]&lt;option value='[% m_type %]'&gt;[% m_type | ucfirst %]&lt;/option&gt;[% END %]
+	    [% END %]
+        &lt;/select&gt;
+        &lt;input type='button' value='Change Membership' onclick=&quot;javascript:ChangeMemberType('[% user.user_id %]', '[% user.status %]')&quot; /&gt;
+    [% END %]
+    &lt;/td&gt;
+	[% END %]
+&lt;/tr&gt;
+[% END %]
+&lt;tr class='forum2'&gt;
+    &lt;td colspan='2' align='right'&gt;
+    [% c.loc('View:') %] &lt;select name='member_type' id='member_type' onchange='javascript:ChangeView()'&gt;
+    &lt;option value='user'[% IF member_type == 'user' %] selected='selected'[% END %]&gt;[% c.loc('Members') %]&lt;/option&gt;
+    &lt;option value='pending'[% IF member_type == 'pending' %] selected='selected'[% END %]&gt;[% c.loc('Pending') %]&lt;/option&gt;
+    &lt;option value='blocked'[% IF member_type == 'blocked' %] selected='selected'[% END %]&gt;[% c.loc('Blocked') %]&lt;/option&gt;
+    &lt;option value='rejected'[% IF member_type == 'rejected' %] selected='selected'[% END %]&gt;[% c.loc('Rejected') %]&lt;/option&gt;
+    &lt;/select&gt;
+    &lt;/td&gt;
+	&lt;td colspan='[% IF roles.is_moderator %]3[% ELSE %]2[% END %]' align='right'&gt;
+	[% INCLUDE 'sub/pager.html' %]
+	&lt;/td&gt;
+&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+&lt;script&gt;
+
+function ChangeView() {
+    var member_type = $('#member_type').val();
+    if (member_type == 'user') { member_type = ''; }
+    window.location = '[% forum.forum_url %]/members/' + member_type;
+}
+
+[% IF roles.is_moderator %]
+function ChangeMemberType(user_id, from) {
+    var m_type = $('#div_r_'+user_id).val();
+    
+    $.get('/forumadmin/[% forum.forum_id %]/change_membership', { 'user_id': user_id, 'from': from, 'to': m_type }, function(data) {
+        alert(data);
+    } );
+}
+[% END %]
+&lt;/script&gt;
+
+[% IF c.user_exists AND roles.is_admin %]
+    &lt;/div&gt;
+&lt;/div&gt;
+[% END %]</diff>
      <filename>templates/forum/members.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,40 +1,40 @@
-[% USE FillInForm %]
-
-[% UNLESS c.req.method == 'POST';
-    announce_title = announce.title | decodeHTML;
-    filldata = {
-        title =&gt; announce_title,
-        text  =&gt; announce.text,
-        formatter =&gt; announce.formatter,
-    };
-END; %]
-
-[% WRAPPER 'forumadmin/bar.html' %]
-
-[% FILTER fillinform fdat =&gt; filldata || c.req.params %]
-
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-    &lt;tr class='forum2'&gt;
-        &lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' size='40' /&gt;&lt;/td&gt;
-        &lt;td rowspan='3'&gt;
-            Have fun!
-        &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='forum1'&gt;&lt;td align=&quot;right&quot;&gt;[% c.loc(&quot;Formatter&quot;) %]&lt;/td&gt;
-        &lt;td&gt;&lt;input type='radio' name='formatter' value='ubb' checked='yes' /&gt;UBB &amp;nbsp; &lt;input type='radio' name='formatter' value='textile' /&gt;Textile &amp;nbsp; &lt;input type='radio' name='formatter' value='wiki' /&gt;Wiki &amp;nbsp; &lt;input type='radio' name='formatter' value='pod' /&gt;Pod &amp;nbsp; &lt;input type='radio' name='formatter' value='plain' /&gt;Plain &amp;nbsp;[% IF roles.site.admin %] &lt;input type='radio' name='formatter' value='html' /&gt;HTML &amp;nbsp;[% END %] &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='forum2'&gt;
-        &lt;td align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;&lt;td&gt;
-            &lt;textarea cols='60' rows='18' wrap=&quot;virtual&quot; name=&quot;text&quot;&gt;&lt;/textarea&gt;
-        &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='forum1'&gt;&lt;td colspan='3'&gt;&lt;input type='submit' value=&quot;I'm sure, Let's Go!&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-[% END %][%# END for FillInForm %]
-
+[% USE FillInForm %]
+
+[% UNLESS c.req.method == 'POST';
+    announce_title = announce.title | decodeHTML;
+    filldata = {
+        title =&gt; announce_title,
+        text  =&gt; announce.text,
+        formatter =&gt; announce.formatter,
+    };
+END; %]
+
+[% WRAPPER 'forumadmin/bar.html' %]
+
+[% FILTER fillinform fdat =&gt; filldata || c.req.params %]
+
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+    &lt;tr class='forum2'&gt;
+        &lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' size='40' /&gt;&lt;/td&gt;
+        &lt;td rowspan='3'&gt;
+            Have fun!
+        &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='forum1'&gt;&lt;td align=&quot;right&quot;&gt;[% c.loc(&quot;Formatter&quot;) %]&lt;/td&gt;
+        &lt;td&gt;&lt;input type='radio' name='formatter' value='ubb' checked='yes' /&gt;UBB &amp;nbsp; &lt;input type='radio' name='formatter' value='textile' /&gt;Textile &amp;nbsp; &lt;input type='radio' name='formatter' value='wiki' /&gt;Wiki &amp;nbsp; &lt;input type='radio' name='formatter' value='pod' /&gt;Pod &amp;nbsp; &lt;input type='radio' name='formatter' value='plain' /&gt;Plain &amp;nbsp;[% IF roles.site.admin %] &lt;input type='radio' name='formatter' value='html' /&gt;HTML &amp;nbsp;[% END %] &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='forum2'&gt;
+        &lt;td align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;&lt;td&gt;
+            &lt;textarea cols='60' rows='18' wrap=&quot;virtual&quot; name=&quot;text&quot;&gt;&lt;/textarea&gt;
+        &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='forum1'&gt;&lt;td colspan='3'&gt;&lt;input type='submit' value=&quot;I'm sure, Let's Go!&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+[% END %][%# END for FillInForm %]
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/forumadmin/announcement.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,27 +1,27 @@
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-
-[% url_base = '/forumadmin/' _ forum.forum_id %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Forum&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% IF c.req.path.match('basic') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/basic'&gt;&lt;span&gt;[% c.loc('Basic Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% IF c.req.path.match('style') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/style'&gt;&lt;span&gt;[% c.loc('Style Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% TRY %]
-        [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
-        [% USE File( css_file ) %]
-        &lt;li[% IF c.req.path.match('del_style') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/del_style'&gt;&lt;span&gt;[% c.loc('Delete Style') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% CATCH File %]
-        [% END %]
-        [% IF forum.policy == 'private' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/members'&gt;&lt;span&gt;[% c.loc('Members Settings') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        &lt;li[% IF c.req.path.match('announcement') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/announcement'&gt;&lt;span&gt;[% c.loc('Announcement Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% IF c.req.path.match('links') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/links'&gt;&lt;span&gt;[% c.loc('Forum Links') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-[% content %]
-
-    &lt;/div&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+
+[% url_base = '/forumadmin/' _ forum.forum_id %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Forum&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% IF c.req.path.match('basic') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/basic'&gt;&lt;span&gt;[% c.loc('Basic Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% IF c.req.path.match('style') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/style'&gt;&lt;span&gt;[% c.loc('Style Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% TRY %]
+        [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
+        [% USE File( css_file ) %]
+        &lt;li[% IF c.req.path.match('del_style') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/del_style'&gt;&lt;span&gt;[% c.loc('Delete Style') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% CATCH File %]
+        [% END %]
+        [% IF forum.policy == 'private' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/members'&gt;&lt;span&gt;[% c.loc('Members Settings') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        &lt;li[% IF c.req.path.match('announcement') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/announcement'&gt;&lt;span&gt;[% c.loc('Announcement Setting') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% IF c.req.path.match('links') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='[% url_base %]/links'&gt;&lt;span&gt;[% c.loc('Forum Links') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+[% content %]
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/forumadmin/bar.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,64 +1,64 @@
-[% WRAPPER 'forumadmin/bar.html' %]
-
-[% USE FillInForm %]
-[% UNLESS c.req.method == 'POST';
-    forum_name = forum.name | decodeHTML;
-    forum_description = forum.description | decodeHTML;
-    data = {
-        name  =&gt; forum_name,
-        description  =&gt; forum_description,
-        private    =&gt; private,
-        moderators =&gt; moderators,
-        forum_code =&gt; forum.forum_code,
-        can_post_threads =&gt; forum.settings.can_post_threads || 'Y',
-        can_post_replies =&gt; forum.settings.can_post_replies || 'Y',
-        can_post_polls   =&gt; forum.settings.can_post_polls   || 'Y',
-    };
-END; %]
-[% FILTER fillinform fdat =&gt; data || c.req.params %]
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-  [% IF is_site_admin %]
-    &lt;tr class='forum2'&gt;&lt;td&gt;Forum Code:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='forum_code' /&gt;
-    [% IF c.form.error('forum_code') %]
-	    [% IF c.form.error('forum_code', 'HAS_BLANK') %]
-	    don't put blank in your forum_code.
-	    [% ELSIF c.form.error('forum_code', 'REGEX') %]
-	    only A-Z, a-z, 0-9, -, _ is allowed.
-	    [% ELSIF c.form.error('forum_code', 'HAS_RESERVED') %]
-	    this forum_code is reserved.
-	    [% ELSIF c.form.error('forum_code', 'DBIC_UNIQUE') %]
-	    This forum_code is used by another one.
-	    [% ELSE %]
-	    forum_code should be 6-20 chars.
-	    [% END %]
-	[% END %]&lt;/td&gt;&lt;/tr&gt;
-  [% END %]
-    &lt;tr class='forum1'&gt;&lt;td&gt;Forum Name:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='name' /&gt;
-    [% IF c.form.error('name') %]
-	the length of forum name should be more than 1 and less than 40
-	[% END %]&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='forum2'&gt;&lt;td&gt;Forum Description&lt;/td&gt;&lt;td&gt;&lt;textarea name='description' rows='9' cols='40'&gt;&lt;/textarea&gt;
-    [% IF c.form.error('description') %]
-	&lt;br /&gt;description cann't be null.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='forum1'&gt;&lt;td&gt;Forum Moderators&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='moderators' /&gt; use ',' to split if there are more than 1 moderator
-    [% IF c.form.error('moderators') %]
-	&lt;br /&gt;no such user [% non_existence_user %]
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='forum2'&gt;&lt;td&gt;Policy&lt;/td&gt;&lt;td&gt;&lt;input type='checkbox' name='private' value='1' /&gt; Private&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='forum1'&gt;&lt;td&gt;Can Post Topics:&lt;/td&gt;&lt;td&gt;&lt;input type='radio' name='can_post_threads' value='Y' checked='checked' /&gt; Yes &lt;input type='radio' name='can_post_threads' value='N' /&gt; No&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='forum2'&gt;&lt;td&gt;Can Post Replies:&lt;/td&gt;&lt;td&gt;&lt;input type='radio' name='can_post_replies' value='Y' checked='checked' /&gt; Yes &lt;input type='radio' name='can_post_replies' value='N' /&gt; No&lt;/td&gt;&lt;/tr&gt;
-    [% IF c.config.function_on.poll %]
-    &lt;tr class='forum1'&gt;&lt;td&gt;Can Post Polls:&lt;/td&gt;&lt;td&gt;&lt;input type='radio' name='can_post_polls' value='Y' checked='checked' /&gt; Yes &lt;input type='radio' name='can_post_polls' value='N' /&gt; No&lt;/td&gt;&lt;/tr&gt;
-    [% END %]
-    &lt;tr class='forum1'&gt;&lt;td colspan='2'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-[% END %]
-
+[% WRAPPER 'forumadmin/bar.html' %]
+
+[% USE FillInForm %]
+[% UNLESS c.req.method == 'POST';
+    forum_name = forum.name | decodeHTML;
+    forum_description = forum.description | decodeHTML;
+    data = {
+        name  =&gt; forum_name,
+        description  =&gt; forum_description,
+        private    =&gt; private,
+        moderators =&gt; moderators,
+        forum_code =&gt; forum.forum_code,
+        can_post_threads =&gt; forum.settings.can_post_threads || 'Y',
+        can_post_replies =&gt; forum.settings.can_post_replies || 'Y',
+        can_post_polls   =&gt; forum.settings.can_post_polls   || 'Y',
+    };
+END; %]
+[% FILTER fillinform fdat =&gt; data || c.req.params %]
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+  [% IF is_site_admin %]
+    &lt;tr class='forum2'&gt;&lt;td&gt;Forum Code:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='forum_code' /&gt;
+    [% IF c.form.error('forum_code') %]
+	    [% IF c.form.error('forum_code', 'HAS_BLANK') %]
+	    don't put blank in your forum_code.
+	    [% ELSIF c.form.error('forum_code', 'REGEX') %]
+	    only A-Z, a-z, 0-9, -, _ is allowed.
+	    [% ELSIF c.form.error('forum_code', 'HAS_RESERVED') %]
+	    this forum_code is reserved.
+	    [% ELSIF c.form.error('forum_code', 'DBIC_UNIQUE') %]
+	    This forum_code is used by another one.
+	    [% ELSE %]
+	    forum_code should be 6-20 chars.
+	    [% END %]
+	[% END %]&lt;/td&gt;&lt;/tr&gt;
+  [% END %]
+    &lt;tr class='forum1'&gt;&lt;td&gt;Forum Name:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='name' /&gt;
+    [% IF c.form.error('name') %]
+	the length of forum name should be more than 1 and less than 40
+	[% END %]&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='forum2'&gt;&lt;td&gt;Forum Description&lt;/td&gt;&lt;td&gt;&lt;textarea name='description' rows='9' cols='40'&gt;&lt;/textarea&gt;
+    [% IF c.form.error('description') %]
+	&lt;br /&gt;description cann't be null.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='forum1'&gt;&lt;td&gt;Forum Moderators&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='moderators' /&gt; use ',' to split if there are more than 1 moderator
+    [% IF c.form.error('moderators') %]
+	&lt;br /&gt;no such user [% non_existence_user %]
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='forum2'&gt;&lt;td&gt;Policy&lt;/td&gt;&lt;td&gt;&lt;input type='checkbox' name='private' value='1' /&gt; Private&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='forum1'&gt;&lt;td&gt;Can Post Topics:&lt;/td&gt;&lt;td&gt;&lt;input type='radio' name='can_post_threads' value='Y' checked='checked' /&gt; Yes &lt;input type='radio' name='can_post_threads' value='N' /&gt; No&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='forum2'&gt;&lt;td&gt;Can Post Replies:&lt;/td&gt;&lt;td&gt;&lt;input type='radio' name='can_post_replies' value='Y' checked='checked' /&gt; Yes &lt;input type='radio' name='can_post_replies' value='N' /&gt; No&lt;/td&gt;&lt;/tr&gt;
+    [% IF c.config.function_on.poll %]
+    &lt;tr class='forum1'&gt;&lt;td&gt;Can Post Polls:&lt;/td&gt;&lt;td&gt;&lt;input type='radio' name='can_post_polls' value='Y' checked='checked' /&gt; Yes &lt;input type='radio' name='can_post_polls' value='N' /&gt; No&lt;/td&gt;&lt;/tr&gt;
+    [% END %]
+    &lt;tr class='forum1'&gt;&lt;td colspan='2'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+[% END %]
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/forumadmin/basic.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
-[% WRAPPER 'forumadmin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='forum1'&gt;&lt;td&gt;
-  Explaination for Forum Administrator's Actions.
-&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
+[% WRAPPER 'forumadmin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='forum1'&gt;&lt;td&gt;
+  Explaination for Forum Administrator's Actions.
+&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/forumadmin/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,28 +1,28 @@
-[% USE FillInForm %]
-
-[% WRAPPER 'forumadmin/bar.html' %]
-
-[% FILTER fillinform fdat =&gt; filldata || c.req.params %]
-
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-    &lt;tr class=&quot;title&quot;&gt;&lt;td&gt;Link text&lt;/td&gt;&lt;td&gt;URL&lt;/td&gt;&lt;/tr&gt;
-    [% FOREACH i IN [0 .. max_count] %]
-    &lt;tr class=&quot;forum[% IF loop.count MOD 2 == 1 %]1[% ELSE %]2[% END %]&quot;&gt;
-        &lt;td&gt;&lt;input type='text' name=&quot;text[% i %]&quot; size=&quot;20&quot; /&gt;
-            [% IF error.text.${i} %]&lt;span class='highlight'&gt;[% error.text.${i} %]&lt;/span&gt;[% END %]
-            &lt;/td&gt;
-        &lt;td&gt;&lt;input type='text' name=&quot;url[% i %]&quot;  size=&quot;60&quot; /&gt;
-            [% IF error.url.${i} %]&lt;span class='highlight'&gt;[% error.url.${i} %]&lt;/span&gt;[% END %]
-            &lt;/td&gt;
-    &lt;/tr&gt;
-    [% END %]
-    &lt;tr class='forum1'&gt;&lt;td colspan='3'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-[% END %][%# END for FillInForm %]
-
+[% USE FillInForm %]
+
+[% WRAPPER 'forumadmin/bar.html' %]
+
+[% FILTER fillinform fdat =&gt; filldata || c.req.params %]
+
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+    &lt;tr class=&quot;title&quot;&gt;&lt;td&gt;Link text&lt;/td&gt;&lt;td&gt;URL&lt;/td&gt;&lt;/tr&gt;
+    [% FOREACH i IN [0 .. max_count] %]
+    &lt;tr class=&quot;forum[% IF loop.count MOD 2 == 1 %]1[% ELSE %]2[% END %]&quot;&gt;
+        &lt;td&gt;&lt;input type='text' name=&quot;text[% i %]&quot; size=&quot;20&quot; /&gt;
+            [% IF error.text.${i} %]&lt;span class='highlight'&gt;[% error.text.${i} %]&lt;/span&gt;[% END %]
+            &lt;/td&gt;
+        &lt;td&gt;&lt;input type='text' name=&quot;url[% i %]&quot;  size=&quot;60&quot; /&gt;
+            [% IF error.url.${i} %]&lt;span class='highlight'&gt;[% error.url.${i} %]&lt;/span&gt;[% END %]
+            &lt;/td&gt;
+    &lt;/tr&gt;
+    [% END %]
+    &lt;tr class='forum1'&gt;&lt;td colspan='3'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+[% END %][%# END for FillInForm %]
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/forumadmin/links.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,121 +1,121 @@
-[% PROCESS 'config/format.html' %]
-
-[% color_option = BLOCK %]
-[% FOREACH color IN config.all_colors %]
-&lt;option style=&quot;background-color:[% color %];color:[% color %]&quot; value=&quot;[% color %]&quot;&gt;[% color %]&lt;/option&gt;
-[% END %]
-[% END %]
-[% BLOCK color_tr %]
-&lt;tr class='misc[% tr_misc %]'&gt;
-	&lt;td align='right'&gt;&lt;b&gt;[% tr_name %]:&lt;/b&gt;&lt;/td&gt;
-	&lt;td&gt;
-	&lt;input type='text' name=&quot;[% color_name %]&quot; id='[% color_name %]' size='7' maxlength='7' onChange=&quot;CHANGEC('[% color_name %]')&quot; /&gt; [% IF c.form.error(color_name, 'REGEX') %]It's not a validated color.[% END %]
-	&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-
-&lt;script&gt;
-	function CHANGEC(obj) {
-		$('#' + obj).css( { background : $('#' + obj).val() } );
-	}
-	function show_color(color) {
-		$('#showcolor').val(color);
-	}
-	function LoadStyle() {
-	    var stylename = $('#style_template').val();
-	    $.getJSON(&quot;[% c.config.dir.static %]/css/style/&quot; + stylename + &quot;.json&quot;,
-            function(data) {
-                $.each(data, function(i,item){
-                    $('#' + i).val(item);
-                    $('#' + i).css( { 'background': item } );
-                } );
-            } );
-	}
-	[% IF has_style %]
-        $(document).ready(function() {
-            LoadStyle();
-        } );
-    [% END %]
-&lt;/script&gt;
-
-[% USE FillInForm %]
-[% FILTER fillinform fdat =&gt; c.req.params %]
-
-[% WRAPPER 'forumadmin/bar.html' %]
-
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Style Setting&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;Choose one existing Style&lt;/td&gt;&lt;td&gt;
-        &lt;select id='style_template'&gt;
-            [% IF has_style %]
-            &lt;option value=&quot;forum[% forum.forum_id %]&quot;&gt;My Style&lt;/option&gt;
-            [% END %]
-            &lt;option value='black'&gt;Black&lt;/option&gt;
-            &lt;option value='green'&gt;Green&lt;/option&gt;
-        &lt;/select&gt;&lt;input type='button' value='Show' onclick='LoadStyle()' /&gt;&lt;/td&gt;&lt;/tr&gt;
-    [% TRY %]
-    [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
-    [% USE File( css_file ) %]
-    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;&lt;a href='/forumadmin/[% forum.forum_id %]/del_style'&gt;Delete Style, Restore Default&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
-    [% CATCH File %]
-    [% END %]
-    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Edit Style&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc1'&gt;
-		&lt;td align='right'&gt;&lt;b&gt;Get Color Code&lt;/b&gt;&lt;/td&gt;
-		&lt;td&gt;&lt;select onchange=&quot;show_color(this.options[this.selectedIndex].value)&quot; name=&quot;color&quot;&gt;
-		    [% color_option %]
-		    &lt;/select&gt; &lt;input type='text' name=&quot;showcolor&quot; id='showcolor' size='7'&gt;
-		&lt;/td&gt;
-    &lt;/tr&gt;
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'BackGround Color' color_name = 'bg_color' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Body Font Color' color_name = 'bg_fontcolor' %]
-    &lt;tr class='misc2'&gt;
-		&lt;td align='right'&gt;&lt;b&gt;BackGround Image:&lt;/b&gt;&lt;/td&gt;
-		&lt;td&gt;
-		&lt;input type='text' name=&quot;bg_image&quot; id='bg_image' size='60' /&gt; &lt;a href='/help/background'&gt;&lt;img src='[% c.config.dir.images %]/site/help.gif' width='16' height='16' align='absmiddle' /&gt;&lt;/a&gt;
-		[% IF c.form.error('bg_image') %]It's not a validated Image URL.[% END %]
-		&lt;/td&gt;
-    &lt;/tr&gt;
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Normal Link' color_name = 'link' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Unvisited Link' color_name = 'alink' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Visited Link' color_name = 'vlink' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Hover Link' color_name = 'hlink' %]
-    &lt;tr class='misc1'&gt;
-		&lt;td align='right'&gt;&lt;b&gt;Table Width:&lt;/b&gt;&lt;/td&gt;
-		&lt;td&gt;
-		&lt;input type='text' name=&quot;tablewidth&quot; id='tablewidth' size='4' maxlength='4' /&gt;%
-		[% IF c.form.error(tablewidth) %]Table Width should be 70 - 100.[% END %]
-		&lt;/td&gt;
-    &lt;/tr&gt;
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Table Border Color' color_name = 'tablebordercolor' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Title Background Color' color_name = 'titlecolor' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Table Font Color' color_name = 'titlefont' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Forum Background Color One' color_name = 'forumcolor1' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Forum Font Color One' color_name = 'forumfont1' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Forum Background Color Two' color_name = 'forumcolor2' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Forum Font Color Two' color_name = 'forumfont2' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Reply Background Color One' color_name = 'replycolor1' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Reply Font Color One' color_name = 'replyfont1' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Reply Background Color Two' color_name = 'replycolor2' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Reply Font Color Two' color_name = 'replyfont2' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Others\' Background Color One' color_name = 'misccolor1' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Others\' Font Color One' color_name = 'miscfont1' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Others\' Background Color Two' color_name = 'misccolor2' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Others\' Font Color Two' color_name = 'miscfont2' %]
-    [% PROCESS color_tr tr_misc = 1 tr_name = 'Highlight Color' color_name = 'highlight' %]
-    [% PROCESS color_tr tr_misc = 2 tr_name = 'Semi-Highlight Color' color_name = 'semilight' %]
-    &lt;tr class='misc1'&gt;
-		&lt;td align='right'&gt; &lt;/td&gt;
-		&lt;td&gt;
-		&lt;input type='submit' value='GO!' /&gt;
-		&lt;/td&gt;
-    &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-[% END %]
-
+[% PROCESS 'config/format.html' %]
+
+[% color_option = BLOCK %]
+[% FOREACH color IN config.all_colors %]
+&lt;option style=&quot;background-color:[% color %];color:[% color %]&quot; value=&quot;[% color %]&quot;&gt;[% color %]&lt;/option&gt;
+[% END %]
+[% END %]
+[% BLOCK color_tr %]
+&lt;tr class='misc[% tr_misc %]'&gt;
+	&lt;td align='right'&gt;&lt;b&gt;[% tr_name %]:&lt;/b&gt;&lt;/td&gt;
+	&lt;td&gt;
+	&lt;input type='text' name=&quot;[% color_name %]&quot; id='[% color_name %]' size='7' maxlength='7' onChange=&quot;CHANGEC('[% color_name %]')&quot; /&gt; [% IF c.form.error(color_name, 'REGEX') %]It's not a validated color.[% END %]
+	&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+
+&lt;script&gt;
+	function CHANGEC(obj) {
+		$('#' + obj).css( { background : $('#' + obj).val() } );
+	}
+	function show_color(color) {
+		$('#showcolor').val(color);
+	}
+	function LoadStyle() {
+	    var stylename = $('#style_template').val();
+	    $.getJSON(&quot;[% c.config.dir.static %]/css/style/&quot; + stylename + &quot;.json&quot;,
+            function(data) {
+                $.each(data, function(i,item){
+                    $('#' + i).val(item);
+                    $('#' + i).css( { 'background': item } );
+                } );
+            } );
+	}
+	[% IF has_style %]
+        $(document).ready(function() {
+            LoadStyle();
+        } );
+    [% END %]
+&lt;/script&gt;
+
+[% USE FillInForm %]
+[% FILTER fillinform fdat =&gt; c.req.params %]
+
+[% WRAPPER 'forumadmin/bar.html' %]
+
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Style Setting&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;Choose one existing Style&lt;/td&gt;&lt;td&gt;
+        &lt;select id='style_template'&gt;
+            [% IF has_style %]
+            &lt;option value=&quot;forum[% forum.forum_id %]&quot;&gt;My Style&lt;/option&gt;
+            [% END %]
+            &lt;option value='black'&gt;Black&lt;/option&gt;
+            &lt;option value='green'&gt;Green&lt;/option&gt;
+        &lt;/select&gt;&lt;input type='button' value='Show' onclick='LoadStyle()' /&gt;&lt;/td&gt;&lt;/tr&gt;
+    [% TRY %]
+    [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
+    [% USE File( css_file ) %]
+    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;&lt;a href='/forumadmin/[% forum.forum_id %]/del_style'&gt;Delete Style, Restore Default&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
+    [% CATCH File %]
+    [% END %]
+    &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Edit Style&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc1'&gt;
+		&lt;td align='right'&gt;&lt;b&gt;Get Color Code&lt;/b&gt;&lt;/td&gt;
+		&lt;td&gt;&lt;select onchange=&quot;show_color(this.options[this.selectedIndex].value)&quot; name=&quot;color&quot;&gt;
+		    [% color_option %]
+		    &lt;/select&gt; &lt;input type='text' name=&quot;showcolor&quot; id='showcolor' size='7'&gt;
+		&lt;/td&gt;
+    &lt;/tr&gt;
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'BackGround Color' color_name = 'bg_color' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Body Font Color' color_name = 'bg_fontcolor' %]
+    &lt;tr class='misc2'&gt;
+		&lt;td align='right'&gt;&lt;b&gt;BackGround Image:&lt;/b&gt;&lt;/td&gt;
+		&lt;td&gt;
+		&lt;input type='text' name=&quot;bg_image&quot; id='bg_image' size='60' /&gt; &lt;a href='/help/background'&gt;&lt;img src='[% c.config.dir.images %]/site/help.gif' width='16' height='16' align='absmiddle' /&gt;&lt;/a&gt;
+		[% IF c.form.error('bg_image') %]It's not a validated Image URL.[% END %]
+		&lt;/td&gt;
+    &lt;/tr&gt;
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Normal Link' color_name = 'link' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Unvisited Link' color_name = 'alink' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Visited Link' color_name = 'vlink' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Hover Link' color_name = 'hlink' %]
+    &lt;tr class='misc1'&gt;
+		&lt;td align='right'&gt;&lt;b&gt;Table Width:&lt;/b&gt;&lt;/td&gt;
+		&lt;td&gt;
+		&lt;input type='text' name=&quot;tablewidth&quot; id='tablewidth' size='4' maxlength='4' /&gt;%
+		[% IF c.form.error(tablewidth) %]Table Width should be 70 - 100.[% END %]
+		&lt;/td&gt;
+    &lt;/tr&gt;
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Table Border Color' color_name = 'tablebordercolor' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Title Background Color' color_name = 'titlecolor' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Table Font Color' color_name = 'titlefont' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Forum Background Color One' color_name = 'forumcolor1' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Forum Font Color One' color_name = 'forumfont1' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Forum Background Color Two' color_name = 'forumcolor2' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Forum Font Color Two' color_name = 'forumfont2' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Reply Background Color One' color_name = 'replycolor1' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Reply Font Color One' color_name = 'replyfont1' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Reply Background Color Two' color_name = 'replycolor2' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Reply Font Color Two' color_name = 'replyfont2' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Others\' Background Color One' color_name = 'misccolor1' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Others\' Font Color One' color_name = 'miscfont1' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Others\' Background Color Two' color_name = 'misccolor2' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Others\' Font Color Two' color_name = 'miscfont2' %]
+    [% PROCESS color_tr tr_misc = 1 tr_name = 'Highlight Color' color_name = 'highlight' %]
+    [% PROCESS color_tr tr_misc = 2 tr_name = 'Semi-Highlight Color' color_name = 'semilight' %]
+    &lt;tr class='misc1'&gt;
+		&lt;td align='right'&gt; &lt;/td&gt;
+		&lt;td&gt;
+		&lt;input type='submit' value='GO!' /&gt;
+		&lt;/td&gt;
+    &lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+[% END %]
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/forumadmin/style.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,14 @@
-[% PROCESS sub/date.html %]
-[% IF user %]
- [% IF user.gender != 'NA' %]&lt;span style='float:right'&gt;&lt;img src='[% c.config.dir.images %]/site/gender_[% user.gender %].gif' width='20' height='14' align='absmiddle' /&gt;&lt;/span&gt;[% END %]
- &lt;a href='/u/[% user.username %]'&gt;[% user.nickname %]&lt;/a&gt;&lt;br /&gt;
-
- [% INCLUDE include/user_profile_photo.html %]
- 
- &lt;br /&gt;&lt;br /&gt;
- [% c.loc('Point:') %] [% user.point %]&lt;br /&gt;
- [% c.loc('Register on') %]: [% date_format(user.register_time, '%Y-%m-%d') %]&lt;br /&gt;
- &lt;a href='/help/user_status'&gt;[% c.loc('Status:') %]&lt;/a&gt; [% user.status | ucfirst %]&lt;br /&gt;
-[% ELSE %]
- Anonymous
-[% END %]
+[% PROCESS sub/date.html %]
+[% IF user %]
+ [% IF user.gender != 'NA' %]&lt;span style='float:right'&gt;&lt;img src='[% c.config.dir.images %]/site/gender_[% user.gender %].gif' width='20' height='14' align='absmiddle' /&gt;&lt;/span&gt;[% END %]
+ &lt;a href='/u/[% user.username %]'&gt;[% user.nickname %]&lt;/a&gt;&lt;br /&gt;
+
+ [% INCLUDE include/user_profile_photo.html %]
+ 
+ &lt;br /&gt;&lt;br /&gt;
+ [% c.loc('Point:') %] [% user.point %]&lt;br /&gt;
+ [% c.loc('Register on') %]: [% date_format(user.register_time, '%Y-%m-%d') %]&lt;br /&gt;
+ &lt;a href='/help/user_status'&gt;[% c.loc('Status:') %]&lt;/a&gt; [% user.status | ucfirst %]&lt;br /&gt;
+[% ELSE %]
+ Anonymous
+[% END %]</diff>
      <filename>templates/include/user_profile.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,17 +1,17 @@
-[% IF user AND user.profile_photo %]
- 
- [% IF user.profile_photo.upload %]
-    [% USE Math %]
-    [% upload = user.profile_photo.upload;
-       upload_id = upload.upload_id;
-       dir1 = upload_id / 3200 / 3200;
-       dir1 = Math.int(dir1);
-       dir2 = upload_id / 3200;
-       dir2 = Math.int(dir2);
-    %]
-    &lt;img src='[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]' width='[% user.profile_photo.width || '120' %]'height='[% user.profile_photo.height || '120' %]' /&gt;
- [% ELSIF user.profile_photo.type == 'URL' %]
-    &lt;img src='[% user.profile_photo.value %]' width='[% user.profile_photo.width %]' height='[% user.profile_photo.height %]' /&gt;
- [% END %]
- 
-[% END %]
+[% IF user AND user.profile_photo %]
+ 
+ [% IF user.profile_photo.upload %]
+    [% USE Math %]
+    [% upload = user.profile_photo.upload;
+       upload_id = upload.upload_id;
+       dir1 = upload_id / 3200 / 3200;
+       dir1 = Math.int(dir1);
+       dir2 = upload_id / 3200;
+       dir2 = Math.int(dir2);
+    %]
+    &lt;img src='[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]' width='[% user.profile_photo.width || '120' %]'height='[% user.profile_photo.height || '120' %]' /&gt;
+ [% ELSIF user.profile_photo.type == 'URL' %]
+    &lt;img src='[% user.profile_photo.value %]' width='[% user.profile_photo.width %]' height='[% user.profile_photo.height %]' /&gt;
+ [% END %]
+ 
+[% END %]</diff>
      <filename>templates/include/user_profile_photo.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
-[% IF user %]
- [% IF user.gender != 'NA' %]&lt;span style='float:right'&gt;&lt;img src='[% c.config.dir.images %]/site/gender_[% user.gender %].gif' width='20' height='14' align='absmiddle' /&gt;&lt;/span&gt;[% END %]
- &lt;a href='/u/[% user.username %]'&gt;[% user.nickname %]&lt;/a&gt;&lt;br /&gt;
- 
- [% INCLUDE include/user_profile_photo.html %]
- 
- &lt;br /&gt;&lt;br /&gt;
- [% IF user.status %][% c.loc('Status:') %] [% user.status %]&lt;br /&gt;[% END %]
-[% ELSE %]
- [% c.loc('Anonymous') %]
-[% END %]
+[% IF user %]
+ [% IF user.gender != 'NA' %]&lt;span style='float:right'&gt;&lt;img src='[% c.config.dir.images %]/site/gender_[% user.gender %].gif' width='20' height='14' align='absmiddle' /&gt;&lt;/span&gt;[% END %]
+ &lt;a href='/u/[% user.username %]'&gt;[% user.nickname %]&lt;/a&gt;&lt;br /&gt;
+ 
+ [% INCLUDE include/user_profile_photo.html %]
+ 
+ &lt;br /&gt;&lt;br /&gt;
+ [% IF user.status %][% c.loc('Status:') %] [% user.status %]&lt;br /&gt;[% END %]
+[% ELSE %]
+ [% c.loc('Anonymous') %]
+[% END %]</diff>
      <filename>templates/include/user_profile_simple.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
-[% title = '&#185;&#216;&#211;&#218;&#206;&#210;&#195;&#199;' %]
-
-[% WRAPPER info/index.html %]
-
-This site is built at 2000.
-
+[% title = '&#185;&#216;&#211;&#218;&#206;&#210;&#195;&#199;' %]
+
+[% WRAPPER info/index.html %]
+
+This site is built at 2000.
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/cn/info/about_us.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-[% title = '&#193;&#170;&#207;&#181;&#206;&#210;&#195;&#199;' %]
-
-[% WRAPPER info/index.html %]
-
-Email/MSN/GTalk: fayland at gmail dot com&lt;br /&gt;
-If u need phone or address, please send me email.&lt;br /&gt;
-
+[% title = '&#193;&#170;&#207;&#181;&#206;&#210;&#195;&#199;' %]
+
+[% WRAPPER info/index.html %]
+
+Email/MSN/GTalk: fayland at gmail dot com&lt;br /&gt;
+If u need phone or address, please send me email.&lt;br /&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/cn/info/contact_us.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,35 +1,35 @@
-[% IF simple_wrapper %]
-
-[% content %]
-
-[% ELSE %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/'&gt;&lt;span&gt;Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% UNLESS content %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/info'&gt;&lt;span&gt;Information Center&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF title %]&lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% title %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;[% END %]
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot; style='padding-left: 8em;padding-right:8em;'&gt;
-
-    [% IF content %]
-    [% IF title %]&lt;h2&gt;[% title %]&lt;/h2&gt;[% END %]
-    [% content %]
-    [% ELSE %]
-    &lt;h2&gt;Welcome to the Infomation Center.&lt;/h2&gt;
-    &lt;ul&gt;
-        &lt;li&gt;&lt;a href='/info/about_us'&gt;&#20851;&#20110;&#25105;&#20204;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/tos'&gt;&#26381;&#21153;&#26465;&#27454;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/privacy'&gt;&#38544;&#31169;&#31574;&#30053;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/contact_us'&gt;&#32852;&#31995;&#25105;&#20204;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/powered_by'&gt;Powered By&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    
-    [% END %]
-
-    &lt;/div&gt;
-&lt;/div&gt;
-
+[% IF simple_wrapper %]
+
+[% content %]
+
+[% ELSE %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/'&gt;&lt;span&gt;Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% UNLESS content %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/info'&gt;&lt;span&gt;Information Center&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF title %]&lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% title %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;[% END %]
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot; style='padding-left: 8em;padding-right:8em;'&gt;
+
+    [% IF content %]
+    [% IF title %]&lt;h2&gt;[% title %]&lt;/h2&gt;[% END %]
+    [% content %]
+    [% ELSE %]
+    &lt;h2&gt;Welcome to the Infomation Center.&lt;/h2&gt;
+    &lt;ul&gt;
+        &lt;li&gt;&lt;a href='/info/about_us'&gt;&#20851;&#20110;&#25105;&#20204;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/tos'&gt;&#26381;&#21153;&#26465;&#27454;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/privacy'&gt;&#38544;&#31169;&#31574;&#30053;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/contact_us'&gt;&#32852;&#31995;&#25105;&#20204;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/powered_by'&gt;Powered By&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    
+    [% END %]
+
+    &lt;/div&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/cn/info/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,14 @@
-[% title = 'Powered By' %]
-
-[% WRAPPER info/index.html %]
-
-&lt;p&gt;&lt;strong&gt;Foorum&lt;/strong&gt; is built in &lt;a href='http://www.perl.org/'&gt;Perl&lt;/a&gt; with great framework &lt;a href='http://dev.catalyst.perl.org'&gt;Catalyst&lt;/a&gt; + &lt;a href='http://search.cpan.org/perldoc?DBIx::Class'&gt;DBIx::Class&lt;/a&gt; + &lt;a href='http://search.cpan.org/perldoc?Template'&gt;Template::Toolkit&lt;/a&gt;.&lt;/p&gt;
-
-&lt;p&gt;The whole source code is available at &lt;a href='http://fayland.googlecode.com/svn/trunk/Foorum/'&gt;http://fayland.googlecode.com/svn/trunk/Foorum/&lt;/a&gt;.&lt;br /&gt;
-You can use Subversion to check it out.&lt;/p&gt;
-
-&lt;p&gt;U can download it from &lt;a href='http://code.google.com/p/fayland/downloads/list'&gt;http://code.google.com/p/fayland/downloads/list&lt;/a&gt;. Thanks&lt;/p&gt;
-
-&lt;p&gt;Homepage: &lt;a href=&quot;http://www.foorumbbs.com/&quot;&gt;FoorumBBS.comM&lt;/a&gt;&lt;/p&gt;
-
+[% title = 'Powered By' %]
+
+[% WRAPPER info/index.html %]
+
+&lt;p&gt;&lt;strong&gt;Foorum&lt;/strong&gt; is built in &lt;a href='http://www.perl.org/'&gt;Perl&lt;/a&gt; with great framework &lt;a href='http://dev.catalyst.perl.org'&gt;Catalyst&lt;/a&gt; + &lt;a href='http://search.cpan.org/perldoc?DBIx::Class'&gt;DBIx::Class&lt;/a&gt; + &lt;a href='http://search.cpan.org/perldoc?Template'&gt;Template::Toolkit&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;The whole source code is available at &lt;a href='http://fayland.googlecode.com/svn/trunk/Foorum/'&gt;http://fayland.googlecode.com/svn/trunk/Foorum/&lt;/a&gt;.&lt;br /&gt;
+You can use Subversion to check it out.&lt;/p&gt;
+
+&lt;p&gt;U can download it from &lt;a href='http://code.google.com/p/fayland/downloads/list'&gt;http://code.google.com/p/fayland/downloads/list&lt;/a&gt;. Thanks&lt;/p&gt;
+
+&lt;p&gt;Homepage: &lt;a href=&quot;http://www.foorumbbs.com/&quot;&gt;FoorumBBS.comM&lt;/a&gt;&lt;/p&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/cn/info/powered_by.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
-[% title = '&#38544;&#31169;&#31574;&#30053;' %]
-
-[% WRAPPER info/index.html %]
-
-&lt;p&gt;I'm trying to procect you when I'm wake.&lt;/p&gt;
-
+[% title = '&#38544;&#31169;&#31574;&#30053;' %]
+
+[% WRAPPER info/index.html %]
+
+&lt;p&gt;I'm trying to procect you when I'm wake.&lt;/p&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/cn/info/privacy.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
-[% title = '&#26381;&#21153;&#26465;&#27454;' %]
-
-[% WRAPPER info/index.html %]
-
-&lt;p&gt;Don't break the milk!&lt;/p&gt;
-
+[% title = '&#26381;&#21153;&#26465;&#27454;' %]
+
+[% WRAPPER info/index.html %]
+
+&lt;p&gt;Don't break the milk!&lt;/p&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/cn/info/tos.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,13 @@
-[% maintain_msg = BLOCK %]
-
-&lt;b&gt;&#27492;&#35770;&#22363;&#26242;&#26102;&#20851;&#38381;&lt;/b&gt;&#65292;&#21407;&#22240;&#22914;&#19979;&lt;br /&gt;&lt;br /&gt;
-
-The borad is under maintain. Sorry for any inconvenience.
-
-&lt;br /&gt;&lt;br /&gt;&#22914;&#26524;&#24744;&#26377;&#31649;&#29702;&#26435;&#38480;,&#35831;&lt;a href=&quot;/login&quot;&gt;&#30331;&#20837;&lt;/a&gt;
-
-[% END %]
-
-[% INCLUDE 'simple/message.html' message = {
-    msg =&gt; maintain_msg,
+[% maintain_msg = BLOCK %]
+
+&lt;b&gt;&#27492;&#35770;&#22363;&#26242;&#26102;&#20851;&#38381;&lt;/b&gt;&#65292;&#21407;&#22240;&#22914;&#19979;&lt;br /&gt;&lt;br /&gt;
+
+The borad is under maintain. Sorry for any inconvenience.
+
+&lt;br /&gt;&lt;br /&gt;&#22914;&#26524;&#24744;&#26377;&#31649;&#29702;&#26435;&#38480;,&#35831;&lt;a href=&quot;/login&quot;&gt;&#30331;&#20837;&lt;/a&gt;
+
+[% END %]
+
+[% INCLUDE 'simple/message.html' message = {
+    msg =&gt; maintain_msg,
 } %]
\ No newline at end of file</diff>
      <filename>templates/lang/cn/site/maintain.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,30 +1,30 @@
-[% title = &quot;What's New?&quot; %]
-
-[% WRAPPER help/index.html %]
-
-&lt;p&gt;We are keeping our site more easy to use and more fun.&lt;/p&gt;
-
-&lt;h3&gt;Search&lt;/h3&gt;
-
-&lt;p&gt;We can't live without Google/Baidu. we wouldn't be happy without &lt;a href=&quot;/search/forum&quot;&gt;Foorum Search&lt;/a&gt;!&lt;/p&gt;
-
-&lt;h3&gt;Preview&lt;/h3&gt;
-
-&lt;p&gt;Want a preview before submit your content? that's possible now. just click the &quot;Preview&quot; button next to Submit. that's it!&lt;/p&gt;
-
-&lt;h3&gt;Create a Forum&lt;/h3&gt;
-
-&lt;p&gt;Now everyone can &lt;a href=&quot;/forum/create&quot;&gt;Create a Forum&lt;/a&gt; at any time any where.&lt;br /&gt;
-   No stricts. No warnings.&lt;br /&gt;
-   Just have fun!
-&lt;/p&gt;
-
-&lt;h3&gt;Keep my email secret from public&lt;/h3&gt;
-
-&lt;p&gt;Even we are &lt;a href=&quot;/help/email&quot;&gt;protecting&lt;/a&gt; our emails from robot, we still provide a choice to keep your email secret, click &lt;a href=&quot;/settings&quot;&gt;Settings&lt;/a&gt; above.&lt;/p&gt;
-
-&lt;h3&gt;More...&lt;/h3&gt;
-
-&lt;p&gt;&lt;a href='WhatsNewMore'&gt;View More...&lt;/a&gt;&lt;/p&gt;
-
+[% title = &quot;What's New?&quot; %]
+
+[% WRAPPER help/index.html %]
+
+&lt;p&gt;We are keeping our site more easy to use and more fun.&lt;/p&gt;
+
+&lt;h3&gt;Search&lt;/h3&gt;
+
+&lt;p&gt;We can't live without Google/Baidu. we wouldn't be happy without &lt;a href=&quot;/search/forum&quot;&gt;Foorum Search&lt;/a&gt;!&lt;/p&gt;
+
+&lt;h3&gt;Preview&lt;/h3&gt;
+
+&lt;p&gt;Want a preview before submit your content? that's possible now. just click the &quot;Preview&quot; button next to Submit. that's it!&lt;/p&gt;
+
+&lt;h3&gt;Create a Forum&lt;/h3&gt;
+
+&lt;p&gt;Now everyone can &lt;a href=&quot;/forum/create&quot;&gt;Create a Forum&lt;/a&gt; at any time any where.&lt;br /&gt;
+   No stricts. No warnings.&lt;br /&gt;
+   Just have fun!
+&lt;/p&gt;
+
+&lt;h3&gt;Keep my email secret from public&lt;/h3&gt;
+
+&lt;p&gt;Even we are &lt;a href=&quot;/help/email&quot;&gt;protecting&lt;/a&gt; our emails from robot, we still provide a choice to keep your email secret, click &lt;a href=&quot;/settings&quot;&gt;Settings&lt;/a&gt; above.&lt;/p&gt;
+
+&lt;h3&gt;More...&lt;/h3&gt;
+
+&lt;p&gt;&lt;a href='WhatsNewMore'&gt;View More...&lt;/a&gt;&lt;/p&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/help/WhatsNew.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,23 @@
-[% title = &quot;What's New? (More...)&quot; %]
-
-[% WRAPPER help/index.html %]
-
-&lt;p&gt;We are keeping our site more easy to use and more fun.&lt;/p&gt;
-
-&lt;h3&gt;Settings: Send Update Notification for 'My Starred Items'&lt;/h3&gt;
-
-&lt;p&gt;By default, we send email for your starred items when it's updated by others.&lt;br /&gt;
-So that we don't need to check site again and again to check if there is any updates.&lt;/p&gt;
-
-&lt;p&gt;For God's sake, you can disable that to avoid annoying email notification when u get tried.&lt;/p&gt;
-
-&lt;p&gt;Now everyone can &lt;a href=&quot;/forum/create&quot;&gt;Create a Forum&lt;/a&gt; at any time any where.&lt;br /&gt;
-   No stricts. No warnings.&lt;br /&gt;
-   Just have fun!
-&lt;/p&gt;
-
-&lt;h3&gt;Back 2 Recent News&lt;/h3&gt;
-
-&lt;p&gt;&lt;a href='WhatsNew'&gt;Recent News&lt;/a&gt;&lt;/p&gt;
-
+[% title = &quot;What's New? (More...)&quot; %]
+
+[% WRAPPER help/index.html %]
+
+&lt;p&gt;We are keeping our site more easy to use and more fun.&lt;/p&gt;
+
+&lt;h3&gt;Settings: Send Update Notification for 'My Starred Items'&lt;/h3&gt;
+
+&lt;p&gt;By default, we send email for your starred items when it's updated by others.&lt;br /&gt;
+So that we don't need to check site again and again to check if there is any updates.&lt;/p&gt;
+
+&lt;p&gt;For God's sake, you can disable that to avoid annoying email notification when u get tried.&lt;/p&gt;
+
+&lt;p&gt;Now everyone can &lt;a href=&quot;/forum/create&quot;&gt;Create a Forum&lt;/a&gt; at any time any where.&lt;br /&gt;
+   No stricts. No warnings.&lt;br /&gt;
+   Just have fun!
+&lt;/p&gt;
+
+&lt;h3&gt;Back 2 Recent News&lt;/h3&gt;
+
+&lt;p&gt;&lt;a href='WhatsNew'&gt;Recent News&lt;/a&gt;&lt;/p&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/help/WhatsNewMore.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,26 +1,26 @@
-[% title = 'Background Images' %]
-
-[% WRAPPER help/index.html %]
-
-&lt;style&gt;
-    .imagediv {
-        height: 90px;
-        width: 100%;
-        text-align: center;
-        padding-top: 50px;
-    }
-&lt;/style&gt;
-
-&lt;p&gt;click on the image to copy the url to clipboard.&lt;/p&gt;
-
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/1.jpg&quot;);'&gt;[% c.config.dir.images %]/background/1.jpg&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/66.jpg&quot;);'&gt;[% c.config.dir.images %]/background/66.jpg&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/42.jpg&quot;);'&gt;[% c.config.dir.images %]/background/42.jpg&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/48.jpg&quot;);'&gt;[% c.config.dir.images %]/background/48.jpg&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/0.gif&quot;);'&gt;[% c.config.dir.images %]/background/0.gif&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/8.gif&quot;);'&gt;[% c.config.dir.images %]/background/8.gif&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/31.gif&quot;);'&gt;[% c.config.dir.images %]/background/31.gif&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/45.gif&quot;);'&gt;[% c.config.dir.images %]/background/45.gif&lt;/div&gt;
-&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/60.gif&quot;);'&gt;[% c.config.dir.images %]/background/60.gif&lt;/div&gt;
-
+[% title = 'Background Images' %]
+
+[% WRAPPER help/index.html %]
+
+&lt;style&gt;
+    .imagediv {
+        height: 90px;
+        width: 100%;
+        text-align: center;
+        padding-top: 50px;
+    }
+&lt;/style&gt;
+
+&lt;p&gt;click on the image to copy the url to clipboard.&lt;/p&gt;
+
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/1.jpg&quot;);'&gt;[% c.config.dir.images %]/background/1.jpg&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/66.jpg&quot;);'&gt;[% c.config.dir.images %]/background/66.jpg&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/42.jpg&quot;);'&gt;[% c.config.dir.images %]/background/42.jpg&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/48.jpg&quot;);'&gt;[% c.config.dir.images %]/background/48.jpg&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/0.gif&quot;);'&gt;[% c.config.dir.images %]/background/0.gif&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/8.gif&quot;);'&gt;[% c.config.dir.images %]/background/8.gif&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/31.gif&quot;);'&gt;[% c.config.dir.images %]/background/31.gif&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/45.gif&quot;);'&gt;[% c.config.dir.images %]/background/45.gif&lt;/div&gt;
+&lt;div class='imagediv' style='background:url(&quot;[% c.config.dir.images %]/background/60.gif&quot;);'&gt;[% c.config.dir.images %]/background/60.gif&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/help/background.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,10 @@
-[% title = 'Email Obfuscate' %]
-
-[% WRAPPER help/index.html %]
-
-&lt;p&gt;We use &lt;a href='http://search.cpan.org/perldoc?HTML::Email::Obfuscate'&gt;HTML::Email::Obfuscate&lt;/a&gt; to keep our emails safe (from spammer). &lt;/p&gt;
-
-&lt;p&gt;when you see fay&lt;span&gt;&amp;#x6C;&lt;/span&gt;&amp;#x61;nd&lt;span&gt;&lt;!-- @ --&gt;&amp;#64;&lt;/span&gt;gmail&lt;B&gt;&amp;#46;&lt;/b&gt;com in your browser, the indeed HTML is
-&lt;pre&gt;fay&amp;lt;span&gt;&amp;amp;#x6C;&amp;lt;/span&gt;&amp;#x61;nd&amp;lt;span&gt;&amp;lt;!-- @ --&gt;&amp;amp;#64;&amp;lt;/span&gt;gmail&amp;lt;B&gt;&amp;amp;#46;&amp;lt;/b&gt;com&lt;/pre&gt;&lt;/p&gt;
-
+[% title = 'Email Obfuscate' %]
+
+[% WRAPPER help/index.html %]
+
+&lt;p&gt;We use &lt;a href='http://search.cpan.org/perldoc?HTML::Email::Obfuscate'&gt;HTML::Email::Obfuscate&lt;/a&gt; to keep our emails safe (from spammer). &lt;/p&gt;
+
+&lt;p&gt;when you see fay&lt;span&gt;&amp;#x6C;&lt;/span&gt;&amp;#x61;nd&lt;span&gt;&lt;!-- @ --&gt;&amp;#64;&lt;/span&gt;gmail&lt;B&gt;&amp;#46;&lt;/b&gt;com in your browser, the indeed HTML is
+&lt;pre&gt;fay&amp;lt;span&gt;&amp;amp;#x6C;&amp;lt;/span&gt;&amp;#x61;nd&amp;lt;span&gt;&amp;lt;!-- @ --&gt;&amp;amp;#64;&amp;lt;/span&gt;gmail&amp;lt;B&gt;&amp;amp;#46;&amp;lt;/b&gt;com&lt;/pre&gt;&lt;/p&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/help/email.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,38 +1,38 @@
-[% IF simple_wrapper %]
-
-[% content %]
-
-[% ELSE %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/'&gt;&lt;span&gt;Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% UNLESS content %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/help'&gt;&lt;span&gt;Help Center&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF title %]&lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% title %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;[% END %]
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot; style='padding-left: 8em;padding-right:8em;'&gt;
-
-    [% IF content %]
-    [% IF title %]&lt;h2&gt;[% title %]&lt;/h2&gt;[% END %]
-    [% content %]
-    [% ELSE %]
-    &lt;h2&gt;Welcome to the help Center.&lt;/h2&gt;
-    &lt;ul&gt;
-        &lt;li&gt;&lt;a href='/help/WhatsNew'&gt;What's New&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/help/email'&gt;Email Obfuscate&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    
-    &lt;h3&gt;User Related&lt;/h3&gt;
-    &lt;ul&gt;
-        &lt;li&gt;&lt;a href='/help/user_status'&gt;User Status&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/help/user_point'&gt;User Point&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    
-    [% END %]
-
-    &lt;/div&gt;
-&lt;/div&gt;
-
+[% IF simple_wrapper %]
+
+[% content %]
+
+[% ELSE %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/'&gt;&lt;span&gt;Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% UNLESS content %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/help'&gt;&lt;span&gt;Help Center&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF title %]&lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% title %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;[% END %]
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot; style='padding-left: 8em;padding-right:8em;'&gt;
+
+    [% IF content %]
+    [% IF title %]&lt;h2&gt;[% title %]&lt;/h2&gt;[% END %]
+    [% content %]
+    [% ELSE %]
+    &lt;h2&gt;Welcome to the help Center.&lt;/h2&gt;
+    &lt;ul&gt;
+        &lt;li&gt;&lt;a href='/help/WhatsNew'&gt;What's New&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/help/email'&gt;Email Obfuscate&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    
+    &lt;h3&gt;User Related&lt;/h3&gt;
+    &lt;ul&gt;
+        &lt;li&gt;&lt;a href='/help/user_status'&gt;User Status&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/help/user_point'&gt;User Point&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    
+    [% END %]
+
+    &lt;/div&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/help/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,18 @@
-[% title = 'User Point' %]
-
-[% WRAPPER help/index.html %]
-
-&lt;h3&gt;Description&lt;/h3&gt;
-
-'Point' is a value to describe the user.
-
-&lt;h3&gt;How can I increasing my point?&lt;/h3&gt;
-
-&lt;ul&gt;
-    &lt;li&gt;+2 for posting a topic, -2 for deleting one&lt;/li&gt;
-    &lt;li&gt;+1 for posting a reply, -1 for deleting one&lt;/li&gt;
-    &lt;li&gt;+1 for login&lt;/li&gt;
-    &lt;li&gt;+4 for eliting a topic, -4 for uneliting one&lt;/li&gt;
-&lt;/ul&gt;
-
+[% title = 'User Point' %]
+
+[% WRAPPER help/index.html %]
+
+&lt;h3&gt;Description&lt;/h3&gt;
+
+'Point' is a value to describe the user.
+
+&lt;h3&gt;How can I increasing my point?&lt;/h3&gt;
+
+&lt;ul&gt;
+    &lt;li&gt;+2 for posting a topic, -2 for deleting one&lt;/li&gt;
+    &lt;li&gt;+1 for posting a reply, -1 for deleting one&lt;/li&gt;
+    &lt;li&gt;+1 for login&lt;/li&gt;
+    &lt;li&gt;+4 for eliting a topic, -4 for uneliting one&lt;/li&gt;
+&lt;/ul&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/help/user_point.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,12 @@
-[% title = 'User Status' %]
-
-[% WRAPPER help/index.html %]
-
-&lt;ul&gt;
-    &lt;li&gt;Verified - good status&lt;/li&gt;
-    &lt;li&gt;Unverified - good status expect email is not verified.&lt;/li&gt;
-    &lt;li&gt;Banned - bad status. usually banned by Admin.&lt;/li&gt;
-    &lt;li&gt;Terminated - account is terminated by user himself.&lt;/li&gt;
-&lt;/ul&gt;
-
+[% title = 'User Status' %]
+
+[% WRAPPER help/index.html %]
+
+&lt;ul&gt;
+    &lt;li&gt;Verified - good status&lt;/li&gt;
+    &lt;li&gt;Unverified - good status expect email is not verified.&lt;/li&gt;
+    &lt;li&gt;Banned - bad status. usually banned by Admin.&lt;/li&gt;
+    &lt;li&gt;Terminated - account is terminated by user himself.&lt;/li&gt;
+&lt;/ul&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/help/user_status.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
-[% title = 'About Us' %]
-
-[% WRAPPER info/index.html %]
-
-This site is built at 2000.
-
+[% title = 'About Us' %]
+
+[% WRAPPER info/index.html %]
+
+This site is built at 2000.
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/info/about_us.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-[% title = 'Contact Us' %]
-
-[% WRAPPER info/index.html %]
-
-Email/MSN/GTalk: fayland at gmail dot com&lt;br /&gt;
-If u need phone or address, please send me email.&lt;br /&gt;
-
+[% title = 'Contact Us' %]
+
+[% WRAPPER info/index.html %]
+
+Email/MSN/GTalk: fayland at gmail dot com&lt;br /&gt;
+If u need phone or address, please send me email.&lt;br /&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/info/contact_us.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,35 +1,35 @@
-[% IF simple_wrapper %]
-
-[% content %]
-
-[% ELSE %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/'&gt;&lt;span&gt;Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% UNLESS content %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/info'&gt;&lt;span&gt;Information Center&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF title %]&lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% title %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;[% END %]
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot; style='padding-left: 8em;padding-right:8em;'&gt;
-
-    [% IF content %]
-    [% IF title %]&lt;h2&gt;[% title %]&lt;/h2&gt;[% END %]
-    [% content %]
-    [% ELSE %]
-    &lt;h2&gt;Welcome to the Infomation Center.&lt;/h2&gt;
-    &lt;ul&gt;
-        &lt;li&gt;&lt;a href='/info/about_us'&gt;About Us&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/tos'&gt;Terms of Service&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/privacy'&gt;Privacy Statement&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/contact_us'&gt;Contact Us&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/info/powered_by'&gt;Powered By&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    
-    [% END %]
-
-    &lt;/div&gt;
-&lt;/div&gt;
-
+[% IF simple_wrapper %]
+
+[% content %]
+
+[% ELSE %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/'&gt;&lt;span&gt;Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% UNLESS content %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/info'&gt;&lt;span&gt;Information Center&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF title %]&lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% title %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;[% END %]
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot; style='padding-left: 8em;padding-right:8em;'&gt;
+
+    [% IF content %]
+    [% IF title %]&lt;h2&gt;[% title %]&lt;/h2&gt;[% END %]
+    [% content %]
+    [% ELSE %]
+    &lt;h2&gt;Welcome to the Infomation Center.&lt;/h2&gt;
+    &lt;ul&gt;
+        &lt;li&gt;&lt;a href='/info/about_us'&gt;About Us&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/tos'&gt;Terms of Service&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/privacy'&gt;Privacy Statement&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/contact_us'&gt;Contact Us&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/info/powered_by'&gt;Powered By&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    
+    [% END %]
+
+    &lt;/div&gt;
+&lt;/div&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/info/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,54 +1,54 @@
-[% title = 'Powered By' %]
-
-[% WRAPPER info/index.html %]
-
-&lt;h3&gt;DESCRIPTION&lt;/h3&gt;
-
-&lt;p&gt;&lt;strong&gt;Foorum&lt;/strong&gt; is built with&lt;/p&gt;
-&lt;ul&gt;
-    &lt;li&gt;&lt;a href='http://dev.catalyst.perl.org'&gt;Catalyst&lt;/a&gt;&lt;/li&gt;
-    &lt;li&gt;&lt;a href='http://search.cpan.org/perldoc?DBIx::Class'&gt;DBIx::Class&lt;/a&gt;&lt;/li&gt;
-    &lt;li&gt;&lt;a href='http://search.cpan.org/perldoc?Template'&gt;Template::Toolkit&lt;/a&gt;&lt;/li&gt;
-    &lt;li&gt;&lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h3&gt;GET&lt;/h3&gt;
-
-&lt;p&gt;The whole source code is available at &lt;a href='http://github.com/fayland/foorum/tree'&gt;http://github.com/fayland/foorum/tree&lt;/a&gt;.&lt;br /&gt;
-You can use Git to check it out.&lt;/p&gt;
-
-&lt;p&gt;U can download it from &lt;a href='http://code.google.com/p/foorum/downloads/list'&gt;http://code.google.com/p/foorum/downloads/list&lt;/a&gt;.&lt;/p&gt;
-
-&lt;h3&gt;SUPPORT&lt;/h3&gt;
-
-&lt;ul&gt;
-    &lt;li&gt;&lt;a href=&quot;http://code.google.com/p/foorum/issues/list&quot;&gt;Report Bug&lt;/a&gt;&lt;/li&gt;
-    &lt;li&gt;Live Homepage: &lt;a href=&quot;http://www.foorumbbs.com/&quot;&gt;FoorumBBS.com&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h3&gt;THANKS&lt;/h3&gt;
-
-&lt;table border='0'&gt;
-    &lt;tr&gt;
-        &lt;td&gt;
-            &lt;a href=&quot;http://www.perl.org/&quot;&gt;
-            &lt;img border=&quot;0&quot; src=&quot;http://www.perl.org/images/buttons/perlpowered.png&quot; alt=&quot;Powered By Perl&quot; /&gt;
-            &lt;/a&gt;
-        &lt;/td&gt;
-        &lt;td&gt;
-            &lt;a href=&quot;http://catalyst.perl.org/&quot;&gt;
-            &lt;img border=&quot;0&quot; src=&quot;http://dev.catalyst.perl.org/trac/catalyst_170pix.png&quot; alt=&quot;Powered By Catalyst&quot; /&gt;
-            &lt;/a&gt;
-        &lt;td&gt;
-            &lt;a href=&quot;http://www.template-toolkit.org&quot;&gt;
-            &lt;img border=&quot;0&quot; src=&quot;http://www.perl.org/images/friends/template-toolkit.gif&quot; alt=&quot;Powered By Template Toolkit&quot; /&gt;&lt;/a&gt;
-        &lt;/td&gt;
-    &lt;/tr&gt;
-&lt;/table&gt;
-
-&lt;h3&gt;COPYRIGHT&lt;/h3&gt;
-
-&lt;p&gt;This program is free software, you can redistribute it and/or modify it under
-the same terms as Perl itself.&lt;/p&gt;
-
+[% title = 'Powered By' %]
+
+[% WRAPPER info/index.html %]
+
+&lt;h3&gt;DESCRIPTION&lt;/h3&gt;
+
+&lt;p&gt;&lt;strong&gt;Foorum&lt;/strong&gt; is built with&lt;/p&gt;
+&lt;ul&gt;
+    &lt;li&gt;&lt;a href='http://dev.catalyst.perl.org'&gt;Catalyst&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href='http://search.cpan.org/perldoc?DBIx::Class'&gt;DBIx::Class&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href='http://search.cpan.org/perldoc?Template'&gt;Template::Toolkit&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h3&gt;GET&lt;/h3&gt;
+
+&lt;p&gt;The whole source code is available at &lt;a href='http://github.com/fayland/foorum/tree'&gt;http://github.com/fayland/foorum/tree&lt;/a&gt;.&lt;br /&gt;
+You can use Git to check it out.&lt;/p&gt;
+
+&lt;p&gt;U can download it from &lt;a href='http://code.google.com/p/foorum/downloads/list'&gt;http://code.google.com/p/foorum/downloads/list&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h3&gt;SUPPORT&lt;/h3&gt;
+
+&lt;ul&gt;
+    &lt;li&gt;&lt;a href=&quot;http://code.google.com/p/foorum/issues/list&quot;&gt;Report Bug&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;Live Homepage: &lt;a href=&quot;http://www.foorumbbs.com/&quot;&gt;FoorumBBS.com&lt;/a&gt;&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h3&gt;THANKS&lt;/h3&gt;
+
+&lt;table border='0'&gt;
+    &lt;tr&gt;
+        &lt;td&gt;
+            &lt;a href=&quot;http://www.perl.org/&quot;&gt;
+            &lt;img border=&quot;0&quot; src=&quot;http://www.perl.org/images/buttons/perlpowered.png&quot; alt=&quot;Powered By Perl&quot; /&gt;
+            &lt;/a&gt;
+        &lt;/td&gt;
+        &lt;td&gt;
+            &lt;a href=&quot;http://catalyst.perl.org/&quot;&gt;
+            &lt;img border=&quot;0&quot; src=&quot;http://dev.catalyst.perl.org/trac/catalyst_170pix.png&quot; alt=&quot;Powered By Catalyst&quot; /&gt;
+            &lt;/a&gt;
+        &lt;td&gt;
+            &lt;a href=&quot;http://www.template-toolkit.org&quot;&gt;
+            &lt;img border=&quot;0&quot; src=&quot;http://www.perl.org/images/friends/template-toolkit.gif&quot; alt=&quot;Powered By Template Toolkit&quot; /&gt;&lt;/a&gt;
+        &lt;/td&gt;
+    &lt;/tr&gt;
+&lt;/table&gt;
+
+&lt;h3&gt;COPYRIGHT&lt;/h3&gt;
+
+&lt;p&gt;This program is free software, you can redistribute it and/or modify it under
+the same terms as Perl itself.&lt;/p&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/info/powered_by.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,63 +1,63 @@
-[% title = 'Privacy Statement' %]
-
-[% WRAPPER info/index.html %]
-
-The following outlines how we treat information collected when you visit our Web site 
-and use our service.
-
-&lt;h3&gt;INFORMATION WE COLLECT&lt;/h3&gt;
-
-&lt;ul&gt;
-&lt;li&gt; &lt;b&gt;Your IP Address&lt;/b&gt; is recorded automatically. IP addresses
-do not personally identify users.
-
-&lt;li&gt; &lt;b&gt;Cookies&lt;/b&gt;. Our site uses cookies to remember your
-sessions parameters.
-
-&lt;li&gt; &lt;b&gt;Registration information&lt;/b&gt;. For many of our site's features,
-registration is required. Registration entails supplying us with your
-(current &amp; working) email address and your name. 
-
-&lt;li&gt; &lt;b&gt;Posting information&lt;/b&gt;. All information you supply when
-posting an ad on our site is recorded.
-
-&lt;/ul&gt;
-
-&lt;h3&gt;HOW WE USE THE INFORMATION WE COLLECT&lt;/h3&gt;
-
-&lt;ul&gt;
-&lt;li&gt; &lt;b&gt;Statistical analysis&lt;/b&gt;. We analyze all available information to look for trends in demographic and statistical data. 
-
-&lt;li&gt; &lt;b&gt;To advertise your skills and/or projects&lt;/b&gt;.
-Seems pretty obvious, but it never hurts to remind of the obvious:
-please remember that information you include in your postings becomes
-public. That's why you post it - for &lt;i&gt;others&lt;/i&gt; to see. You don't
-know who those &quot;others&quot; are. Treat it accordingly.
-
-&lt;li&gt; We may use any and all information recorded 
-     for the purposes of &lt;b&gt;site administration, spam-
-     and fraud- prevention&lt;/b&gt;.
-
-
-&lt;li&gt; We may transfer information we collect to third parties
-     in these cases:
-&lt;ol&gt;
-  &lt;li&gt; where required by law (e.g. if we receive a court subpoena)
-  &lt;li&gt; to establish or exercise our legal rights or defend against 
-       legal claims.
-  &lt;li&gt; if this service or Gromco, Inc as a whole is acquired by or merged with another company.
-&lt;/ol&gt;
-&lt;/ul&gt;
-
-&lt;h3&gt;WHAT WE &lt;U&gt;DON'T DO&lt;/U&gt; WITH THE INFORMATION WE COLLECT&lt;/h3&gt;
-
-&lt;ul&gt;
-&lt;li&gt; &lt;b&gt;We do not sell or rent customer lists&lt;/b&gt;. We just don't.
-
-&lt;li&gt; &lt;b&gt;We do not send spam&lt;/b&gt;. We may send you important 
-     announcements, should there be any (for example, if we
-     decide to completely change the way our site works), 
-     but we never spam our customers. 
-&lt;/ul&gt;
-
+[% title = 'Privacy Statement' %]
+
+[% WRAPPER info/index.html %]
+
+The following outlines how we treat information collected when you visit our Web site 
+and use our service.
+
+&lt;h3&gt;INFORMATION WE COLLECT&lt;/h3&gt;
+
+&lt;ul&gt;
+&lt;li&gt; &lt;b&gt;Your IP Address&lt;/b&gt; is recorded automatically. IP addresses
+do not personally identify users.
+
+&lt;li&gt; &lt;b&gt;Cookies&lt;/b&gt;. Our site uses cookies to remember your
+sessions parameters.
+
+&lt;li&gt; &lt;b&gt;Registration information&lt;/b&gt;. For many of our site's features,
+registration is required. Registration entails supplying us with your
+(current &amp; working) email address and your name. 
+
+&lt;li&gt; &lt;b&gt;Posting information&lt;/b&gt;. All information you supply when
+posting an ad on our site is recorded.
+
+&lt;/ul&gt;
+
+&lt;h3&gt;HOW WE USE THE INFORMATION WE COLLECT&lt;/h3&gt;
+
+&lt;ul&gt;
+&lt;li&gt; &lt;b&gt;Statistical analysis&lt;/b&gt;. We analyze all available information to look for trends in demographic and statistical data. 
+
+&lt;li&gt; &lt;b&gt;To advertise your skills and/or projects&lt;/b&gt;.
+Seems pretty obvious, but it never hurts to remind of the obvious:
+please remember that information you include in your postings becomes
+public. That's why you post it - for &lt;i&gt;others&lt;/i&gt; to see. You don't
+know who those &quot;others&quot; are. Treat it accordingly.
+
+&lt;li&gt; We may use any and all information recorded 
+     for the purposes of &lt;b&gt;site administration, spam-
+     and fraud- prevention&lt;/b&gt;.
+
+
+&lt;li&gt; We may transfer information we collect to third parties
+     in these cases:
+&lt;ol&gt;
+  &lt;li&gt; where required by law (e.g. if we receive a court subpoena)
+  &lt;li&gt; to establish or exercise our legal rights or defend against 
+       legal claims.
+  &lt;li&gt; if this service or Gromco, Inc as a whole is acquired by or merged with another company.
+&lt;/ol&gt;
+&lt;/ul&gt;
+
+&lt;h3&gt;WHAT WE &lt;U&gt;DON'T DO&lt;/U&gt; WITH THE INFORMATION WE COLLECT&lt;/h3&gt;
+
+&lt;ul&gt;
+&lt;li&gt; &lt;b&gt;We do not sell or rent customer lists&lt;/b&gt;. We just don't.
+
+&lt;li&gt; &lt;b&gt;We do not send spam&lt;/b&gt;. We may send you important 
+     announcements, should there be any (for example, if we
+     decide to completely change the way our site works), 
+     but we never spam our customers. 
+&lt;/ul&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/info/privacy.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,29 +1,29 @@
-[% title = 'Terms of Service' %]
-
-[% WRAPPER info/index.html %]
-
-&lt;p&gt;Use of [% c.config.name %] and/or associated services indicates acceptance of the following terms of service. These terms may be updated from time to time, at which point they will be displayed to you on your next login to the website and on the Terms of Service page located at [% base %]info/tos&lt;/p&gt;
-&lt;ol&gt;
-&lt;li&gt;Each individual (user) is allowed only one account. If multiple accounts are discovered, all but one of them will be disabled.&lt;/li&gt;
-&lt;li&gt;Usernames deemed to be offensive are not allowed. Offensive usernames include those which contain sexually explicit phrases, racist remarks, etc.&lt;/li&gt;
-&lt;li&gt;Harassment of other users is not tollerated. This includes, but is not limited to, the following:
-&lt;ul&gt;
-    &lt;li&gt;repeatedly annoying other users after they have requested such annoyance to sease
-    &lt;li&gt;Threats against other users
-    &lt;li&gt;The spreading of personal information
-    &lt;li&gt;Sending multiple or excessively large quicknotes which are designed to annoy or crash others' computers
-    &lt;li&gt;Sending spam or chain letters in public or private communications
-&lt;/ul&gt;&lt;/li&gt;
-&lt;li&gt;Deliberately posting content on the website which is designed to crash other users' computers is not allowed.&lt;/li&gt;
-&lt;li&gt;The following types of material are not allowed on the website. Community Leaders or Site Administrators will determine if material falls into one of these categories.&lt;/li&gt;
-&lt;ul&gt;
-&lt;li&gt;Ratially insensitive material
-&lt;li&gt;Advocating illegal acts, including: child pornography, software piracy, manufacture and use of controled substances, etc.
-&lt;/ul&gt;&lt;/li&gt;
-&lt;li&gt;Users will not exploit any bugs or loopholes on the site to gain access to areas where they are not allowed, or to otherwise misuse the site or its resources. Any bug or loophole must immediately be reported to a community leader or site administrator.&lt;/li&gt;
-&lt;li&gt;Site administrators reserve the right to refuse access to any or all parts of the website and/or associated services to anyone at any time, regardless of reason.&lt;/li&gt;
-&lt;li&gt;If a user does not adhere to any required term, response will be at the discression of a Community Leader or Site Administrator. Responses may include warnings, temporary or permanent bans from the website or associated services, etc. Refunds will not be given in such circumstances.&lt;/li&gt;
-&lt;li&gt;A user may appeal a decision made by a Community Leader to the site administrators by writing a message to administrator which explains the issue, the decision made by the Community Leader, why the user believes the decision is unfair, and what the user believes to be an appropriate outcome. Decisions made by site administrators are final.&lt;/li&gt;
-&lt;/ol&gt;
-
+[% title = 'Terms of Service' %]
+
+[% WRAPPER info/index.html %]
+
+&lt;p&gt;Use of [% c.config.name %] and/or associated services indicates acceptance of the following terms of service. These terms may be updated from time to time, at which point they will be displayed to you on your next login to the website and on the Terms of Service page located at [% base %]info/tos&lt;/p&gt;
+&lt;ol&gt;
+&lt;li&gt;Each individual (user) is allowed only one account. If multiple accounts are discovered, all but one of them will be disabled.&lt;/li&gt;
+&lt;li&gt;Usernames deemed to be offensive are not allowed. Offensive usernames include those which contain sexually explicit phrases, racist remarks, etc.&lt;/li&gt;
+&lt;li&gt;Harassment of other users is not tollerated. This includes, but is not limited to, the following:
+&lt;ul&gt;
+    &lt;li&gt;repeatedly annoying other users after they have requested such annoyance to sease
+    &lt;li&gt;Threats against other users
+    &lt;li&gt;The spreading of personal information
+    &lt;li&gt;Sending multiple or excessively large quicknotes which are designed to annoy or crash others' computers
+    &lt;li&gt;Sending spam or chain letters in public or private communications
+&lt;/ul&gt;&lt;/li&gt;
+&lt;li&gt;Deliberately posting content on the website which is designed to crash other users' computers is not allowed.&lt;/li&gt;
+&lt;li&gt;The following types of material are not allowed on the website. Community Leaders or Site Administrators will determine if material falls into one of these categories.&lt;/li&gt;
+&lt;ul&gt;
+&lt;li&gt;Ratially insensitive material
+&lt;li&gt;Advocating illegal acts, including: child pornography, software piracy, manufacture and use of controled substances, etc.
+&lt;/ul&gt;&lt;/li&gt;
+&lt;li&gt;Users will not exploit any bugs or loopholes on the site to gain access to areas where they are not allowed, or to otherwise misuse the site or its resources. Any bug or loophole must immediately be reported to a community leader or site administrator.&lt;/li&gt;
+&lt;li&gt;Site administrators reserve the right to refuse access to any or all parts of the website and/or associated services to anyone at any time, regardless of reason.&lt;/li&gt;
+&lt;li&gt;If a user does not adhere to any required term, response will be at the discression of a Community Leader or Site Administrator. Responses may include warnings, temporary or permanent bans from the website or associated services, etc. Refunds will not be given in such circumstances.&lt;/li&gt;
+&lt;li&gt;A user may appeal a decision made by a Community Leader to the site administrators by writing a message to administrator which explains the issue, the decision made by the Community Leader, why the user believes the decision is unfair, and what the user believes to be an appropriate outcome. Decisions made by site administrators are final.&lt;/li&gt;
+&lt;/ol&gt;
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/info/tos.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,13 @@
-[% maintain_msg = BLOCK %]
-
-&lt;b&gt;[% c.config.name %] is closed for:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;
-
-The borad is under maintain. Sorry for any inconvenience.
-
-&lt;br /&gt;&lt;br /&gt;If you are administrator, Please &lt;a href=&quot;/login&quot;&gt;Login&lt;/a&gt;
-
-[% END %]
-
-[% INCLUDE 'simple/message.html' message = {
-    msg =&gt; maintain_msg,
+[% maintain_msg = BLOCK %]
+
+&lt;b&gt;[% c.config.name %] is closed for:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;
+
+The borad is under maintain. Sorry for any inconvenience.
+
+&lt;br /&gt;&lt;br /&gt;If you are administrator, Please &lt;a href=&quot;/login&quot;&gt;Login&lt;/a&gt;
+
+[% END %]
+
+[% INCLUDE 'simple/message.html' message = {
+    msg =&gt; maintain_msg,
 } %]
\ No newline at end of file</diff>
      <filename>templates/lang/en/site/maintain.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,13 @@
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li[% IF c.req.path.match('compose') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/message/compose'&gt;&lt;span&gt;[% c.loc('Compose New Message') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% IF c.req.path.match('inbox') OR c.req.path.match('message/?$') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/message/inbox'&gt;&lt;span&gt;[% c.loc('Inbox') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% IF c.req.path.match('outbox') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/message/outbox'&gt;&lt;span&gt;[% c.loc('Outbox') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-[% content %]
-
-    &lt;/div&gt;
-&lt;/div&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li[% IF c.req.path.match('compose') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/message/compose'&gt;&lt;span&gt;[% c.loc('Compose New Message') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% IF c.req.path.match('inbox') OR c.req.path.match('message/?$') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/message/inbox'&gt;&lt;span&gt;[% c.loc('Inbox') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% IF c.req.path.match('outbox') %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/message/outbox'&gt;&lt;span&gt;[% c.loc('Outbox') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+[% content %]
+
+    &lt;/div&gt;
+&lt;/div&gt;</diff>
      <filename>templates/message/bar.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,43 +1,43 @@
-[% USE FillInForm %]
-
-[% WRAPPER 'message/bar.html' %]
-
-[% FILTER fillinform fdat =&gt; c.req.params %]
-&lt;div class='one'&gt; 
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td class=&quot;title&quot; colspan='2'&gt;&lt;b&gt;[% c.loc('Compose New Message') %]&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='misc1'&gt;
-&lt;td&gt;&lt;b&gt;[% c.loc('Rept.') %]&lt;/b&gt;&lt;/td&gt;
-&lt;td&gt;&lt;input type='text' name='to' size='16'&gt; &lt;select name=friend OnChange=&quot;friendls()&quot;&gt;&lt;option&gt;Friends List&lt;/option&gt;&lt;/select&gt; 
-[% IF c.form.error('to') %]
-[% IF c.form.error('to', 'USER_NONEXIST') %] 
-NO such user.
-[% ELSIF c.form.error('to', 'USER_THESAME') %]
-You cann't compose to yourself.
-[% ELSE %]
-please spec a rept.
-[% END %]
-[% END %]
-&lt;/td&gt;
-&lt;/tr&gt;
-&lt;tr class='misc2'&gt;
-&lt;td valign='top' align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;
-&lt;td&gt;&lt;input type='text' name='title' size='36' maxlength='80'&gt;
-[% IF c.form.error('title') %]title should be 1-80 chars.[% END %]
-&lt;/td&gt;
-&lt;/tr&gt;
-&lt;tr class='misc1'&gt;
-&lt;td valign='top' align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;
-&lt;td&gt;
-    &lt;textarea cols='70' rows='8' name='text'&gt;&lt;/textarea&gt;
-[% IF c.form.error('text') %]text is required.[% END %]
-&lt;/td&gt;
-&lt;/tr&gt;
-&lt;tr class='misc2'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt; &lt;input type='reset' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-[% END %]
-
-[% END %]
+[% USE FillInForm %]
+
+[% WRAPPER 'message/bar.html' %]
+
+[% FILTER fillinform fdat =&gt; c.req.params %]
+&lt;div class='one'&gt; 
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td class=&quot;title&quot; colspan='2'&gt;&lt;b&gt;[% c.loc('Compose New Message') %]&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='misc1'&gt;
+&lt;td&gt;&lt;b&gt;[% c.loc('Rept.') %]&lt;/b&gt;&lt;/td&gt;
+&lt;td&gt;&lt;input type='text' name='to' size='16'&gt; &lt;select name=friend OnChange=&quot;friendls()&quot;&gt;&lt;option&gt;Friends List&lt;/option&gt;&lt;/select&gt; 
+[% IF c.form.error('to') %]
+[% IF c.form.error('to', 'USER_NONEXIST') %] 
+NO such user.
+[% ELSIF c.form.error('to', 'USER_THESAME') %]
+You cann't compose to yourself.
+[% ELSE %]
+please spec a rept.
+[% END %]
+[% END %]
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;tr class='misc2'&gt;
+&lt;td valign='top' align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;
+&lt;td&gt;&lt;input type='text' name='title' size='36' maxlength='80'&gt;
+[% IF c.form.error('title') %]title should be 1-80 chars.[% END %]
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;tr class='misc1'&gt;
+&lt;td valign='top' align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;
+&lt;td&gt;
+    &lt;textarea cols='70' rows='8' name='text'&gt;&lt;/textarea&gt;
+[% IF c.form.error('text') %]text is required.[% END %]
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;tr class='misc2'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt; &lt;input type='reset' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+[% END %]
+
+[% END %]</diff>
      <filename>templates/message/compose.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,27 +1,27 @@
-[% PROCESS sub/date.html %]
-
-[% WRAPPER 'message/bar.html' %]
-
-&lt;div class='one'&gt; 
-&lt;table align='center'&gt;
-&lt;tr align='center' class=&quot;title&quot;&gt;
-    &lt;td width='42'&gt;[% c.loc('Status') %]&lt;/td&gt;
-    &lt;td width='100'&gt;[% c.loc('From') %]&lt;/td&gt;
-    &lt;td align='left'&gt;[% c.loc('Subject') %]&lt;/td&gt;
-    &lt;td width='120'&gt;[% c.loc('Date') %]&lt;/td&gt;
-    &lt;td width='60'&gt;[% c.loc('Action') %]&lt;/td&gt;
-&lt;/tr&gt;
-[% FOREACH message IN messages %]
-&lt;tr align='center' class=&quot;[% IF loop.count % 2 %]misc1[% ELSE %]misc2[% END %]&quot;&gt;
-    &lt;td&gt;[% IF unread.${message.message_id} %]&lt;img src='[% c.config.dir.images %]/site/new.gif' /&gt;[% ELSE %]&amp;nbsp;[% END %]&lt;/td&gt;
-    &lt;td&gt;&lt;a href='/u/[% message.sender.username %]'&gt;[% message.sender.nickname %]&lt;/a&gt;&lt;/td&gt;
-    &lt;td align='left'&gt;&lt;a href='/message/[% message.message_id %]'&gt;[% message.title %]&lt;/a&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span class='date'&gt;[% date_format(message.post_on) %]&lt;/span&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;a href='/message/[% message.message_id %]/delete'&gt;[% c.loc('Delete') %]&lt;/a&gt;&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr&gt;&lt;td colspan='5'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-[% END %]
+[% PROCESS sub/date.html %]
+
+[% WRAPPER 'message/bar.html' %]
+
+&lt;div class='one'&gt; 
+&lt;table align='center'&gt;
+&lt;tr align='center' class=&quot;title&quot;&gt;
+    &lt;td width='42'&gt;[% c.loc('Status') %]&lt;/td&gt;
+    &lt;td width='100'&gt;[% c.loc('From') %]&lt;/td&gt;
+    &lt;td align='left'&gt;[% c.loc('Subject') %]&lt;/td&gt;
+    &lt;td width='120'&gt;[% c.loc('Date') %]&lt;/td&gt;
+    &lt;td width='60'&gt;[% c.loc('Action') %]&lt;/td&gt;
+&lt;/tr&gt;
+[% FOREACH message IN messages %]
+&lt;tr align='center' class=&quot;[% IF loop.count % 2 %]misc1[% ELSE %]misc2[% END %]&quot;&gt;
+    &lt;td&gt;[% IF unread.${message.message_id} %]&lt;img src='[% c.config.dir.images %]/site/new.gif' /&gt;[% ELSE %]&amp;nbsp;[% END %]&lt;/td&gt;
+    &lt;td&gt;&lt;a href='/u/[% message.sender.username %]'&gt;[% message.sender.nickname %]&lt;/a&gt;&lt;/td&gt;
+    &lt;td align='left'&gt;&lt;a href='/message/[% message.message_id %]'&gt;[% message.title %]&lt;/a&gt;&lt;/td&gt;
+    &lt;td&gt;&lt;span class='date'&gt;[% date_format(message.post_on) %]&lt;/span&gt;&lt;/td&gt;
+    &lt;td&gt;&lt;a href='/message/[% message.message_id %]/delete'&gt;[% c.loc('Delete') %]&lt;/a&gt;&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr&gt;&lt;td colspan='5'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+[% END %]</diff>
      <filename>templates/message/inbox.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,35 +1,35 @@
-[% PROCESS sub/date.html %]
-[% WRAPPER 'message/bar.html' %]
-
-&lt;div class='one'&gt; 
-&lt;table align='center'&gt;
-&lt;tr class=&quot;title&quot;&gt;&lt;td width='30%'&gt;[% c.loc('From') %]&lt;/td&gt;&lt;td&gt;[% c.loc('Subject') %]&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class=&quot;misc1&quot;&gt;
-&lt;td&gt;
-    [% c.loc('From') %]: &lt;a href='/u/[% message.sender.username %]'&gt;[% message.sender.nickname %]&lt;/a&gt;&lt;br /&gt;
-    [% c.loc('To') %]:   &lt;a href='/u/[% message.recipient.username %]'&gt;[% message.recipient.nickname %]&lt;/a&gt;&lt;br /&gt;
-    [% c.loc('Post on') %]&amp;nbsp;&lt;span class='date'&gt;[% date_format(message.post_on) %]&lt;/span&gt;
-&lt;/td&gt;
-&lt;td&gt;
-    &lt;strong&gt;[% message.title %]&lt;/strong&gt;&lt;br /&gt;
-    [% message.text %]
-&lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-[% IF message.recipient.user_id == c.user.user_id %]
-&lt;br /&gt;
-&lt;form action='/message/compose' method='post'&gt;
-&lt;input type='hidden' name='to' value='[% message.sender.username %]' /&gt;
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;&lt;td class=&quot;title&quot; colspan='2'&gt;[% c.loc('Reply') %]&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class=&quot;misc2&quot;&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' size='32' value='Re: [% message.title %]' /&gt;&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class=&quot;misc1&quot;&gt;&lt;td align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;&lt;td&gt;&lt;textarea cols='70' rows='8' name='text'&gt;&lt;/textarea&gt;&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class=&quot;misc2&quot;&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-
+[% PROCESS sub/date.html %]
+[% WRAPPER 'message/bar.html' %]
+
+&lt;div class='one'&gt; 
+&lt;table align='center'&gt;
+&lt;tr class=&quot;title&quot;&gt;&lt;td width='30%'&gt;[% c.loc('From') %]&lt;/td&gt;&lt;td&gt;[% c.loc('Subject') %]&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class=&quot;misc1&quot;&gt;
+&lt;td&gt;
+    [% c.loc('From') %]: &lt;a href='/u/[% message.sender.username %]'&gt;[% message.sender.nickname %]&lt;/a&gt;&lt;br /&gt;
+    [% c.loc('To') %]:   &lt;a href='/u/[% message.recipient.username %]'&gt;[% message.recipient.nickname %]&lt;/a&gt;&lt;br /&gt;
+    [% c.loc('Post on') %]&amp;nbsp;&lt;span class='date'&gt;[% date_format(message.post_on) %]&lt;/span&gt;
+&lt;/td&gt;
+&lt;td&gt;
+    &lt;strong&gt;[% message.title %]&lt;/strong&gt;&lt;br /&gt;
+    [% message.text %]
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+[% IF message.recipient.user_id == c.user.user_id %]
+&lt;br /&gt;
+&lt;form action='/message/compose' method='post'&gt;
+&lt;input type='hidden' name='to' value='[% message.sender.username %]' /&gt;
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;&lt;td class=&quot;title&quot; colspan='2'&gt;[% c.loc('Reply') %]&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class=&quot;misc2&quot;&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' size='32' value='Re: [% message.title %]' /&gt;&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class=&quot;misc1&quot;&gt;&lt;td align='right'&gt;[% c.loc('Content') %]&lt;/td&gt;&lt;td&gt;&lt;textarea cols='70' rows='8' name='text'&gt;&lt;/textarea&gt;&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class=&quot;misc2&quot;&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/message/message.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,24 @@
-[% PROCESS sub/date.html %]
-[% WRAPPER 'message/bar.html' %]
-
-&lt;div class='one'&gt; 
-&lt;table align='center'&gt;
-&lt;tr align='center' class=&quot;title&quot;&gt;
-    &lt;td width='100'&gt;[% c.loc('To') %]&lt;/td&gt;
-    &lt;td align='left'&gt;[% c.loc('Subject') %]&lt;/td&gt;
-    &lt;td width='120'&gt;[% c.loc('Date') %]&lt;/td&gt;
-    &lt;td width='60'&gt;[% c.loc('Action') %]&lt;/td&gt;
-&lt;/tr&gt;
-[% FOREACH message IN messages %]
-&lt;tr align='center' class=&quot;[% IF loop.count % 2 %]misc1[% ELSE %]misc2[% END %]&quot;&gt;
-    &lt;td&gt;&lt;a href='/u/[% message.recipient.username %]'&gt;[% message.recipient.nickname %]&lt;/a&gt;&lt;/td&gt;
-    &lt;td align='left'&gt;&lt;a href='/message/[% message.message_id %]'&gt;[% message.title %]&lt;/a&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span class='date'&gt;[% date_format(message.post_on) %]&lt;/span&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;a href='/message/[% message.message_id %]/delete'&gt;[% c.loc('Delete') %]&lt;/a&gt;&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr&gt;&lt;td colspan='5'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-[% END %]
+[% PROCESS sub/date.html %]
+[% WRAPPER 'message/bar.html' %]
+
+&lt;div class='one'&gt; 
+&lt;table align='center'&gt;
+&lt;tr align='center' class=&quot;title&quot;&gt;
+    &lt;td width='100'&gt;[% c.loc('To') %]&lt;/td&gt;
+    &lt;td align='left'&gt;[% c.loc('Subject') %]&lt;/td&gt;
+    &lt;td width='120'&gt;[% c.loc('Date') %]&lt;/td&gt;
+    &lt;td width='60'&gt;[% c.loc('Action') %]&lt;/td&gt;
+&lt;/tr&gt;
+[% FOREACH message IN messages %]
+&lt;tr align='center' class=&quot;[% IF loop.count % 2 %]misc1[% ELSE %]misc2[% END %]&quot;&gt;
+    &lt;td&gt;&lt;a href='/u/[% message.recipient.username %]'&gt;[% message.recipient.nickname %]&lt;/a&gt;&lt;/td&gt;
+    &lt;td align='left'&gt;&lt;a href='/message/[% message.message_id %]'&gt;[% message.title %]&lt;/a&gt;&lt;/td&gt;
+    &lt;td&gt;&lt;span class='date'&gt;[% date_format(message.post_on) %]&lt;/span&gt;&lt;/td&gt;
+    &lt;td&gt;&lt;a href='/message/[% message.message_id %]/delete'&gt;[% c.loc('Delete') %]&lt;/a&gt;&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr&gt;&lt;td colspan='5'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+[% END %]</diff>
      <filename>templates/message/outbox.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,36 +1,36 @@
-[% title = 'My Starred Items' %]
-
-[% c.load_once(&quot;site/star.js&quot;) %]
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-
-&lt;div id='recent_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/u/[% c.user.username %]'&gt;&lt;span&gt;My Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/u/[% c.user.username %]/topics'&gt;&lt;span&gt;[% c.loc('My Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='/my/starred'&gt;&lt;span&gt;[% c.loc('My Starred Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/u/[% c.user.username %]/shared'&gt;&lt;span&gt;[% c.loc('My Shared Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr align='center' class='title'&gt;&lt;td width='20'&gt;[% c.loc(&quot;Star&quot;) %]&lt;/td&gt;&lt;td align='left'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;&lt;td width='180'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;&lt;td width='180'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;&lt;/tr&gt;
-[% FOREACH item IN starred_items %]
-&lt;tr align='center' class='misc[% IF loop.count mod 2 %]1[% ELSE %]2[% END %]'&gt;
-
-&lt;td&gt;&lt;a href=&quot;javascript:star('[% item.object_type %]', '[% item.object_id %]', 'starDiv_[% item.object_type %]_[% item.object_id %]')&quot;&gt;&lt;span id='starDiv_[% item.object_type %]_[% item.object_id %]'&gt;&lt;img src='[% c.config.dir.images %]/site/t/star_on.gif' /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
-
-[% INCLUDE include/object_tds.html object = item %]
-
-&lt;/tr&gt;
-[% END %]
-&lt;/table&gt;
-
-&lt;br /&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td class='misc1'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% title = 'My Starred Items' %]
+
+[% c.load_once(&quot;site/star.js&quot;) %]
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+
+&lt;div id='recent_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/u/[% c.user.username %]'&gt;&lt;span&gt;My Homepage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/u/[% c.user.username %]/topics'&gt;&lt;span&gt;[% c.loc('My Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='/my/starred'&gt;&lt;span&gt;[% c.loc('My Starred Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/u/[% c.user.username %]/shared'&gt;&lt;span&gt;[% c.loc('My Shared Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr align='center' class='title'&gt;&lt;td width='20'&gt;[% c.loc(&quot;Star&quot;) %]&lt;/td&gt;&lt;td align='left'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;&lt;td width='180'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;&lt;td width='180'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;&lt;/tr&gt;
+[% FOREACH item IN starred_items %]
+&lt;tr align='center' class='misc[% IF loop.count mod 2 %]1[% ELSE %]2[% END %]'&gt;
+
+&lt;td&gt;&lt;a href=&quot;javascript:star('[% item.object_type %]', '[% item.object_id %]', 'starDiv_[% item.object_type %]_[% item.object_id %]')&quot;&gt;&lt;span id='starDiv_[% item.object_type %]_[% item.object_id %]'&gt;&lt;img src='[% c.config.dir.images %]/site/t/star_on.gif' /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
+
+[% INCLUDE include/object_tds.html object = item %]
+
+&lt;/tr&gt;
+[% END %]
+&lt;/table&gt;
+
+&lt;br /&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td class='misc1'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/my/starred.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,85 +1,85 @@
-[% USE Math %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0)'&gt;&lt;span&gt;[% poll.title %]([% poll.hit %])&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;
-&lt;td colspan='2'&gt;[% poll.title %] By [% poll.author.nickname %]&lt;/td&gt;&lt;/tr&gt;
-&lt;tr class='forum1'&gt;
-    &lt;td valign='top' width='157'&gt;[% INCLUDE include/user_profile.html user = poll.author %]&lt;/td&gt;
-    &lt;td&gt;
-
-[% IF can_vote %]
-&lt;form name='vote' id='vote'&gt;
-&lt;input type='hidden' name='poll_id' value='[% poll.poll_id %]' /&gt;
-[% END %]
-&lt;div class='none'&gt;
-&lt;table border='0' cellpadding='0' cellspacing='0'&gt;
-[%# bar color, from 1 .. 10 %]
-[% bar_color = 1 %]
-[% FOREACH option IN poll.options %]
-&lt;tr&gt;&lt;td&gt;
-[% IF can_vote %]
-[% IF poll.multi == 1 %]
-[% input_type = 'checkbox' %]
-[% ELSE %]
-[% input_type = 'radio' %]
-[% END %]
-&lt;input type='[% input_type %]' name='option_id' value='[% option.option_id %]' /&gt; 
-[% END %]
-[% option.text %]&lt;/td&gt;&lt;td&gt;
-    [% IF poll.vote_no %]
-[% bar_width = ( option.vote_no / poll.vote_no ) * 160 %]
-[% bar_width = Math.int(bar_width) %]
-&lt;img src='[% c.config.dir.images %]/poll/bar[% bar_color %].gif' width=&quot;[% bar_width %]&quot; height='10' /&gt; ([% option.vote_no %]/[% poll.vote_no %])
-    [% END %]
-&lt;/td&gt;&lt;/tr&gt;
-
-[% bar_color = bar_color + 1;IF bar_color &gt; 10; bar_color = 1; END;%]
-[% END %]
-&lt;/table&gt;
-&lt;/div&gt;
-[% IF can_vote %]
-&lt;input type='button' value='Vote' onclick='javascript:HAVEAVOTE()' /&gt;
-&lt;/form&gt;
-[% END %]
-&lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% INCLUDE comment/show.html %]
-&lt;br /&gt;
-[% INCLUDE comment/post.html %]
-[% IF can_vote %]
-[% c.load_once(&quot;jquery/form.js&quot;) %]
-&lt;script&gt;
-
-function HAVEAVOTE() {
-    $('#vote').ajaxSubmit( {
-        url : '/ajax/poll/vote',
-        type: 'get',
-        success: function(responseText) { alert(responseText); }
-    } );
-}
-
-&lt;/script&gt;
-[% END %]
-
-    &lt;/div&gt;
+[% USE Math %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0)'&gt;&lt;span&gt;[% poll.title %]([% poll.hit %])&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;
+&lt;td colspan='2'&gt;[% poll.title %] By [% poll.author.nickname %]&lt;/td&gt;&lt;/tr&gt;
+&lt;tr class='forum1'&gt;
+    &lt;td valign='top' width='157'&gt;[% INCLUDE include/user_profile.html user = poll.author %]&lt;/td&gt;
+    &lt;td&gt;
+
+[% IF can_vote %]
+&lt;form name='vote' id='vote'&gt;
+&lt;input type='hidden' name='poll_id' value='[% poll.poll_id %]' /&gt;
+[% END %]
+&lt;div class='none'&gt;
+&lt;table border='0' cellpadding='0' cellspacing='0'&gt;
+[%# bar color, from 1 .. 10 %]
+[% bar_color = 1 %]
+[% FOREACH option IN poll.options %]
+&lt;tr&gt;&lt;td&gt;
+[% IF can_vote %]
+[% IF poll.multi == 1 %]
+[% input_type = 'checkbox' %]
+[% ELSE %]
+[% input_type = 'radio' %]
+[% END %]
+&lt;input type='[% input_type %]' name='option_id' value='[% option.option_id %]' /&gt; 
+[% END %]
+[% option.text %]&lt;/td&gt;&lt;td&gt;
+    [% IF poll.vote_no %]
+[% bar_width = ( option.vote_no / poll.vote_no ) * 160 %]
+[% bar_width = Math.int(bar_width) %]
+&lt;img src='[% c.config.dir.images %]/poll/bar[% bar_color %].gif' width=&quot;[% bar_width %]&quot; height='10' /&gt; ([% option.vote_no %]/[% poll.vote_no %])
+    [% END %]
+&lt;/td&gt;&lt;/tr&gt;
+
+[% bar_color = bar_color + 1;IF bar_color &gt; 10; bar_color = 1; END;%]
+[% END %]
+&lt;/table&gt;
+&lt;/div&gt;
+[% IF can_vote %]
+&lt;input type='button' value='Vote' onclick='javascript:HAVEAVOTE()' /&gt;
+&lt;/form&gt;
+[% END %]
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% INCLUDE comment/show.html %]
+&lt;br /&gt;
+[% INCLUDE comment/post.html %]
+[% IF can_vote %]
+[% c.load_once(&quot;jquery/form.js&quot;) %]
+&lt;script&gt;
+
+function HAVEAVOTE() {
+    $('#vote').ajaxSubmit( {
+        url : '/ajax/poll/vote',
+        type: 'get',
+        success: function(responseText) { alert(responseText); }
+    } );
+}
+
+&lt;/script&gt;
+[% END %]
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/poll/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,58 +1,58 @@
-
-&lt;script&gt;
-  function AddAnotherRow() {
-      var option_number = $('#option_number').val();
-      var new_option_no = Math.round(option_number) + 1;
-      $('#option_number').val(new_option_no);
-      var option_html = &quot;Option &quot; + new_option_no + &quot;: &lt;input type='text' name='option&quot; + new_option_no + &quot;' id='option&quot; + new_option_no + &quot;' /&gt;&lt;br /&gt;&quot;;
-      $('#extra_options').append(option_html);
-  }
-&lt;/script&gt;
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;form method=&quot;post&quot;&gt;
-&lt;table align='center' border='1' cellpadding='6'&gt;
-  &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Create a new POLL&lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum1'&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' size='60' maxlength='80' name='title' /&gt;
-  [% IF c.form.error('title') %]title should be 1-80 chars.[% END %]
-&lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum2'&gt;&lt;td&gt;Options:&lt;/td&gt;&lt;td&gt;
-    &lt;input type='hidden' name='option_number' id='option_number' value='2' /&gt;
-    &lt;div id='options'&gt;
-    Option 1: &lt;input type='text' name='option1' id='option1' /&gt;&lt;br /&gt;
-    Option 2: &lt;input type='text' name='option2' id='option2' /&gt;&lt;br /&gt;
-    &lt;div id='extra_options'&gt;&lt;/div&gt;
-    &lt;input type='button' onclick='javascript:AddAnotherRow()' value='Add Another Option' /&gt;&lt;br /&gt;
-    &lt;/div&gt;
-  &lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum1'&gt;&lt;td&gt;Setting:&lt;/td&gt;&lt;td&gt;
-    Duration: &lt;select name='duration_day'&gt;
-        &lt;option value='1'&gt;1 Day&lt;/option&gt;
-        &lt;option value='2'&gt;2 Days&lt;/option&gt;
-        &lt;option value='3'&gt;3 Days&lt;/option&gt;
-        &lt;option value='7'&gt;1 Week&lt;/option&gt;
-        &lt;option value='30'&gt;30 Days&lt;/option&gt;
-    &lt;/select&gt;&lt;br /&gt;
-    &lt;input type='checkbox' name='multi' value='1' /&gt; Multi-Vote&lt;br /&gt;
-  &lt;/td&gt;&lt;/tr&gt;
-  &lt;tr class='forum2'&gt;&lt;td colspan='2'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+
+&lt;script&gt;
+  function AddAnotherRow() {
+      var option_number = $('#option_number').val();
+      var new_option_no = Math.round(option_number) + 1;
+      $('#option_number').val(new_option_no);
+      var option_html = &quot;Option &quot; + new_option_no + &quot;: &lt;input type='text' name='option&quot; + new_option_no + &quot;' id='option&quot; + new_option_no + &quot;' /&gt;&lt;br /&gt;&quot;;
+      $('#extra_options').append(option_html);
+  }
+&lt;/script&gt;
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;form method=&quot;post&quot;&gt;
+&lt;table align='center' border='1' cellpadding='6'&gt;
+  &lt;tr class='title'&gt;&lt;td colspan='2'&gt;Create a new POLL&lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum1'&gt;&lt;td align='right'&gt;[% c.loc('Title') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' size='60' maxlength='80' name='title' /&gt;
+  [% IF c.form.error('title') %]title should be 1-80 chars.[% END %]
+&lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum2'&gt;&lt;td&gt;Options:&lt;/td&gt;&lt;td&gt;
+    &lt;input type='hidden' name='option_number' id='option_number' value='2' /&gt;
+    &lt;div id='options'&gt;
+    Option 1: &lt;input type='text' name='option1' id='option1' /&gt;&lt;br /&gt;
+    Option 2: &lt;input type='text' name='option2' id='option2' /&gt;&lt;br /&gt;
+    &lt;div id='extra_options'&gt;&lt;/div&gt;
+    &lt;input type='button' onclick='javascript:AddAnotherRow()' value='Add Another Option' /&gt;&lt;br /&gt;
+    &lt;/div&gt;
+  &lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum1'&gt;&lt;td&gt;Setting:&lt;/td&gt;&lt;td&gt;
+    Duration: &lt;select name='duration_day'&gt;
+        &lt;option value='1'&gt;1 Day&lt;/option&gt;
+        &lt;option value='2'&gt;2 Days&lt;/option&gt;
+        &lt;option value='3'&gt;3 Days&lt;/option&gt;
+        &lt;option value='7'&gt;1 Week&lt;/option&gt;
+        &lt;option value='30'&gt;30 Days&lt;/option&gt;
+    &lt;/select&gt;&lt;br /&gt;
+    &lt;input type='checkbox' name='multi' value='1' /&gt; Multi-Vote&lt;br /&gt;
+  &lt;/td&gt;&lt;/tr&gt;
+  &lt;tr class='forum2'&gt;&lt;td colspan='2'&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/poll/new.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,67 +1,67 @@
-[% USE date %]
-[% PROCESS sub/date.html %]
-
-[% title = forum.name %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF c.user_exists AND roles.is_admin %]
-        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id %]'&gt;&lt;span&gt;[% c.loc('Forum Admin') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td align='right' valign='bottom'&gt;
-Admin: &lt;a href='/u/[% forum_roles.${forum.forum_id}.admin.username %]'&gt;[% forum_roles.${forum.forum_id}.admin.nickname %]&lt;/a&gt;
-[% FOREACH moderator IN forum_roles.${forum.forum_id}.moderator %]
-[% IF loop.first %], [% END %]&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
-[% END %]
-&lt;td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tr class='title' align='center'&gt;
-	&lt;td width='42'&gt;Status&lt;/td&gt;
-	&lt;td align='left'&gt;Subject&lt;/td&gt;
-	&lt;td width='100'&gt;Author&lt;/td&gt;
-	&lt;td width='40'&gt;Poll&lt;/td&gt;
-	&lt;td width='120'&gt;Start Time&lt;/td&gt;
-	&lt;td width='120'&gt;Close Time&lt;/td&gt;
-	&lt;/tr&gt;
-[% FOREACH poll IN polls %]
-&lt;tr align='center'&gt;
-	&lt;td class='forum1'&gt;[% IF poll.duration &lt; date.now %]Locked[% END %]&lt;/td&gt;
-	&lt;td align='left' class='forum2'&gt;&lt;a href='[% forum.forum_url %]/poll/[% poll.poll_id %]'&gt;[% poll.title %]&lt;/a&gt;&lt;/td&gt;
-	&lt;td class='forum1'&gt;&lt;a href='/u/[% poll.author.username %]'&gt;[% poll.author.nickname %]&lt;/a&gt;&lt;/td&gt;
-	&lt;td class='forum2'&gt;[% poll.vote_no %]&lt;/td&gt;
-	&lt;td class='forum1'&gt;&lt;span class='date'&gt;[% date_format(poll.time) %]&lt;/span&gt;&lt;/td&gt;
-	&lt;td class='forum2'&gt;&lt;span class='date'&gt;[% date_format(poll.duration) %]&lt;/span&gt;&lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;/table&gt;
-&lt;/div&gt;
-&lt;br /&gt;
-
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;&lt;td&gt;[% INCLUDE 'sub/pager.html' url_prefix = '/forum/' _ forum.forum_code _ '/polls' %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
-&lt;/div&gt;
+[% USE date %]
+[% PROCESS sub/date.html %]
+
+[% title = forum.name %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF c.user_exists AND roles.is_admin %]
+        &lt;li&gt;&lt;a href='/forumadmin/[% forum.forum_id %]'&gt;&lt;span&gt;[% c.loc('Forum Admin') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td align='right' valign='bottom'&gt;
+Admin: &lt;a href='/u/[% forum_roles.${forum.forum_id}.admin.username %]'&gt;[% forum_roles.${forum.forum_id}.admin.nickname %]&lt;/a&gt;
+[% FOREACH moderator IN forum_roles.${forum.forum_id}.moderator %]
+[% IF loop.first %], [% END %]&lt;a href='/u/[% moderator.username %]'&gt;[% moderator.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
+[% END %]
+&lt;td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tr class='title' align='center'&gt;
+	&lt;td width='42'&gt;Status&lt;/td&gt;
+	&lt;td align='left'&gt;Subject&lt;/td&gt;
+	&lt;td width='100'&gt;Author&lt;/td&gt;
+	&lt;td width='40'&gt;Poll&lt;/td&gt;
+	&lt;td width='120'&gt;Start Time&lt;/td&gt;
+	&lt;td width='120'&gt;Close Time&lt;/td&gt;
+	&lt;/tr&gt;
+[% FOREACH poll IN polls %]
+&lt;tr align='center'&gt;
+	&lt;td class='forum1'&gt;[% IF poll.duration &lt; date.now %]Locked[% END %]&lt;/td&gt;
+	&lt;td align='left' class='forum2'&gt;&lt;a href='[% forum.forum_url %]/poll/[% poll.poll_id %]'&gt;[% poll.title %]&lt;/a&gt;&lt;/td&gt;
+	&lt;td class='forum1'&gt;&lt;a href='/u/[% poll.author.username %]'&gt;[% poll.author.nickname %]&lt;/a&gt;&lt;/td&gt;
+	&lt;td class='forum2'&gt;[% poll.vote_no %]&lt;/td&gt;
+	&lt;td class='forum1'&gt;&lt;span class='date'&gt;[% date_format(poll.time) %]&lt;/span&gt;&lt;/td&gt;
+	&lt;td class='forum2'&gt;&lt;span class='date'&gt;[% date_format(poll.duration) %]&lt;/span&gt;&lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;/table&gt;
+&lt;/div&gt;
+&lt;br /&gt;
+
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;&lt;td&gt;[% INCLUDE 'sub/pager.html' url_prefix = '/forum/' _ forum.forum_code _ '/polls' %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
+&lt;/div&gt;</diff>
      <filename>templates/poll/view_polls.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,12 @@
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-    &lt;tr&gt;&lt;td colspan='2'&gt;&lt;div class='success'&gt;An activation email is sent to your email. Please have a check!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;form method='post'&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Activation') %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;&lt;label for=&quot;username&quot;&gt;[% c.loc('Username:') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' value='[% username || c.user.username %]' length='12' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;&lt;label for=&quot;activation_code&quot;&gt;[% c.loc('Active Code:') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='activation_code' length='12' /&gt;[% IF ERROR_UNMATCHED %]the active code is wrong, please try it again[% END %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/form&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+    &lt;tr&gt;&lt;td colspan='2'&gt;&lt;div class='success'&gt;An activation email is sent to your email. Please have a check!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;form method='post'&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Activation') %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;&lt;label for=&quot;username&quot;&gt;[% c.loc('Username:') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' value='[% username || c.user.username %]' length='12' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;&lt;label for=&quot;activation_code&quot;&gt;[% c.loc('Active Code:') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='activation_code' length='12' /&gt;[% IF ERROR_UNMATCHED %]the active code is wrong, please try it again[% END %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/form&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;</diff>
      <filename>templates/register/activation.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,15 @@
-[% USE FillInForm %]
-[% FILTER fillinform fdat =&gt; c.req.params %]
-&lt;div id='register' class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	&lt;form method='post'&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Import Contacts&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' size='24' value='[% email %]' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Password&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='24' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/form&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/div&gt;
+[% USE FillInForm %]
+[% FILTER fillinform fdat =&gt; c.req.params %]
+&lt;div id='register' class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	&lt;form method='post'&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Import Contacts&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' size='24' value='[% email %]' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Password&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='24' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/form&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/div&gt;
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/register/import_contacts.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,155 +1,155 @@
-[% USE FillInForm %]
-
-[% c.load_once(&quot;jquery/validate.js&quot;) %]
-[% IF lang != 'en' %]
-[% c.load_once(&quot;jquery/validate/messages_${lang}.js&quot;) %]
-[% END %]
-[% c.load_once(&quot;form.css&quot;) %]
-
-&lt;script type=&quot;text/javascript&quot;&gt;
-
-$().ready(function() {
-	// validate the RegisterForm form when it is submitted
-	$(&quot;#RegisterForm&quot;).validate( {
-	    rules: {
-            username: {
-                required: true,
-				rangeLength: [6, 20]
-			},
-			nickname: {
-			    required: true
-			},
-	        password: {
-				required: true,
-				rangeLength: [6, 20]
-			},
-			confirm_password: {
-				required: true,
-				rangeLength: [6, 20]
-				//equalTo: &quot;#password&quot;
-			},
-			email: {
-				required: true,
-				email: true
-			},
-			agreement : 'required'
-	    },
-	    messages: {
-			confirm_password: {
-				equalTo: &quot;Please enter the same password as above&quot;
-			},
-			agreement: &quot;Check it before process&quot;
-		}
-    } );
-    
-    $('#username').blur( function() {
-        var username = $('#username').val();
-        if (username.length &lt; 6 || username.length &gt; 20) {
-            $('#error_username').html('username should be 6-20 chars.');
-            return false;
-        }
-        
-        $.get('/ajax/validate_username', { 'username': username }, function(data) {
-            if (data == 'OK') {
-                $('#error_username').css( { color: 'green' } );
-                $('#error_username').html('OK');
-            } else {
-                var error;
-                switch (data) {
-                    case 'HAS_BLANK' :
-                        error = &quot;don't put blank in your username.&quot;;
-                        break;
-                    case 'HAS_SPECAIL_CHAR' :
-                        error = &quot;only A-Z, a-z, 0-9, -, _ is allowed.&quot;;
-                        break;
-                    case 'HAS_RESERVED' :
-                        error = &quot;this username is reserved.&quot;;
-                        break;
-                    case 'DBIC_UNIQUE'  :
-                        error = &quot;This username is used by another one.&quot;;
-                        break;
-                    default : 
-                        error = &quot;Unkown&quot;;
-                }
-                $('#error_username').html(error);
-            }
-        } );
-    } );
-} );
-
-&lt;/script&gt;
-
-&lt;style type=&quot;text/css&quot;&gt;
-#RegisterForm { margin-left: 15%; margin-right: 15%; }
-&lt;/style&gt;
-
-[% FILTER fillinform fdat =&gt; c.req.params %]
-&lt;form class=&quot;valid&quot; method='post' id=&quot;RegisterForm&quot;&gt;
-&lt;fieldset&gt;
-    &lt;legend&gt;[% c.loc(&quot;Register&quot;) %]&lt;/legend&gt;
-	&lt;p&gt;
-	    &lt;label for=&quot;username&quot;&gt;[% c.loc('Username') %]&lt;/label&gt;
-	    &lt;input type='text' name='username' id='username' /&gt;
-	
-	&lt;label class=&quot;error&quot; id='error_username'&gt;
-	[% IF c.form.error('username') %]
-	
-	    [% IF c.form.error('username', 'HAS_BLANK') %]
-	    don't put blank in your username.
-	    [% ELSIF c.form.error('username', 'HAS_SPECAIL_CHAR') %]
-	    only A-Z, a-z, 0-9, - is allowed.
-	    [% ELSIF c.form.error('username', 'HAS_RESERVED') %]
-	    this username is reserved.
-	    [% ELSIF c.form.error('username', 'DBIC_UNIQUE') %]
-	    This username is used by another one.
-	    [% ELSE %]
-	    username should be 6-20 chars.
-	    [% END %]
-	[% END %]
-	&lt;/label&gt;
-	
-	&lt;/p&gt;
-	
-	&lt;p&gt;
-        &lt;label id=&quot;nickname&quot;&gt;[% c.loc('Nickname') %]&lt;/label&gt;
-        &lt;input type='text' name='nickname' id='nickname' /&gt;
-    &lt;/p&gt;
-    
-    &lt;p&gt;
-	    &lt;label id=&quot;password&quot;&gt;[% c.loc('Password') %]&lt;/label&gt;
-	    &lt;input type='password' id='password' name='password' /&gt;
-	    [% IF c.form.error('password') %]&lt;label class=&quot;error&quot;&gt;password should be 6-20&lt;/label&gt;[% END %]
-	&lt;/p&gt;
-	
-	&lt;p&gt;
-	    &lt;label id=&quot;confirm_password&quot;&gt;[% c.loc('Confirm Password') %]&lt;/label&gt;
-	    &lt;input type='password' name='confirm_password' id=&quot;confirm_password&quot; /&gt;
-	    [% IF c.form.error('passwords') %]&lt;label class=&quot;error&quot;&gt;Confirm password is not the same as password&lt;/label&gt;[% END %]
-	&lt;/p&gt;
-	
-	&lt;p&gt;
-	    &lt;label id=&quot;email&quot;&gt;[% c.loc(&quot;Email&quot;) %]&lt;/label&gt;
-	    &lt;input type='text' name='email' id=&quot;email&quot; /&gt;
-	[% IF c.form.error('email') %]
-	&lt;label class=&quot;error&quot;&gt;
-	    [% IF c.form.error('email', 'DBIC_UNIQUE') %]
-	    This email is used by another one.
-	    [% ELSE %]
-	    you should spec a correct email.
-	    [% END %]
-	&lt;/label&gt;
-	[% END %]
-	&lt;/p&gt;
-	
-	&lt;p&gt;
-	    &lt;input type=&quot;checkbox&quot; class=&quot;checkbox&quot; name=&quot;agreement&quot; id=&quot;agreement&quot; /&gt;
-	    &lt;label for=&quot;agreement&quot; class=&quot;other&quot;&gt;I have read and agree to the &lt;a href=&quot;/info/tos&quot;&gt;Terms of Service&lt;/a&gt; and &lt;a href=&quot;/info/privacy&quot;&gt;Privacy Statement&lt;/a&gt;.&lt;/span&gt;&lt;/label&gt;
-	&lt;/p&gt;
-	
-	&lt;iframe src=&quot;/info/tos?format=raw&quot; scrolling=&quot;auto&quot; frameborder='0' marginheight=&quot;0&quot; marginwidth=&quot;0&quot; width='400' height='100' id=&quot;rule_iframe&quot; style=&quot;border: solid #7F9DB9 1px; margin-left: 10px;&quot; &gt;&lt;/iframe&gt;
-	
-	&lt;p&gt;&lt;input class=&quot;submit&quot; type='submit' /&gt;&lt;/p&gt;
-	
-&lt;/fieldset&gt;
-&lt;/form&gt;
+[% USE FillInForm %]
+
+[% c.load_once(&quot;jquery/validate.js&quot;) %]
+[% IF lang != 'en' %]
+[% c.load_once(&quot;jquery/validate/messages_${lang}.js&quot;) %]
+[% END %]
+[% c.load_once(&quot;form.css&quot;) %]
+
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+$().ready(function() {
+	// validate the RegisterForm form when it is submitted
+	$(&quot;#RegisterForm&quot;).validate( {
+	    rules: {
+            username: {
+                required: true,
+				rangeLength: [6, 20]
+			},
+			nickname: {
+			    required: true
+			},
+	        password: {
+				required: true,
+				rangeLength: [6, 20]
+			},
+			confirm_password: {
+				required: true,
+				rangeLength: [6, 20]
+				//equalTo: &quot;#password&quot;
+			},
+			email: {
+				required: true,
+				email: true
+			},
+			agreement : 'required'
+	    },
+	    messages: {
+			confirm_password: {
+				equalTo: &quot;Please enter the same password as above&quot;
+			},
+			agreement: &quot;Check it before process&quot;
+		}
+    } );
+    
+    $('#username').blur( function() {
+        var username = $('#username').val();
+        if (username.length &lt; 6 || username.length &gt; 20) {
+            $('#error_username').html('username should be 6-20 chars.');
+            return false;
+        }
+        
+        $.get('/ajax/validate_username', { 'username': username }, function(data) {
+            if (data == 'OK') {
+                $('#error_username').css( { color: 'green' } );
+                $('#error_username').html('OK');
+            } else {
+                var error;
+                switch (data) {
+                    case 'HAS_BLANK' :
+                        error = &quot;don't put blank in your username.&quot;;
+                        break;
+                    case 'HAS_SPECAIL_CHAR' :
+                        error = &quot;only A-Z, a-z, 0-9, -, _ is allowed.&quot;;
+                        break;
+                    case 'HAS_RESERVED' :
+                        error = &quot;this username is reserved.&quot;;
+                        break;
+                    case 'DBIC_UNIQUE'  :
+                        error = &quot;This username is used by another one.&quot;;
+                        break;
+                    default : 
+                        error = &quot;Unkown&quot;;
+                }
+                $('#error_username').html(error);
+            }
+        } );
+    } );
+} );
+
+&lt;/script&gt;
+
+&lt;style type=&quot;text/css&quot;&gt;
+#RegisterForm { margin-left: 15%; margin-right: 15%; }
+&lt;/style&gt;
+
+[% FILTER fillinform fdat =&gt; c.req.params %]
+&lt;form class=&quot;valid&quot; method='post' id=&quot;RegisterForm&quot;&gt;
+&lt;fieldset&gt;
+    &lt;legend&gt;[% c.loc(&quot;Register&quot;) %]&lt;/legend&gt;
+	&lt;p&gt;
+	    &lt;label for=&quot;username&quot;&gt;[% c.loc('Username') %]&lt;/label&gt;
+	    &lt;input type='text' name='username' id='username' /&gt;
+	
+	&lt;label class=&quot;error&quot; id='error_username'&gt;
+	[% IF c.form.error('username') %]
+	
+	    [% IF c.form.error('username', 'HAS_BLANK') %]
+	    don't put blank in your username.
+	    [% ELSIF c.form.error('username', 'HAS_SPECAIL_CHAR') %]
+	    only A-Z, a-z, 0-9, - is allowed.
+	    [% ELSIF c.form.error('username', 'HAS_RESERVED') %]
+	    this username is reserved.
+	    [% ELSIF c.form.error('username', 'DBIC_UNIQUE') %]
+	    This username is used by another one.
+	    [% ELSE %]
+	    username should be 6-20 chars.
+	    [% END %]
+	[% END %]
+	&lt;/label&gt;
+	
+	&lt;/p&gt;
+	
+	&lt;p&gt;
+        &lt;label id=&quot;nickname&quot;&gt;[% c.loc('Nickname') %]&lt;/label&gt;
+        &lt;input type='text' name='nickname' id='nickname' /&gt;
+    &lt;/p&gt;
+    
+    &lt;p&gt;
+	    &lt;label id=&quot;password&quot;&gt;[% c.loc('Password') %]&lt;/label&gt;
+	    &lt;input type='password' id='password' name='password' /&gt;
+	    [% IF c.form.error('password') %]&lt;label class=&quot;error&quot;&gt;password should be 6-20&lt;/label&gt;[% END %]
+	&lt;/p&gt;
+	
+	&lt;p&gt;
+	    &lt;label id=&quot;confirm_password&quot;&gt;[% c.loc('Confirm Password') %]&lt;/label&gt;
+	    &lt;input type='password' name='confirm_password' id=&quot;confirm_password&quot; /&gt;
+	    [% IF c.form.error('passwords') %]&lt;label class=&quot;error&quot;&gt;Confirm password is not the same as password&lt;/label&gt;[% END %]
+	&lt;/p&gt;
+	
+	&lt;p&gt;
+	    &lt;label id=&quot;email&quot;&gt;[% c.loc(&quot;Email&quot;) %]&lt;/label&gt;
+	    &lt;input type='text' name='email' id=&quot;email&quot; /&gt;
+	[% IF c.form.error('email') %]
+	&lt;label class=&quot;error&quot;&gt;
+	    [% IF c.form.error('email', 'DBIC_UNIQUE') %]
+	    This email is used by another one.
+	    [% ELSE %]
+	    you should spec a correct email.
+	    [% END %]
+	&lt;/label&gt;
+	[% END %]
+	&lt;/p&gt;
+	
+	&lt;p&gt;
+	    &lt;input type=&quot;checkbox&quot; class=&quot;checkbox&quot; name=&quot;agreement&quot; id=&quot;agreement&quot; /&gt;
+	    &lt;label for=&quot;agreement&quot; class=&quot;other&quot;&gt;I have read and agree to the &lt;a href=&quot;/info/tos&quot;&gt;Terms of Service&lt;/a&gt; and &lt;a href=&quot;/info/privacy&quot;&gt;Privacy Statement&lt;/a&gt;.&lt;/span&gt;&lt;/label&gt;
+	&lt;/p&gt;
+	
+	&lt;iframe src=&quot;/info/tos?format=raw&quot; scrolling=&quot;auto&quot; frameborder='0' marginheight=&quot;0&quot; marginwidth=&quot;0&quot; width='400' height='100' id=&quot;rule_iframe&quot; style=&quot;border: solid #7F9DB9 1px; margin-left: 10px;&quot; &gt;&lt;/iframe&gt;
+	
+	&lt;p&gt;&lt;input class=&quot;submit&quot; type='submit' /&gt;&lt;/p&gt;
+	
+&lt;/fieldset&gt;
+&lt;/form&gt;
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/register/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,64 +1,64 @@
-[% USE FillInForm %]
-[% PROCESS sub/date.html %]
-[% title = c.loc('Search') %]
-
-[% FILTER fillinform fdat =&gt; fdat || c.req.params %]
-&lt;div class='one'&gt;
-&lt;form method='GET'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;
-        &lt;td colspan='2' class='title'&gt;Search on [% forum.name %]&lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='misc1'&gt;
-        &lt;td align='right'&gt;Title contains: &lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' /&gt;
-            [% IF error_title %]&lt;div class='highlight'&gt;[% error_title %]&lt;/div&gt;[% END %]
-            &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='misc2'&gt;
-        &lt;td align='right'&gt;Author is:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='author' /&gt; username please
-            [% IF error_author %]&lt;div class='highlight'&gt;[% error_author %]&lt;/div&gt;[% END %]
-            &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='misc1'&gt;
-        &lt;td align='right'&gt;Date&lt;/td&gt;&lt;td&gt;
-            &lt;select name='date'&gt;
-                &lt;option value='0'&gt;Whenever&lt;/option&gt;
-                &lt;option value='2'&gt;Last 2 days&lt;/option&gt;
-                &lt;option value='7'&gt;Last 7 days&lt;/option&gt;
-                &lt;option value='30'&gt;Last 30 days&lt;/option&gt;
-                &lt;option value='999'&gt;More than 30 days&lt;/option&gt;
-            &lt;/select&gt;
-        &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='misc2'&gt;
-        &lt;td align='right'&gt;Sort By&lt;/td&gt;&lt;td&gt;
-            &lt;input type='radio' name='order_by' value='last_update_date' checked='checked' /&gt; Last Update
-            &lt;input type='radio' name='order_by' value='post_on' /&gt; Post On
-        &lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr class='misc1'&gt;
-        &lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;
-    &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-[% END %]
-
-&lt;div style='clear:both'&gt;&lt;/div&gt;
-
-&lt;div class='one'&gt;
-	&lt;table align='center'&gt;
-[% IF topics.size == 0 %]
-&lt;tr&gt;&lt;td class='misc1'&gt;No Result. please try another.&lt;/td&gt;&lt;/tr&gt;
-[% ELSE %]
-		&lt;tr class='title'&gt;&lt;td&gt;Title&lt;/td&gt;&lt;td&gt;Author&lt;/td&gt;&lt;td width='200'&gt;Date&lt;/td&gt;&lt;/tr&gt;
-		[% FOREACH t IN topics %]
-		&lt;tr class='misc[% IF loop.count MOD 2; '1'; ELSE; '2'; END; %]'&gt;
-			&lt;td&gt;&lt;a href='/forum/[% t.forum_id %]/topic/[% t.topic_id %]'&gt;[% t.title %]&lt;/a&gt;&lt;/td&gt;
-			&lt;td&gt;&lt;a href='/u/[% t.author.username %]'&gt;[% t.author.nickname %]&lt;/a&gt;&lt;/td&gt;
-			&lt;td&gt;&lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-		[% END %]
-[% END %]
-	&lt;/table&gt;
+[% USE FillInForm %]
+[% PROCESS sub/date.html %]
+[% title = c.loc('Search') %]
+
+[% FILTER fillinform fdat =&gt; fdat || c.req.params %]
+&lt;div class='one'&gt;
+&lt;form method='GET'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;
+        &lt;td colspan='2' class='title'&gt;Search on [% forum.name %]&lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='misc1'&gt;
+        &lt;td align='right'&gt;Title contains: &lt;/td&gt;&lt;td&gt;&lt;input type='text' name='title' /&gt;
+            [% IF error_title %]&lt;div class='highlight'&gt;[% error_title %]&lt;/div&gt;[% END %]
+            &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='misc2'&gt;
+        &lt;td align='right'&gt;Author is:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='author' /&gt; username please
+            [% IF error_author %]&lt;div class='highlight'&gt;[% error_author %]&lt;/div&gt;[% END %]
+            &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='misc1'&gt;
+        &lt;td align='right'&gt;Date&lt;/td&gt;&lt;td&gt;
+            &lt;select name='date'&gt;
+                &lt;option value='0'&gt;Whenever&lt;/option&gt;
+                &lt;option value='2'&gt;Last 2 days&lt;/option&gt;
+                &lt;option value='7'&gt;Last 7 days&lt;/option&gt;
+                &lt;option value='30'&gt;Last 30 days&lt;/option&gt;
+                &lt;option value='999'&gt;More than 30 days&lt;/option&gt;
+            &lt;/select&gt;
+        &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='misc2'&gt;
+        &lt;td align='right'&gt;Sort By&lt;/td&gt;&lt;td&gt;
+            &lt;input type='radio' name='order_by' value='last_update_date' checked='checked' /&gt; Last Update
+            &lt;input type='radio' name='order_by' value='post_on' /&gt; Post On
+        &lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr class='misc1'&gt;
+        &lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;
+    &lt;/tr&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+[% END %]
+
+&lt;div style='clear:both'&gt;&lt;/div&gt;
+
+&lt;div class='one'&gt;
+	&lt;table align='center'&gt;
+[% IF topics.size == 0 %]
+&lt;tr&gt;&lt;td class='misc1'&gt;No Result. please try another.&lt;/td&gt;&lt;/tr&gt;
+[% ELSE %]
+		&lt;tr class='title'&gt;&lt;td&gt;Title&lt;/td&gt;&lt;td&gt;Author&lt;/td&gt;&lt;td width='200'&gt;Date&lt;/td&gt;&lt;/tr&gt;
+		[% FOREACH t IN topics %]
+		&lt;tr class='misc[% IF loop.count MOD 2; '1'; ELSE; '2'; END; %]'&gt;
+			&lt;td&gt;&lt;a href='/forum/[% t.forum_id %]/topic/[% t.topic_id %]'&gt;[% t.title %]&lt;/a&gt;&lt;/td&gt;
+			&lt;td&gt;&lt;a href='/u/[% t.author.username %]'&gt;[% t.author.nickname %]&lt;/a&gt;&lt;/td&gt;
+			&lt;td&gt;&lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
+		&lt;/tr&gt;
+		[% END %]
+[% END %]
+	&lt;/table&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/search/forum.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,49 +1,49 @@
-[% title = c.loc('Search') %]
-
-&lt;script type=&quot;text/javascript&quot;&gt;
-    google.load(&quot;jqueryui&quot;, &quot;1.5.3&quot;);
-&lt;/script&gt;
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='search_tabs' class='tabs'&gt;
-    &lt;ul&gt;
-        &lt;li&gt;&lt;a href='#forum'&gt;&lt;span&gt;Search Forum&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#topic'&gt;&lt;span&gt;Search Topic&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#user'&gt;&lt;span&gt;Search User&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-
-    &lt;div id='forum'&gt;
-        &lt;form action='/search/forum' method='get'&gt;
-        &lt;table border='0'&gt;
-            &lt;tr&gt;&lt;td&gt;Forum Name&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='forum_name' /&gt;&lt;/td&gt;&lt;/tr&gt;
-            &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-        &lt;/table&gt;
-        &lt;/form&gt;
-    &lt;/div&gt;
-    
-    &lt;div id='topic'&gt;
-        &lt;form action='/search/topic' method='get'&gt;
-        &lt;table border='0'&gt;
-            &lt;tr&gt;&lt;td&gt;Topic Title&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='topic_title' /&gt;&lt;/td&gt;&lt;/tr&gt;
-            &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-        &lt;/table&gt;
-        &lt;/form&gt;
-    &lt;/div&gt;
-    
-    &lt;div id='user'&gt;
-        &lt;form action='/search/user' method='get'&gt;
-        &lt;table border='0'&gt;
-            &lt;tr&gt;&lt;td&gt;User Name&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='user_name' /&gt;&lt;/td&gt;&lt;/tr&gt;
-            &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-        &lt;/table&gt;
-        &lt;/form&gt;
-    &lt;/div&gt;
-
-&lt;/div&gt;
-
-&lt;script&gt;
-    $(function() {
-        $('#search_tabs &gt; ul').tabs();
-        $('#search_tabs &gt; ul').tabs('select', [% IF c.req.path.match('/topic(\/|$)') %]1[% ELSIF c.req.path.match('/user(\/|$)') %]2[% ELSE %]0[% END %]);
-    });
+[% title = c.loc('Search') %]
+
+&lt;script type=&quot;text/javascript&quot;&gt;
+    google.load(&quot;jqueryui&quot;, &quot;1.5.3&quot;);
+&lt;/script&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='search_tabs' class='tabs'&gt;
+    &lt;ul&gt;
+        &lt;li&gt;&lt;a href='#forum'&gt;&lt;span&gt;Search Forum&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#topic'&gt;&lt;span&gt;Search Topic&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#user'&gt;&lt;span&gt;Search User&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+
+    &lt;div id='forum'&gt;
+        &lt;form action='/search/forum' method='get'&gt;
+        &lt;table border='0'&gt;
+            &lt;tr&gt;&lt;td&gt;Forum Name&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='forum_name' /&gt;&lt;/td&gt;&lt;/tr&gt;
+            &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+        &lt;/table&gt;
+        &lt;/form&gt;
+    &lt;/div&gt;
+    
+    &lt;div id='topic'&gt;
+        &lt;form action='/search/topic' method='get'&gt;
+        &lt;table border='0'&gt;
+            &lt;tr&gt;&lt;td&gt;Topic Title&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='topic_title' /&gt;&lt;/td&gt;&lt;/tr&gt;
+            &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+        &lt;/table&gt;
+        &lt;/form&gt;
+    &lt;/div&gt;
+    
+    &lt;div id='user'&gt;
+        &lt;form action='/search/user' method='get'&gt;
+        &lt;table border='0'&gt;
+            &lt;tr&gt;&lt;td&gt;User Name&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='user_name' /&gt;&lt;/td&gt;&lt;/tr&gt;
+            &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+        &lt;/table&gt;
+        &lt;/form&gt;
+    &lt;/div&gt;
+
+&lt;/div&gt;
+
+&lt;script&gt;
+    $(function() {
+        $('#search_tabs &gt; ul').tabs();
+        $('#search_tabs &gt; ul').tabs('select', [% IF c.req.path.match('/topic(\/|$)') %]1[% ELSIF c.req.path.match('/user(\/|$)') %]2[% ELSE %]0[% END %]);
+    });
 &lt;/script&gt;
\ No newline at end of file</diff>
      <filename>templates/search/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,38 +1,38 @@
-[% USE FillInForm %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-[% c.load_once(&quot;jquery/validate.js&quot;) %]
-
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Settings&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-[% FILTER fillinform fdat =&gt; settings || c.req.params %]
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	[% IF thanks %]
-    &lt;tr class='misc2'&gt;&lt;td colspan='2' align=&quot;center&quot;&gt;&lt;strong&gt;&lt;span class='highlight'&gt;Settings OK&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	&lt;tr class='misc1'&gt;
-	    &lt;td width='40%' align='right'&gt;&lt;label for='send_starred_notification'&gt;Send Update Notification for &lt;a href='/my/starred'&gt;&lt;img src='[% c.config.dir.images %]/site/t/star_on.gif' align='absmiddle' /&gt; [% c.loc(&quot;My Starred Items&quot;) %]&lt;/a&gt;:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='radio' name='send_starred_notification' id='send_starred_notification' checked='checked' value='Y' /&gt;Yes &lt;input type='radio' name='send_starred_notification' id='send_starred_notification' value='N' /&gt;No&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;
-	    &lt;td align='right'&gt;&lt;label for='show_email_public'&gt;Show My Email in &lt;a href='/u/[% c.user.username %]'&gt;My Profile Page&lt;/a&gt;:&lt;/label&gt;&lt;/td&gt;
-	    &lt;td&gt;&lt;input type='radio' name='show_email_public' id='show_email_public' checked='checked' value='Y' /&gt;Yes &lt;input type='radio' name='show_email_public' id='show_email_public' value='N' /&gt;No&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-[% END %]
-
-    &lt;/div&gt;
+[% USE FillInForm %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+[% c.load_once(&quot;jquery/validate.js&quot;) %]
+
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Settings&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+[% FILTER fillinform fdat =&gt; settings || c.req.params %]
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	[% IF thanks %]
+    &lt;tr class='misc2'&gt;&lt;td colspan='2' align=&quot;center&quot;&gt;&lt;strong&gt;&lt;span class='highlight'&gt;Settings OK&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	&lt;tr class='misc1'&gt;
+	    &lt;td width='40%' align='right'&gt;&lt;label for='send_starred_notification'&gt;Send Update Notification for &lt;a href='/my/starred'&gt;&lt;img src='[% c.config.dir.images %]/site/t/star_on.gif' align='absmiddle' /&gt; [% c.loc(&quot;My Starred Items&quot;) %]&lt;/a&gt;:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='radio' name='send_starred_notification' id='send_starred_notification' checked='checked' value='Y' /&gt;Yes &lt;input type='radio' name='send_starred_notification' id='send_starred_notification' value='N' /&gt;No&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;
+	    &lt;td align='right'&gt;&lt;label for='show_email_public'&gt;Show My Email in &lt;a href='/u/[% c.user.username %]'&gt;My Profile Page&lt;/a&gt;:&lt;/label&gt;&lt;/td&gt;
+	    &lt;td&gt;&lt;input type='radio' name='show_email_public' id='show_email_public' checked='checked' value='Y' /&gt;Yes &lt;input type='radio' name='show_email_public' id='show_email_public' value='N' /&gt;No&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+[% END %]
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/settings/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,47 +1,47 @@
-[% IF is_rss_template; # MUST no linebreak before &lt;?xml %]
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-[% END %]
-
-[% IF (matches = error.msg.match('ERROR_(\w+)'));
-    SWITCH matches.0;
-    CASE 'PERMISSION_DENIED';
-    error.msg = c.loc(&quot;Permission Denied.&quot;);
-    CASE 'USER_NON_EXSIT';
-    error.msg = c.loc(&quot;User non-exist&quot;);
-    CASE 'USER_BLOCKED';
-    error.msg = c.loc(&quot;User is blocked&quot;);
-    CASE 'ACCOUNT_CLOSED_STATUS';
-    error.msg = c.loc(&quot;Account is banned or blocked or terminated.&quot;);
-    CASE 'USER_PENDING';
-    error.msg = c.loc(&quot;Your status is pending&quot;);
-    CASE 'USER_REJECTED';
-    error.msg = c.loc(&quot;Your status is rejected&quot;);
-    CASE 'WRONG_VISIT';
-    error.msg = c.loc(&quot;URL WRONG HERE&quot;);
-    CASE 'CLOSED';
-    error.msg = c.loc(&quot;IT'S CLOSED&quot;);
-    CASE 'ILLEGAL_REQUEST';
-    error.msg = c.loc(&quot;Illegal Request.&quot;);
-    CASE '404';
-    error.msg = c.loc(&quot;The requested URL is not found on this server.&quot;);
-    END;
-   END %]
-
-[% IF is_rss_template %]
-&lt;rss version=&quot;2.0&quot;&gt;
-&lt;channel&gt;
-&lt;title&gt;&lt;![CDATA[[% c.config.name %] : Error]]&gt;&lt;/title&gt;
-&lt;link&gt;[% c.req.base %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% error.msg %]]]&gt;&lt;/description&gt;
-&lt;/channel&gt;
-&lt;/rss&gt;
-[% ELSE %]
-&lt;style&gt;
-	A:visited{text-decoration: underline}
-	A:link{text-decoration: underline;}
-&lt;/style&gt;
-&lt;div class='message'&gt;
-    &lt;div class='highlight'&gt;[% error.msg %]&lt;/div&gt;
-    &lt;p&gt;[% c.loc(&quot;Please click &lt;a href='javascript:history.back()'&gt;here&lt;/a&gt; to go back.&quot;) %]&lt;/p&gt;
-&lt;/div&gt;
+[% IF is_rss_template; # MUST no linebreak before &lt;?xml %]
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+[% END %]
+
+[% IF (matches = error.msg.match('ERROR_(\w+)'));
+    SWITCH matches.0;
+    CASE 'PERMISSION_DENIED';
+    error.msg = c.loc(&quot;Permission Denied.&quot;);
+    CASE 'USER_NON_EXSIT';
+    error.msg = c.loc(&quot;User non-exist&quot;);
+    CASE 'USER_BLOCKED';
+    error.msg = c.loc(&quot;User is blocked&quot;);
+    CASE 'ACCOUNT_CLOSED_STATUS';
+    error.msg = c.loc(&quot;Account is banned or blocked or terminated.&quot;);
+    CASE 'USER_PENDING';
+    error.msg = c.loc(&quot;Your status is pending&quot;);
+    CASE 'USER_REJECTED';
+    error.msg = c.loc(&quot;Your status is rejected&quot;);
+    CASE 'WRONG_VISIT';
+    error.msg = c.loc(&quot;URL WRONG HERE&quot;);
+    CASE 'CLOSED';
+    error.msg = c.loc(&quot;IT'S CLOSED&quot;);
+    CASE 'ILLEGAL_REQUEST';
+    error.msg = c.loc(&quot;Illegal Request.&quot;);
+    CASE '404';
+    error.msg = c.loc(&quot;The requested URL is not found on this server.&quot;);
+    END;
+   END %]
+
+[% IF is_rss_template %]
+&lt;rss version=&quot;2.0&quot;&gt;
+&lt;channel&gt;
+&lt;title&gt;&lt;![CDATA[[% c.config.name %] : Error]]&gt;&lt;/title&gt;
+&lt;link&gt;[% c.req.base %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% error.msg %]]]&gt;&lt;/description&gt;
+&lt;/channel&gt;
+&lt;/rss&gt;
+[% ELSE %]
+&lt;style&gt;
+	A:visited{text-decoration: underline}
+	A:link{text-decoration: underline;}
+&lt;/style&gt;
+&lt;div class='message'&gt;
+    &lt;div class='highlight'&gt;[% error.msg %]&lt;/div&gt;
+    &lt;p&gt;[% c.loc(&quot;Please click &lt;a href='javascript:history.back()'&gt;here&lt;/a&gt; to go back.&quot;) %]&lt;/p&gt;
+&lt;/div&gt;
 [% END %]
\ No newline at end of file</diff>
      <filename>templates/simple/error.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,14 @@
-&lt;style&gt;
-	A:visited{text-decoration: underline}
-	A:link{text-decoration: underline;}
-&lt;/style&gt;
-&lt;div class='message'&gt;
-    [% message.msg %]
-	[% IF message.url %]
-	    &lt;br&gt;&lt;br&gt;
-		(&lt;a href=&quot;[% message.url %]&quot;&gt;&lt;u&gt;Please click here[% IF NOT message.stay_in_page %] if the page doesn't reload in [% message.refresh_time || 4 %] seconds[% ELSE %] to countinue[% END %]!&lt;/u&gt;&lt;/a&gt;)
-	[% END %]
-&lt;/div&gt;
-[% IF message.url AND NOT message.stay_in_page %]
-&lt;meta http-equiv=&quot;refresh&quot; content=&quot;[% message.refresh_time || 4 %]; url=[% message.url %]&quot;&gt;
-[% END %]
+&lt;style&gt;
+	A:visited{text-decoration: underline}
+	A:link{text-decoration: underline;}
+&lt;/style&gt;
+&lt;div class='message'&gt;
+    [% message.msg %]
+	[% IF message.url %]
+	    &lt;br&gt;&lt;br&gt;
+		(&lt;a href=&quot;[% message.url %]&quot;&gt;&lt;u&gt;Please click here[% IF NOT message.stay_in_page %] if the page doesn't reload in [% message.refresh_time || 4 %] seconds[% ELSE %] to countinue[% END %]!&lt;/u&gt;&lt;/a&gt;)
+	[% END %]
+&lt;/div&gt;
+[% IF message.url AND NOT message.stay_in_page %]
+&lt;meta http-equiv=&quot;refresh&quot; content=&quot;[% message.refresh_time || 4 %]; url=[% message.url %]&quot;&gt;
+[% END %]</diff>
      <filename>templates/simple/message.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,48 +1,48 @@
-[% USE date %]
-[% PROCESS sub/date.html %]
-
-[% title = 'Online' %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tr class=&quot;title&quot; align='center'&gt;
-	&lt;td width='100'&gt;[% c.loc(&quot;User&quot;) %]&lt;/td&gt;
-	&lt;td&gt;[% c.loc('Path') %]&lt;/td&gt;
-	&lt;td width='120'&gt;[% c.loc('Visit Time') %]&lt;/td&gt;
-	&lt;td width='120'&gt;[% c.loc('Active Time') %]&lt;/td&gt;
-	&lt;/tr&gt;
-[% FOREACH r IN results %]
-
-    [% IF r == 'SELF';
-          r = {
-            user_id =&gt; c.user_exists ? c.user_id : 0,
-            user    =&gt; c.user_exists ? c.user : undef,
-            sessionid =&gt; c.sessionid,
-            path    =&gt; c.req.path,
-            title   =&gt; title || 'unknown',
-            start_time =&gt; date.now,
-            last_time  =&gt; date.now
-          };
-       END; %]
-
-	&lt;tr align='center'&gt;
-	&lt;td class='forum1'&gt;
-	    [% IF r.user %]
-	    &lt;a href='/u/[% r.user.username %]'&gt;[% r.user.nickname %]&lt;/a&gt;
-	    [% ELSE %]
-	     Guest
-	    [% END %]
-	&lt;/td&gt;
-	&lt;td class='forum2'&gt;
-		&lt;a href='/[% r.path %]'&gt;[% r.title || r.path %]&lt;/a&gt;
-	&lt;/td&gt;
-	&lt;td class='forum1'&gt;
-	    &lt;span class='date'&gt;[% date_format(r.start_time) %]&lt;/span&gt;
-	&lt;/td&gt;
-	&lt;td class='forum2'&gt;
-	    &lt;span class='date'&gt;[% date_format(r.last_time) %]&lt;/span&gt;
-	&lt;/td&gt;
-	&lt;/tr&gt;
-[% END %]
-&lt;/table&gt;
-&lt;/div&gt;
+[% USE date %]
+[% PROCESS sub/date.html %]
+
+[% title = 'Online' %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tr class=&quot;title&quot; align='center'&gt;
+	&lt;td width='100'&gt;[% c.loc(&quot;User&quot;) %]&lt;/td&gt;
+	&lt;td&gt;[% c.loc('Path') %]&lt;/td&gt;
+	&lt;td width='120'&gt;[% c.loc('Visit Time') %]&lt;/td&gt;
+	&lt;td width='120'&gt;[% c.loc('Active Time') %]&lt;/td&gt;
+	&lt;/tr&gt;
+[% FOREACH r IN results %]
+
+    [% IF r == 'SELF';
+          r = {
+            user_id =&gt; c.user_exists ? c.user_id : 0,
+            user    =&gt; c.user_exists ? c.user : undef,
+            sessionid =&gt; c.sessionid,
+            path    =&gt; c.req.path,
+            title   =&gt; title || 'unknown',
+            start_time =&gt; date.now,
+            last_time  =&gt; date.now
+          };
+       END; %]
+
+	&lt;tr align='center'&gt;
+	&lt;td class='forum1'&gt;
+	    [% IF r.user %]
+	    &lt;a href='/u/[% r.user.username %]'&gt;[% r.user.nickname %]&lt;/a&gt;
+	    [% ELSE %]
+	     Guest
+	    [% END %]
+	&lt;/td&gt;
+	&lt;td class='forum2'&gt;
+		&lt;a href='/[% r.path %]'&gt;[% r.title || r.path %]&lt;/a&gt;
+	&lt;/td&gt;
+	&lt;td class='forum1'&gt;
+	    &lt;span class='date'&gt;[% date_format(r.start_time) %]&lt;/span&gt;
+	&lt;/td&gt;
+	&lt;td class='forum2'&gt;
+	    &lt;span class='date'&gt;[% date_format(r.last_time) %]&lt;/span&gt;
+	&lt;/td&gt;
+	&lt;/tr&gt;
+[% END %]
+&lt;/table&gt;
+&lt;/div&gt;</diff>
      <filename>templates/site/online.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,24 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-[% USE date %]
-[% title = c.loc('Popular')  _ ' : ' _ c.config.name %]
-&lt;rss version=&quot;2.0&quot;&gt;
-&lt;channel&gt;
-&lt;title&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% c.req.base _ 'site/popular/' _ type %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/description&gt;
-&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
-&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
-&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
-
-[% FOREACH obj IN objects %]
-&lt;item&gt;
-&lt;title&gt;&lt;![CDATA[[% obj.title %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% base _ obj.url %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% obj.text %]]]&gt;&lt;/description&gt;
-&lt;guid isPermaLink=&quot;true&quot;&gt;[% base _ obj.url %]&lt;/guid&gt;
-&lt;pubDate&gt;[% date.format(obj.last_update, format =&gt;'%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
-&lt;/item&gt;
-[% END %]
-
-&lt;/channel&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+[% USE date %]
+[% title = c.loc('Popular')  _ ' : ' _ c.config.name %]
+&lt;rss version=&quot;2.0&quot;&gt;
+&lt;channel&gt;
+&lt;title&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% c.req.base _ 'site/popular/' _ type %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/description&gt;
+&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
+&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
+&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
+
+[% FOREACH obj IN objects %]
+&lt;item&gt;
+&lt;title&gt;&lt;![CDATA[[% obj.title %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% base _ obj.url %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% obj.text %]]]&gt;&lt;/description&gt;
+&lt;guid isPermaLink=&quot;true&quot;&gt;[% base _ obj.url %]&lt;/guid&gt;
+&lt;pubDate&gt;[% date.format(obj.last_update, format =&gt;'%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
+&lt;/item&gt;
+[% END %]
+
+&lt;/channel&gt;
 &lt;/rss&gt;
\ No newline at end of file</diff>
      <filename>templates/site/popular.rss.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,86 +1,86 @@
-[% PROCESS sub/date.html %]
-
-[% IF recent_type == 'elite' %]
-[% title = c.loc('Recent Elite Topics') %]
-[% ELSE %]
-[% title = c.loc('Recent Topics') %]
-[% END %]
-
-[% IF recent_type != 'my' %]
-[% RSS_URL = url_prefix _ '/rss' %]
-[% END %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-
-&lt;div id='recent_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        [% IF recent_type == 'my' %]
-        &lt;li&gt;&lt;a href='/u/[% user.username %]'&gt;&lt;span&gt;[% user.nickname %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='/u/[% user.username %]/topics'&gt;&lt;span&gt;[% c.loc('Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/u/[% user.username %]/shared'&gt;&lt;span&gt;[% c.loc('Shared Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% ELSE %]
-        &lt;li[% IF recent_type == 'site' %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/site/recent'&gt;&lt;span&gt;[% c.loc('Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li[% IF recent_type == 'elite' %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/site/recent/elite'&gt;&lt;span&gt;[% c.loc('Recent Elite Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/site/popular'&gt;&lt;span&gt;[% c.loc(&quot;Popular&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/site/members'&gt;&lt;span&gt;[% c.loc('Recent Members') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-&lt;div class='one'&gt;
-&lt;table height='28' align='center'&gt;
-	&lt;tr class=&quot;title&quot; align='center'&gt;
-	&lt;td width='200'&gt;[% c.loc('Forum') %]&lt;/td&gt;
-	&lt;td width='42'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;
-	&lt;td width='*'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
-	[% IF recent_type != 'my' %]
-	&lt;td width='80'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
-	[% END %]
-	&lt;td width='40'&gt;[% c.loc(&quot;Reply&quot;) %]&lt;/td&gt;
-	&lt;td width='40'&gt;[% c.loc(&quot;Hit&quot;) %]&lt;/td&gt;
-	&lt;td width='200'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% FOREACH t IN topics %]
-&lt;div class='multi'&gt;
-&lt;table align='center'&gt;
-	&lt;tr align='center'&gt;
-	&lt;td class='forum2' width='200'&gt;&lt;a href='/forum/[% t.forum.forum_code %]'&gt;[% t.forum.name %]&lt;/a&gt;&lt;/td&gt;
-	&lt;td class='forum1' width='42'&gt;[% IF t.sticky %]&lt;img src='[% c.config.dir.images %]/site/top.gif' /&gt;[% ELSIF t.closed %]&lt;img src='[% c.config.dir.images %]/site/locked.gif' /&gt;[% END %]&lt;/td&gt;
-	&lt;td class='forum2' valign='top' width='*'&gt;
-		&lt;table&gt;
-			&lt;tr&gt;
-			&lt;td align=&quot;left&quot;&gt;
-			    [% IF t.elite %]
-			    &lt;span class='highlight'&gt;[Elite]&lt;/a&gt; 
-			    [% END %]
-			    &lt;a href='/forum/[% t.forum.forum_code %]/topic/[% t.topic_id %]'&gt;&lt;span class='semilight'&gt;[% t.title %]&lt;/span&gt;&lt;/a&gt;
-			&lt;/td&gt;
-			&lt;/tr&gt;
-    	&lt;/table&gt;
-	&lt;/td&gt;
-	[% IF recent_type != 'my' %]
-	&lt;td class='forum1' width='80'&gt;&lt;a href='/u/[% t.author.username %]'&gt;[% t.author.nickname %]&lt;/a&gt;&lt;/td&gt;
-	[% END %]
-	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.total_replies %]&lt;/span&gt;&lt;/td&gt;
-	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.hit %]&lt;/span&gt;&lt;/td&gt;
-	&lt;td class='forum1' width='200' align='right'&gt;&lt;a href='/u/[% t.last_updator.username %]'&gt;[% t.last_updator.nickname %]&lt;/a&gt; | &lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-
-[% IF recent_type != 'my' %]
-&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;[% title %]&quot; href=&quot;[% url_prefix %]/rss&quot; /&gt;
-[% END %]
-
-&lt;div class='none'&gt;
-&lt;table align='center'&gt;
-    &lt;tr&gt;
-        &lt;td&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;
-    &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% PROCESS sub/date.html %]
+
+[% IF recent_type == 'elite' %]
+[% title = c.loc('Recent Elite Topics') %]
+[% ELSE %]
+[% title = c.loc('Recent Topics') %]
+[% END %]
+
+[% IF recent_type != 'my' %]
+[% RSS_URL = url_prefix _ '/rss' %]
+[% END %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+
+&lt;div id='recent_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        [% IF recent_type == 'my' %]
+        &lt;li&gt;&lt;a href='/u/[% user.username %]'&gt;&lt;span&gt;[% user.nickname %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='/u/[% user.username %]/topics'&gt;&lt;span&gt;[% c.loc('Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/u/[% user.username %]/shared'&gt;&lt;span&gt;[% c.loc('Shared Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% ELSE %]
+        &lt;li[% IF recent_type == 'site' %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/site/recent'&gt;&lt;span&gt;[% c.loc('Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li[% IF recent_type == 'elite' %] class=&quot;ui-tabs-selected&quot;[% END %]&gt;&lt;a href='/site/recent/elite'&gt;&lt;span&gt;[% c.loc('Recent Elite Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/site/popular'&gt;&lt;span&gt;[% c.loc(&quot;Popular&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/site/members'&gt;&lt;span&gt;[% c.loc('Recent Members') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+&lt;div class='one'&gt;
+&lt;table height='28' align='center'&gt;
+	&lt;tr class=&quot;title&quot; align='center'&gt;
+	&lt;td width='200'&gt;[% c.loc('Forum') %]&lt;/td&gt;
+	&lt;td width='42'&gt;[% c.loc(&quot;Status&quot;) %]&lt;/td&gt;
+	&lt;td width='*'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
+	[% IF recent_type != 'my' %]
+	&lt;td width='80'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
+	[% END %]
+	&lt;td width='40'&gt;[% c.loc(&quot;Reply&quot;) %]&lt;/td&gt;
+	&lt;td width='40'&gt;[% c.loc(&quot;Hit&quot;) %]&lt;/td&gt;
+	&lt;td width='200'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% FOREACH t IN topics %]
+&lt;div class='multi'&gt;
+&lt;table align='center'&gt;
+	&lt;tr align='center'&gt;
+	&lt;td class='forum2' width='200'&gt;&lt;a href='/forum/[% t.forum.forum_code %]'&gt;[% t.forum.name %]&lt;/a&gt;&lt;/td&gt;
+	&lt;td class='forum1' width='42'&gt;[% IF t.sticky %]&lt;img src='[% c.config.dir.images %]/site/top.gif' /&gt;[% ELSIF t.closed %]&lt;img src='[% c.config.dir.images %]/site/locked.gif' /&gt;[% END %]&lt;/td&gt;
+	&lt;td class='forum2' valign='top' width='*'&gt;
+		&lt;table&gt;
+			&lt;tr&gt;
+			&lt;td align=&quot;left&quot;&gt;
+			    [% IF t.elite %]
+			    &lt;span class='highlight'&gt;[Elite]&lt;/a&gt; 
+			    [% END %]
+			    &lt;a href='/forum/[% t.forum.forum_code %]/topic/[% t.topic_id %]'&gt;&lt;span class='semilight'&gt;[% t.title %]&lt;/span&gt;&lt;/a&gt;
+			&lt;/td&gt;
+			&lt;/tr&gt;
+    	&lt;/table&gt;
+	&lt;/td&gt;
+	[% IF recent_type != 'my' %]
+	&lt;td class='forum1' width='80'&gt;&lt;a href='/u/[% t.author.username %]'&gt;[% t.author.nickname %]&lt;/a&gt;&lt;/td&gt;
+	[% END %]
+	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.total_replies %]&lt;/span&gt;&lt;/td&gt;
+	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.hit %]&lt;/span&gt;&lt;/td&gt;
+	&lt;td class='forum1' width='200' align='right'&gt;&lt;a href='/u/[% t.last_updator.username %]'&gt;[% t.last_updator.nickname %]&lt;/a&gt; | &lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+
+[% IF recent_type != 'my' %]
+&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;[% title %]&quot; href=&quot;[% url_prefix %]/rss&quot; /&gt;
+[% END %]
+
+&lt;div class='none'&gt;
+&lt;table align='center'&gt;
+    &lt;tr&gt;
+        &lt;td&gt;[% INCLUDE 'sub/pager.html' %]&lt;/td&gt;
+    &lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/site/recent.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,29 +1,29 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-[% USE date %]
-[% PROCESS sub/date.html %]
-[% IF recent_type == 'elite' %]
-[% title = c.loc('Recent Elite Topics') %]
-[% ELSE %]
-[% title = c.loc('Recent Topics') %]
-[% END %]
-&lt;rss version=&quot;2.0&quot;&gt;
-&lt;channel&gt;
-&lt;title&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% c.req.base _ url_prefix %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/description&gt;
-&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
-&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
-&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
-
-[% FOREACH t IN topics %]
-&lt;item&gt;
-&lt;title&gt;&lt;![CDATA[[% t.title %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% c.req.base _ 'forum/' _ t.forum_id _ '/topic/' _ t.topic_id %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% t.text %]]]&gt;&lt;/description&gt;
-&lt;guid isPermaLink=&quot;true&quot;&gt;[% forum.forum_url _ '/topic/' _ t.topic_id %]&lt;/guid&gt;
-&lt;pubDate&gt;[% date_format(t.last_update_date, '%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
-&lt;/item&gt;
-[% END %]
-
-&lt;/channel&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+[% USE date %]
+[% PROCESS sub/date.html %]
+[% IF recent_type == 'elite' %]
+[% title = c.loc('Recent Elite Topics') %]
+[% ELSE %]
+[% title = c.loc('Recent Topics') %]
+[% END %]
+&lt;rss version=&quot;2.0&quot;&gt;
+&lt;channel&gt;
+&lt;title&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% c.req.base _ url_prefix %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% title %]]]&gt;&lt;/description&gt;
+&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
+&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
+&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
+
+[% FOREACH t IN topics %]
+&lt;item&gt;
+&lt;title&gt;&lt;![CDATA[[% t.title %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% c.req.base _ 'forum/' _ t.forum_id _ '/topic/' _ t.topic_id %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% t.text %]]]&gt;&lt;/description&gt;
+&lt;guid isPermaLink=&quot;true&quot;&gt;[% forum.forum_url _ '/topic/' _ t.topic_id %]&lt;/guid&gt;
+&lt;pubDate&gt;[% date_format(t.last_update_date, '%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
+&lt;/item&gt;
+[% END %]
+
+&lt;/channel&gt;
 &lt;/rss&gt;
\ No newline at end of file</diff>
      <filename>templates/site/recent.rss.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,47 +1,47 @@
-&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
-    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
-&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
-&lt;head&gt;
-&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
-&lt;title&gt; 
-    [% title || 'Chart' %]
-&lt;/title&gt;
-&lt;style&gt;
-    body { text-align: center; padding-left: 9%; padding-right: 9%; }
-    #placeholder { width: 80%; }  
-&lt;/style&gt;
-&lt;/head&gt;
-&lt;body&gt;
-
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../js/jquery.js&quot;&gt;&lt;/script&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../js/jquery/flot.js&quot;&gt;&lt;/script&gt;
-&lt;script id=&quot;source&quot; language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
-$(function () {
-
-    [% i = 0 %]
-    [% FOREACH ctype IN stats.keys %]
-    
-    $('body').append(&quot;&lt;h2&gt;[% ctype %]&lt;/h2&gt;&lt;div class='placeholder' id='placeholder[% i %]' style='height:300px;'&gt;&lt;/div&gt;&quot;);
-    
-    var d[% i %] = [];
-    
-    [% FOREACH key IN stats.${ctype}.keys.sort %]
-    
-    d[% i %].push([[% key %], [% stats.${ctype}.$key %]]);
-    
-    [% END %]
-    
-    $.plot($(&quot;#placeholder[% i %]&quot;), [
-        {
-            data: d[% i %],
-            lines: { show: true },
-            points: { show: true }
-        }
-    ]);
-    [% i = i + 1 %]
-    [% END %]
-});
-&lt;/script&gt;
+&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
+    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
+&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
+&lt;head&gt;
+&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
+&lt;title&gt; 
+    [% title || 'Chart' %]
+&lt;/title&gt;
+&lt;style&gt;
+    body { text-align: center; padding-left: 9%; padding-right: 9%; }
+    #placeholder { width: 80%; }  
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
 
-&lt;/body&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../js/jquery.js&quot;&gt;&lt;/script&gt;
+&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../js/jquery/flot.js&quot;&gt;&lt;/script&gt;
+&lt;script id=&quot;source&quot; language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
+$(function () {
+
+    [% i = 0 %]
+    [% FOREACH ctype IN stats.keys %]
+    
+    $('body').append(&quot;&lt;h2&gt;[% ctype %]&lt;/h2&gt;&lt;div class='placeholder' id='placeholder[% i %]' style='height:300px;'&gt;&lt;/div&gt;&quot;);
+    
+    var d[% i %] = [];
+    
+    [% FOREACH key IN stats.${ctype}.keys.sort %]
+    
+    d[% i %].push([[% key %], [% stats.${ctype}.$key %]]);
+    
+    [% END %]
+    
+    $.plot($(&quot;#placeholder[% i %]&quot;), [
+        {
+            data: d[% i %],
+            lines: { show: true },
+            points: { show: true }
+        }
+    ]);
+    [% i = i + 1 %]
+    [% END %]
+});
+&lt;/script&gt;
+
+&lt;/body&gt;
 &lt;/html&gt;
\ No newline at end of file</diff>
      <filename>templates/site/stats/chart.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,34 +1,34 @@
-[% USE date %]
-[% PROCESS sub/date.html %]
-
-&lt;br /&gt;
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr class='title'&gt;&lt;td colspan='2'&gt; -=&gt; &lt;a href='/site/online'&gt;[% c.loc(&quot;Who is viewing this Page?&quot;) %]&lt;/a&gt; [ &lt;span class='date'&gt;[% date.format(date.now, '%Y-%m-%d %H:%M:%S') %]&lt;/span&gt; ]&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr&gt;
-    &lt;td class='forum1' valign='middle' align='center' width='28'&gt;&lt;img src='[% c.config.dir.images %]/board/online.gif' alt='On' width='16' height='16' /&gt;&lt;/td&gt;
-    &lt;td class='forum2' width='100%'&gt;
-    [% FOREACH whos IN whos_view_this_page %]
-    
-    [% IF whos == 'SELF';
-          whos = {
-            user_id =&gt; c.user_exists ? c.user_id : 0,
-            user    =&gt; c.user_exists ? c.user : undef,
-            sessionid =&gt; c.sessionid,
-            path    =&gt; c.req.path,
-            title   =&gt; title || 'unknown',
-            start_time =&gt; date.now,
-            last_time  =&gt; date.now
-          };
-       END; %]
-    
-    [% IF whos.user %]
-    &lt;a href='/u/[% whos.user.username %]' alt=&quot;Visit time: [% date_format(whos.start_time) %]\nActive time: [% date_format(whos.last_time) %]&quot;&gt;[% whos.user.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
-    [% ELSE %]
-    &lt;span alt=&quot;Visit time: [% date_format(whos.start_time) %]\nActive time: [% date_format(whos.last_time) %]&quot;&gt;Guest&lt;/span&gt;
-    [% END %]
-    [% END %]
-    &lt;/td&gt;
-    &lt;/tr&gt;
-&lt;/table&gt;
+[% USE date %]
+[% PROCESS sub/date.html %]
+
+&lt;br /&gt;
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr class='title'&gt;&lt;td colspan='2'&gt; -=&gt; &lt;a href='/site/online'&gt;[% c.loc(&quot;Who is viewing this Page?&quot;) %]&lt;/a&gt; [ &lt;span class='date'&gt;[% date.format(date.now, '%Y-%m-%d %H:%M:%S') %]&lt;/span&gt; ]&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;
+    &lt;td class='forum1' valign='middle' align='center' width='28'&gt;&lt;img src='[% c.config.dir.images %]/board/online.gif' alt='On' width='16' height='16' /&gt;&lt;/td&gt;
+    &lt;td class='forum2' width='100%'&gt;
+    [% FOREACH whos IN whos_view_this_page %]
+    
+    [% IF whos == 'SELF';
+          whos = {
+            user_id =&gt; c.user_exists ? c.user_id : 0,
+            user    =&gt; c.user_exists ? c.user : undef,
+            sessionid =&gt; c.sessionid,
+            path    =&gt; c.req.path,
+            title   =&gt; title || 'unknown',
+            start_time =&gt; date.now,
+            last_time  =&gt; date.now
+          };
+       END; %]
+    
+    [% IF whos.user %]
+    &lt;a href='/u/[% whos.user.username %]' alt=&quot;Visit time: [% date_format(whos.start_time) %]\nActive time: [% date_format(whos.last_time) %]&quot;&gt;[% whos.user.nickname %]&lt;/a&gt;[% UNLESS loop.last %], [% END %]
+    [% ELSE %]
+    &lt;span alt=&quot;Visit time: [% date_format(whos.start_time) %]\nActive time: [% date_format(whos.last_time) %]&quot;&gt;Guest&lt;/span&gt;
+    [% END %]
+    [% END %]
+    &lt;/td&gt;
+    &lt;/tr&gt;
+&lt;/table&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/site/whos_view_this_page.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,15 @@
-[% USE date %]
-
-[% MACRO date_format(intime, fmt) BLOCK;
-
-    UNLESS fmt;
-        fmt = '%Y-%m-%d %I:%M:%S';
-    END;
-
-    IF intime == '-' OR intime &lt;= 0;
-        intime;
-    ELSE;
-        date.format(intime, format =&gt; fmt);
-    END;
-
-END; %]
+[% USE date %]
+
+[% MACRO date_format(intime, fmt) BLOCK;
+
+    UNLESS fmt;
+        fmt = '%Y-%m-%d %I:%M:%S';
+    END;
+
+    IF intime == '-' OR intime &lt;= 0;
+        intime;
+    ELSE;
+        date.format(intime, format =&gt; fmt);
+    END;
+
+END; %]</diff>
      <filename>templates/sub/date.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,50 +1,50 @@
-[% IF pager %]
-&lt;div class='pager'&gt;
-Page [% pager.current_page %] of [% pager.last_page %]
-[% IF pager.last_page &gt; 1%] - 
-
-    [% UNLESS url_prefix;
-        path_query = c.req.uri.path_query;
-        IF (matches = path_query.match('^(.*?)/page=(\w+)(/|$)(.*?)$'));
-            url_prefix = matches.0; url_postfix = matches.3;
-        ELSE;
-            url_prefix = c.req.uri.path;url_postfix = '?' _ c.req.uri.query;
-        END;
-    END; %]
-    [% url_prefix  = url_prefix.replace('/$', '');
-       url_postfix = url_postfix.replace('^/', ''); %]
-
-    [% IF pager.current_page - 9 &gt; 0 %]
-	    [% start_page = pager.current_page - 9 %]
-	[% ELSE %]
-	    [% start_page = 1 %]
-    [% END %]
-    [% IF pager.last_page &gt; pager.current_page + 10 %]
-        [% end_page = pager.current_page + 10 %]
-	[% ELSE %]
-	    [% end_page = pager.last_page %]
-    [% END %]
-
-    [% IF start_page != 1 %]
-        &lt;a href=&quot;[% url_prefix %]/page=1/[% url_postfix %]&quot; title=&quot;First&quot;&gt;|&amp;lt;&amp;lt;&lt;/a&gt;
-    [% END %]
-    [% IF pager.previous_page %]
-        &lt;a href=&quot;[% url_prefix %]/page=[% pager.previous_page %]/[% url_postfix %]&quot;&gt;&amp;lt; Prev&lt;/a&gt; 
-    [% END %]
-    [% FOREACH page = [ start_page .. end_page ] %]
-        [% IF page == pager.current_page %]
-        &lt;strong&gt;[% page %]&lt;/strong&gt;
-	    [% ELSE %]
-	    &lt;a href='[% url_prefix %]/page=[% page %]/[% url_postfix %]'&gt;[% page %]&lt;/a&gt;
-	    [% END %]
-    [% END %]
-    [% IF pager.next_page %]
-    &lt;a href=&quot;[% url_prefix %]/page=[% pager.next_page %]/[% url_postfix %]&quot;&gt;Next &amp;gt;&lt;/a&gt; 
-    [% END %]
-    [% IF end_page != pager.last_page %]
-        &lt;a href=&quot;[% url_prefix %]/page=[% pager.last_page %]/[% url_postfix %]&quot; title=&quot;Last&quot;&gt;&amp;gt;&amp;gt;|&lt;/a&gt;
-    [% END %]
-    
-[% END %]
-&lt;/div&gt;
-[% END %]
+[% IF pager %]
+&lt;div class='pager'&gt;
+Page [% pager.current_page %] of [% pager.last_page %]
+[% IF pager.last_page &gt; 1%] - 
+
+    [% UNLESS url_prefix;
+        path_query = c.req.uri.path_query;
+        IF (matches = path_query.match('^(.*?)/page=(\w+)(/|$)(.*?)$'));
+            url_prefix = matches.0; url_postfix = matches.3;
+        ELSE;
+            url_prefix = c.req.uri.path;url_postfix = '?' _ c.req.uri.query;
+        END;
+    END; %]
+    [% url_prefix  = url_prefix.replace('/$', '');
+       url_postfix = url_postfix.replace('^/', ''); %]
+
+    [% IF pager.current_page - 9 &gt; 0 %]
+	    [% start_page = pager.current_page - 9 %]
+	[% ELSE %]
+	    [% start_page = 1 %]
+    [% END %]
+    [% IF pager.last_page &gt; pager.current_page + 10 %]
+        [% end_page = pager.current_page + 10 %]
+	[% ELSE %]
+	    [% end_page = pager.last_page %]
+    [% END %]
+
+    [% IF start_page != 1 %]
+        &lt;a href=&quot;[% url_prefix %]/page=1/[% url_postfix %]&quot; title=&quot;First&quot;&gt;|&amp;lt;&amp;lt;&lt;/a&gt;
+    [% END %]
+    [% IF pager.previous_page %]
+        &lt;a href=&quot;[% url_prefix %]/page=[% pager.previous_page %]/[% url_postfix %]&quot;&gt;&amp;lt; Prev&lt;/a&gt; 
+    [% END %]
+    [% FOREACH page = [ start_page .. end_page ] %]
+        [% IF page == pager.current_page %]
+        &lt;strong&gt;[% page %]&lt;/strong&gt;
+	    [% ELSE %]
+	    &lt;a href='[% url_prefix %]/page=[% page %]/[% url_postfix %]'&gt;[% page %]&lt;/a&gt;
+	    [% END %]
+    [% END %]
+    [% IF pager.next_page %]
+    &lt;a href=&quot;[% url_prefix %]/page=[% pager.next_page %]/[% url_postfix %]&quot;&gt;Next &amp;gt;&lt;/a&gt; 
+    [% END %]
+    [% IF end_page != pager.last_page %]
+        &lt;a href=&quot;[% url_prefix %]/page=[% pager.last_page %]/[% url_postfix %]&quot; title=&quot;Last&quot;&gt;&amp;gt;&amp;gt;|&lt;/a&gt;
+    [% END %]
+    
+[% END %]
+&lt;/div&gt;
+[% END %]</diff>
      <filename>templates/sub/pager.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,80 +1,80 @@
-[% title = topic.title _ ' : ' _ forum.name %]
-
-[% url_prefix = forum.forum_url _ '/topic/' _ topic.topic_id %]
-[% RSS_URL = url_prefix _ '/rss' %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% IF c.config.function_on.poll %]
-        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0)'&gt;&lt;span&gt;[% topic.title %]([% topic.hit %])&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% UNLESS topic.closed OR (forum.settings.can_post_replies AND forum.settings.can_post_replies == 'N') %]
-        [% IF top_comment_id %]
-        &lt;li&gt;&lt;a href='/comment/[% top_comment_id %]/reply'&gt;&lt;span&gt;Reply Topic&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        [% END %]
-        [% END %]
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-[% IF c.user_exists %]
-[% c.load_once(&quot;site/star.js&quot;) %]
-[% END %]
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-[% IF roles.is_moderator %]
-&lt;tr class='title'&gt;
-    &lt;td width='100'&gt;Operation&lt;/td&gt;&lt;td align='center'&gt;
-    &lt;a href='[% url_prefix %]/[% IF topic.sticky %]unsticky[% ELSE %]sticky[% END %]'&gt;[% IF topic.sticky %][% c.loc('Unsticky') %][% ELSE %][% c.loc('Sticky') %][% END %]&lt;/a&gt; |
-    &lt;a href='[% url_prefix %]/[% IF topic.closed %]unlock[% ELSE %]lock[% END %]'&gt;[% IF topic.closed %][% c.loc('Unlock') %][% ELSE %][% c.loc('Lock') %][% END %]&lt;/a&gt; |
-    &lt;a href='[% url_prefix %]/[% IF topic.elite %]unelite[% ELSE %]elite[% END %]'&gt;[% IF topic.elite %][% c.loc('Unelite') %][% ELSE %][% c.loc('Elite') %][% END %]&lt;/a&gt; |
-    &lt;a href='[% url_prefix %]/[% IF topic.status == 'banned' %]unban[% ELSE %]ban[% END %]'&gt;[% IF topic.status == 'banned' %][% c.loc('Unban') %][% ELSE %][% c.loc('Ban') %][% END %]&lt;/a&gt;
-    &lt;/td&gt;
-&lt;/tr&gt;
-[% END %]
-&lt;tr class='title'&gt;
-    &lt;td colspan='2'&gt;
-    [% IF c.user_exists %]
-    &lt;a href=&quot;javascript:star('topic', '[% topic.topic_id %]', 'starDiv')&quot;&gt;&lt;span id='starDiv'&gt;&lt;img src=&quot;[% c.config.dir.images %]/site/t/star_[% IF is_starred;'on';ELSE;'off';END %].gif&quot; align='absmiddle' /&gt; [% IF is_starred;'Unstar';ELSE;'Star';END %]&lt;/span&gt;&lt;/a&gt;
-     | &lt;a href=&quot;javascript:share('topic', '[% topic.topic_id %]', 'shareDiv')&quot;&gt;&lt;span id='shareDiv'&gt;&lt;img src='[% c.config.dir.images %]/site/t/[% IF is_shared;'unshare';ELSE;'share';END %].gif' /&gt; [% IF is_shared;'Unshare';ELSE;'Share';END %]&lt;/span&gt;&lt;/a&gt;
-    [% END %]
-    &lt;a href='http://del.icio.us/post?url=[% c.req.base _ c.req.path  | uri %]&amp;title=[% title | uri %]'&gt;&lt;img src='[% c.config.dir.images %]/site/s/delicious.gif' align='absmiddle' /&gt;del.icio.us&lt;/a&gt; 
-    &lt;a href='http://digg.com/submit?phase=2&amp;URL=[% c.req.base _ c.req.path | uri %]'&gt;&lt;img src='[% c.config.dir.images %]/site/s/digg.gif' align='absmiddle' /&gt;digg&lt;/a&gt; 
-    [% IF c.config.function_on.topic_pdf %]
-    &lt;a href=&quot;[% url_prefix %]?format=pdf&quot;&gt;&lt;img src=&quot;[% c.config.dir.images %]/site/s/pdf.gif&quot; width='16' height='16'&gt;View as PDF&lt;/a&gt;
-    [% END %]
-    &lt;a href=&quot;[% url_prefix %]/print&quot;&gt;&lt;img src=&quot;[% c.config.dir.images %]/site/s/print.gif&quot; width='18' height='18'&gt;Print&lt;/a&gt;
-    [% IF previous_topic_id %]
-    &lt;a href=&quot;/forum/[% forum.forum_code %]/topic/[% previous_topic_id %]&quot;&gt;Previous&lt;/a&gt;
-    [% END %]
-    [% IF next_topic_id %]
-    &lt;a href=&quot;/forum/[% forum.forum_code %]/topic/[% next_topic_id %]&quot;&gt;Next&lt;/a&gt;
-    [% END %]
-    &lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-[% INCLUDE comment/show.html %]
-
-[% IF c.user_exists AND NOT (topic.closed OR (forum.settings.can_post_replies AND forum.settings.can_post_replies == 'N')) %]
-[% INCLUDE comment/post.html %]
-[% END %]
-
-    &lt;/div&gt;
+[% title = topic.title _ ' : ' _ forum.name %]
+
+[% url_prefix = forum.forum_url _ '/topic/' _ topic.topic_id %]
+[% RSS_URL = url_prefix _ '/rss' %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]'&gt;&lt;span&gt;Topics&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/polls'&gt;&lt;span&gt;Polls&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        [% UNLESS forum.settings.can_post_threads AND forum.settings.can_post_threads == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/topic/new'&gt;&lt;span&gt;[% c.loc(&quot;New Topic&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% IF c.config.function_on.poll %]
+        [% UNLESS forum.settings.can_post_polls AND forum.settings.can_post_polls == 'N' %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/poll/new'&gt;&lt;span&gt;[% c.loc(&quot;New Poll&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+        &lt;li&gt;&lt;a href='[% forum.forum_url %]/action_log'&gt;&lt;span&gt;View Action Logs&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0)'&gt;&lt;span&gt;[% topic.title %]([% topic.hit %])&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% UNLESS topic.closed OR (forum.settings.can_post_replies AND forum.settings.can_post_replies == 'N') %]
+        [% IF top_comment_id %]
+        &lt;li&gt;&lt;a href='/comment/[% top_comment_id %]/reply'&gt;&lt;span&gt;Reply Topic&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        [% END %]
+        [% END %]
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+[% IF c.user_exists %]
+[% c.load_once(&quot;site/star.js&quot;) %]
+[% END %]
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+[% IF roles.is_moderator %]
+&lt;tr class='title'&gt;
+    &lt;td width='100'&gt;Operation&lt;/td&gt;&lt;td align='center'&gt;
+    &lt;a href='[% url_prefix %]/[% IF topic.sticky %]unsticky[% ELSE %]sticky[% END %]'&gt;[% IF topic.sticky %][% c.loc('Unsticky') %][% ELSE %][% c.loc('Sticky') %][% END %]&lt;/a&gt; |
+    &lt;a href='[% url_prefix %]/[% IF topic.closed %]unlock[% ELSE %]lock[% END %]'&gt;[% IF topic.closed %][% c.loc('Unlock') %][% ELSE %][% c.loc('Lock') %][% END %]&lt;/a&gt; |
+    &lt;a href='[% url_prefix %]/[% IF topic.elite %]unelite[% ELSE %]elite[% END %]'&gt;[% IF topic.elite %][% c.loc('Unelite') %][% ELSE %][% c.loc('Elite') %][% END %]&lt;/a&gt; |
+    &lt;a href='[% url_prefix %]/[% IF topic.status == 'banned' %]unban[% ELSE %]ban[% END %]'&gt;[% IF topic.status == 'banned' %][% c.loc('Unban') %][% ELSE %][% c.loc('Ban') %][% END %]&lt;/a&gt;
+    &lt;/td&gt;
+&lt;/tr&gt;
+[% END %]
+&lt;tr class='title'&gt;
+    &lt;td colspan='2'&gt;
+    [% IF c.user_exists %]
+    &lt;a href=&quot;javascript:star('topic', '[% topic.topic_id %]', 'starDiv')&quot;&gt;&lt;span id='starDiv'&gt;&lt;img src=&quot;[% c.config.dir.images %]/site/t/star_[% IF is_starred;'on';ELSE;'off';END %].gif&quot; align='absmiddle' /&gt; [% IF is_starred;'Unstar';ELSE;'Star';END %]&lt;/span&gt;&lt;/a&gt;
+     | &lt;a href=&quot;javascript:share('topic', '[% topic.topic_id %]', 'shareDiv')&quot;&gt;&lt;span id='shareDiv'&gt;&lt;img src='[% c.config.dir.images %]/site/t/[% IF is_shared;'unshare';ELSE;'share';END %].gif' /&gt; [% IF is_shared;'Unshare';ELSE;'Share';END %]&lt;/span&gt;&lt;/a&gt;
+    [% END %]
+    &lt;a href='http://del.icio.us/post?url=[% c.req.base _ c.req.path  | uri %]&amp;title=[% title | uri %]'&gt;&lt;img src='[% c.config.dir.images %]/site/s/delicious.gif' align='absmiddle' /&gt;del.icio.us&lt;/a&gt; 
+    &lt;a href='http://digg.com/submit?phase=2&amp;URL=[% c.req.base _ c.req.path | uri %]'&gt;&lt;img src='[% c.config.dir.images %]/site/s/digg.gif' align='absmiddle' /&gt;digg&lt;/a&gt; 
+    [% IF c.config.function_on.topic_pdf %]
+    &lt;a href=&quot;[% url_prefix %]?format=pdf&quot;&gt;&lt;img src=&quot;[% c.config.dir.images %]/site/s/pdf.gif&quot; width='16' height='16'&gt;View as PDF&lt;/a&gt;
+    [% END %]
+    &lt;a href=&quot;[% url_prefix %]/print&quot;&gt;&lt;img src=&quot;[% c.config.dir.images %]/site/s/print.gif&quot; width='18' height='18'&gt;Print&lt;/a&gt;
+    [% IF previous_topic_id %]
+    &lt;a href=&quot;/forum/[% forum.forum_code %]/topic/[% previous_topic_id %]&quot;&gt;Previous&lt;/a&gt;
+    [% END %]
+    [% IF next_topic_id %]
+    &lt;a href=&quot;/forum/[% forum.forum_code %]/topic/[% next_topic_id %]&quot;&gt;Next&lt;/a&gt;
+    [% END %]
+    &lt;/td&gt;
+&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+[% INCLUDE comment/show.html %]
+
+[% IF c.user_exists AND NOT (topic.closed OR (forum.settings.can_post_replies AND forum.settings.can_post_replies == 'N')) %]
+[% INCLUDE comment/post.html %]
+[% END %]
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/topic/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,13 @@
-
-[% url_prefix = forum.forum_url _ '/topic/' _ topic.topic_id %]
-
-
-[% msg = BLOCK %]
-
-&lt;a href=&quot;[% download_url %]&quot;&gt;Download&lt;/a&gt; Or &lt;a href=&quot;[% url_prefix %]&quot;&gt;Back to [% topic.title %]&lt;/a&gt;
-
-[% END %]
-
-[% INCLUDE 'simple/message.html' message = {
-    msg =&gt; msg,
-} %]
+
+[% url_prefix = forum.forum_url _ '/topic/' _ topic.topic_id %]
+
+
+[% msg = BLOCK %]
+
+&lt;a href=&quot;[% download_url %]&quot;&gt;Download&lt;/a&gt; Or &lt;a href=&quot;[% url_prefix %]&quot;&gt;Back to [% topic.title %]&lt;/a&gt;
+
+[% END %]
+
+[% INCLUDE 'simple/message.html' message = {
+    msg =&gt; msg,
+} %]</diff>
      <filename>templates/topic/pdf_download.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,39 +1,39 @@
-[% PROCESS sub/date.html %]
-[% title = topic.title _ ' : ' _ forum.name %]
-
-[% topic.url  = forum.forum_url _ '/topic/' _ topic.topic_id %]
-[% url_prefix = topic.topic_url _ '/print' %]
-
-&lt;div style=&quot;margin: 20px;&quot;&gt;
-
-&lt;h2&gt;[% topic.title %]&lt;/h2&gt;
-
-[% FOREACH comment IN comments %]
-&lt;a name=&quot;c[% comment.comment_id %]&quot;&gt;&lt;/a&gt;
-&lt;div [% IF comment.level %]style=&quot;margin-left: [% comment.level * 30 %]px&quot;[% END %]&gt;
-    &lt;div&gt;&lt;b&gt;[% comment.title %]&lt;/b&gt; Posted By &lt;a href=&quot;/u/[% comment.author.username %]&quot;&gt;[% comment.author.nickname %]&lt;/a&gt; on &lt;span class='date'&gt;[% date_format(comment.post_on) %]&lt;/span&gt;&lt;/div&gt;
-	&lt;span class=&quot;postclass textbody&quot; id='comment_text' style=&quot;padding: 2em;&quot;&gt;
-	  [% IF comment.author.status == 'banned' %]
-	    The author is banned.
-	  [% ELSE %]
-	    [% IF comment.upload %]
-	    [% PROCESS upload/upload.html upload = comment.upload %]
-	    [% END %]
-	    [% comment.text %]
-	  [% END %]
-	&lt;/span&gt;
-    &lt;div class='horizontal'&gt;&lt;/div&gt;
-&lt;/div&gt;
-[% END %]
-[% IF comments.size %]
-&lt;div style=&quot;clear: both;&quot;&gt;
-    &lt;h3&gt;What's Next?&lt;/h3&gt;
-    &lt;ul&gt;
-        &lt;li&gt;[% INCLUDE 'sub/pager.html' pager = comments_pager %]&lt;/li&gt;
-        &lt;li&gt;&lt;a href=&quot;[% topic.url %]&quot;&gt;[% topic.title %]&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href=&quot;[% forum.url %]&quot;&gt;[% forum.name %]&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-&lt;/div&gt;
-[% END %]
-
-&lt;/div&gt;
+[% PROCESS sub/date.html %]
+[% title = topic.title _ ' : ' _ forum.name %]
+
+[% topic.url  = forum.forum_url _ '/topic/' _ topic.topic_id %]
+[% url_prefix = topic.topic_url _ '/print' %]
+
+&lt;div style=&quot;margin: 20px;&quot;&gt;
+
+&lt;h2&gt;[% topic.title %]&lt;/h2&gt;
+
+[% FOREACH comment IN comments %]
+&lt;a name=&quot;c[% comment.comment_id %]&quot;&gt;&lt;/a&gt;
+&lt;div [% IF comment.level %]style=&quot;margin-left: [% comment.level * 30 %]px&quot;[% END %]&gt;
+    &lt;div&gt;&lt;b&gt;[% comment.title %]&lt;/b&gt; Posted By &lt;a href=&quot;/u/[% comment.author.username %]&quot;&gt;[% comment.author.nickname %]&lt;/a&gt; on &lt;span class='date'&gt;[% date_format(comment.post_on) %]&lt;/span&gt;&lt;/div&gt;
+	&lt;span class=&quot;postclass textbody&quot; id='comment_text' style=&quot;padding: 2em;&quot;&gt;
+	  [% IF comment.author.status == 'banned' %]
+	    The author is banned.
+	  [% ELSE %]
+	    [% IF comment.upload %]
+	    [% PROCESS upload/upload.html upload = comment.upload %]
+	    [% END %]
+	    [% comment.text %]
+	  [% END %]
+	&lt;/span&gt;
+    &lt;div class='horizontal'&gt;&lt;/div&gt;
+&lt;/div&gt;
+[% END %]
+[% IF comments.size %]
+&lt;div style=&quot;clear: both;&quot;&gt;
+    &lt;h3&gt;What's Next?&lt;/h3&gt;
+    &lt;ul&gt;
+        &lt;li&gt;[% INCLUDE 'sub/pager.html' pager = comments_pager %]&lt;/li&gt;
+        &lt;li&gt;&lt;a href=&quot;[% topic.url %]&quot;&gt;[% topic.title %]&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href=&quot;[% forum.url %]&quot;&gt;[% forum.name %]&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+&lt;/div&gt;
+[% END %]
+
+&lt;/div&gt;</diff>
      <filename>templates/topic/print.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,27 +1,27 @@
-[% PROCESS sub/date.html %]
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;title&gt;[% topic.title %]&lt;/title&gt;
-    &lt;/head&gt;
-    &lt;body&gt;
-
-&lt;h1&gt;[% topic.title %]&lt;/h1&gt;
-
-[% FOREACH comment IN comments %]
-&lt;hr /&gt;
-
-&lt;h2&gt;[% comment.title %]&lt;/h2&gt;
-&lt;p&gt;
-Post by [% comment.author.nickname %] on [% date_format(comment.post_on) %]
-&lt;/p&gt;
-&lt;p&gt;
-[% IF comment.author.status == 'banned' %]
- The author is banned.
-[% ELSE %]
-  [% comment.text %]
-[% END %]
-&lt;/p&gt;
-[% END %]
-
-    &lt;/body&gt;
+[% PROCESS sub/date.html %]
+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;[% topic.title %]&lt;/title&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+
+&lt;h1&gt;[% topic.title %]&lt;/h1&gt;
+
+[% FOREACH comment IN comments %]
+&lt;hr /&gt;
+
+&lt;h2&gt;[% comment.title %]&lt;/h2&gt;
+&lt;p&gt;
+Post by [% comment.author.nickname %] on [% date_format(comment.post_on) %]
+&lt;/p&gt;
+&lt;p&gt;
+[% IF comment.author.status == 'banned' %]
+ The author is banned.
+[% ELSE %]
+  [% comment.text %]
+[% END %]
+&lt;/p&gt;
+[% END %]
+
+    &lt;/body&gt;
 &lt;/html&gt;
\ No newline at end of file</diff>
      <filename>templates/topic/topic.pdf.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,25 +1,25 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-[% USE date %]
-[% PROCESS sub/date.html %]
-[% url_prefix = c.req.base _ forum.forum_url _ '/topic/' _ topic.topic_id %]
-&lt;rss version=&quot;2.0&quot;&gt;
-&lt;channel&gt;
-&lt;title&gt;&lt;![CDATA[[% topic.title %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% url_prefix %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% topic.title %]]]&gt;&lt;/description&gt;
-&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
-&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
-&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
-
-[% FOREACH comment IN comments %]
-&lt;item&gt;
-&lt;title&gt;&lt;![CDATA[[% comment.title %]]]&gt;&lt;/title&gt;
-&lt;link&gt;[% url_prefix _ '/comment_id=' _ comment.comment_id _ '/#c' _ comment.comment_id %]&lt;/link&gt;
-&lt;description&gt;&lt;![CDATA[[% comment.text %]]]&gt;&lt;/description&gt;
-&lt;guid isPermaLink=&quot;true&quot;&gt;[% url_prefix _ '/comment_id=' _ comment.comment_id _ '/#c' _ comment.comment_id %]&lt;/guid&gt;
-&lt;pubDate&gt;[% date_format(comment.post_on, '%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
-&lt;/item&gt;
-[% END %]
-
-&lt;/channel&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+[% USE date %]
+[% PROCESS sub/date.html %]
+[% url_prefix = c.req.base _ forum.forum_url _ '/topic/' _ topic.topic_id %]
+&lt;rss version=&quot;2.0&quot;&gt;
+&lt;channel&gt;
+&lt;title&gt;&lt;![CDATA[[% topic.title %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% url_prefix %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% topic.title %]]]&gt;&lt;/description&gt;
+&lt;pubDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/pubDate&gt;
+&lt;lastBuildDate&gt;[% date.format(date.now, '%Y-%m-%dT%H:%M:%S+00:00') %]&lt;/lastBuildDate&gt;
+&lt;generator&gt;Foorum RSS Generator&lt;/generator&gt;
+
+[% FOREACH comment IN comments %]
+&lt;item&gt;
+&lt;title&gt;&lt;![CDATA[[% comment.title %]]]&gt;&lt;/title&gt;
+&lt;link&gt;[% url_prefix _ '/comment_id=' _ comment.comment_id _ '/#c' _ comment.comment_id %]&lt;/link&gt;
+&lt;description&gt;&lt;![CDATA[[% comment.text %]]]&gt;&lt;/description&gt;
+&lt;guid isPermaLink=&quot;true&quot;&gt;[% url_prefix _ '/comment_id=' _ comment.comment_id _ '/#c' _ comment.comment_id %]&lt;/guid&gt;
+&lt;pubDate&gt;[% date_format(comment.post_on, '%Y-%m-%dT%I:%M:%S') %]&lt;/pubDate&gt;
+&lt;/item&gt;
+[% END %]
+
+&lt;/channel&gt;
 &lt;/rss&gt;
\ No newline at end of file</diff>
      <filename>templates/topic/topic.rss.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,163 +1,163 @@
-[% PROCESS sub/date.html %]
-
-&lt;table border='0' width='100%'&gt;
-    &lt;tr&gt;
-        &lt;td width=&quot;30%&quot; valign=&quot;top&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;User profile&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Username') %]&lt;/td&gt;&lt;td&gt;[% user.username %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Nickname') %]&lt;/td&gt;&lt;td&gt;[% user.nickname %]&lt;/td&gt;&lt;/tr&gt;
-	[% IF user.profile_photo %]
-    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;Profile Photo:&lt;/td&gt;&lt;td&gt;[% INCLUDE include/user_profile_photo.html %]&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Gender') %]&lt;/td&gt;&lt;td&gt;
-	    [% SWITCH user.gender; CASE 'M';'Male';CASE 'F';'Female';CASE;'Secret';END; %]
-	    [% IF user.gender != 'NA' %] &amp;nbsp;&lt;img src='[% c.config.dir.images %]/site/gender_[% user.gender %].gif' width='20' height='14' align='absmiddle' /&gt;[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	[% IF user.details.birthday %]
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Birthday') %]&lt;/td&gt;&lt;td&gt;[% user.details.birthday %]&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Point:&quot;) %]&lt;/td&gt;&lt;td&gt;[% user.point %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Threads:&quot;) %]&lt;/td&gt;&lt;td&gt;[% user.threads %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Replies:&quot;) %]&lt;/td&gt;&lt;td&gt;[% user.replies %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Register on&quot;) %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;[% date_format(user.register_time) %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Last Logon On:&lt;/td&gt;&lt;td&gt;[% date_format(user.last_login_on) %]&lt;/td&gt;&lt;/tr&gt;
-	[% IF user.details.homepage %]
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Homepage') %]&lt;/td&gt;&lt;td&gt;&lt;a href='[% user.details.homepage %]' target='_blank' rel=&quot;nofollow&quot;&gt;[% user.details.homepage %] &lt;img src=&quot;[% c.config.dir.images %]/site/new-window-icon.gif&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	
-	[% IF user.country %]
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Location Information') %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Country/Territory') %]&lt;/td&gt;&lt;td&gt;[% user.country | code2country(lang) %]&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-
-    [% has_contact_info = user.details.qq OR user.details.msn OR user.details.gtalk OR user.details.skype OR user.details.yahoo %]
-
-  [% IF has_contact_info OR NOT user.settings.show_email_public == 'N' %]
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Contact Information') %]&lt;/td&gt;&lt;/tr&gt;
-	[% UNLESS user.settings.show_email_public == 'N' %]
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;
-	    &lt;img src='[% c.config.dir.images %]/myprofile/mail.png' width='20' height='20' align='absmiddle' /&gt; [% user.email | email_obfuscate %] &lt;a href='/help/email'&gt;&lt;img src='[% c.config.dir.images %]/site/help.gif' width='16' height='16' align='absmiddle' /&gt;&lt;/a&gt;
-	&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	[% IF has_contact_info %]
-	[% IF user.details.qq %]
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;QQ:&lt;/td&gt;&lt;td&gt;
-	    &lt;a target='_blank' href='tencent://message/?uin=[% user.details.qq %]&amp;Site=Foorum&amp;Menu=yes'&gt;&lt;img border=&quot;0&quot; src=&quot;http://wpa.qq.com/pa?p=1:[% user.details.qq %]:4&quot; align='absmiddle' /&gt; [% user.details.qq %]&lt;/a&gt;
-	&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	[% IF user.details.msn %]
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;MSN:&lt;/td&gt;&lt;td&gt;
-	    &lt;img src='[% c.config.dir.images %]/myprofile/msn.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.msn | email_obfuscate %]
-	&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	[% IF user.details.gtalk %]
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Gtalk:&lt;/td&gt;&lt;td&gt;
-	    &lt;img src='[% c.config.dir.images %]/myprofile/gtalk.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.gtalk %]
-	&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	[% IF user.details.yahoo %]
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Yahoo! ID:&lt;/td&gt;&lt;td&gt;
-	    &lt;a href='http://messenger.yahoo.com/edit/send/?.target=[% user.details.yahoo %]&amp;.src=pg' target='_blank'&gt;&lt;img src='[% c.config.dir.images %]/myprofile/yahoo.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.yahoo %]&lt;/a&gt;
-	&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	[% IF user.details.skype %]
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Skype:&lt;/td&gt;&lt;td&gt;
-	    &lt;img src='[% c.config.dir.images %]/myprofile/skype.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.skype %]
-	&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	[% END %][%# has_contact_info %]
-  [% END %][%# has_contact_info OR NOT user.settings.show_email_public == 'N' %]
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/td&gt;&lt;td width='70%' valign=&quot;top&quot;&gt;
-
-[% IF recent_topics.size %]
-&lt;!-- Start Recent Topics --&gt;
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-    &lt;tbody&gt;
-	&lt;tr class='title'&gt;&lt;td&gt;&lt;span style=&quot;float: right;&quot;&gt;&lt;a href=&quot;/u/[% user.username %]/topics&quot;&gt;View More&lt;/a&gt;&lt;/span&gt;Recent Topics&lt;/td&gt;&lt;/tr&gt;
-    &lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-&lt;br /&gt;
-&lt;div class='one'&gt;
-&lt;table height='28' align='center'&gt;
-	&lt;tr class=&quot;title&quot; align='center'&gt;
-	&lt;td width='200'&gt;[% c.loc('Forum') %]&lt;/td&gt;
-	&lt;td width='*'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
-	&lt;td width='40'&gt;[% c.loc(&quot;Reply&quot;) %]&lt;/td&gt;
-	&lt;td width='40'&gt;[% c.loc(&quot;Hit&quot;) %]&lt;/td&gt;
-	&lt;td width='200'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% FOREACH t IN recent_topics %]
-&lt;div class='multi'&gt;
-&lt;table align='center'&gt;
-	&lt;tr align='center'&gt;
-	&lt;td class='forum2' width='200'&gt;&lt;a href='/forum/[% t.forum.forum_code %]'&gt;[% t.forum.name %]&lt;/a&gt;&lt;/td&gt;
-	&lt;td class='forum2' valign='top' width='*'&gt;
-		&lt;table&gt;
-			&lt;tr&gt;
-			&lt;td align=&quot;left&quot;&gt;
-			    [% IF t.elite %]
-			    &lt;span class='highlight'&gt;[Elite]&lt;/a&gt; 
-			    [% END %]
-			    &lt;a href='/forum/[% t.forum.forum_code %]/[% t.topic_id %]'&gt;&lt;span class='semilight'&gt;[% t.title %]&lt;/span&gt;&lt;/a&gt;
-			&lt;/td&gt;
-			&lt;/tr&gt;
-    	&lt;/table&gt;
-	&lt;/td&gt;
-	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.total_replies %]&lt;/span&gt;&lt;/td&gt;
-	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.hit %]&lt;/span&gt;&lt;/td&gt;
-	&lt;td class='forum2' width='200' align='right'&gt;&lt;a href='/u/[% t.last_updator.username %]'&gt;[% t.last_updator.nickname %]&lt;/a&gt; | &lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
-	&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-[% END %]
-&lt;!-- END Recent Topics --&gt;
-[% END %]
-
-[% IF shared_items.size %]
-&lt;!-- Start Shared Items --&gt;
-&lt;br /&gt;
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-    &lt;tbody&gt;
-	&lt;tr class='title'&gt;&lt;td&gt;&lt;span style=&quot;float: right;&quot;&gt;&lt;a href=&quot;/u/[% user.username %]/shared&quot;&gt;View More&lt;/a&gt;&lt;/span&gt;Shared Items&lt;/td&gt;&lt;/tr&gt;
-    &lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-&lt;br /&gt;
-&lt;div class='one'&gt;
-&lt;table height='28' align='center'&gt;
-&lt;tr align='center' class='title'&gt;
-    &lt;td align='left'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
-    &lt;td width='180'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
-    &lt;td width='180'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
-&lt;/tr&gt;
-[% FOREACH item IN shared_items %]
-&lt;tr align='center' class='misc[% IF loop.count mod 2 %]1[% ELSE %]2[% END %]'&gt;
-
-[% INCLUDE include/object_tds.html object = item %]
-
-&lt;/tr&gt;
-[% END %]
-&lt;/table&gt;
-&lt;/div&gt;
-&lt;!-- END Shared Items --&gt;
-[% END %]
-
-[% INCLUDE comment/show_with_head.html %]
-&lt;br /&gt;
-[% INCLUDE comment/post.html %]
-
-    &lt;/td&gt;&lt;/tr&gt;
+[% PROCESS sub/date.html %]
+
+&lt;table border='0' width='100%'&gt;
+    &lt;tr&gt;
+        &lt;td width=&quot;30%&quot; valign=&quot;top&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;User profile&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Username') %]&lt;/td&gt;&lt;td&gt;[% user.username %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Nickname') %]&lt;/td&gt;&lt;td&gt;[% user.nickname %]&lt;/td&gt;&lt;/tr&gt;
+	[% IF user.profile_photo %]
+    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;Profile Photo:&lt;/td&gt;&lt;td&gt;[% INCLUDE include/user_profile_photo.html %]&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Gender') %]&lt;/td&gt;&lt;td&gt;
+	    [% SWITCH user.gender; CASE 'M';'Male';CASE 'F';'Female';CASE;'Secret';END; %]
+	    [% IF user.gender != 'NA' %] &amp;nbsp;&lt;img src='[% c.config.dir.images %]/site/gender_[% user.gender %].gif' width='20' height='14' align='absmiddle' /&gt;[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	[% IF user.details.birthday %]
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Birthday') %]&lt;/td&gt;&lt;td&gt;[% user.details.birthday %]&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Point:&quot;) %]&lt;/td&gt;&lt;td&gt;[% user.point %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Threads:&quot;) %]&lt;/td&gt;&lt;td&gt;[% user.threads %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Replies:&quot;) %]&lt;/td&gt;&lt;td&gt;[% user.replies %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Register on&quot;) %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;[% date_format(user.register_time) %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Last Logon On:&lt;/td&gt;&lt;td&gt;[% date_format(user.last_login_on) %]&lt;/td&gt;&lt;/tr&gt;
+	[% IF user.details.homepage %]
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Homepage') %]&lt;/td&gt;&lt;td&gt;&lt;a href='[% user.details.homepage %]' target='_blank' rel=&quot;nofollow&quot;&gt;[% user.details.homepage %] &lt;img src=&quot;[% c.config.dir.images %]/site/new-window-icon.gif&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	
+	[% IF user.country %]
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Location Information') %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Country/Territory') %]&lt;/td&gt;&lt;td&gt;[% user.country | code2country(lang) %]&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+
+    [% has_contact_info = user.details.qq OR user.details.msn OR user.details.gtalk OR user.details.skype OR user.details.yahoo %]
+
+  [% IF has_contact_info OR NOT user.settings.show_email_public == 'N' %]
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Contact Information') %]&lt;/td&gt;&lt;/tr&gt;
+	[% UNLESS user.settings.show_email_public == 'N' %]
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;
+	    &lt;img src='[% c.config.dir.images %]/myprofile/mail.png' width='20' height='20' align='absmiddle' /&gt; [% user.email | email_obfuscate %] &lt;a href='/help/email'&gt;&lt;img src='[% c.config.dir.images %]/site/help.gif' width='16' height='16' align='absmiddle' /&gt;&lt;/a&gt;
+	&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	[% IF has_contact_info %]
+	[% IF user.details.qq %]
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;QQ:&lt;/td&gt;&lt;td&gt;
+	    &lt;a target='_blank' href='tencent://message/?uin=[% user.details.qq %]&amp;Site=Foorum&amp;Menu=yes'&gt;&lt;img border=&quot;0&quot; src=&quot;http://wpa.qq.com/pa?p=1:[% user.details.qq %]:4&quot; align='absmiddle' /&gt; [% user.details.qq %]&lt;/a&gt;
+	&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	[% IF user.details.msn %]
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;MSN:&lt;/td&gt;&lt;td&gt;
+	    &lt;img src='[% c.config.dir.images %]/myprofile/msn.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.msn | email_obfuscate %]
+	&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	[% IF user.details.gtalk %]
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Gtalk:&lt;/td&gt;&lt;td&gt;
+	    &lt;img src='[% c.config.dir.images %]/myprofile/gtalk.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.gtalk %]
+	&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	[% IF user.details.yahoo %]
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Yahoo! ID:&lt;/td&gt;&lt;td&gt;
+	    &lt;a href='http://messenger.yahoo.com/edit/send/?.target=[% user.details.yahoo %]&amp;.src=pg' target='_blank'&gt;&lt;img src='[% c.config.dir.images %]/myprofile/yahoo.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.yahoo %]&lt;/a&gt;
+	&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	[% IF user.details.skype %]
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Skype:&lt;/td&gt;&lt;td&gt;
+	    &lt;img src='[% c.config.dir.images %]/myprofile/skype.png' width='20' height='20' align='absmiddle' /&gt; [% user.details.skype %]
+	&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	[% END %][%# has_contact_info %]
+  [% END %][%# has_contact_info OR NOT user.settings.show_email_public == 'N' %]
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/td&gt;&lt;td width='70%' valign=&quot;top&quot;&gt;
+
+[% IF recent_topics.size %]
+&lt;!-- Start Recent Topics --&gt;
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+    &lt;tbody&gt;
+	&lt;tr class='title'&gt;&lt;td&gt;&lt;span style=&quot;float: right;&quot;&gt;&lt;a href=&quot;/u/[% user.username %]/topics&quot;&gt;View More&lt;/a&gt;&lt;/span&gt;Recent Topics&lt;/td&gt;&lt;/tr&gt;
+    &lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+&lt;br /&gt;
+&lt;div class='one'&gt;
+&lt;table height='28' align='center'&gt;
+	&lt;tr class=&quot;title&quot; align='center'&gt;
+	&lt;td width='200'&gt;[% c.loc('Forum') %]&lt;/td&gt;
+	&lt;td width='*'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
+	&lt;td width='40'&gt;[% c.loc(&quot;Reply&quot;) %]&lt;/td&gt;
+	&lt;td width='40'&gt;[% c.loc(&quot;Hit&quot;) %]&lt;/td&gt;
+	&lt;td width='200'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% FOREACH t IN recent_topics %]
+&lt;div class='multi'&gt;
+&lt;table align='center'&gt;
+	&lt;tr align='center'&gt;
+	&lt;td class='forum2' width='200'&gt;&lt;a href='/forum/[% t.forum.forum_code %]'&gt;[% t.forum.name %]&lt;/a&gt;&lt;/td&gt;
+	&lt;td class='forum2' valign='top' width='*'&gt;
+		&lt;table&gt;
+			&lt;tr&gt;
+			&lt;td align=&quot;left&quot;&gt;
+			    [% IF t.elite %]
+			    &lt;span class='highlight'&gt;[Elite]&lt;/a&gt; 
+			    [% END %]
+			    &lt;a href='/forum/[% t.forum.forum_code %]/[% t.topic_id %]'&gt;&lt;span class='semilight'&gt;[% t.title %]&lt;/span&gt;&lt;/a&gt;
+			&lt;/td&gt;
+			&lt;/tr&gt;
+    	&lt;/table&gt;
+	&lt;/td&gt;
+	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.total_replies %]&lt;/span&gt;&lt;/td&gt;
+	&lt;td class='forum2' width='40'&gt;&lt;span class='highlight'&gt;[% t.hit %]&lt;/span&gt;&lt;/td&gt;
+	&lt;td class='forum2' width='200' align='right'&gt;&lt;a href='/u/[% t.last_updator.username %]'&gt;[% t.last_updator.nickname %]&lt;/a&gt; | &lt;span class='date'&gt;[% date_format(t.last_update_date) %]&lt;/span&gt;&lt;/td&gt;
+	&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+[% END %]
+&lt;!-- END Recent Topics --&gt;
+[% END %]
+
+[% IF shared_items.size %]
+&lt;!-- Start Shared Items --&gt;
+&lt;br /&gt;
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+    &lt;tbody&gt;
+	&lt;tr class='title'&gt;&lt;td&gt;&lt;span style=&quot;float: right;&quot;&gt;&lt;a href=&quot;/u/[% user.username %]/shared&quot;&gt;View More&lt;/a&gt;&lt;/span&gt;Shared Items&lt;/td&gt;&lt;/tr&gt;
+    &lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+&lt;br /&gt;
+&lt;div class='one'&gt;
+&lt;table height='28' align='center'&gt;
+&lt;tr align='center' class='title'&gt;
+    &lt;td align='left'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
+    &lt;td width='180'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
+    &lt;td width='180'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
+&lt;/tr&gt;
+[% FOREACH item IN shared_items %]
+&lt;tr align='center' class='misc[% IF loop.count mod 2 %]1[% ELSE %]2[% END %]'&gt;
+
+[% INCLUDE include/object_tds.html object = item %]
+
+&lt;/tr&gt;
+[% END %]
+&lt;/table&gt;
+&lt;/div&gt;
+&lt;!-- END Shared Items --&gt;
+[% END %]
+
+[% INCLUDE comment/show_with_head.html %]
+&lt;br /&gt;
+[% INCLUDE comment/post.html %]
+
+    &lt;/td&gt;&lt;/tr&gt;
 &lt;/table&gt;
\ No newline at end of file</diff>
      <filename>templates/u/profile.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,42 +1,42 @@
-[% title = 'Shared Items' %]
-
-[% c.load_once(&quot;site/star.js&quot;) %]
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-
-&lt;div id='recent_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/u/[% user.username %]'&gt;&lt;span&gt;[% user.nickname %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='/u/[% user.username %]/shared'&gt;&lt;span&gt;[% c.loc('Starred Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/u/[% user.username %]/topics'&gt;&lt;span&gt;[% c.loc('Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-&lt;tr align='center' class='title'&gt;
-    [% IF c.user_exists %]&lt;td width='20'&gt;[% c.loc(&quot;Share&quot;) %]&lt;/td&gt;[% END %]
-    &lt;td align='left'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
-    &lt;td width='180'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
-    &lt;td width='180'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
-&lt;/tr&gt;
-[% FOREACH item IN shared_items %]
-&lt;tr align='center' class='misc[% IF loop.count mod 2 %]1[% ELSE %]2[% END %]'&gt;
-
-[% IF c.user_exists %]
-&lt;td&gt;&lt;a href=&quot;javascript:share('[% item.object_type %]', '[% item.object_id %]', 'shareDiv')&quot;&gt;&lt;span id='shareDiv'&gt;&lt;img src='[% c.config.dir.images %]/site/t/[% IF item.is_shared;'unshare';ELSE;'share';END; %].gif' /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
-[% END %]
-
-[% INCLUDE include/object_tds.html object = item %]
-
-&lt;/tr&gt;
-[% END %]
-&lt;/table&gt;
-
-&lt;br /&gt;
-&lt;table align='center'&gt;
-&lt;tr&gt;&lt;td class='misc1'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% title = 'Shared Items' %]
+
+[% c.load_once(&quot;site/star.js&quot;) %]
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+
+&lt;div id='recent_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/u/[% user.username %]'&gt;&lt;span&gt;[% user.nickname %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='/u/[% user.username %]/shared'&gt;&lt;span&gt;[% c.loc('Starred Items') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/u/[% user.username %]/topics'&gt;&lt;span&gt;[% c.loc('Recent Topics') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+&lt;tr align='center' class='title'&gt;
+    [% IF c.user_exists %]&lt;td width='20'&gt;[% c.loc(&quot;Share&quot;) %]&lt;/td&gt;[% END %]
+    &lt;td align='left'&gt;[% c.loc(&quot;Subject&quot;) %]&lt;/td&gt;
+    &lt;td width='180'&gt;[% c.loc(&quot;Author&quot;) %]&lt;/td&gt;
+    &lt;td width='180'&gt;[% c.loc(&quot;Last Update&quot;) %]&lt;/td&gt;
+&lt;/tr&gt;
+[% FOREACH item IN shared_items %]
+&lt;tr align='center' class='misc[% IF loop.count mod 2 %]1[% ELSE %]2[% END %]'&gt;
+
+[% IF c.user_exists %]
+&lt;td&gt;&lt;a href=&quot;javascript:share('[% item.object_type %]', '[% item.object_id %]', 'shareDiv')&quot;&gt;&lt;span id='shareDiv'&gt;&lt;img src='[% c.config.dir.images %]/site/t/[% IF item.is_shared;'unshare';ELSE;'share';END; %].gif' /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
+[% END %]
+
+[% INCLUDE include/object_tds.html object = item %]
+
+&lt;/tr&gt;
+[% END %]
+&lt;/table&gt;
+
+&lt;br /&gt;
+&lt;table align='center'&gt;
+&lt;tr&gt;&lt;td class='misc1'&gt;[% INCLUDE sub/pager.html %]&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/u/shared.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,15 @@
-    &lt;input type='file' size='40' name='upload' /&gt; 
-    &lt;select&gt;&lt;option value=''&gt;[% c.loc('Supported Types:') %]&lt;/option&gt;&lt;option&gt;----------&lt;/option&gt;
-    [% FOREACH attach_type IN c.config.upload.valid_types %]
-    &lt;option value='[% attach_type %]'&gt;[% attach_type %]&lt;/option&gt;
-    [% END %]
-    &lt;/select&gt; [% c.loc('Size Limit:') %] [% c.config.upload.max_size %] K
-    [% IF c.form.error('upload') %]&lt;div class='highlight'&gt;
-    [% IF c.form.error('upload', 'EXCEED_MAX_SIZE') %]
-    Your Attachment is larger than [% c.config.upload.max_size %].
-    [% ELSIF c.form.error('upload', 'UNSUPPORTED_FILETYPE') %]
-    Your Attachment filetype is not supported yet.
-    [% ELSE %]
-    Unknown reason.
-    [% END %]
-    &lt;/div&gt;[% END %]
+    &lt;input type='file' size='40' name='upload' /&gt; 
+    &lt;select&gt;&lt;option value=''&gt;[% c.loc('Supported Types:') %]&lt;/option&gt;&lt;option&gt;----------&lt;/option&gt;
+    [% FOREACH attach_type IN c.config.upload.valid_types %]
+    &lt;option value='[% attach_type %]'&gt;[% attach_type %]&lt;/option&gt;
+    [% END %]
+    &lt;/select&gt; [% c.loc('Size Limit:') %] [% c.config.upload.max_size %] K
+    [% IF c.form.error('upload') %]&lt;div class='highlight'&gt;
+    [% IF c.form.error('upload', 'EXCEED_MAX_SIZE') %]
+    Your Attachment is larger than [% c.config.upload.max_size %].
+    [% ELSIF c.form.error('upload', 'UNSUPPORTED_FILETYPE') %]
+    Your Attachment filetype is not supported yet.
+    [% ELSE %]
+    Unknown reason.
+    [% END %]
+    &lt;/div&gt;[% END %]</diff>
      <filename>templates/upload/input.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,24 @@
-[% USE Math %]
-
-[% upload_id = upload.upload_id;
-   filetype  = upload.filetype;
-   dir1 = upload_id / 3200 / 3200;
-   dir1 = Math.int(dir1);
-   dir2 = upload_id / 3200;
-   dir2 = Math.int(dir2);
-%]
-
-&lt;div class='attachment'&gt;
-[% IF filetype == 'jpg' OR filetype == 'jpeg' OR filetype == 'gif' OR filetype == 'gif' %]
-
-[% global_has_photos = 1 %][%# refer comment/show.html %]
-
-&lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot; target='_blank'&gt;&lt;img src='[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]' /&gt;&lt;/a&gt;
-
-[% ELSE %]
-
-We have &lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot;&gt;[% upload.filename %]&lt;/a&gt; attached.
-
-[% END %]
-&lt;/div&gt;
+[% USE Math %]
+
+[% upload_id = upload.upload_id;
+   filetype  = upload.filetype;
+   dir1 = upload_id / 3200 / 3200;
+   dir1 = Math.int(dir1);
+   dir2 = upload_id / 3200;
+   dir2 = Math.int(dir2);
+%]
+
+&lt;div class='attachment'&gt;
+[% IF filetype == 'jpg' OR filetype == 'jpeg' OR filetype == 'gif' OR filetype == 'gif' %]
+
+[% global_has_photos = 1 %][%# refer comment/show.html %]
+
+&lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot; target='_blank'&gt;&lt;img src='[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]' /&gt;&lt;/a&gt;
+
+[% ELSE %]
+
+We have &lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot;&gt;[% upload.filename %]&lt;/a&gt; attached.
+
+[% END %]
+&lt;/div&gt;
 &lt;p&gt;&lt;/p&gt;
\ No newline at end of file</diff>
      <filename>templates/upload/upload.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,85 +1,85 @@
-[% USE Math %]
-&lt;script type=&quot;text/javascript&quot;&gt;
-    google.load(&quot;jqueryui&quot;, &quot;1.5.3&quot;);
-&lt;/script&gt;
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
-
-&lt;form method='post'&gt;
-&lt;input type='hidden' name='referer' value='[% c.req.param('referer') %]' /&gt;
-&lt;div id='login_tabs' class='tabs'&gt;
-    &lt;ul&gt;
-        &lt;li&gt;&lt;a href='#username'&gt;&lt;span&gt;[% c.loc(&quot;Login By Username&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='#email'&gt;&lt;span&gt;[% c.loc(&quot;Login By Email&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div id='username'&gt;
-
-    &lt;div class='one'&gt;
-    &lt;table align='center'&gt;
-    	&lt;tbody&gt;
-    	[% IF error %]
-    	&lt;tr class='misc2'&gt;&lt;td colspan='2'&gt;&lt;span style='color:red'&gt;
-    	[% SWITCH error %]
-    	    [% CASE 'ERROR_ALL_REQUIRED' %]
-    	    ALL is required.
-    	    [% CASE 'ERROR_AUTH_FAILED' %]
-    	    incorrect password or username.
-    	    [% CASE 'ERROR_CAPTCHA' %]
-    	    Wrong captcha, please try again.
-    	    [% CASE %]
-    	    [% error %]
-    	[% END %]
-    	&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
-    	[% END %]
-    	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;&lt;label for=&quot;username&quot;&gt;[% c.loc('Username') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' value='[% c.req.param('username') %]' size='12' /&gt;&lt;/td&gt;&lt;/tr&gt;
-    	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;&lt;label for=&quot;password&quot;&gt;[% c.loc('Password') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt; &lt;a href='/profile/forget_password'&gt;[% c.loc('Forget password?') %]&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
-    	&lt;/tbody&gt;
-    &lt;/table&gt;
-    &lt;/div&gt;
-
-    &lt;/div&gt;
-    &lt;div id='email'&gt;
-        
-    &lt;div class='one'&gt;
-    &lt;table align='center'&gt;
-    	&lt;tbody&gt;
-    	[% IF error %]
-    	&lt;tr class='misc2'&gt;&lt;td colspan='2'&gt;&lt;span style='color:red'&gt;
-    	[% SWITCH error %]
-    	    [% CASE 'ERROR_ALL_REQUIRED' %]
-    	    ALL is required.
-    	    [% CASE 'ERROR_AUTH_FAILED' %]
-    	    incorrect password or email.
-    	    [% CASE 'ERROR_CAPTCHA' %]
-    	    Wrong captcha, please try again.
-    	    [% CASE %]
-    	    [% error %]
-    	[% END %]
-    	&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
-    	[% END %]
-    	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;&lt;label for=&quot;email&quot;&gt;[% c.loc('Email') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' value='[% c.req.param('email') %]' size='12' /&gt;&lt;/td&gt;&lt;/tr&gt;
-    	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;&lt;label for=&quot;email_password&quot;&gt;[% c.loc('Password') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='email_password' id=&quot;email_password&quot; size='12' /&gt; &lt;a href='/profile/forget_password'&gt;[% c.loc('Forget password?') %]&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
-    	&lt;/tbody&gt;
-    &lt;/table&gt;
-    &lt;/div&gt;
-     
-    &lt;/div&gt;
-&lt;div class='one'&gt;
-    &lt;table align='center'&gt;
-    	&lt;tbody&gt;
-    	[% IF failure_login_times &gt; 2 %]
-        &lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Captcha') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='captcha' size='12' style=&quot;vertical-align: middle;&quot; /&gt;&lt;img src='/captcha?stupidie=[% Math.rand(100000) %]' style=&quot;vertical-align: middle;&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
-        [% END %]
-    	&lt;tr width='20%' class='misc2'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='checkbox' name='remember_me' id='remember_me' value='1' /&gt; &lt;label for='remember_me'&gt;[% c.loc(&quot;Remember me?&quot;) %]&lt;/label&gt;&lt;/td&gt;&lt;/tr&gt;
-    	&lt;tr class='misc2'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-    	&lt;/tbody&gt;
-    &lt;/table&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;/form&gt;
-
-&lt;script&gt;
-    $().ready(function() {
-        $('#login_tabs &gt; ul').tabs();
-        $('#login_tabs &gt; ul').tabs('select', [% IF c.req.param('email') %]1[% ELSE %]0[% END %]);
-    });
+[% USE Math %]
+&lt;script type=&quot;text/javascript&quot;&gt;
+    google.load(&quot;jqueryui&quot;, &quot;1.5.3&quot;);
+&lt;/script&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.all.css&quot;) %]
+
+&lt;form method='post'&gt;
+&lt;input type='hidden' name='referer' value='[% c.req.param('referer') %]' /&gt;
+&lt;div id='login_tabs' class='tabs'&gt;
+    &lt;ul&gt;
+        &lt;li&gt;&lt;a href='#username'&gt;&lt;span&gt;[% c.loc(&quot;Login By Username&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='#email'&gt;&lt;span&gt;[% c.loc(&quot;Login By Email&quot;) %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div id='username'&gt;
+
+    &lt;div class='one'&gt;
+    &lt;table align='center'&gt;
+    	&lt;tbody&gt;
+    	[% IF error %]
+    	&lt;tr class='misc2'&gt;&lt;td colspan='2'&gt;&lt;span style='color:red'&gt;
+    	[% SWITCH error %]
+    	    [% CASE 'ERROR_ALL_REQUIRED' %]
+    	    ALL is required.
+    	    [% CASE 'ERROR_AUTH_FAILED' %]
+    	    incorrect password or username.
+    	    [% CASE 'ERROR_CAPTCHA' %]
+    	    Wrong captcha, please try again.
+    	    [% CASE %]
+    	    [% error %]
+    	[% END %]
+    	&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
+    	[% END %]
+    	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;&lt;label for=&quot;username&quot;&gt;[% c.loc('Username') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' value='[% c.req.param('username') %]' size='12' /&gt;&lt;/td&gt;&lt;/tr&gt;
+    	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;&lt;label for=&quot;password&quot;&gt;[% c.loc('Password') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt; &lt;a href='/profile/forget_password'&gt;[% c.loc('Forget password?') %]&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
+    	&lt;/tbody&gt;
+    &lt;/table&gt;
+    &lt;/div&gt;
+
+    &lt;/div&gt;
+    &lt;div id='email'&gt;
+        
+    &lt;div class='one'&gt;
+    &lt;table align='center'&gt;
+    	&lt;tbody&gt;
+    	[% IF error %]
+    	&lt;tr class='misc2'&gt;&lt;td colspan='2'&gt;&lt;span style='color:red'&gt;
+    	[% SWITCH error %]
+    	    [% CASE 'ERROR_ALL_REQUIRED' %]
+    	    ALL is required.
+    	    [% CASE 'ERROR_AUTH_FAILED' %]
+    	    incorrect password or email.
+    	    [% CASE 'ERROR_CAPTCHA' %]
+    	    Wrong captcha, please try again.
+    	    [% CASE %]
+    	    [% error %]
+    	[% END %]
+    	&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
+    	[% END %]
+    	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;&lt;label for=&quot;email&quot;&gt;[% c.loc('Email') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' value='[% c.req.param('email') %]' size='12' /&gt;&lt;/td&gt;&lt;/tr&gt;
+    	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;&lt;label for=&quot;email_password&quot;&gt;[% c.loc('Password') %]&lt;/label&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='email_password' id=&quot;email_password&quot; size='12' /&gt; &lt;a href='/profile/forget_password'&gt;[% c.loc('Forget password?') %]&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
+    	&lt;/tbody&gt;
+    &lt;/table&gt;
+    &lt;/div&gt;
+     
+    &lt;/div&gt;
+&lt;div class='one'&gt;
+    &lt;table align='center'&gt;
+    	&lt;tbody&gt;
+    	[% IF failure_login_times &gt; 2 %]
+        &lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Captcha') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='captcha' size='12' style=&quot;vertical-align: middle;&quot; /&gt;&lt;img src='/captcha?stupidie=[% Math.rand(100000) %]' style=&quot;vertical-align: middle;&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
+        [% END %]
+    	&lt;tr width='20%' class='misc2'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='checkbox' name='remember_me' id='remember_me' value='1' /&gt; &lt;label for='remember_me'&gt;[% c.loc(&quot;Remember me?&quot;) %]&lt;/label&gt;&lt;/td&gt;&lt;/tr&gt;
+    	&lt;tr class='misc2'&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+    	&lt;/tbody&gt;
+    &lt;/table&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/form&gt;
+
+&lt;script&gt;
+    $().ready(function() {
+        $('#login_tabs &gt; ul').tabs();
+        $('#login_tabs &gt; ul').tabs('select', [% IF c.req.param('email') %]1[% ELSE %]0[% END %]);
+    });
 &lt;/script&gt;
\ No newline at end of file</diff>
      <filename>templates/user/login.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,43 +1,43 @@
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-[% c.load_once(&quot;jquery/validate.js&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;Username:&lt;/td&gt;&lt;td&gt;[% c.user.username %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt;
-    [% IF c.form.error('password') %]
-	    Please type your password correctly.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' size='24' class=&quot;{required:true,email:true}&quot; /&gt;
-	[% IF c.form.error('email') %]
-	    [% IF c.form.error('email', 'DBIC_UNIQUE') %]
-	    This email is used by another one.
-	    [% ELSIF c.form.error('email', 'EMAIL_DUPLICATION') %]
-	    You should type a different email.
-	    [% ELSE %]
-	    you should spec a correct email.
-	    [% END %]
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+[% c.load_once(&quot;jquery/validate.js&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;Username:&lt;/td&gt;&lt;td&gt;[% c.user.username %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt;
+    [% IF c.form.error('password') %]
+	    Please type your password correctly.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' size='24' class=&quot;{required:true,email:true}&quot; /&gt;
+	[% IF c.form.error('email') %]
+	    [% IF c.form.error('email', 'DBIC_UNIQUE') %]
+	    This email is used by another one.
+	    [% ELSIF c.form.error('email', 'EMAIL_DUPLICATION') %]
+	    You should type a different email.
+	    [% ELSE %]
+	    you should spec a correct email.
+	    [% END %]
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/user/profile/change_email.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,42 +1,42 @@
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	&lt;form method='post'&gt;
-	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;[% c.loc('Username:') %]&lt;/td&gt;&lt;td&gt;[% user.username %]
-	&lt;/td&gt;&lt;/tr&gt;
-	[% UNLESS use_security_code %]
-    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;Old Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt;
-	[% IF c.form.error('password') %]
-	    Please type your old password correctly.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	[% END %]
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;New Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='new_password' size='12' /&gt;
-	[% IF c.form.error('password') %]
-	password should be 6-20
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Confirm Password') %]&lt;/td&gt;&lt;td&gt;
-	&lt;input type='password' name='confirm_password' size='12' /&gt;
-	[% IF c.form.error('passwords') %]Confirm password is not the same as above[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/form&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	&lt;form method='post'&gt;
+	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;[% c.loc('Username:') %]&lt;/td&gt;&lt;td&gt;[% user.username %]
+	&lt;/td&gt;&lt;/tr&gt;
+	[% UNLESS use_security_code %]
+    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;Old Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt;
+	[% IF c.form.error('password') %]
+	    Please type your old password correctly.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	[% END %]
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;New Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='new_password' size='12' /&gt;
+	[% IF c.form.error('password') %]
+	password should be 6-20
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Confirm Password') %]&lt;/td&gt;&lt;td&gt;
+	&lt;input type='password' name='confirm_password' size='12' /&gt;
+	[% IF c.form.error('passwords') %]Confirm password is not the same as above[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/form&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/user/profile/change_password.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,51 +1,51 @@
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	&lt;form method='post'&gt;
-	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;Old Username:&lt;/td&gt;&lt;td&gt;[% c.user.username %]
-	&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt;
-    [% IF c.form.error('password') %]
-	    Please type your password correctly.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;New Username:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='new_username' size='12' /&gt;
-	[% IF c.form.error('new_username') %]
-	    [% IF c.form.error('new_username', 'HAS_BLANK') %]
-	    don't put blank in your username.
-	    [% ELSIF c.form.error('new_username', 'HAS_SPECAIL_CHAR') %]
-	    only A-Z, a-z, 0-9, - is allowed.
-	    [% ELSIF c.form.error('new_username', 'HAS_RESERVED') %]
-	    this username is reserved.
-	    [% ELSIF c.form.error('new_username', 'DBIC_UNIQUE') %]
-	    This username is used by another one.
-	    [% ELSE %]
-	    username should be 6-20 chars.
-	    [% END %]
-	[% END %]
-	only A-Z, a-z, 0-9, -, _ is allowed.
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Confirm Username:&lt;/td&gt;&lt;td&gt;
-	&lt;input type='text' name='confirm_username' size='12' /&gt;
-	[% IF c.form.error('usernames') %]Confirm Username is not the same as New Username[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/form&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	&lt;form method='post'&gt;
+	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;Old Username:&lt;/td&gt;&lt;td&gt;[% c.user.username %]
+	&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc2'&gt;&lt;td align='right'&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input type='password' name='password' size='12' /&gt;
+    [% IF c.form.error('password') %]
+	    Please type your password correctly.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;New Username:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='new_username' size='12' /&gt;
+	[% IF c.form.error('new_username') %]
+	    [% IF c.form.error('new_username', 'HAS_BLANK') %]
+	    don't put blank in your username.
+	    [% ELSIF c.form.error('new_username', 'HAS_SPECAIL_CHAR') %]
+	    only A-Z, a-z, 0-9, - is allowed.
+	    [% ELSIF c.form.error('new_username', 'HAS_RESERVED') %]
+	    this username is reserved.
+	    [% ELSIF c.form.error('new_username', 'DBIC_UNIQUE') %]
+	    This username is used by another one.
+	    [% ELSE %]
+	    username should be 6-20 chars.
+	    [% END %]
+	[% END %]
+	only A-Z, a-z, 0-9, -, _ is allowed.
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Confirm Username:&lt;/td&gt;&lt;td&gt;
+	&lt;input type='text' name='confirm_username' size='12' /&gt;
+	[% IF c.form.error('usernames') %]Confirm Username is not the same as New Username[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/form&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/user/profile/change_username.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,108 +1,108 @@
-[% USE FillInForm %]
-[% UNLESS c.req.method == 'POST';
-    data = {
-        homepage  =&gt; user_details.homepage,
-        nickname  =&gt; c.user.nickname,
-        gender    =&gt; c.user.gender,
-        lang      =&gt; c.req.param('lang') || c.user.lang || lang,
-        year      =&gt; year, month =&gt; month, day =&gt; day,
-        country   =&gt; c.user.country || 'cn',
-        qq   =&gt; user_details.qq,
-        msn  =&gt; user_details.msn,
-        gtalk  =&gt; user_details.gtalk,
-        yahoo  =&gt; user_details.yahoo,
-        skype  =&gt; user_details.skype,
-    };
-END; %]
-
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-[% c.load_once(&quot;jquery/validate.js&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-[% FILTER fillinform fdat =&gt; data || c.req.params %]
-&lt;div class='one'&gt;
-&lt;form method='post'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Nickname') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='nickname' size='24' /&gt;
-	[% IF c.form.error('nickname') %]
-	the length of nickname should be more than 4 and less than 20
-	[% END %]
-	&lt;/td&gt;
-	&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Preferable Language:&lt;/td&gt;&lt;td&gt;&lt;select name='lang'&gt;&lt;option value='en'&gt;English&lt;/option&gt;&lt;option value='cn'&gt;&#31616;&#20307;&#20013;&#25991;&lt;/option&gt;&lt;option value='tw'&gt;&#32321;&#39636;&#20013;&#25991;&lt;/option&gt;
-    &lt;/select&gt;
-	[% IF c.form.error('lang') %]
-	    [% c.loc(&quot;Illegal Request.&quot;) %]
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Gender') %]&lt;/td&gt;&lt;td&gt;&lt;select name='gender'&gt;&lt;option value=''&gt;Secret&lt;/option&gt;&lt;option value='M'&gt;Male&lt;/option&gt;&lt;option value='F'&gt;Female&lt;/option&gt;
-    &lt;/select&gt;
-	[% IF c.form.error('gender') %]
-	    Please select your gender.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Birthday') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='year' size='4' maxlength='4' /&gt; / &lt;input type='text' name='month' size='2' maxlength='2' /&gt; / &lt;input type='text' name='day' size='2' maxlength='2' /&gt;
-	[% IF c.form.error('birthday') %]
-	Please type in a valid birthday.
-	[% END %]
-	Format: 1984/2/6
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Homepage') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='homepage' size='24' class=&quot;{url:true}&quot; /&gt;
-	[% IF c.form.error('homepage') %]
-	Please type a valid homepage URL.
-	[% END %]
-	Format: http://www.fayland.org/
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Location Information') %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Country/Territory') %]&lt;/td&gt;&lt;td&gt;
-	    &lt;select name='country'&gt;
-	    [% FOREACH country IN countries.keys.sort %]
-	    &lt;option value='[% country %]'&gt;[% country %]:[% countries.$country %]&lt;/option&gt;
-	    [% END %]
-	    &lt;/select&gt;
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Contact Information') %]&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;QQ:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='qq' size='24' /&gt;
-	[% IF c.form.error('qq') %]
-	Please type a valid QQ Number.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;MSN:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='msn' size='24' /&gt;
-	[% IF c.form.error('msn') %]
-	Please type a valid MSN.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Gtalk:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='gtalk' size='24' /&gt;
-	[% IF c.form.error('gtalk') %]
-	Please type a valid GTalk.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Yahoo! ID:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='yahoo' size='24' /&gt;
-	[% IF c.form.error('yahoo') %]
-	Please type a valid Yahoo! ID.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Skype:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='skype' size='24' /&gt;
-	[% IF c.form.error('skype') %]
-	Please type a valid Skype account.
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-[% END %]
-
-    &lt;/div&gt;
+[% USE FillInForm %]
+[% UNLESS c.req.method == 'POST';
+    data = {
+        homepage  =&gt; user_details.homepage,
+        nickname  =&gt; c.user.nickname,
+        gender    =&gt; c.user.gender,
+        lang      =&gt; c.req.param('lang') || c.user.lang || lang,
+        year      =&gt; year, month =&gt; month, day =&gt; day,
+        country   =&gt; c.user.country || 'cn',
+        qq   =&gt; user_details.qq,
+        msn  =&gt; user_details.msn,
+        gtalk  =&gt; user_details.gtalk,
+        yahoo  =&gt; user_details.yahoo,
+        skype  =&gt; user_details.skype,
+    };
+END; %]
+
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+[% c.load_once(&quot;jquery/validate.js&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/profile_photo'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+[% FILTER fillinform fdat =&gt; data || c.req.params %]
+&lt;div class='one'&gt;
+&lt;form method='post'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Nickname') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='nickname' size='24' /&gt;
+	[% IF c.form.error('nickname') %]
+	the length of nickname should be more than 4 and less than 20
+	[% END %]
+	&lt;/td&gt;
+	&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Preferable Language:&lt;/td&gt;&lt;td&gt;&lt;select name='lang'&gt;&lt;option value='en'&gt;English&lt;/option&gt;&lt;option value='cn'&gt;&#31616;&#20307;&#20013;&#25991;&lt;/option&gt;&lt;option value='tw'&gt;&#32321;&#39636;&#20013;&#25991;&lt;/option&gt;
+    &lt;/select&gt;
+	[% IF c.form.error('lang') %]
+	    [% c.loc(&quot;Illegal Request.&quot;) %]
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Gender') %]&lt;/td&gt;&lt;td&gt;&lt;select name='gender'&gt;&lt;option value=''&gt;Secret&lt;/option&gt;&lt;option value='M'&gt;Male&lt;/option&gt;&lt;option value='F'&gt;Female&lt;/option&gt;
+    &lt;/select&gt;
+	[% IF c.form.error('gender') %]
+	    Please select your gender.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;[% c.loc('Birthday') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='year' size='4' maxlength='4' /&gt; / &lt;input type='text' name='month' size='2' maxlength='2' /&gt; / &lt;input type='text' name='day' size='2' maxlength='2' /&gt;
+	[% IF c.form.error('birthday') %]
+	Please type in a valid birthday.
+	[% END %]
+	Format: 1984/2/6
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Homepage') %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='homepage' size='24' class=&quot;{url:true}&quot; /&gt;
+	[% IF c.form.error('homepage') %]
+	Please type a valid homepage URL.
+	[% END %]
+	Format: http://www.fayland.org/
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Location Information') %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc('Country/Territory') %]&lt;/td&gt;&lt;td&gt;
+	    &lt;select name='country'&gt;
+	    [% FOREACH country IN countries.keys.sort %]
+	    &lt;option value='[% country %]'&gt;[% country %]:[% countries.$country %]&lt;/option&gt;
+	    [% END %]
+	    &lt;/select&gt;
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;[% c.loc('Contact Information') %]&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;QQ:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='qq' size='24' /&gt;
+	[% IF c.form.error('qq') %]
+	Please type a valid QQ Number.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;MSN:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='msn' size='24' /&gt;
+	[% IF c.form.error('msn') %]
+	Please type a valid MSN.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Gtalk:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='gtalk' size='24' /&gt;
+	[% IF c.form.error('gtalk') %]
+	Please type a valid GTalk.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Yahoo! ID:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='yahoo' size='24' /&gt;
+	[% IF c.form.error('yahoo') %]
+	Please type a valid Yahoo! ID.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td align='right'&gt;Skype:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='skype' size='24' /&gt;
+	[% IF c.form.error('skype') %]
+	Please type a valid Skype account.
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+[% END %]
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/user/profile/edit.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,21 +1,21 @@
-&lt;div class='one'&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	&lt;form method='post'&gt;
-	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Forget Password?&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;Username:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' value='[% c.req.param('username') %]' /&gt;
-	[% IF ERROR_NOT_SUCH_USER; %]
-	The username([% c.req.param('username') %]) DOES NOT exist
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc2'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
-    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' value='[% c.req.param('email') %]' /&gt;
-	[% IF ERROR_NOT_SUCH_EMAIL; %]
-	The email([% c.req.param('email') %]) DOES NOT exist
-	[% END %]
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/form&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
+&lt;div class='one'&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	&lt;form method='post'&gt;
+	&lt;tr class='title'&gt;&lt;td colspan='2'&gt;Forget Password?&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td width='20%' align='right'&gt;Username:&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' value='[% c.req.param('username') %]' /&gt;
+	[% IF ERROR_NOT_SUCH_USER; %]
+	The username([% c.req.param('username') %]) DOES NOT exist
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc2'&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr class='misc1'&gt;&lt;td align='right'&gt;[% c.loc(&quot;Email&quot;) %]&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' value='[% c.req.param('email') %]' /&gt;
+	[% IF ERROR_NOT_SUCH_EMAIL; %]
+	The email([% c.req.param('email') %]) DOES NOT exist
+	[% END %]
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc2'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/form&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/user/profile/forget_password.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,44 +1,44 @@
-[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
-
-&lt;div id='edit_profile_tabs' class='tabs'&gt;
-    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
-        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
-    &lt;/ul&gt;
-    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
-
-&lt;div class='one'&gt;
-&lt;form method='post' enctype=&quot;multipart/form-data&quot;&gt;
-&lt;table align='center'&gt;
-	&lt;tbody&gt;
-	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Profile Photo:&lt;/td&gt;&lt;td&gt;
-	
-  [% upload = c.user.profile_photo.upload %]
-  [% IF upload %]
-  [% USE Math %]
-
-  [% upload_id = upload.upload_id;
-     filetype  = upload.filetype;
-     dir1 = upload_id / 3200 / 3200;
-     dir1 = Math.int(dir1);
-     dir2 = upload_id / 3200;
-     dir2 = Math.int(dir2);
-  %]
-  &lt;input type='radio' name='attachment_action' value='stay' checked='yes' /&gt; Stay as before [ &lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot;&gt;[% upload.filename %]&lt;/a&gt; ]&lt;br /&gt;
-  &lt;input type='radio' name='attachment_action' value='delete' /&gt; Delete it&lt;br /&gt;
-  &lt;input type='radio' name='attachment_action' value='replace' /&gt; Replace it&lt;br /&gt;
-  [% END %]
-  [% INCLUDE upload/input.html %]
-	
-	&lt;/td&gt;&lt;/tr&gt;
-	&lt;tr class='misc1'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
-	&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-
-    &lt;/div&gt;
+[% c.load_once(&quot;jquery.ui/themes/flora/flora.tabs.css&quot;) %]
+
+&lt;div id='edit_profile_tabs' class='tabs'&gt;
+    &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
+        &lt;li&gt;&lt;a href='/profile/edit'&gt;&lt;span&gt;[% c.loc('Edit Profile') %]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_username'&gt;&lt;span&gt;Change Username&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_password'&gt;&lt;span&gt;Change Password&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href='/profile/change_email'&gt;&lt;span&gt;Change Email&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+        &lt;li class=&quot;ui-tabs-selected&quot;&gt;&lt;a href='javascript:void(0);'&gt;&lt;span&gt;Profile Photo&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+    &lt;div class=&quot;ui-tabs-panel&quot;&gt;
+
+&lt;div class='one'&gt;
+&lt;form method='post' enctype=&quot;multipart/form-data&quot;&gt;
+&lt;table align='center'&gt;
+	&lt;tbody&gt;
+	&lt;tr class='misc2'&gt;&lt;td align='right'&gt;Profile Photo:&lt;/td&gt;&lt;td&gt;
+	
+  [% upload = c.user.profile_photo.upload %]
+  [% IF upload %]
+  [% USE Math %]
+
+  [% upload_id = upload.upload_id;
+     filetype  = upload.filetype;
+     dir1 = upload_id / 3200 / 3200;
+     dir1 = Math.int(dir1);
+     dir2 = upload_id / 3200;
+     dir2 = Math.int(dir2);
+  %]
+  &lt;input type='radio' name='attachment_action' value='stay' checked='yes' /&gt; Stay as before [ &lt;a href=&quot;[% c.config.dir.upload %]/[% dir1 _ '/' _ dir2 _ '/' _ upload.filename %]&quot;&gt;[% upload.filename %]&lt;/a&gt; ]&lt;br /&gt;
+  &lt;input type='radio' name='attachment_action' value='delete' /&gt; Delete it&lt;br /&gt;
+  &lt;input type='radio' name='attachment_action' value='replace' /&gt; Replace it&lt;br /&gt;
+  [% END %]
+  [% INCLUDE upload/input.html %]
+	
+	&lt;/td&gt;&lt;/tr&gt;
+	&lt;tr class='misc1'&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' /&gt;&lt;/td&gt;&lt;/tr&gt;
+	&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+
+    &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>templates/user/profile/profile_photo.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,193 +1,193 @@
-&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
-    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
-&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
-&lt;head&gt;
-&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
-
-[% USE date %]
-
-&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
-&lt;script type=&quot;text/javascript&quot;&gt;
-  // Load jQuery
-  google.load(&quot;jquery&quot;, &quot;1.3.2&quot;);
-&lt;/script&gt;
-
-[% c.load_once(&quot;utils.js&quot;) %]
-[% c.load_once(&quot;common.css&quot;) %]
-[% IF forum.forum_id %]
-    [% TRY %]
-    [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
-    [% USE File( css_file ) %]
-    [% c.load_once(&quot;style/forum&quot; _ forum.forum_id _ &quot;.css&quot;) %]
-    [% CATCH File %]
-    [% c.load_once(&quot;default.css&quot;) %]
-    [% END %]
-[% ELSE %]
-[% c.load_once(&quot;default.css&quot;) %]
-[% END %]
-&lt;title&gt; 
-    [% IF title %]
-    [% title _ ' : ' _ c.config.name %]
-    [% ELSE %]
-    [% c.config.name %]
-    [% END %]
-&lt;/title&gt;
-[% c.user_online(title) # set user online %]
-&lt;link rel=&quot;shortcut icon&quot; href=&quot;[% c.config.dir.static %]/favicon.ico&quot; type=&quot;image/x-icon&quot; /&gt;
-[% IF RSS_URL %]
-&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;[% title %]&quot; href=&quot;[% RSS_URL %]&quot; /&gt;
-[% END %]
-&lt;/head&gt;
-&lt;body&gt;
-
-[% UNLESS simple_wrapper %]
-
-&lt;div id=&quot;gbar&quot;&gt;
-&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
-&lt;tbody&gt;
-&lt;tr&gt;
-&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;
-&lt;b&gt;&lt;a href='/forum'&gt;[% c.config.name %]&lt;/a&gt;&lt;/b&gt;
-&lt;/td&gt;
-[% IF forum %]
-&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;-&gt;&lt;/td&gt;
-&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;
-&lt;b&gt;&lt;a href='[% forum.forum_url %]'&gt;[% forum.name %]&lt;/a&gt;&lt;/b&gt;
-&lt;/td&gt;
-[% END %]
-[% IF topic %]
-&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;-&gt;&lt;/td&gt;
-&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;
-&lt;b&gt;[% topic.title %]&lt;/b&gt;
-&lt;/td&gt;
-[% END %]
-&lt;/tr&gt;
-&lt;/tbody&gt;
-&lt;/table&gt;
-&lt;/div&gt;
-
-&lt;div id=&quot;guser&quot; width=&quot;100%&quot; align=&quot;right&quot;&gt;
-&lt;nowrap&gt;
-    &lt;a href='/help/WhatsNew'&gt;&lt;span class='highlight'&gt;[% c.loc(&quot;What's New?&quot;) %]&lt;/span&gt;&lt;/a&gt; | 
-    [% UNLESS forum %]
-       &lt;a href='/site/recent'&gt;[% c.loc(&quot;Recent Topics&quot;) %]&lt;/a&gt;
-     | &lt;a href='/site/popular'&gt;[% c.loc(&quot;Popular&quot;) %]&lt;/a&gt;
-     [% IF c.config.function_on.create_forum %]
-     | &lt;a href='/forum/create'&gt;[% c.loc(&quot;Create a Forum&quot;) %]&lt;/a&gt;
-     [% END %]
-      &lt;br /&gt;
-    [% END %]
-    [% IF c.user_exists %]
-        [% IF message_unread %]
-        &lt;a href='/message'&gt;&lt;span style='color:red'&gt;[% c.loc( &quot;You have new messages ([_1])&quot;, message_unread) %]&lt;/span&gt;&lt;/a&gt;
-        [% END %]
-     &lt;a href='/message'&gt;[% c.loc('Message') %]&lt;/a&gt;
-     | &lt;a href='/profile/edit'&gt;[% c.loc('Edit Profile') %]&lt;/a&gt;
-     | &lt;a href='/settings'&gt;[% c.loc('Settings') %]&lt;/a&gt;
-     | &lt;a href='/logout'&gt;[% c.loc(&quot;Log out&quot;) %]&lt;/a&gt; 
-     [% IF roles.site.admin OR roles.site.moderator %]
-     | &lt;a href='/admin'&gt;[% c.loc('Site Admin') %]&lt;/a&gt;
-     [% END %]
-    [% ELSE %]
-     &lt;a href='/register'&gt;[% c.loc(&quot;Register&quot;) %]&lt;/a&gt;  | &lt;a href='/login'&gt;[% c.loc(&quot;Log in&quot;) %]&lt;/a&gt; | &lt;a href='/profile/forget_password'&gt;[% c.loc(&quot;Forget password?&quot;) %]&lt;/a&gt;
-    [% END %]
-    [% IF forum %]
-    | &lt;a href=&quot;/search/forum/[% forum.forum_id %]&quot;&gt;[% c.loc(&quot;Search&quot;) %]&lt;/a&gt;
-    [% END %]
-
-    [% IF c.user_exists %]
-    &lt;br /&gt;
-    &lt;a href='/u/[% c.user.username %]'&gt;[% c.loc('My Profile Page') %]&lt;/a&gt; | 
-    &lt;a href='/u/[% c.user.username %]/topics'&gt;[% c.loc('My Recent Topics') %]&lt;/a&gt; | 
-    &lt;a href='/my/starred'&gt;&lt;img src='[% c.config.dir.images %]/site/t/star_on.gif' align='absmiddle' /&gt; [% c.loc(&quot;My Starred Items&quot;) %]&lt;/a&gt; | 
-    &lt;a href='/u/[% c.user.username %]/shared'&gt;&lt;img src='[% c.config.dir.images %]/site/t/unshare.gif' align='absmiddle' /&gt; [% c.loc(&quot;My Shared Items&quot;) %]&lt;/a&gt;
-    [% END %]
-&lt;/nowrap&gt;
-&lt;/div&gt;
-&lt;div class='barline'&gt;&lt;/div&gt;
-&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
-&lt;p&gt;&lt;/p&gt;
-[% END %]
-
-[% content %]
-
-[% UNLESS simple_wrapper %]
-
-[% IF whos_view_this_page %] 
-[% INCLUDE site/whos_view_this_page.html %]
-[% END %]
-
-&lt;div id='footer'&gt;
-    &lt;p&gt;
-    &lt;div&gt;Languages: &lt;a href='[% c.req.uri_with( { lang =&gt; 'en' } ) %]'&gt;English&lt;/a&gt; | &lt;a href='[% c.req.uri_with( { lang =&gt; 'cn' } ) %]'&gt;&#31616;&#20307;&#20013;&#25991;&lt;/a&gt; | &lt;a href='[% c.req.uri_with( { lang =&gt; 'tw' } ) %]'&gt;&#32321;&#39636;&#20013;&#25991;&lt;/a&gt;&lt;/div&gt;
-    [% UNLESS forum %]
-    &lt;a href='/info/about_us'&gt;[% c.loc(&quot;About Us&quot;) %]&lt;/a&gt; | 
-    &lt;a href='/info/tos'&gt;[% c.loc('Terms of Service') %]&lt;/a&gt; | 
-    &lt;a href='/info/privacy'&gt;[% c.loc('Privacy Statement') %]&lt;/a&gt; | 
-    &lt;a href='/info/contact_us'&gt;[% c.loc(&quot;Contact Us&quot;) %]&lt;/a&gt; | 
-    &lt;a href='/help'&gt;[% c.loc(&quot;Help Center&quot;) %]&lt;/a&gt;&lt;br /&gt;
-    [% END %]
-    &amp;copy; [% date.format(date.now, format =&gt;'%Y') %]&amp;nbsp;[% c.config.name %]. Powered by &lt;a href='/info/powered_by'&gt;Foorum [% c.config.VERSION %]&lt;/a&gt;.
-    [% IF RSS_URL %]
-    &lt;a href='[% RSS_URL %]'&gt;&lt;img src='[% c.config.dir.images %]/site/feed-icon-16x16.gif' width='16' height='16' align='absmiddle' /&gt;&lt;/a&gt; 
-    [% END %]
-    &lt;/p&gt;
-&lt;/div&gt;
-&lt;div id='timer'&gt;&lt;p&gt;This page takes [% elapsed_time %] to load. &lt;/p&gt;&lt;/div&gt;
-[% END %]
-
-[% IF c.config.extra.urchin_account AND NOT c.config.debug_mode %]
-&lt;script type=&quot;text/javascript&quot;&gt;
-var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
-document.write(&quot;\&lt;script src='&quot; + gaJsHost + &quot;google-analytics.com/ga.js' type='text/javascript'&gt;\&lt;\/script&gt;&quot; );
-&lt;/script&gt;
-&lt;script type=&quot;text/javascript&quot;&gt;
-var pageTracker = _gat._getTracker(&quot;[% c.config.extra.urchin_account %]&quot;);
-pageTracker._initData();
-pageTracker._trackPageview();
-&lt;/script&gt;
-[% END %]
-
-    [% IF c.config.debug_mode %]
-      &lt;div class=&quot;featurebox&quot;&gt;
-        &lt;h3&gt;Query Log Report&lt;/h3&gt;
-        [% SET total = c.model('DBIC').querylog.time_elapsed | format('%0.6f') %]
-        &lt;div&gt;Total SQL Time: [% total | format('%0.6f') %] seconds&lt;/div&gt;
-        [% SET qcount = c.model('DBIC').querylog.count %]
-        &lt;div&gt;Total Queries: [% qcount %]&lt;/div&gt;
-        [% IF qcount %]
-        &lt;div&gt;Avg Statement Time: [% (c.model('DBIC').querylog.time_elapsed / qcount) | format('%0.6f') %] seconds.&lt;/div&gt;
-        &lt;div&gt;
-         &lt;table class=&quot;table1&quot;&gt;
-          &lt;thead&gt;
-           &lt;tr&gt;
-            &lt;th colspan=&quot;3&quot;&gt;5 Slowest Queries&lt;/th&gt;
-           &lt;/tr&gt;
-          &lt;/thead&gt;
-          &lt;tbody&gt;
-           &lt;tr&gt;
-            &lt;th&gt;Time&lt;/th&gt;
-            &lt;th&gt;%&lt;/th&gt;
-            &lt;th&gt;SQL&lt;/th&gt;
-           &lt;/tr&gt;
-           [% SET i = 0 %]
-           [% FOREACH q = c.model('DBIC').querylog_analyzer.get_sorted_queries %]
-           &lt;tr class=&quot;[% IF loop.count % 2 %]odd[% END %]&quot;&gt;
-            &lt;th class=&quot;sub&quot;&gt;[% q.time_elapsed | format('%0.6f') %]
-            &lt;td&gt;[% ((q.time_elapsed / total ) * 100 ) | format('%i') %]%&lt;/td&gt;
-            &lt;td&gt;[% q.sql %] : ([% q.params.join(', ') %])&lt;/td&gt;
-           &lt;/th&gt;&lt;/tr&gt;
-           [% IF i == 5 %]
-            [% LAST %]
-           [% END %]
-           [% SET i = i + 1 %]
-           [% END %]
-          &lt;/tbody&gt;
-         &lt;/table&gt;
-        &lt;/div&gt;
-        [% END %]
-      &lt;/div&gt;
-    [% END %]
-
-&lt;/body&gt;
+&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
+    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
+&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
+&lt;head&gt;
+&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
+
+[% USE date %]
+
+&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+  // Load jQuery
+  google.load(&quot;jquery&quot;, &quot;1.3.2&quot;);
+&lt;/script&gt;
+
+[% c.load_once(&quot;utils.js&quot;) %]
+[% c.load_once(&quot;common.css&quot;) %]
+[% IF forum.forum_id %]
+    [% TRY %]
+    [% css_file = c.config.home _ '/root/static/css/style/forum' _ forum.forum_id _ '.css' %]
+    [% USE File( css_file ) %]
+    [% c.load_once(&quot;style/forum&quot; _ forum.forum_id _ &quot;.css&quot;) %]
+    [% CATCH File %]
+    [% c.load_once(&quot;default.css&quot;) %]
+    [% END %]
+[% ELSE %]
+[% c.load_once(&quot;default.css&quot;) %]
+[% END %]
+&lt;title&gt; 
+    [% IF title %]
+    [% title _ ' : ' _ c.config.name %]
+    [% ELSE %]
+    [% c.config.name %]
+    [% END %]
+&lt;/title&gt;
+[% c.user_online(title) # set user online %]
+&lt;link rel=&quot;shortcut icon&quot; href=&quot;[% c.config.dir.static %]/favicon.ico&quot; type=&quot;image/x-icon&quot; /&gt;
+[% IF RSS_URL %]
+&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;[% title %]&quot; href=&quot;[% RSS_URL %]&quot; /&gt;
+[% END %]
+&lt;/head&gt;
+&lt;body&gt;
+
+[% UNLESS simple_wrapper %]
+
+&lt;div id=&quot;gbar&quot;&gt;
+&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
+&lt;tbody&gt;
+&lt;tr&gt;
+&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;
+&lt;b&gt;&lt;a href='/forum'&gt;[% c.config.name %]&lt;/a&gt;&lt;/b&gt;
+&lt;/td&gt;
+[% IF forum %]
+&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;-&gt;&lt;/td&gt;
+&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;
+&lt;b&gt;&lt;a href='[% forum.forum_url %]'&gt;[% forum.name %]&lt;/a&gt;&lt;/b&gt;
+&lt;/td&gt;
+[% END %]
+[% IF topic %]
+&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;-&gt;&lt;/td&gt;
+&lt;td class=&quot;gbarp&quot; nowrap=&quot;nowrap&quot;&gt;
+&lt;b&gt;[% topic.title %]&lt;/b&gt;
+&lt;/td&gt;
+[% END %]
+&lt;/tr&gt;
+&lt;/tbody&gt;
+&lt;/table&gt;
+&lt;/div&gt;
+
+&lt;div id=&quot;guser&quot; width=&quot;100%&quot; align=&quot;right&quot;&gt;
+&lt;nowrap&gt;
+    &lt;a href='/help/WhatsNew'&gt;&lt;span class='highlight'&gt;[% c.loc(&quot;What's New?&quot;) %]&lt;/span&gt;&lt;/a&gt; | 
+    [% UNLESS forum %]
+       &lt;a href='/site/recent'&gt;[% c.loc(&quot;Recent Topics&quot;) %]&lt;/a&gt;
+     | &lt;a href='/site/popular'&gt;[% c.loc(&quot;Popular&quot;) %]&lt;/a&gt;
+     [% IF c.config.function_on.create_forum %]
+     | &lt;a href='/forum/create'&gt;[% c.loc(&quot;Create a Forum&quot;) %]&lt;/a&gt;
+     [% END %]
+      &lt;br /&gt;
+    [% END %]
+    [% IF c.user_exists %]
+        [% IF message_unread %]
+        &lt;a href='/message'&gt;&lt;span style='color:red'&gt;[% c.loc( &quot;You have new messages ([_1])&quot;, message_unread) %]&lt;/span&gt;&lt;/a&gt;
+        [% END %]
+     &lt;a href='/message'&gt;[% c.loc('Message') %]&lt;/a&gt;
+     | &lt;a href='/profile/edit'&gt;[% c.loc('Edit Profile') %]&lt;/a&gt;
+     | &lt;a href='/settings'&gt;[% c.loc('Settings') %]&lt;/a&gt;
+     | &lt;a href='/logout'&gt;[% c.loc(&quot;Log out&quot;) %]&lt;/a&gt; 
+     [% IF roles.site.admin OR roles.site.moderator %]
+     | &lt;a href='/admin'&gt;[% c.loc('Site Admin') %]&lt;/a&gt;
+     [% END %]
+    [% ELSE %]
+     &lt;a href='/register'&gt;[% c.loc(&quot;Register&quot;) %]&lt;/a&gt;  | &lt;a href='/login'&gt;[% c.loc(&quot;Log in&quot;) %]&lt;/a&gt; | &lt;a href='/profile/forget_password'&gt;[% c.loc(&quot;Forget password?&quot;) %]&lt;/a&gt;
+    [% END %]
+    [% IF forum %]
+    | &lt;a href=&quot;/search/forum/[% forum.forum_id %]&quot;&gt;[% c.loc(&quot;Search&quot;) %]&lt;/a&gt;
+    [% END %]
+
+    [% IF c.user_exists %]
+    &lt;br /&gt;
+    &lt;a href='/u/[% c.user.username %]'&gt;[% c.loc('My Profile Page') %]&lt;/a&gt; | 
+    &lt;a href='/u/[% c.user.username %]/topics'&gt;[% c.loc('My Recent Topics') %]&lt;/a&gt; | 
+    &lt;a href='/my/starred'&gt;&lt;img src='[% c.config.dir.images %]/site/t/star_on.gif' align='absmiddle' /&gt; [% c.loc(&quot;My Starred Items&quot;) %]&lt;/a&gt; | 
+    &lt;a href='/u/[% c.user.username %]/shared'&gt;&lt;img src='[% c.config.dir.images %]/site/t/unshare.gif' align='absmiddle' /&gt; [% c.loc(&quot;My Shared Items&quot;) %]&lt;/a&gt;
+    [% END %]
+&lt;/nowrap&gt;
+&lt;/div&gt;
+&lt;div class='barline'&gt;&lt;/div&gt;
+&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
+&lt;p&gt;&lt;/p&gt;
+[% END %]
+
+[% content %]
+
+[% UNLESS simple_wrapper %]
+
+[% IF whos_view_this_page %] 
+[% INCLUDE site/whos_view_this_page.html %]
+[% END %]
+
+&lt;div id='footer'&gt;
+    &lt;p&gt;
+    &lt;div&gt;Languages: &lt;a href='[% c.req.uri_with( { lang =&gt; 'en' } ) %]'&gt;English&lt;/a&gt; | &lt;a href='[% c.req.uri_with( { lang =&gt; 'cn' } ) %]'&gt;&#31616;&#20307;&#20013;&#25991;&lt;/a&gt; | &lt;a href='[% c.req.uri_with( { lang =&gt; 'tw' } ) %]'&gt;&#32321;&#39636;&#20013;&#25991;&lt;/a&gt;&lt;/div&gt;
+    [% UNLESS forum %]
+    &lt;a href='/info/about_us'&gt;[% c.loc(&quot;About Us&quot;) %]&lt;/a&gt; | 
+    &lt;a href='/info/tos'&gt;[% c.loc('Terms of Service') %]&lt;/a&gt; | 
+    &lt;a href='/info/privacy'&gt;[% c.loc('Privacy Statement') %]&lt;/a&gt; | 
+    &lt;a href='/info/contact_us'&gt;[% c.loc(&quot;Contact Us&quot;) %]&lt;/a&gt; | 
+    &lt;a href='/help'&gt;[% c.loc(&quot;Help Center&quot;) %]&lt;/a&gt;&lt;br /&gt;
+    [% END %]
+    &amp;copy; [% date.format(date.now, format =&gt;'%Y') %]&amp;nbsp;[% c.config.name %]. Powered by &lt;a href='/info/powered_by'&gt;Foorum [% c.config.VERSION %]&lt;/a&gt;.
+    [% IF RSS_URL %]
+    &lt;a href='[% RSS_URL %]'&gt;&lt;img src='[% c.config.dir.images %]/site/feed-icon-16x16.gif' width='16' height='16' align='absmiddle' /&gt;&lt;/a&gt; 
+    [% END %]
+    &lt;/p&gt;
+&lt;/div&gt;
+&lt;div id='timer'&gt;&lt;p&gt;This page takes [% elapsed_time %] to load. &lt;/p&gt;&lt;/div&gt;
+[% END %]
+
+[% IF c.config.extra.urchin_account AND NOT c.config.debug_mode %]
+&lt;script type=&quot;text/javascript&quot;&gt;
+var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
+document.write(&quot;\&lt;script src='&quot; + gaJsHost + &quot;google-analytics.com/ga.js' type='text/javascript'&gt;\&lt;\/script&gt;&quot; );
+&lt;/script&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+var pageTracker = _gat._getTracker(&quot;[% c.config.extra.urchin_account %]&quot;);
+pageTracker._initData();
+pageTracker._trackPageview();
+&lt;/script&gt;
+[% END %]
+
+    [% IF c.config.debug_mode %]
+      &lt;div class=&quot;featurebox&quot;&gt;
+        &lt;h3&gt;Query Log Report&lt;/h3&gt;
+        [% SET total = c.model('DBIC').querylog.time_elapsed | format('%0.6f') %]
+        &lt;div&gt;Total SQL Time: [% total | format('%0.6f') %] seconds&lt;/div&gt;
+        [% SET qcount = c.model('DBIC').querylog.count %]
+        &lt;div&gt;Total Queries: [% qcount %]&lt;/div&gt;
+        [% IF qcount %]
+        &lt;div&gt;Avg Statement Time: [% (c.model('DBIC').querylog.time_elapsed / qcount) | format('%0.6f') %] seconds.&lt;/div&gt;
+        &lt;div&gt;
+         &lt;table class=&quot;table1&quot;&gt;
+          &lt;thead&gt;
+           &lt;tr&gt;
+            &lt;th colspan=&quot;3&quot;&gt;5 Slowest Queries&lt;/th&gt;
+           &lt;/tr&gt;
+          &lt;/thead&gt;
+          &lt;tbody&gt;
+           &lt;tr&gt;
+            &lt;th&gt;Time&lt;/th&gt;
+            &lt;th&gt;%&lt;/th&gt;
+            &lt;th&gt;SQL&lt;/th&gt;
+           &lt;/tr&gt;
+           [% SET i = 0 %]
+           [% FOREACH q = c.model('DBIC').querylog_analyzer.get_sorted_queries %]
+           &lt;tr class=&quot;[% IF loop.count % 2 %]odd[% END %]&quot;&gt;
+            &lt;th class=&quot;sub&quot;&gt;[% q.time_elapsed | format('%0.6f') %]
+            &lt;td&gt;[% ((q.time_elapsed / total ) * 100 ) | format('%i') %]%&lt;/td&gt;
+            &lt;td&gt;[% q.sql %] : ([% q.params.join(', ') %])&lt;/td&gt;
+           &lt;/th&gt;&lt;/tr&gt;
+           [% IF i == 5 %]
+            [% LAST %]
+           [% END %]
+           [% SET i = i + 1 %]
+           [% END %]
+          &lt;/tbody&gt;
+         &lt;/table&gt;
+        &lt;/div&gt;
+        [% END %]
+      &lt;/div&gt;
+    [% END %]
+
+&lt;/body&gt;
 &lt;/html&gt;
\ No newline at end of file</diff>
      <filename>templates/wrapper.html</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7a44bcbc87f7fd32cfaee97800216ef845bcc281</id>
    </parent>
  </parents>
  <author>
    <name>fayland</name>
    <email>fayland@gmail.com</email>
  </author>
  <url>http://github.com/fayland/foorum/commit/73fd115e6240e1a4066ddac9d749d646fecdfd34</url>
  <id>73fd115e6240e1a4066ddac9d749d646fecdfd34</id>
  <committed-date>2009-03-18T01:43:13-07:00</committed-date>
  <authored-date>2009-03-18T01:43:13-07:00</authored-date>
  <message>pod2usage -output README -verbose 9 lib/Foorum.pm</message>
  <tree>c956cd589b3217e50788296859dbc36485e8852f</tree>
  <committer>
    <name>fayland</name>
    <email>fayland@gmail.com</email>
  </committer>
</commit>
