Initial commit of website to git. Has the "old" ob3 website as the main site, and...
authorDana Jansens <danakj@orodu.net>
Fri, 4 Jun 2010 16:54:18 +0000 (12:54 -0400)
committerDana Jansens <danakj@orodu.net>
Fri, 4 Jun 2010 16:55:01 +0000 (12:55 -0400)
909 files changed:
.htaccess [new file with mode: 0644]
analytics.html [new file with mode: 0644]
bottom.php [new file with mode: 0644]
content.php [new file with mode: 0644]
css/develop.css [new file with mode: 0644]
css/discuss-miniplanet.css [new file with mode: 0644]
css/discuss-rss.css [new file with mode: 0644]
css/discuss.css [new file with mode: 0644]
css/download-content.css [new file with mode: 0644]
css/download.css [new file with mode: 0644]
css/help.css [new file with mode: 0644]
css/home.css [new file with mode: 0644]
css/site.css [new file with mode: 0644]
css/wiki.css [new file with mode: 0644]
develop-git.php [new file with mode: 0644]
develop-translate.php [new file with mode: 0644]
develop.php [new file with mode: 0644]
discuss-miniplanet.php [new file with mode: 0644]
discuss-news.php [new file with mode: 0644]
discuss-planet.php [new file with mode: 0644]
discuss.php [new file with mode: 0644]
dist/obconf/README [new file with mode: 0644]
dist/openbox/README [new file with mode: 0644]
dist/tools/README [new file with mode: 0644]
download-changelog.php [new file with mode: 0644]
download-pipemenus.php [new file with mode: 0644]
download-themes.php [new file with mode: 0644]
download.php [new file with mode: 0644]
favicon.ico [new file with mode: 0644]
h/agg.php [new file with mode: 0644]
h/ajax.js [new file with mode: 0644]
h/breadcrumb.js [new file with mode: 0644]
h/breadcrumb.php [new file with mode: 0644]
h/dateformat.js [new file with mode: 0644]
h/geom.js [new file with mode: 0644]
h/index.html [new file with mode: 0644]
h/misc.js [new file with mode: 0644]
h/old/buildrss.php [new file with mode: 0644]
h/old/buildrss2.php [new file with mode: 0644]
h/old/rss.js [new file with mode: 0644]
h/old/rss2.js [new file with mode: 0644]
h/old/rssfetch.php [new file with mode: 0644]
h/old/rssrelay.php [new file with mode: 0644]
h/simplepie.inc [new file with mode: 0644]
h/splash.php [new file with mode: 0644]
h/xmlfeedlist.js [new file with mode: 0644]
h/xmlnews.js [new file with mode: 0644]
head.php [new file with mode: 0644]
helpmenu.php [new file with mode: 0644]
home.php [new file with mode: 0644]
images/bc_sep.png [new file with mode: 0644]
images/distro/arch-large.png [new file with mode: 0644]
images/distro/arch.png [new file with mode: 0644]
images/distro/debian-large.png [new file with mode: 0644]
images/distro/debian.png [new file with mode: 0644]
images/distro/fedora-large.png [new file with mode: 0644]
images/distro/fedora.png [new file with mode: 0644]
images/distro/foresight-large.png [new file with mode: 0644]
images/distro/foresight.png [new file with mode: 0644]
images/distro/gentoo-large.png [new file with mode: 0644]
images/distro/gentoo.png [new file with mode: 0644]
images/distro/pclinuxos-large.png [new file with mode: 0644]
images/distro/pclinuxos.png [new file with mode: 0644]
images/distro/tarball-large.png [new file with mode: 0644]
images/distro/tarball.png [new file with mode: 0644]
images/distro/ubuntu-large.png [new file with mode: 0644]
images/distro/ubuntu.png [new file with mode: 0644]
images/facebook.jpg [new file with mode: 0644]
images/home/download.png [new file with mode: 0644]
images/home/download2.png [new file with mode: 0644]
images/home/downloadbrite.png [new file with mode: 0644]
images/icons/KDE_logo.png [new file with mode: 0644]
images/icons/XFce_logo.png [new file with mode: 0644]
images/icons/bug.png [new file with mode: 0644]
images/icons/code.png [new file with mode: 0644]
images/icons/comm.png [new file with mode: 0644]
images/icons/facebook.png [new file with mode: 0644]
images/icons/feature.png [new file with mode: 0644]
images/icons/git.png [new file with mode: 0644]
images/icons/gnome_logo.png [new file with mode: 0644]
images/icons/help-browser.png [new file with mode: 0644]
images/icons/internet-news-reader.svg [new file with mode: 0644]
images/icons/irc.png [new file with mode: 0644]
images/icons/lastfmlogo.jpg [new file with mode: 0644]
images/icons/list-add.png [new file with mode: 0644]
images/icons/mail.png [new file with mode: 0644]
images/icons/menu.png [new file with mode: 0644]
images/icons/news.png [new file with mode: 0644]
images/icons/obconf.png [new file with mode: 0644]
images/icons/openbox_logo.png [new file with mode: 0644]
images/icons/planet.png [new file with mode: 0644]
images/icons/script.png [new file with mode: 0644]
images/icons/share.png [new file with mode: 0644]
images/icons/sshots.png [new file with mode: 0644]
images/icons/status.png [new file with mode: 0644]
images/icons/themes.png [new file with mode: 0644]
images/icons/translate.png [new file with mode: 0644]
images/icons/www.png [new file with mode: 0644]
images/important.png [new file with mode: 0644]
images/importantsmall.png [new file with mode: 0644]
images/logo_dark.png [new file with mode: 0644]
images/logo_shadow.png [new file with mode: 0644]
images/logo_white.png [new file with mode: 0644]
images/ob3-logo.png [new file with mode: 0644]
images/rss.png [new file with mode: 0644]
images/rssshort.png [new file with mode: 0644]
images/sites/box-look.png [new file with mode: 0644]
images/sites/customize.org.png [new file with mode: 0644]
images/sites/deviantart.png [new file with mode: 0644]
images/sites/openbox.org.png [new file with mode: 0644]
images/splash/changelog.png [new file with mode: 0644]
images/splash/develop.png [new file with mode: 0644]
images/splash/discuss.png [new file with mode: 0644]
images/splash/download.png [new file with mode: 0644]
images/splash/git.png [new file with mode: 0644]
images/splash/help.png [new file with mode: 0644]
images/splash/planet.png [new file with mode: 0644]
images/splash/search.png [new file with mode: 0644]
images/splash/text2872.png [new file with mode: 0644]
images/splash/translate.png [new file with mode: 0644]
images/star.png [new file with mode: 0644]
images/starsmall.png [new file with mode: 0644]
images/top_gradient.png [new file with mode: 0644]
images/web-20-rss-icon.jpg [new file with mode: 0644]
images/wiki/locked.png [new file with mode: 0644]
images/wiki/special.png [new file with mode: 0644]
images/wiki/unlocked.png [new file with mode: 0644]
images/wiki/user.gif [new file with mode: 0644]
mediawiki/.htaccess [new file with mode: 0644]
mediawiki/StartProfiler.php [new symlink]
mediawiki/Test.php [new symlink]
mediawiki/api.php [new symlink]
mediawiki/config [new symlink]
mediawiki/extensions/ConfirmEdit/ConfirmEdit.i18n.php [new file with mode: 0644]
mediawiki/extensions/ConfirmEdit/ConfirmEdit.php [new file with mode: 0644]
mediawiki/extensions/ConfirmEdit/ConfirmEdit_body.php [new file with mode: 0644]
mediawiki/extensions/ExtensionClass.php [new file with mode: 0644]
mediawiki/extensions/README [new file with mode: 0644]
mediawiki/extensions/SimpleFeed.php [new file with mode: 0644]
mediawiki/extensions/addHtml.php [new file with mode: 0644]
mediawiki/extensions/firestats-mediawiki.php [new file with mode: 0644]
mediawiki/extensions/recaptcha/AUTHORS [new file with mode: 0644]
mediawiki/extensions/recaptcha/ConfirmEdit.i18n.php [new file with mode: 0644]
mediawiki/extensions/recaptcha/ConfirmEdit.php [new file with mode: 0644]
mediawiki/extensions/recaptcha/README [new file with mode: 0644]
mediawiki/extensions/recaptcha/ReCaptcha.i18n.php [new file with mode: 0644]
mediawiki/extensions/recaptcha/ReCaptcha.php [new file with mode: 0644]
mediawiki/extensions/recaptcha/recaptchalib.php [new file with mode: 0644]
mediawiki/extensions/simplepie.inc [new file with mode: 0644]
mediawiki/img_auth.php [new symlink]
mediawiki/includes [new symlink]
mediawiki/index.php [new symlink]
mediawiki/install-utils.inc [new symlink]
mediawiki/languages [new symlink]
mediawiki/maintenance [new symlink]
mediawiki/opensearch_desc.php [new symlink]
mediawiki/profileinfo.php [new symlink]
mediawiki/redirect.php [new symlink]
mediawiki/redirect.phtml [new symlink]
mediawiki/skins/Chick.deps.php [new symlink]
mediawiki/skins/Chick.php [new symlink]
mediawiki/skins/CologneBlue.php [new symlink]
mediawiki/skins/MonoBook.deps.php [new symlink]
mediawiki/skins/MonoBook.php [new symlink]
mediawiki/skins/MySkin.deps.php [new symlink]
mediawiki/skins/MySkin.php [new symlink]
mediawiki/skins/Nostalgia.php [new symlink]
mediawiki/skins/Openbox.php [new file with mode: 0644]
mediawiki/skins/OpenboxWiki.php [new file with mode: 0644]
mediawiki/skins/Simple.deps.php [new symlink]
mediawiki/skins/Simple.php [new symlink]
mediawiki/skins/Skin.sample [new symlink]
mediawiki/skins/SkinPHPTal.sample [new symlink]
mediawiki/skins/Standard.php [new symlink]
mediawiki/skins/chick [new symlink]
mediawiki/skins/common [new symlink]
mediawiki/skins/disabled [new symlink]
mediawiki/skins/htmldump [new symlink]
mediawiki/skins/monobook [new symlink]
mediawiki/skins/myskin [new symlink]
mediawiki/skins/openbox/bg-bottom.gif [new file with mode: 0644]
mediawiki/skins/openbox/bg.gif [new file with mode: 0644]
mediawiki/skins/openbox/bullet.gif [new file with mode: 0644]
mediawiki/skins/openbox/default-icon-theme.css [new file with mode: 0644]
mediawiki/skins/openbox/discussionitem_icon.gif [new file with mode: 0644]
mediawiki/skins/openbox/external.png [new file with mode: 0644]
mediawiki/skins/openbox/file_icon.gif [new file with mode: 0644]
mediawiki/skins/openbox/headbg.gif [new file with mode: 0644]
mediawiki/skins/openbox/headbg.jpg [new file with mode: 0644]
mediawiki/skins/openbox/icons.css [new file with mode: 0644]
mediawiki/skins/openbox/link_icon.gif [new file with mode: 0644]
mediawiki/skins/openbox/lock_icon.gif [new file with mode: 0644]
mediawiki/skins/openbox/magnify-clip.png [new file with mode: 0644]
mediawiki/skins/openbox/mail_icon.gif [new file with mode: 0644]
mediawiki/skins/openbox/main-withphoophie.css [new file with mode: 0644]
mediawiki/skins/openbox/main.css [new file with mode: 0644]
mediawiki/skins/openbox/news_icon.png [new file with mode: 0644]
mediawiki/skins/openbox/null [new file with mode: 0644]
mediawiki/skins/openbox/old.css [new file with mode: 0644]
mediawiki/skins/openbox/openbox.gif [new file with mode: 0644]
mediawiki/skins/openbox/openbox.png [new file with mode: 0644]
mediawiki/skins/openbox/required.gif [new file with mode: 0644]
mediawiki/skins/openbox/rtl.css [new file with mode: 0644]
mediawiki/skins/openbox/user.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/bg-bottom.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/bg.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/bullet.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/css.diff [new file with mode: 0644]
mediawiki/skins/openboxwiki/default-icon-theme.css [new file with mode: 0644]
mediawiki/skins/openboxwiki/discussionitem_icon.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/external.png [new file with mode: 0644]
mediawiki/skins/openboxwiki/file_icon.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/headbg.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/headbg.jpg [new file with mode: 0644]
mediawiki/skins/openboxwiki/icons.css [new file with mode: 0644]
mediawiki/skins/openboxwiki/link_icon.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/lock_icon.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/magnify-clip.png [new file with mode: 0644]
mediawiki/skins/openboxwiki/mail_icon.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/main-withphoophie.css [new file with mode: 0644]
mediawiki/skins/openboxwiki/main.css [new file with mode: 0644]
mediawiki/skins/openboxwiki/news_icon.png [new file with mode: 0644]
mediawiki/skins/openboxwiki/null [new file with mode: 0644]
mediawiki/skins/openboxwiki/old.css [new file with mode: 0644]
mediawiki/skins/openboxwiki/openbox.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/openbox.png [new file with mode: 0644]
mediawiki/skins/openboxwiki/required.gif [new file with mode: 0644]
mediawiki/skins/openboxwiki/rtl.css [new file with mode: 0644]
mediawiki/skins/openboxwiki/user.gif [new file with mode: 0644]
mediawiki/skins/simple [new symlink]
mediawiki/thumb.php [new symlink]
mediawiki/trackback.php [new symlink]
mediawiki/uploads/README [new file with mode: 0644]
mediawiki/wiki.phtml [new symlink]
oldwiki/StartProfiler.php [new symlink]
oldwiki/Test.php [new symlink]
oldwiki/api.php [new symlink]
oldwiki/extensions/ConfirmEdit/ConfirmEdit.i18n.php [new file with mode: 0644]
oldwiki/extensions/ConfirmEdit/ConfirmEdit.php [new file with mode: 0644]
oldwiki/extensions/ConfirmEdit/ConfirmEdit_body.php [new file with mode: 0644]
oldwiki/extensions/ExtensionClass.php [new file with mode: 0644]
oldwiki/extensions/README [new file with mode: 0644]
oldwiki/extensions/SimpleFeed.php [new file with mode: 0644]
oldwiki/extensions/addHtml.php [new file with mode: 0644]
oldwiki/extensions/firestats-mediawiki.php [new file with mode: 0644]
oldwiki/extensions/recaptcha/AUTHORS [new file with mode: 0644]
oldwiki/extensions/recaptcha/ConfirmEdit.i18n.php [new file with mode: 0644]
oldwiki/extensions/recaptcha/ConfirmEdit.php [new file with mode: 0644]
oldwiki/extensions/recaptcha/README [new file with mode: 0644]
oldwiki/extensions/recaptcha/ReCaptcha.i18n.php [new file with mode: 0644]
oldwiki/extensions/recaptcha/ReCaptcha.php [new file with mode: 0644]
oldwiki/extensions/recaptcha/recaptchalib.php [new file with mode: 0644]
oldwiki/extensions/simplepie.inc [new file with mode: 0644]
oldwiki/images/0/01/Translate-72.png [new file with mode: 0644]
oldwiki/images/0/05/Screenshot-openbox-pretty-jrnorman.png [new file with mode: 0644]
oldwiki/images/0/0c/GkrellShoot_09-28-08_235222.png [new file with mode: 0644]
oldwiki/images/0/0e/OpenBox_on_blackPanther.jpg [new file with mode: 0644]
oldwiki/images/0/0f/NewClearlooksTheme.png [new file with mode: 0644]
oldwiki/images/1/12/GkrellShoot_09-28-08_235222.jpg [new file with mode: 0644]
oldwiki/images/1/13/Arch-openbox-rss.jpg [new file with mode: 0644]
oldwiki/images/1/15/Openbox_130308.png [new file with mode: 0644]
oldwiki/images/1/16/Flx-2007-08-08.3.png [new file with mode: 0644]
oldwiki/images/1/17/OgMaciel_20070607.png [new file with mode: 0644]
oldwiki/images/1/19/My_openbox.jpg [new file with mode: 0644]
oldwiki/images/1/1a/New.png [new file with mode: 0644]
oldwiki/images/1/1a/Screenshot-43.png [new file with mode: 0644]
oldwiki/images/1/1b/2009-11-12-181109_576x360_scrot-thumb.png [new file with mode: 0644]
oldwiki/images/2/22/Obox.png [new file with mode: 0644]
oldwiki/images/2/23/050810141937.jpg [new file with mode: 0644]
oldwiki/images/2/23/Openboxscreenshot2.png [new file with mode: 0644]
oldwiki/images/2/24/Scrot_smoon.png [new file with mode: 0644]
oldwiki/images/2/26/HostnameInTitlebar.png [new file with mode: 0644]
oldwiki/images/2/27/NewParentrelativeTextures.png [new file with mode: 0644]
oldwiki/images/2/27/Openboxshot2010.01.29-1.jpg [new file with mode: 0644]
oldwiki/images/2/2b/Openbox-inko.png [new file with mode: 0644]
oldwiki/images/3/33/Screen_hf.png [new file with mode: 0644]
oldwiki/images/3/33/Spatial-vi-cheatsheet2-WUXGA.png [new file with mode: 0644]
oldwiki/images/3/39/KDE-Openbox.png [new file with mode: 0644]
oldwiki/images/3/3c/Bsoftgrey20100508.jpg [new file with mode: 0644]
oldwiki/images/3/3e/NewCombinedClientListMenu.png [new file with mode: 0644]
oldwiki/images/4/41/Greenw.png [new file with mode: 0644]
oldwiki/images/4/41/Screen.jpg [new file with mode: 0644]
oldwiki/images/4/46/Crunchbang_openbox.png [new file with mode: 0644]
oldwiki/images/4/47/Tobu-pro-9-11-menu.jpg [new file with mode: 0644]
oldwiki/images/4/49/GNOMELogout.png [new file with mode: 0644]
oldwiki/images/4/49/Ktop.jpg [new file with mode: 0644]
oldwiki/images/4/49/Spatial-vi-cheatsheet-WUXGA.png [new file with mode: 0644]
oldwiki/images/4/4a/NewFocusDialog.png [new file with mode: 0644]
oldwiki/images/4/4b/Lightbulb-72.png [new file with mode: 0644]
oldwiki/images/4/4c/Ss_OnyxTheme.png [new file with mode: 0644]
oldwiki/images/4/4f/Vector.jpg [new file with mode: 0644]
oldwiki/images/5/50/Breakage.png [new file with mode: 0644]
oldwiki/images/5/53/Sysrq-2006-11-03.png [new file with mode: 0644]
oldwiki/images/5/55/Boxtubeshot012509.jpg [new file with mode: 0644]
oldwiki/images/5/55/My_underwood-and-powderfinger_type.jpg [new file with mode: 0644]
oldwiki/images/5/56/Cowsay.png [new file with mode: 0644]
oldwiki/images/5/57/Irc-72.png [new file with mode: 0644]
oldwiki/images/5/5c/Bildschirmfoto-1.jpg [new file with mode: 0644]
oldwiki/images/5/5c/Planetob.png [new file with mode: 0644]
oldwiki/images/5/5d/Borosaiob_2007-06-06.png [new file with mode: 0644]
oldwiki/images/5/5f/Openbox-scalable3.svg [new file with mode: 0644]
oldwiki/images/6/60/FocusCyclingForAllDesktops.png [new file with mode: 0644]
oldwiki/images/6/63/Schermafdruk-6.png [new file with mode: 0644]
oldwiki/images/6/64/Kde-72.png [new file with mode: 0644]
oldwiki/images/6/65/2008-08-02-011650_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/6/66/Mendax-desktop.jpg [new file with mode: 0644]
oldwiki/images/6/67/Date_menu.jpg [new file with mode: 0644]
oldwiki/images/6/69/Dktop.jpg [new file with mode: 0644]
oldwiki/images/6/69/Laplinbox.jpg [new file with mode: 0644]
oldwiki/images/6/69/Openbox_7_04_08.jpg [new file with mode: 0644]
oldwiki/images/6/6a/LoginOptions.png [new file with mode: 0644]
oldwiki/images/6/6b/FocusCyclingToPanel.png [new file with mode: 0644]
oldwiki/images/6/6e/Pantallazo_04-05-2010_1366x768.png [new file with mode: 0644]
oldwiki/images/6/6f/NewBusyCursor.png [new file with mode: 0644]
oldwiki/images/6/6f/Openboxscreenshot4.png [new file with mode: 0644]
oldwiki/images/7/70/20070723-1848.png [new file with mode: 0644]
oldwiki/images/7/72/Cia.gif [new file with mode: 0644]
oldwiki/images/7/72/GNOME-Openbox.png [new file with mode: 0644]
oldwiki/images/7/75/ObConfDock.png [new file with mode: 0644]
oldwiki/images/7/78/HiddenTitlebarButtons.png [new file with mode: 0644]
oldwiki/images/7/7b/Gnome-72.png [new file with mode: 0644]
oldwiki/images/7/7b/Myscreen-weboide-x.jpg [new file with mode: 0644]
oldwiki/images/7/7b/Openboxshot2.jpg [new file with mode: 0644]
oldwiki/images/7/7f/ActiveDisabledMenuEntry.png [new file with mode: 0644]
oldwiki/images/7/7f/GagaPeter_001.png [new file with mode: 0644]
oldwiki/images/7/7f/OpenboxMotivationalPoster.png [new file with mode: 0644]
oldwiki/images/8/80/Obconf-72.png [new file with mode: 0644]
oldwiki/images/8/82/Donnie-2007-07-15.png [new file with mode: 0644]
oldwiki/images/8/85/Openbox_dust_carbon.png [new file with mode: 0644]
oldwiki/images/8/87/MyDesktop.jpeg [new file with mode: 0644]
oldwiki/images/8/87/Openbox.png [new file with mode: 0644]
oldwiki/images/8/87/Openbox_28_03_08.jpg [new file with mode: 0644]
oldwiki/images/8/8a/Capture.png [new file with mode: 0644]
oldwiki/images/8/8c/2560x1024_scrot.jpg [new file with mode: 0644]
oldwiki/images/8/8c/Openbox_dust_carbon.jpg [new file with mode: 0644]
oldwiki/images/8/8d/Sodio.png [new file with mode: 0644]
oldwiki/images/9/93/NewClientMenu.png [new file with mode: 0644]
oldwiki/images/9/95/KeychainDialog.png [new file with mode: 0644]
oldwiki/images/9/96/Sreenopenbox2.png [new file with mode: 0644]
oldwiki/images/9/97/Bug-72.png [new file with mode: 0644]
oldwiki/images/9/97/Image-Ss_October.png [new file with mode: 0644]
oldwiki/images/9/9c/Gxdesktop26.jpg [new file with mode: 0644]
oldwiki/images/9/9c/ObConfTheme.png [new file with mode: 0644]
oldwiki/images/9/9e/2007-06-29-233539_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/README [new file with mode: 0644]
oldwiki/images/a/a0/Boxw.png [new file with mode: 0644]
oldwiki/images/a/a0/Slackware_skinn3r.png [new file with mode: 0644]
oldwiki/images/a/a1/Nightm4re-2006-10-26-2128-october.jpg [new file with mode: 0644]
oldwiki/images/a/a5/ObConfBehavior.png [new file with mode: 0644]
oldwiki/images/a/ac/14-42.png [new file with mode: 0644]
oldwiki/images/archive/0/01/20070830002231!Translate-72.png [new file with mode: 0644]
oldwiki/images/archive/1/19/20081219163527!My_openbox.jpg [new file with mode: 0644]
oldwiki/images/archive/2/24/20070609032910!Scrot_smoon.png [new file with mode: 0644]
oldwiki/images/archive/2/2b/20080111005524!Openbox-inko.png [new file with mode: 0644]
oldwiki/images/archive/2/2b/20080229005825!Openbox-inko.png [new file with mode: 0644]
oldwiki/images/archive/4/41/20070609032915!Greenw.png [new file with mode: 0644]
oldwiki/images/archive/4/4b/20070830003249!Lightbulb-72.png [new file with mode: 0644]
oldwiki/images/archive/4/4c/20070609032808!Ss_OnyxTheme.png [new file with mode: 0644]
oldwiki/images/archive/4/4c/20070609205911!Ss_OnyxTheme.png [new file with mode: 0644]
oldwiki/images/archive/5/53/20070609031454!Sysrq-2006-11-03.png [new file with mode: 0644]
oldwiki/images/archive/5/56/20071209040919!Cowsay.png [new file with mode: 0644]
oldwiki/images/archive/7/7b/20080212154504!Gnome-72.png [new file with mode: 0644]
oldwiki/images/archive/8/85/20081109141645!Openbox_dust_carbon.png [new file with mode: 0644]
oldwiki/images/archive/8/8d/20070609032753!Sodio.png [new file with mode: 0644]
oldwiki/images/archive/9/97/20070830003412!Bug-72.png [new file with mode: 0644]
oldwiki/images/archive/c/c5/20070521022115!Openbox-72.png [new file with mode: 0644]
oldwiki/images/archive/c/c5/20070521214126!Openbox-72.png [new file with mode: 0644]
oldwiki/images/archive/c/c5/20070526145129!Openbox-72.png [new file with mode: 0644]
oldwiki/images/archive/f/f5/20100407010522!OpenboxStandalone.jpg [new file with mode: 0644]
oldwiki/images/archive/f/f5/20100407010758!OpenboxStandalone.jpg [new file with mode: 0644]
oldwiki/images/archive/f/f6/20080831052713!Screenshot.jpg [new file with mode: 0644]
oldwiki/images/archive/f/f7/20070609032857!Ss_postlogic01.png [new file with mode: 0644]
oldwiki/images/b/b0/Openbox-elementary3.png [new file with mode: 0644]
oldwiki/images/b/b0/Openbox.jpg [new file with mode: 0644]
oldwiki/images/b/b1/FreeBSD_Ob3.4-20070717.png [new file with mode: 0644]
oldwiki/images/b/b2/2007-06-29.jpg [new file with mode: 0644]
oldwiki/images/b/b2/MoveFromEdge.png [new file with mode: 0644]
oldwiki/images/b/b7/Dct_screenshot.jpg [new file with mode: 0644]
oldwiki/images/b/b7/NewMoreMenu.png [new file with mode: 0644]
oldwiki/images/b/b7/TrueTransparentWindows.png [new file with mode: 0644]
oldwiki/images/b/b8/12-16-2003_04;46;30PM.jpg [new file with mode: 0644]
oldwiki/images/b/ba/ObConfAppearance.png [new file with mode: 0644]
oldwiki/images/b/bc/2007-06-25.png [new file with mode: 0644]
oldwiki/images/b/bd/NewDefaultTitlebarButtons.png [new file with mode: 0644]
oldwiki/images/b/be/Ss6.png [new file with mode: 0644]
oldwiki/images/b/bf/GnomeMenuInOpenbox.png [new file with mode: 0644]
oldwiki/images/c/c3/Spatial-vi-cheatsheet2-WVGA.png [new file with mode: 0644]
oldwiki/images/c/c4/2010-04-05-215307_1024x768_scrot.png [new file with mode: 0644]
oldwiki/images/c/c5/Openbox-72.png [new file with mode: 0644]
oldwiki/images/c/c5/Openbox3_28_03_08.jpg [new file with mode: 0644]
oldwiki/images/c/c5/Openboxshot1.jpg [new file with mode: 0644]
oldwiki/images/c/ca/IconifyAnimation.ogg [new file with mode: 0644]
oldwiki/images/c/cb/Openboxscreenshot.png [new file with mode: 0644]
oldwiki/images/c/cc/2010-04-05-145901_1280x800_scrot.jpg [new file with mode: 0644]
oldwiki/images/d/d1/2008-05-08-1024x768-Crunchbang.png [new file with mode: 0644]
oldwiki/images/d/d2/NewTitleSeparatorColors.png [new file with mode: 0644]
oldwiki/images/d/d2/Spatial-vi-cheatsheet-WVGA.png [new file with mode: 0644]
oldwiki/images/d/d7/Debian_lenny_Openbox_3.4.7.2.png [new file with mode: 0644]
oldwiki/images/d/d7/MSLDNI.png [new file with mode: 0644]
oldwiki/images/d/dc/Shot.png [new file with mode: 0644]
oldwiki/images/d/df/Laen-screenshot-080210213623.jpg [new file with mode: 0644]
oldwiki/images/deleted/.htaccess [new file with mode: 0644]
oldwiki/images/deleted/p/e/p/index.html [new file with mode: 0644]
oldwiki/images/deleted/p/e/p/pep7xdluwg0j82hjuq3wmhhuj2erk1p.jpg [new file with mode: 0644]
oldwiki/images/e/e0/ObCom.gif [new file with mode: 0644]
oldwiki/images/e/e0/Openbox_chg.jpg [new file with mode: 0644]
oldwiki/images/e/e2/Openbox-debian.jpg [new file with mode: 0644]
oldwiki/images/e/e4/Video.png [new file with mode: 0644]
oldwiki/images/e/e6/KickerStartupNotification.png [new file with mode: 0644]
oldwiki/images/e/e6/Openbox_30_04_08.jpg [new file with mode: 0644]
oldwiki/images/e/e6/RSS.png [new file with mode: 0644]
oldwiki/images/e/ea/050310075012obox.jpg [new file with mode: 0644]
oldwiki/images/e/ee/Desktop-2008-04-02.png [new file with mode: 0644]
oldwiki/images/f/f0/ObConfDesktops.png [new file with mode: 0644]
oldwiki/images/f/f0/Openboxscreenshot3.png [new file with mode: 0644]
oldwiki/images/f/f0/Openzen13.png [new file with mode: 0644]
oldwiki/images/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png [new file with mode: 0644]
oldwiki/images/f/f4/Ss_obconfblackness.jpg [new file with mode: 0644]
oldwiki/images/f/f5/Arch_ob.jpg [new file with mode: 0644]
oldwiki/images/f/f5/IconlessWindows.png [new file with mode: 0644]
oldwiki/images/f/f5/OpenboxStandalone.jpg [new file with mode: 0644]
oldwiki/images/f/f6/Screenshot.jpg [new file with mode: 0644]
oldwiki/images/f/f7/Ss_postlogic01.png [new file with mode: 0644]
oldwiki/images/f/fa/CLIM.png [new file with mode: 0644]
oldwiki/images/f/ff/Important.png [new file with mode: 0644]
oldwiki/images/temp/1/19/20091025104526!2009-10-25--1256466652_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/temp/4/46/20100321153501!Crunchbang_openbox.png [new file with mode: 0644]
oldwiki/images/temp/6/63/20090610034656!ObCom.png [new file with mode: 0644]
oldwiki/images/temp/f/f5/20100407010156!OpenboxStandalone.jpg [new file with mode: 0644]
oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/120px-Screenshot-openbox-pretty-jrnorman.png [new file with mode: 0644]
oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/180px-Screenshot-openbox-pretty-jrnorman.png [new file with mode: 0644]
oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/800px-Screenshot-openbox-pretty-jrnorman.png [new file with mode: 0644]
oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/120px-GkrellShoot_09-28-08_235222.png [new file with mode: 0644]
oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/750px-GkrellShoot_09-28-08_235222.png [new file with mode: 0644]
oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/120px-OpenBox_on_blackPanther.jpg [new file with mode: 0644]
oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/800px-OpenBox_on_blackPanther.jpg [new file with mode: 0644]
oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/120px-NewClearlooksTheme.png [new file with mode: 0644]
oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/150px-NewClearlooksTheme.png [new file with mode: 0644]
oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/180px-NewClearlooksTheme.png [new file with mode: 0644]
oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/120px-GkrellShoot_09-28-08_235222.jpg [new file with mode: 0644]
oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/750px-GkrellShoot_09-28-08_235222.jpg [new file with mode: 0644]
oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/120px-Arch-openbox-rss.jpg [new file with mode: 0644]
oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/180px-Arch-openbox-rss.jpg [new file with mode: 0644]
oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/800px-Arch-openbox-rss.jpg [new file with mode: 0644]
oldwiki/images/thumb/1/15/Openbox_130308.png/120px-Openbox_130308.png [new file with mode: 0644]
oldwiki/images/thumb/1/15/Openbox_130308.png/800px-Openbox_130308.png [new file with mode: 0644]
oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/120px-Flx-2007-08-08.3.png [new file with mode: 0644]
oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/180px-Flx-2007-08-08.3.png [new file with mode: 0644]
oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/800px-Flx-2007-08-08.3.png [new file with mode: 0644]
oldwiki/images/thumb/1/17/OgMaciel_20070607.png/120px-OgMaciel_20070607.png [new file with mode: 0644]
oldwiki/images/thumb/1/17/OgMaciel_20070607.png/180px-OgMaciel_20070607.png [new file with mode: 0644]
oldwiki/images/thumb/1/17/OgMaciel_20070607.png/800px-OgMaciel_20070607.png [new file with mode: 0644]
oldwiki/images/thumb/1/19/My_openbox.jpg/120px-My_openbox.jpg [new file with mode: 0644]
oldwiki/images/thumb/1/19/My_openbox.jpg/800px-My_openbox.jpg [new file with mode: 0644]
oldwiki/images/thumb/1/1a/Screenshot-43.png/120px-Screenshot-43.png [new file with mode: 0644]
oldwiki/images/thumb/1/1a/Screenshot-43.png/180px-Screenshot-43.png [new file with mode: 0644]
oldwiki/images/thumb/1/1a/Screenshot-43.png/800px-Screenshot-43.png [new file with mode: 0644]
oldwiki/images/thumb/1/1b/2009-11-12-181109_576x360_scrot-thumb.png/120px-2009-11-12-181109_576x360_scrot-thumb.png [new file with mode: 0644]
oldwiki/images/thumb/2/22/Obox.png/120px-Obox.png [new file with mode: 0644]
oldwiki/images/thumb/2/22/Obox.png/800px-Obox.png [new file with mode: 0644]
oldwiki/images/thumb/2/23/050810141937.jpg/120px-050810141937.jpg [new file with mode: 0644]
oldwiki/images/thumb/2/23/050810141937.jpg/180px-050810141937.jpg [new file with mode: 0644]
oldwiki/images/thumb/2/23/050810141937.jpg/800px-050810141937.jpg [new file with mode: 0644]
oldwiki/images/thumb/2/23/Openboxscreenshot2.png/120px-Openboxscreenshot2.png [new file with mode: 0644]
oldwiki/images/thumb/2/23/Openboxscreenshot2.png/800px-Openboxscreenshot2.png [new file with mode: 0644]
oldwiki/images/thumb/2/24/Scrot_smoon.png/120px-Scrot_smoon.png [new file with mode: 0644]
oldwiki/images/thumb/2/24/Scrot_smoon.png/169px-Scrot_smoon.png [new file with mode: 0644]
oldwiki/images/thumb/2/24/Scrot_smoon.png/180px-Scrot_smoon.png [new file with mode: 0644]
oldwiki/images/thumb/2/24/Scrot_smoon.png/750px-Scrot_smoon.png [new file with mode: 0644]
oldwiki/images/thumb/2/26/HostnameInTitlebar.png/120px-HostnameInTitlebar.png [new file with mode: 0644]
oldwiki/images/thumb/2/26/HostnameInTitlebar.png/150px-HostnameInTitlebar.png [new file with mode: 0644]
oldwiki/images/thumb/2/26/HostnameInTitlebar.png/180px-HostnameInTitlebar.png [new file with mode: 0644]
oldwiki/images/thumb/2/27/NewParentrelativeTextures.png/120px-NewParentrelativeTextures.png [new file with mode: 0644]
oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/120px-Openboxshot2010.01.29-1.jpg [new file with mode: 0644]
oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/800px-Openboxshot2010.01.29-1.jpg [new file with mode: 0644]
oldwiki/images/thumb/2/2b/Openbox-inko.png/120px-Openbox-inko.png [new file with mode: 0644]
oldwiki/images/thumb/2/2b/Openbox-inko.png/1280px-Openbox-inko.png [new file with mode: 0644]
oldwiki/images/thumb/2/2b/Openbox-inko.png/180px-Openbox-inko.png [new file with mode: 0644]
oldwiki/images/thumb/2/2b/Openbox-inko.png/800px-Openbox-inko.png [new file with mode: 0644]
oldwiki/images/thumb/3/33/Screen_hf.png/120px-Screen_hf.png [new file with mode: 0644]
oldwiki/images/thumb/3/33/Screen_hf.png/800px-Screen_hf.png [new file with mode: 0644]
oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/120px-Spatial-vi-cheatsheet2-WUXGA.png [new file with mode: 0644]
oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/180px-Spatial-vi-cheatsheet2-WUXGA.png [new file with mode: 0644]
oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/800px-Spatial-vi-cheatsheet2-WUXGA.png [new file with mode: 0644]
oldwiki/images/thumb/3/39/KDE-Openbox.png/120px-KDE-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/3/39/KDE-Openbox.png/180px-KDE-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/3/39/KDE-Openbox.png/800px-KDE-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/120px-Bsoftgrey20100508.jpg [new file with mode: 0644]
oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/180px-Bsoftgrey20100508.jpg [new file with mode: 0644]
oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/800px-Bsoftgrey20100508.jpg [new file with mode: 0644]
oldwiki/images/thumb/3/3e/NewCombinedClientListMenu.png/88px-NewCombinedClientListMenu.png [new file with mode: 0644]
oldwiki/images/thumb/4/41/Greenw.png/120px-Greenw.png [new file with mode: 0644]
oldwiki/images/thumb/4/41/Greenw.png/180px-Greenw.png [new file with mode: 0644]
oldwiki/images/thumb/4/41/Greenw.png/800px-Greenw.png [new file with mode: 0644]
oldwiki/images/thumb/4/41/Screen.jpg/120px-Screen.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/41/Screen.jpg/800px-Screen.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/46/Crunchbang_openbox.png/120px-Crunchbang_openbox.png [new file with mode: 0644]
oldwiki/images/thumb/4/46/Crunchbang_openbox.png/800px-Crunchbang_openbox.png [new file with mode: 0644]
oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/120px-Tobu-pro-9-11-menu.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/800px-Tobu-pro-9-11-menu.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/49/GNOMELogout.png/120px-GNOMELogout.png [new file with mode: 0644]
oldwiki/images/thumb/4/49/GNOMELogout.png/180px-GNOMELogout.png [new file with mode: 0644]
oldwiki/images/thumb/4/49/GNOMELogout.png/800px-GNOMELogout.png [new file with mode: 0644]
oldwiki/images/thumb/4/49/Ktop.jpg/120px-Ktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/49/Ktop.jpg/169px-Ktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/49/Ktop.jpg/750px-Ktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/120px-Spatial-vi-cheatsheet-WUXGA.png [new file with mode: 0644]
oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/180px-Spatial-vi-cheatsheet-WUXGA.png [new file with mode: 0644]
oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/800px-Spatial-vi-cheatsheet-WUXGA.png [new file with mode: 0644]
oldwiki/images/thumb/4/4a/NewFocusDialog.png/120px-NewFocusDialog.png [new file with mode: 0644]
oldwiki/images/thumb/4/4a/NewFocusDialog.png/150px-NewFocusDialog.png [new file with mode: 0644]
oldwiki/images/thumb/4/4a/NewFocusDialog.png/180px-NewFocusDialog.png [new file with mode: 0644]
oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/120px-Ss_OnyxTheme.png [new file with mode: 0644]
oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/180px-Ss_OnyxTheme.png [new file with mode: 0644]
oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/800px-Ss_OnyxTheme.png [new file with mode: 0644]
oldwiki/images/thumb/4/4f/Vector.jpg/120px-Vector.jpg [new file with mode: 0644]
oldwiki/images/thumb/4/4f/Vector.jpg/800px-Vector.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/50/Breakage.png/120px-Breakage.png [new file with mode: 0644]
oldwiki/images/thumb/5/50/Breakage.png/750px-Breakage.png [new file with mode: 0644]
oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/120px-Sysrq-2006-11-03.png [new file with mode: 0644]
oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/1280px-Sysrq-2006-11-03.png [new file with mode: 0644]
oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/180px-Sysrq-2006-11-03.png [new file with mode: 0644]
oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/800px-Sysrq-2006-11-03.png [new file with mode: 0644]
oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/120px-Boxtubeshot012509.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/180px-Boxtubeshot012509.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/800px-Boxtubeshot012509.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/120px-My_underwood-and-powderfinger_type.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/800px-My_underwood-and-powderfinger_type.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/56/Cowsay.png/120px-Cowsay.png [new file with mode: 0644]
oldwiki/images/thumb/5/56/Cowsay.png/640px-Cowsay.png [new file with mode: 0644]
oldwiki/images/thumb/5/56/Cowsay.png/750px-Cowsay.png [new file with mode: 0644]
oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/120px-Bildschirmfoto-1.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/800px-Bildschirmfoto-1.jpg [new file with mode: 0644]
oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/120px-Borosaiob_2007-06-06.png [new file with mode: 0644]
oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/1280px-Borosaiob_2007-06-06.png [new file with mode: 0644]
oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/180px-Borosaiob_2007-06-06.png [new file with mode: 0644]
oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/800px-Borosaiob_2007-06-06.png [new file with mode: 0644]
oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/120px-Openbox-scalable3.svg.png [new file with mode: 0644]
oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/48px-Openbox-scalable3.svg.png [new file with mode: 0644]
oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/120px-FocusCyclingForAllDesktops.png [new file with mode: 0644]
oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/150px-FocusCyclingForAllDesktops.png [new file with mode: 0644]
oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/180px-FocusCyclingForAllDesktops.png [new file with mode: 0644]
oldwiki/images/thumb/6/63/Schermafdruk-6.png/120px-Schermafdruk-6.png [new file with mode: 0644]
oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/120px-2008-08-02-011650_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/750px-2008-08-02-011650_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/6/66/Mendax-desktop.jpg/120px-Mendax-desktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/66/Mendax-desktop.jpg/169px-Mendax-desktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/66/Mendax-desktop.jpg/300px-Mendax-desktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/66/Mendax-desktop.jpg/750px-Mendax-desktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/67/Date_menu.jpg/104px-Date_menu.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Dktop.jpg/120px-Dktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Dktop.jpg/169px-Dktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Dktop.jpg/750px-Dktop.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Laplinbox.jpg/120px-Laplinbox.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Laplinbox.jpg/180px-Laplinbox.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Laplinbox.jpg/800px-Laplinbox.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/120px-Openbox_7_04_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/800px-Openbox_7_04_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/6/6a/LoginOptions.png/120px-LoginOptions.png [new file with mode: 0644]
oldwiki/images/thumb/6/6a/LoginOptions.png/180px-LoginOptions.png [new file with mode: 0644]
oldwiki/images/thumb/6/6a/LoginOptions.png/800px-LoginOptions.png [new file with mode: 0644]
oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/120px-FocusCyclingToPanel.png [new file with mode: 0644]
oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/150px-FocusCyclingToPanel.png [new file with mode: 0644]
oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/180px-FocusCyclingToPanel.png [new file with mode: 0644]
oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/120px-Pantallazo_04-05-2010_1366x768.png [new file with mode: 0644]
oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/800px-Pantallazo_04-05-2010_1366x768.png [new file with mode: 0644]
oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/120px-Openboxscreenshot4.png [new file with mode: 0644]
oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/800px-Openboxscreenshot4.png [new file with mode: 0644]
oldwiki/images/thumb/7/70/20070723-1848.png/120px-20070723-1848.png [new file with mode: 0644]
oldwiki/images/thumb/7/70/20070723-1848.png/180px-20070723-1848.png [new file with mode: 0644]
oldwiki/images/thumb/7/70/20070723-1848.png/800px-20070723-1848.png [new file with mode: 0644]
oldwiki/images/thumb/7/72/GNOME-Openbox.png/120px-GNOME-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/7/72/GNOME-Openbox.png/180px-GNOME-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/7/72/GNOME-Openbox.png/800px-GNOME-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/7/75/ObConfDock.png/150px-ObConfDock.png [new file with mode: 0644]
oldwiki/images/thumb/7/75/ObConfDock.png/180px-ObConfDock.png [new file with mode: 0644]
oldwiki/images/thumb/7/75/ObConfDock.png/200px-ObConfDock.png [new file with mode: 0644]
oldwiki/images/thumb/7/75/ObConfDock.png/89px-ObConfDock.png [new file with mode: 0644]
oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/120px-HiddenTitlebarButtons.png [new file with mode: 0644]
oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/150px-HiddenTitlebarButtons.png [new file with mode: 0644]
oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/180px-HiddenTitlebarButtons.png [new file with mode: 0644]
oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/120px-Myscreen-weboide-x.jpg [new file with mode: 0644]
oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/180px-Myscreen-weboide-x.jpg [new file with mode: 0644]
oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/800px-Myscreen-weboide-x.jpg [new file with mode: 0644]
oldwiki/images/thumb/7/7b/Openboxshot2.jpg/120px-Openboxshot2.jpg [new file with mode: 0644]
oldwiki/images/thumb/7/7b/Openboxshot2.jpg/180px-Openboxshot2.jpg [new file with mode: 0644]
oldwiki/images/thumb/7/7b/Openboxshot2.jpg/800px-Openboxshot2.jpg [new file with mode: 0644]
oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/150px-ActiveDisabledMenuEntry.png [new file with mode: 0644]
oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/86px-ActiveDisabledMenuEntry.png [new file with mode: 0644]
oldwiki/images/thumb/7/7f/GagaPeter_001.png/120px-GagaPeter_001.png [new file with mode: 0644]
oldwiki/images/thumb/7/7f/GagaPeter_001.png/180px-GagaPeter_001.png [new file with mode: 0644]
oldwiki/images/thumb/7/7f/GagaPeter_001.png/800px-GagaPeter_001.png [new file with mode: 0644]
oldwiki/images/thumb/7/7f/OpenboxMotivationalPoster.png/120px-OpenboxMotivationalPoster.png [new file with mode: 0644]
oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/120px-Donnie-2007-07-15.png [new file with mode: 0644]
oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/180px-Donnie-2007-07-15.png [new file with mode: 0644]
oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/800px-Donnie-2007-07-15.png [new file with mode: 0644]
oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/120px-Openbox_dust_carbon.png [new file with mode: 0644]
oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/180px-Openbox_dust_carbon.png [new file with mode: 0644]
oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/800px-Openbox_dust_carbon.png [new file with mode: 0644]
oldwiki/images/thumb/8/87/MyDesktop.jpeg/120px-MyDesktop.jpeg [new file with mode: 0644]
oldwiki/images/thumb/8/87/MyDesktop.jpeg/800px-MyDesktop.jpeg [new file with mode: 0644]
oldwiki/images/thumb/8/87/Openbox.png/120px-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/8/87/Openbox.png/180px-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/8/87/Openbox.png/800px-Openbox.png [new file with mode: 0644]
oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/120px-Openbox_28_03_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/800px-Openbox_28_03_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8a/Capture.png/120px-Capture.png [new file with mode: 0644]
oldwiki/images/thumb/8/8a/Capture.png/1280px-Capture.png [new file with mode: 0644]
oldwiki/images/thumb/8/8a/Capture.png/180px-Capture.png [new file with mode: 0644]
oldwiki/images/thumb/8/8a/Capture.png/800px-Capture.png [new file with mode: 0644]
oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/1024px-2560x1024_scrot.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/120px-2560x1024_scrot.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/180px-2560x1024_scrot.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/800px-2560x1024_scrot.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/120px-Openbox_dust_carbon.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/180px-Openbox_dust_carbon.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/800px-Openbox_dust_carbon.jpg [new file with mode: 0644]
oldwiki/images/thumb/8/8d/Sodio.png/120px-Sodio.png [new file with mode: 0644]
oldwiki/images/thumb/8/8d/Sodio.png/180px-Sodio.png [new file with mode: 0644]
oldwiki/images/thumb/8/8d/Sodio.png/320px-Sodio.png [new file with mode: 0644]
oldwiki/images/thumb/8/8d/Sodio.png/800px-Sodio.png [new file with mode: 0644]
oldwiki/images/thumb/9/93/NewClientMenu.png/150px-NewClientMenu.png [new file with mode: 0644]
oldwiki/images/thumb/9/93/NewClientMenu.png/180px-NewClientMenu.png [new file with mode: 0644]
oldwiki/images/thumb/9/93/NewClientMenu.png/86px-NewClientMenu.png [new file with mode: 0644]
oldwiki/images/thumb/9/95/KeychainDialog.png/120px-KeychainDialog.png [new file with mode: 0644]
oldwiki/images/thumb/9/95/KeychainDialog.png/150px-KeychainDialog.png [new file with mode: 0644]
oldwiki/images/thumb/9/96/Sreenopenbox2.png/120px-Sreenopenbox2.png [new file with mode: 0644]
oldwiki/images/thumb/9/96/Sreenopenbox2.png/180px-Sreenopenbox2.png [new file with mode: 0644]
oldwiki/images/thumb/9/96/Sreenopenbox2.png/800px-Sreenopenbox2.png [new file with mode: 0644]
oldwiki/images/thumb/9/97/Image-Ss_October.png/120px-Image-Ss_October.png [new file with mode: 0644]
oldwiki/images/thumb/9/97/Image-Ss_October.png/750px-Image-Ss_October.png [new file with mode: 0644]
oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/120px-Gxdesktop26.jpg [new file with mode: 0644]
oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/800px-Gxdesktop26.jpg [new file with mode: 0644]
oldwiki/images/thumb/9/9c/ObConfTheme.png/150px-ObConfTheme.png [new file with mode: 0644]
oldwiki/images/thumb/9/9c/ObConfTheme.png/180px-ObConfTheme.png [new file with mode: 0644]
oldwiki/images/thumb/9/9c/ObConfTheme.png/200px-ObConfTheme.png [new file with mode: 0644]
oldwiki/images/thumb/9/9c/ObConfTheme.png/89px-ObConfTheme.png [new file with mode: 0644]
oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/120px-2007-06-29-233539_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/169px-2007-06-29-233539_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/750px-2007-06-29-233539_1280x1024_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/a/a0/Boxw.png/120px-Boxw.png [new file with mode: 0644]
oldwiki/images/thumb/a/a0/Boxw.png/180px-Boxw.png [new file with mode: 0644]
oldwiki/images/thumb/a/a0/Boxw.png/800px-Boxw.png [new file with mode: 0644]
oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/120px-Slackware_skinn3r.png [new file with mode: 0644]
oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/169px-Slackware_skinn3r.png [new file with mode: 0644]
oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/750px-Slackware_skinn3r.png [new file with mode: 0644]
oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/120px-Nightm4re-2006-10-26-2128-october.jpg [new file with mode: 0644]
oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/180px-Nightm4re-2006-10-26-2128-october.jpg [new file with mode: 0644]
oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/800px-Nightm4re-2006-10-26-2128-october.jpg [new file with mode: 0644]
oldwiki/images/thumb/a/a5/ObConfBehavior.png/150px-ObConfBehavior.png [new file with mode: 0644]
oldwiki/images/thumb/a/a5/ObConfBehavior.png/180px-ObConfBehavior.png [new file with mode: 0644]
oldwiki/images/thumb/a/a5/ObConfBehavior.png/200px-ObConfBehavior.png [new file with mode: 0644]
oldwiki/images/thumb/a/a5/ObConfBehavior.png/89px-ObConfBehavior.png [new file with mode: 0644]
oldwiki/images/thumb/a/ac/14-42.png/120px-14-42.png [new file with mode: 0644]
oldwiki/images/thumb/a/ac/14-42.png/750px-14-42.png [new file with mode: 0644]
oldwiki/images/thumb/b/b0/Openbox-elementary3.png/120px-Openbox-elementary3.png [new file with mode: 0644]
oldwiki/images/thumb/b/b0/Openbox-elementary3.png/180px-Openbox-elementary3.png [new file with mode: 0644]
oldwiki/images/thumb/b/b0/Openbox-elementary3.png/800px-Openbox-elementary3.png [new file with mode: 0644]
oldwiki/images/thumb/b/b0/Openbox.jpg/120px-Openbox.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b0/Openbox.jpg/800px-Openbox.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/120px-FreeBSD_Ob3.4-20070717.png [new file with mode: 0644]
oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/180px-FreeBSD_Ob3.4-20070717.png [new file with mode: 0644]
oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/800px-FreeBSD_Ob3.4-20070717.png [new file with mode: 0644]
oldwiki/images/thumb/b/b2/2007-06-29.jpg/120px-2007-06-29.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b2/2007-06-29.jpg/180px-2007-06-29.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b2/2007-06-29.jpg/800px-2007-06-29.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b2/MoveFromEdge.png/120px-MoveFromEdge.png [new file with mode: 0644]
oldwiki/images/thumb/b/b2/MoveFromEdge.png/150px-MoveFromEdge.png [new file with mode: 0644]
oldwiki/images/thumb/b/b2/MoveFromEdge.png/180px-MoveFromEdge.png [new file with mode: 0644]
oldwiki/images/thumb/b/b2/MoveFromEdge.png/800px-MoveFromEdge.png [new file with mode: 0644]
oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/120px-Dct_screenshot.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/750px-Dct_screenshot.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b7/NewMoreMenu.png/120px-NewMoreMenu.png [new file with mode: 0644]
oldwiki/images/thumb/b/b7/NewMoreMenu.png/150px-NewMoreMenu.png [new file with mode: 0644]
oldwiki/images/thumb/b/b7/NewMoreMenu.png/180px-NewMoreMenu.png [new file with mode: 0644]
oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/120px-TrueTransparentWindows.png [new file with mode: 0644]
oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/150px-TrueTransparentWindows.png [new file with mode: 0644]
oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/180px-TrueTransparentWindows.png [new file with mode: 0644]
oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/399px-12-16-2003_04;46;30PM.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/80px-12-16-2003_04;46;30PM.jpg [new file with mode: 0644]
oldwiki/images/thumb/b/ba/ObConfAppearance.png/150px-ObConfAppearance.png [new file with mode: 0644]
oldwiki/images/thumb/b/ba/ObConfAppearance.png/180px-ObConfAppearance.png [new file with mode: 0644]
oldwiki/images/thumb/b/ba/ObConfAppearance.png/200px-ObConfAppearance.png [new file with mode: 0644]
oldwiki/images/thumb/b/ba/ObConfAppearance.png/89px-ObConfAppearance.png [new file with mode: 0644]
oldwiki/images/thumb/b/bc/2007-06-25.png/120px-2007-06-25.png [new file with mode: 0644]
oldwiki/images/thumb/b/bc/2007-06-25.png/169px-2007-06-25.png [new file with mode: 0644]
oldwiki/images/thumb/b/bc/2007-06-25.png/750px-2007-06-25.png [new file with mode: 0644]
oldwiki/images/thumb/b/be/Ss6.png/120px-Ss6.png [new file with mode: 0644]
oldwiki/images/thumb/b/be/Ss6.png/800px-Ss6.png [new file with mode: 0644]
oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/120px-GnomeMenuInOpenbox.png [new file with mode: 0644]
oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/180px-GnomeMenuInOpenbox.png [new file with mode: 0644]
oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/800px-GnomeMenuInOpenbox.png [new file with mode: 0644]
oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/120px-Spatial-vi-cheatsheet2-WVGA.png [new file with mode: 0644]
oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/180px-Spatial-vi-cheatsheet2-WVGA.png [new file with mode: 0644]
oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/120px-2010-04-05-215307_1024x768_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/180px-2010-04-05-215307_1024x768_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/800px-2010-04-05-215307_1024x768_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/120px-Openbox3_28_03_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/800px-Openbox3_28_03_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/c/c5/Openboxshot1.jpg/120px-Openboxshot1.jpg [new file with mode: 0644]
oldwiki/images/thumb/c/c5/Openboxshot1.jpg/800px-Openboxshot1.jpg [new file with mode: 0644]
oldwiki/images/thumb/c/cb/Openboxscreenshot.png/120px-Openboxscreenshot.png [new file with mode: 0644]
oldwiki/images/thumb/c/cb/Openboxscreenshot.png/800px-Openboxscreenshot.png [new file with mode: 0644]
oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/120px-2010-04-05-145901_1280x800_scrot.jpg [new file with mode: 0644]
oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/180px-2010-04-05-145901_1280x800_scrot.jpg [new file with mode: 0644]
oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/800px-2010-04-05-145901_1280x800_scrot.jpg [new file with mode: 0644]
oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/120px-2008-05-08-1024x768-Crunchbang.png [new file with mode: 0644]
oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/180px-2008-05-08-1024x768-Crunchbang.png [new file with mode: 0644]
oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/320px-2008-05-08-1024x768-Crunchbang.png [new file with mode: 0644]
oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/800px-2008-05-08-1024x768-Crunchbang.png [new file with mode: 0644]
oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/120px-NewTitleSeparatorColors.png [new file with mode: 0644]
oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/150px-NewTitleSeparatorColors.png [new file with mode: 0644]
oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/180px-NewTitleSeparatorColors.png [new file with mode: 0644]
oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/120px-Spatial-vi-cheatsheet-WVGA.png [new file with mode: 0644]
oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/180px-Spatial-vi-cheatsheet-WVGA.png [new file with mode: 0644]
oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/120px-Debian_lenny_Openbox_3.4.7.2.png [new file with mode: 0644]
oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/800px-Debian_lenny_Openbox_3.4.7.2.png [new file with mode: 0644]
oldwiki/images/thumb/d/d7/MSLDNI.png/120px-MSLDNI.png [new file with mode: 0644]
oldwiki/images/thumb/d/dc/Shot.png/120px-Shot.png [new file with mode: 0644]
oldwiki/images/thumb/d/dc/Shot.png/800px-Shot.png [new file with mode: 0644]
oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/120px-Laen-screenshot-080210213623.jpg [new file with mode: 0644]
oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/1280px-Laen-screenshot-080210213623.jpg [new file with mode: 0644]
oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/180px-Laen-screenshot-080210213623.jpg [new file with mode: 0644]
oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/800px-Laen-screenshot-080210213623.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e0/ObCom.gif/120px-ObCom.gif [new file with mode: 0644]
oldwiki/images/thumb/e/e0/ObCom.gif/800px-ObCom.gif [new file with mode: 0644]
oldwiki/images/thumb/e/e0/Openbox_chg.jpg/120px-Openbox_chg.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e0/Openbox_chg.jpg/180px-Openbox_chg.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e0/Openbox_chg.jpg/800px-Openbox_chg.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e2/Openbox-debian.jpg/120px-Openbox-debian.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e2/Openbox-debian.jpg/180px-Openbox-debian.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e2/Openbox-debian.jpg/800px-Openbox-debian.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e6/KickerStartupNotification.png/120px-KickerStartupNotification.png [new file with mode: 0644]
oldwiki/images/thumb/e/e6/KickerStartupNotification.png/150px-KickerStartupNotification.png [new file with mode: 0644]
oldwiki/images/thumb/e/e6/KickerStartupNotification.png/180px-KickerStartupNotification.png [new file with mode: 0644]
oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/120px-Openbox_30_04_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/800px-Openbox_30_04_08.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/ea/050310075012obox.jpg/120px-050310075012obox.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/ea/050310075012obox.jpg/180px-050310075012obox.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/ea/050310075012obox.jpg/800px-050310075012obox.jpg [new file with mode: 0644]
oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/120px-Desktop-2008-04-02.png [new file with mode: 0644]
oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/800px-Desktop-2008-04-02.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/ObConfDesktops.png/150px-ObConfDesktops.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/ObConfDesktops.png/180px-ObConfDesktops.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/ObConfDesktops.png/200px-ObConfDesktops.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/ObConfDesktops.png/89px-ObConfDesktops.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/120px-Openboxscreenshot3.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/800px-Openboxscreenshot3.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/Openzen13.png/120px-Openzen13.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/Openzen13.png/169px-Openzen13.png [new file with mode: 0644]
oldwiki/images/thumb/f/f0/Openzen13.png/750px-Openzen13.png [new file with mode: 0644]
oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/120px-Crunchbang_2010-03-08_1280x800_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/180px-Crunchbang_2010-03-08_1280x800_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/800px-Crunchbang_2010-03-08_1280x800_scrot.png [new file with mode: 0644]
oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/104px-Ss_obconfblackness.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/108px-Ss_obconfblackness.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/122px-Ss_obconfblackness.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/180px-Ss_obconfblackness.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f5/Arch_ob.jpg/120px-Arch_ob.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f5/Arch_ob.jpg/800px-Arch_ob.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f5/IconlessWindows.png/120px-IconlessWindows.png [new file with mode: 0644]
oldwiki/images/thumb/f/f5/IconlessWindows.png/150px-IconlessWindows.png [new file with mode: 0644]
oldwiki/images/thumb/f/f5/IconlessWindows.png/180px-IconlessWindows.png [new file with mode: 0644]
oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/120px-OpenboxStandalone.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/180px-OpenboxStandalone.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/750px-OpenboxStandalone.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f6/Screenshot.jpg/120px-Screenshot.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f6/Screenshot.jpg/750px-Screenshot.jpg [new file with mode: 0644]
oldwiki/images/thumb/f/f7/Ss_postlogic01.png/120px-Ss_postlogic01.png [new file with mode: 0644]
oldwiki/images/thumb/f/f7/Ss_postlogic01.png/1280px-Ss_postlogic01.png [new file with mode: 0644]
oldwiki/images/thumb/f/f7/Ss_postlogic01.png/180px-Ss_postlogic01.png [new file with mode: 0644]
oldwiki/images/thumb/f/f7/Ss_postlogic01.png/800px-Ss_postlogic01.png [new file with mode: 0644]
oldwiki/images/thumb/f/fa/CLIM.png/120px-CLIM.png [new file with mode: 0644]
oldwiki/images/thumb/f/fa/CLIM.png/180px-CLIM.png [new file with mode: 0644]
oldwiki/img_auth.php [new symlink]
oldwiki/includes [new symlink]
oldwiki/index.php [new symlink]
oldwiki/install-utils.inc [new symlink]
oldwiki/languages [new symlink]
oldwiki/maintenance [new symlink]
oldwiki/opensearch_desc.php [new symlink]
oldwiki/profileinfo.php [new symlink]
oldwiki/redirect.php [new symlink]
oldwiki/redirect.phtml [new symlink]
oldwiki/skins/Chick.deps.php [new symlink]
oldwiki/skins/Chick.php [new symlink]
oldwiki/skins/CologneBlue.php [new symlink]
oldwiki/skins/MonoBook.deps.php [new symlink]
oldwiki/skins/MonoBook.php [new symlink]
oldwiki/skins/MySkin.deps.php [new symlink]
oldwiki/skins/MySkin.php [new symlink]
oldwiki/skins/Nostalgia.php [new symlink]
oldwiki/skins/Openbox.php [new file with mode: 0644]
oldwiki/skins/OpenboxWiki.php [new file with mode: 0644]
oldwiki/skins/Simple.deps.php [new symlink]
oldwiki/skins/Simple.php [new symlink]
oldwiki/skins/Skin.sample [new symlink]
oldwiki/skins/SkinPHPTal.sample [new symlink]
oldwiki/skins/Standard.php [new symlink]
oldwiki/skins/chick [new symlink]
oldwiki/skins/common [new symlink]
oldwiki/skins/disabled [new symlink]
oldwiki/skins/htmldump [new symlink]
oldwiki/skins/monobook [new symlink]
oldwiki/skins/myskin [new symlink]
oldwiki/skins/openbox/bg-bottom.gif [new file with mode: 0644]
oldwiki/skins/openbox/bg.gif [new file with mode: 0644]
oldwiki/skins/openbox/bullet.gif [new file with mode: 0644]
oldwiki/skins/openbox/default-icon-theme.css [new file with mode: 0644]
oldwiki/skins/openbox/discussionitem_icon.gif [new file with mode: 0644]
oldwiki/skins/openbox/external.png [new file with mode: 0644]
oldwiki/skins/openbox/file_icon.gif [new file with mode: 0644]
oldwiki/skins/openbox/headbg.gif [new file with mode: 0644]
oldwiki/skins/openbox/headbg.jpg [new file with mode: 0644]
oldwiki/skins/openbox/icons.css [new file with mode: 0644]
oldwiki/skins/openbox/link_icon.gif [new file with mode: 0644]
oldwiki/skins/openbox/lock_icon.gif [new file with mode: 0644]
oldwiki/skins/openbox/magnify-clip.png [new file with mode: 0644]
oldwiki/skins/openbox/mail_icon.gif [new file with mode: 0644]
oldwiki/skins/openbox/main-withphoophie.css [new file with mode: 0644]
oldwiki/skins/openbox/main.css [new file with mode: 0644]
oldwiki/skins/openbox/news_icon.png [new file with mode: 0644]
oldwiki/skins/openbox/null [new file with mode: 0644]
oldwiki/skins/openbox/old.css [new file with mode: 0644]
oldwiki/skins/openbox/openbox.gif [new file with mode: 0644]
oldwiki/skins/openbox/openbox.png [new file with mode: 0644]
oldwiki/skins/openbox/required.gif [new file with mode: 0644]
oldwiki/skins/openbox/rtl.css [new file with mode: 0644]
oldwiki/skins/openbox/user.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/bg-bottom.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/bg.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/bullet.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/css.diff [new file with mode: 0644]
oldwiki/skins/openboxwiki/default-icon-theme.css [new file with mode: 0644]
oldwiki/skins/openboxwiki/discussionitem_icon.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/external.png [new file with mode: 0644]
oldwiki/skins/openboxwiki/file_icon.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/headbg.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/headbg.jpg [new file with mode: 0644]
oldwiki/skins/openboxwiki/icons.css [new file with mode: 0644]
oldwiki/skins/openboxwiki/link_icon.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/lock_icon.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/magnify-clip.png [new file with mode: 0644]
oldwiki/skins/openboxwiki/mail_icon.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/main-withphoophie.css [new file with mode: 0644]
oldwiki/skins/openboxwiki/main.css [new file with mode: 0644]
oldwiki/skins/openboxwiki/news_icon.png [new file with mode: 0644]
oldwiki/skins/openboxwiki/null [new file with mode: 0644]
oldwiki/skins/openboxwiki/old.css [new file with mode: 0644]
oldwiki/skins/openboxwiki/openbox.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/openbox.png [new file with mode: 0644]
oldwiki/skins/openboxwiki/required.gif [new file with mode: 0644]
oldwiki/skins/openboxwiki/rtl.css [new file with mode: 0644]
oldwiki/skins/openboxwiki/user.gif [new file with mode: 0644]
oldwiki/skins/simple [new symlink]
oldwiki/thumb.php [new symlink]
oldwiki/trackback.php [new symlink]
oldwiki/wiki.phtml [new symlink]
rss.xml [new symlink]
rss/cache/index.html [new file with mode: 0644]
rss/config/planet.xml [new file with mode: 0644]
rss/heads/benp.png [new file with mode: 0644]
rss/heads/benp2.png [new file with mode: 0644]
rss/heads/bf-old.png [new file with mode: 0644]
rss/heads/bf.gif [new file with mode: 0644]
rss/heads/cai.png [new file with mode: 0644]
rss/heads/darth.png [new file with mode: 0644]
rss/heads/deadcat.png [new file with mode: 0644]
rss/heads/dpb---.png [new file with mode: 0644]
rss/heads/dpb.png [new file with mode: 0644]
rss/heads/hackergotchi.png [new file with mode: 0644]
rss/heads/icon5hy.png [new file with mode: 0644]
rss/heads/jamesturner.png [new file with mode: 0644]
rss/heads/jmc.png [new file with mode: 0644]
rss/heads/kyle.png [new file with mode: 0644]
rss/heads/lostson.png [new file with mode: 0644]
rss/heads/m4r3.png [new file with mode: 0644]
rss/heads/marco.png [new file with mode: 0644]
rss/heads/miklos.png [new file with mode: 0644]
rss/heads/nich.png [new file with mode: 0644]
rss/heads/noimage.png [new file with mode: 0644]
rss/heads/ogmaciel.png [new file with mode: 0644]
rss/heads/okraits.png [new file with mode: 0644]
rss/heads/omp.png [new file with mode: 0644]
rss/heads/pat.png [new file with mode: 0644]
rss/heads/philip.png [new file with mode: 0644]
rss/heads/quandar.png [new file with mode: 0644]
rss/heads/quandar_.png [new file with mode: 0644]
rss/heads/rezza2.png [new file with mode: 0644]
rss/heads/saf.png [new file with mode: 0644]
rss/heads/simonaw.png [new file with mode: 0644]
rss/heads/smoon.png [new file with mode: 0644]
rss/heads/smoon2.png [new file with mode: 0644]
rss/heads/spencer.png [new file with mode: 0644]
rss/heads/syscrash.png [new file with mode: 0644]
rss/heads/templertux75.png [new file with mode: 0644]
rss/heads/thread.png [new file with mode: 0644]
rss/index.html [new file with mode: 0644]
rss/local/.xml.commits [new file with mode: 0644]
rss/mini/.xml [new file with mode: 0644]
rss/mini/index.php [new symlink]
rss/news/.xml [new file with mode: 0644]
rss/news/index.php [new symlink]
rss/planet/.xml [new file with mode: 0644]
rss/planet/index.php [new symlink]
rss/refresh.php [new file with mode: 0644]
rss/xmltorss.php [new file with mode: 0644]
search.php [new file with mode: 0644]
top.php [new file with mode: 0644]

diff --git a/.htaccess b/.htaccess
new file mode 100644 (file)
index 0000000..381dc9e
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,31 @@
+RewriteEngine On
+RewriteBase /
+
+# help.php is the wiki
+RewriteCond %{QUERY_STRING} ^(.+)$
+RewriteRule ^help.php$ mediawiki/index.php?title=%1 [L,QSA]
+RewriteCond %{QUERY_STRING} ^$
+RewriteRule ^help.php$ mediawiki/index.php?title=Help [L,QSA]
+
+# wiki is stuck in a subdirectory, let it reference these things directly
+RewriteRule ^mediawiki/css/(.*)$ css/$1 [L]
+RewriteRule ^mediawiki/images/(.*)$ images/$1 [L]
+RewriteRule ^mediawiki/h/(.*)$ h/$1 [L]
+
+# show the stuff in / as /new/*
+RedirectMatch temp ^/new$ http://openbox.org/new/
+RewriteRule ^new/?$ new/home.php [L]
+RewriteRule ^new/(.*)$ $1 [L]
+
+# old folders
+#RewriteRule ^releases(.*)$ dist/openbox$1 [L]
+RedirectMatch permanent ^/releases(.*)$ http://openbox.org/dist/openbox$1
+#RewriteRule ^obconf(.*)$ dist/obconf$1 [L]
+RedirectMatch permanent ^/obconf(.*)$ http://openbox.org/dist/obconf$1
+
+# serve the wiki on /
+RewriteRule ^$ wiki [L]
+
+# wiki/ shortcut for the old wiki site
+RewriteRule ^wiki/?$ oldwiki/index.php?title=Main_Page [L,QSA]
+RewriteRule ^wiki/(.+)$ oldwiki/index.php?title=$1 [L,QSA]
diff --git a/analytics.html b/analytics.html
new file mode 100644 (file)
index 0000000..454e9c0
--- /dev/null
@@ -0,0 +1,9 @@
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+try {
+var pageTracker = _gat._getTracker("UA-11934510-1");
+pageTracker._trackPageview();
+} catch(err) {}</script>
diff --git a/bottom.php b/bottom.php
new file mode 100644 (file)
index 0000000..2d0858f
--- /dev/null
@@ -0,0 +1,6 @@
+</div> <!--content-->
+<div class="clear"></div>
+</div> <!--main-->
+<?php include('analytics.html') ?>
+</body>
+</html>
diff --git a/content.php b/content.php
new file mode 100644 (file)
index 0000000..5a89dd1
--- /dev/null
@@ -0,0 +1 @@
+<div id="content">
diff --git a/css/develop.css b/css/develop.css
new file mode 100644 (file)
index 0000000..d2e4b2c
--- /dev/null
@@ -0,0 +1,18 @@
+#menu .develop a {
+  color: black;
+  background-color: #76C11C;
+/*  background: #c50000;*/
+}
+
+#splash a {
+  text-decoration: none;
+}
+
+#splash a:hover {
+  text-decoration: underline;
+}
+
+.ticker .name {
+  float: left;
+  margin-left: 0;
+}
diff --git a/css/discuss-miniplanet.css b/css/discuss-miniplanet.css
new file mode 100644 (file)
index 0000000..da31fad
--- /dev/null
@@ -0,0 +1,3 @@
+.ticker .title {
+  font-size: 1.1em;
+}
diff --git a/css/discuss-rss.css b/css/discuss-rss.css
new file mode 100644 (file)
index 0000000..01fc0e5
--- /dev/null
@@ -0,0 +1,61 @@
+#subscribe {
+  float: right;
+  margin-right: 5px;
+  font-size: 0.9em;
+}
+
+#subscribe img {
+  float:left;
+  margin-right: 0.4em;
+  height: 1em;
+}
+
+.ticker .name, .ticker .title {
+  font-size: 1.5em;
+}
+
+.ticker .name {
+  float: left;
+  margin-left: 0;
+}
+
+.ticker hr {
+  clear: both;
+}
+
+.ticker .description {
+  margin-bottom: 0.5em;
+  margin-top: 0.5em;
+}
+
+.disclaimer {
+  border-top: 1px solid #ccc;
+  padding-top: 10px;
+  text-align: center;
+}
+
+#col1 p {
+  margin-left: 1em;
+}
+
+#col1 li {
+  margin-bottom: 0.5em;
+}
+
+#col1 li img {
+  float: left;
+  margin-right: 0.4em;
+  margin-bottom: 0.4em;
+}
+
+#col1 h6 {
+  margin-top: 1em;
+}
+
+ul {
+  list-style-type: none;
+}
+
+li {
+  margin-left: 1em;
+}
diff --git a/css/discuss.css b/css/discuss.css
new file mode 100644 (file)
index 0000000..e5f6895
--- /dev/null
@@ -0,0 +1,5 @@
+#menu .discuss a {
+  color: black;
+  background-color: #76C11C;
+/*  background: #c50000;*/
+}
diff --git a/css/download-content.css b/css/download-content.css
new file mode 100644 (file)
index 0000000..f0146ee
--- /dev/null
@@ -0,0 +1,28 @@
+#col1 {
+  width: 80%;
+  margin-left: 10%;
+  margin-right: 10%;
+}
+
+li img {
+  float: left;
+  margin-right: 0.5em;
+  margin-bottom: 1em;
+}
+
+#col1 dl {
+  clear: both;
+  margin-bottom: 1em;
+  margin-right: 58px; /* same space on the right side as taken up by
+                         the icon on the left */
+}
+
+#col1 dl ul {
+  display: inline-block;
+  margin: 0;
+}
+
+#col1 ul li {
+  margin-left: 0;
+  margin-bottom: 0.5em;
+}
diff --git a/css/download.css b/css/download.css
new file mode 100644 (file)
index 0000000..e3c4275
--- /dev/null
@@ -0,0 +1,47 @@
+#menu .download a {
+  color: black;
+  background-color: #76C11C;
+/*  background: #c50000;*/
+}
+
+#col2 {
+  width: 60%;
+}
+
+#col2 li {
+  list-style-type: none;
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+
+h5.text {
+  margin-top: 1em;
+}
+
+h5.text:first-child {
+  margin-top: 0;
+}
+
+#col2 div.iconlist {
+  margin-top: 1em;
+  margin-bottom: 1em;
+}
+
+#col2 div.version {
+  font-weight: bold;
+  font-size: 1.3em;
+  color: #666;
+}
+
+#col2 ul.version {
+  padding: 0;
+  margin-bottom: 1em;
+}
+
+#col2 ul.version li {
+  margin-left: 0;
+}
+
+#col2 .version {
+  margin-left: 53px;
+}
diff --git a/css/help.css b/css/help.css
new file mode 100644 (file)
index 0000000..4190108
--- /dev/null
@@ -0,0 +1,50 @@
+#menu .help a {
+  color: black;
+  background-color: #76C11C;
+}
+
+.cse-search-results {
+  background: white;
+}
+
+.search {
+  background-color: #AFE968;
+  padding: 2px;
+  float: right;
+  border-top-left-radius: 4px 4px;
+  border-top-right-radius: 4px 4px;
+  border-bottom-left-radius: 4px 4px;
+  border-bottom-right-radius: 4px 4px;
+}
+
+.search .input {
+/*  -webkit-box-shadow: #999 0px 1px 2px;*/
+  border-bottom-left-radius: 4px 4px;
+  border-bottom-right-radius: 4px 4px;
+  border: 1px solid #94CC7A;
+  border-top-left-radius: 4px 4px;
+  border-top-right-radius: 4px 4px;
+  padding: 4px;
+  background-color: white;
+/*
+  background-image: url(http://www.google.com/coop/intl/en/images/google_custom_search_watermark.gif);
+  background-repeat: no-repeat;
+  background-position-x: 0%;
+  background-position-y: 50%;
+*/
+}
+
+.search .search-button {
+/*  -webkit-box-shadow: #999 0px 1px 2px; */
+  padding: 2px;
+  background-color: #76C11C;
+  border: 1px solid #94CC7A;
+  border-bottom-left-radius: 4px 4px;
+  border-bottom-right-radius: 4px 4px;
+  border-top-left-radius: 4px 4px;
+  border-top-right-radius: 4px 4px;
+  /*color: #303E2A;*/
+  font-weight: bold;
+  text-shadow: white 0px 1px 2px; 
+}
+
diff --git a/css/home.css b/css/home.css
new file mode 100644 (file)
index 0000000..5f8348c
--- /dev/null
@@ -0,0 +1,51 @@
+#menu .home a {
+  color: black;
+  background-color: #76C11C;
+/*  background: #c50000;*/
+}
+
+#splash-content {
+  padding: 20px;
+}
+
+#splashimage {
+  width:40%;
+  float:left;
+}
+
+#splashtext {
+  width: 56%;
+  float: right;
+}
+
+#splashtext p {
+  font-size: 0.9em;
+  margin: 1em 0;
+  clear: both;
+}
+
+#splashtext a {
+  color: black;
+}
+
+#splashtext h2 {
+  font-size: 1.4em;
+  /*font-style: italic;*/
+}
+
+#splash #download a {
+  display: block;
+  height: 38px;
+  width: 205px;
+  background: url('../images/home/download.png') top left no-repeat;
+  text-decoration:none;
+}
+
+/*
+#splash #download a:hover {
+  display: block;
+  height: 38px;
+  width: 205px;
+  background: url('../images/home/download.png') 0px -38px no-repeat;
+}
+*/
diff --git a/css/site.css b/css/site.css
new file mode 100644 (file)
index 0000000..d675b51
--- /dev/null
@@ -0,0 +1,448 @@
+* {
+  margin: 0;
+  padding: 0;
+}
+
+body {
+  background-color: #fff;
+  font-family: sans-serif, sans;
+  font-size: 12pt;
+  padding-left: 5px;
+  padding-right: 5px;
+}
+
+a {
+  color: #579809;
+}
+
+a:visited {
+  color: #5a0000;
+}
+
+a:hover {
+  color: #7B7223;
+}
+
+ul > li {
+  list-style-type: none;
+}
+
+ul > li.star a {
+  background-color: white;
+}
+
+ul > li.star {
+  background: url(../images/starsmall.png) no-repeat 2px 50%;
+}
+
+li {
+  margin-left: 0;
+  padding-left: 2em;
+  margin-bottom: 0.3em;
+}
+
+img, table {
+  border: 0;
+}
+
+#main {
+  position: relative;
+  min-width: 600px;
+  max-width: 980px;
+  margin-left: auto;
+  margin-right: auto;
+  margin-bottom: 15px;
+}
+
+#content {
+  margin-top: 10px;
+}
+
+
+strong { font-weight: bold; }
+
+.clear { clear:both; }
+
+#top {
+  position: relative;
+  /*border-bottom: 1px solid;*/
+  margin-top: 5px;
+  height: 60px;
+  //background-image: url('../images/top_gradient.png');
+}
+
+#logo, #breadcrumb {
+  position: absolute;
+  top: 0px;
+  font-size: 0.8em;
+  height: 60px;
+}
+
+#logo {
+  left: 15px;
+  width: 279px;
+/*
+  float: left;
+  border: 2px solid;
+  border-color: #666;
+  border-top-left-radius: 6px 6px;
+  border-top-right-radius: 6px 6px;
+  border-bottom-left-radius: 6px 6px;
+  border-bottom-right-radius: 6px 6px;
+  background-color: #E1D036;
+*/
+  background-image: url('../images/logo_shadow.png');
+  background-repeat: no-repeat;
+}
+
+#breadcrumb {
+  left: 290px;
+  font-size: 0.8em;
+  display: table;
+}
+
+#breadcrumb > div {
+  display: table-cell;
+  vertical-align: bottom;
+}
+
+#breadcrumb .bcitem {
+  margin: 0 0.3em;
+}
+
+#menu {
+  position: absolute;
+  right: 10px;
+  top: 20px;
+}
+#menu a {
+  background-color: white;
+  z-index: 100;
+}
+#menu ul {
+  padding: 4px;
+  font-size: 12px;
+}
+#menu li {
+  float: left;
+  line-height: 20px;
+  border-bottom: 0px solid;
+  border-color: #666;
+  margin-left: 6px;
+  padding: 1px 0px;
+}
+#menu li a {
+  color: #000 !important;
+  padding: 4px 4px;
+  text-decoration: none;
+}
+
+#menu li a:hover {
+  color: #000 !important;
+  background-color: #76C11C;
+}
+
+#sectionmenu {
+  float: right;
+  border-left: 1px solid;
+  border-bottom: 1px solid;
+  border-color: #666;
+  padding: 5px;
+  width: 150px;
+  margin-left: 10px;
+  margin-bottom: 10px;
+}
+
+#sectionmenu h2 {
+  font-size: 12px;
+  text-shadow: #99dd55 0px 1px 2px; 
+}
+
+#sectionmenu ul {
+  font-size: 12px;
+  padding-bottom: 2px;
+  margin-bottom: 2px;
+  border-bottom: 1px solid #99dd55;
+  border-color: #666;
+}
+
+#sectionmenu ul:last-of-type {
+  padding-bottom: 0;
+  margin-bottom: 0;
+  border-bottom: 0;
+}
+
+#sectionmenu li {
+  margin-left: 2em;
+  padding-top: 1px;
+  padding-bottom: 1px;
+  text-indent: -1em;
+}
+
+#sectionmenu a {
+  color: black;
+  text-decoration: none;
+}
+
+#sectionmenu a:hover {
+  color: black;
+  text-decoration: underline;
+}
+
+#col1 ol {
+  padding-top: 2px;
+  padding-bottom: 2px;
+  margin-top: 2px;
+  margin-bottom: 2px;
+  list-style-type: decimal;
+  margin-left: 2em;
+}
+
+#col1 ol li {
+  padding-left: 0;
+}
+
+#col1 ol ol {
+  list-style-type: lower-alpha;
+  margin-left: 1.5em;
+}
+
+#splash {
+  background-color: #76C11C;
+  /*background-color: #E1D036;*/
+  height: 50px;
+  color: #000;
+  margin-top: 10px;
+  margin-bottom: 10px;
+/*
+  border-top-left-radius: 14px 14px;
+  border-top-right-radius: 14px 14px;
+  border-bottom-left-radius: 14px 14px;
+  border-bottom-right-radius: 14px 14px;
+*/
+  display: table;
+  width: 100%;
+}
+
+#splash-content {
+  padding-left: 18px;
+  padding-right: 10px;
+  display: table-cell;
+  vertical-align: middle;
+  border: 2px solid;
+  border-color: #666;
+}
+
+#splash a {
+  color: black; !important;
+}
+#splash a:hover {
+  color: black; !important;
+}
+#splash a:visited {
+  color: black; !important;
+}
+
+#splash img.icon {
+  float: left;
+  margin-right: 12px;
+  width: 30px;
+  height: 30px;
+}
+
+#splash h2 {
+  font-size: 24px;
+  letter-spacing: -1px;
+}
+
+#content {
+  position: relative;
+  padding: 5px;
+  font-size: 0.8em;
+}
+
+#col1 {
+  float:left;
+  width:30%;
+  padding-right: 5%
+}
+
+#col2 {
+  float:left;
+  width:30%;
+  padding-right: 5%
+}
+
+#col2.widecol, #col2.fullcol {
+  padding-right: 0%;
+  font-size: 1.1em;
+}
+
+#col1.widecol {
+  width: 25%;
+}
+
+#col2.widecol {
+  width: 70%;
+}
+
+#col2.fullcol {
+  width: 100%;
+}
+
+#col3 {
+  float:left;
+  width:30%;
+  margin-right: 0%
+}
+
+h5, .wikibody h1 {
+  color: #666;
+  font-size: 1.5em;
+  font-weight:bold;
+  letter-spacing: -1px;
+  clear: left;
+}
+
+.wikibody .editsection {
+  float: right;
+  font-size: 0.5em;
+  display: none;
+}
+
+h5.text, .wikibody h1 {
+  letter-spacing: 0px;
+  border-bottom: 1px solid #999;
+  margin-bottom: 0.75em;
+}
+
+h6 {
+  color: #666;
+  font-size: 1.3em;
+  font-weight:bold;
+  letter-spacing: -1px;
+}
+
+h6.text, .wikibody h2 {
+  border-bottom: 1px solid #999;
+  margin-bottom: 0.75em;
+}
+
+#col1 dt, #col2 dt {
+  width:48px;
+  height:48px;
+  float:left;
+  margin-right:10px;
+}
+
+#col1 dd, #col2 dd  {
+  line-height:1.1em;
+  margin-left: 58px;
+}
+
+#col1 dd a, #col2 dd a  {
+  line-height:1.1em;
+}
+
+dl {
+  clear:both;
+  margin-top:10px;
+  padding:5px 0px;
+}
+
+dl.note {
+  margin-left: 24px;
+}
+
+img.rsslink {
+  float: right;
+  border: 0;
+}
+
+.ticker .name {
+  margin-right: 0.5em;
+  margin-left: 0.75em;
+}
+
+.ticker .image > img {
+  width: 32px;
+  max-height: 48px;
+  float: left;
+  margin-right: 0.5em;
+}
+
+.ticker .footer {
+  clear: left;
+}
+
+.ticker .datetime {
+  margin-left: 0.75em;
+}
+
+.ticker .date { float: left; margin-right: 0.6em; }
+.ticker .time { }
+
+.ticker .title { }
+
+.ticker .description {
+}
+
+.ticker .date, .ticker .time, .ticker .name {
+  color: #666;
+}
+
+.ticker {
+  margin: 0;
+//  margin-left: 0.5em;
+}
+
+.ticker > ul { }
+
+.ticker > ul > li {
+  margin: 0;
+  margin-bottom: 1.1em;
+  clear: both;
+}
+
+.ticker hr {
+  margin-top: 1.1em;
+}
+
+.tickermore {
+  text-align:right;
+  padding:5px;
+}
+
+.ellipsis {
+  white-space: nowrap;
+  /*text-overflow: ellipsis;*/ /* for IE and chrome */
+  overflow: hidden;
+}
+
+#content p, #content ul {
+  /*font-size: 1.2em;*/
+  margin-bottom: 0.5em;
+  margin-top: 0.5em;
+}
+
+#content blockcode {
+  display: inline-block;
+  /*font-size: 1.2em;*/
+  margin-left: 0.5em;
+  margin-right: 0.5em;
+  font-family: monospace;
+  margin-bottom: 0.5em;
+  margin-top: 0.5em;
+}
+
+#content h3 {
+  font-size: 1.3em;
+  font-weight: normal;
+  margin-bottom: 0.5em;
+}
+
+img.emblem {
+  /*float: left;*/
+  height: 1.1em;
+  /*margin-right: 0.3em;*/
+}
diff --git a/css/wiki.css b/css/wiki.css
new file mode 100644 (file)
index 0000000..10be521
--- /dev/null
@@ -0,0 +1,163 @@
+/* the page is marked as special (uneditable) */
+#ca-nstab-special {
+}
+
+#wikithings {
+float: right;
+font-size: 0.8em;
+}
+
+#p-edit {
+float: left;
+margin-right: 1em;
+}
+
+#p-personal {
+float: left;
+}
+
+#p-wiki {
+margin-left: 1em;
+float: left;
+}
+
+/* pop up menu hover-box */
+.wikimenu {
+position: relative;
+}
+
+.wikimenu .header {
+padding-top: 0.5em;
+padding-bottom: 0.5em;
+padding-left: 0.5em;
+padding-right: 0.5em;
+//border-top: 1px solid white;
+//border-right: 1px solid white;
+//border-left: 1px solid white;
+}
+
+.wikimenu:hover .header {
+//border-top: 1px solid black;
+//border-right: 1px solid black;
+//border-left: 1px solid black;
+}
+
+.wikimenu ul {
+position: absolute;
+top: 1.7em;
+right: 0;
+visibility: hidden;
+background-color: white;
+padding: 5px;
+min-width: 10em;
+}
+
+/* pop up menu */
+.wikimenu li {
+margin: 0;
+padding: 0;
+}
+
+.wikimenu li.selected a {
+font-weight: bold;
+}
+
+.wikimenu li a {
+position: relative;
+padding-top: 0.5ex;
+padding-bottom: 0.5ex;
+padding-left: 1ex;
+padding-right: 1ex;
+display: block;
+white-space: nowrap;
+}
+
+.wikimenu .header a {
+margin-left: 18px;
+}
+
+#pt-toolbox {
+background: url(../images/wiki/special.png) no-repeat 0.5em 50%;
+width: 16px;
+height: 1.3em;
+padding-left: 0.5em;
+padding-right: 0.5em;
+display: block;
+}
+
+#ca-talk {
+display: none;
+}
+
+#ca-nstab-special {
+background: url(../images/wiki/special.png) no-repeat 0.5em 50%;
+}
+
+#ca-nstab-main.locked, #ca-nstab-user.locked {
+background: url(../images/wiki/locked.png) no-repeat 0.5em 50%;
+}
+
+#ca-nstab-main.editable, #ca-nstab-user.editable {
+background: url(../images/wiki/unlocked.png) no-repeat 0.5em 50%;
+}
+
+#pt-userpage {
+background: url(../images/wiki/user.gif) no-repeat 0.5em 50%;
+}
+
+.wikimenu:hover ul {
+visibility: visible;
+border: 1px solid;
+}
+
+.wikimenu li:hover {
+background-color: #E1D036 !important;
+}
+
+.printfooter {
+display: none;
+}
+
+#preftoc {
+margin: 0.5ex;
+}
+
+#preftoc li {
+float: left;
+margin: 0;
+padding-left: 0.5em;
+padding-right: 0.5em;
+border-right: 1px solid;
+list-style-type: none;
+}
+
+#preftoc li.selected {
+font-weight: bold;
+}
+
+#preftoc li:first-child {
+border-left: 1px solid;
+}
+
+#preferences {
+padding: 0.5ex;
+clear: both;
+}
+
+#prefcontrol {
+margin-top: 1ex;
+margin-bottom: 1ex;
+}
+
+.wikibody a.new {
+background-color: #fee;
+color: #5a0000;
+}
+
+.wikibody ul li {
+list-style-type: disc;
+}
+
+.wikibody hr {
+margin: 0.2em 0;
+}
diff --git a/develop-git.php b/develop-git.php
new file mode 100644 (file)
index 0000000..5679d27
--- /dev/null
@@ -0,0 +1,242 @@
+<?
+$title='Check Out the Source Code';
+$breadcrumb=array('Home', '.', 'Develop', 'develop.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/develop.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/splash/git.png', $title); ?>
+
+<?php include('content.php') ?>
+
+<div id="col1" class="widecol"> 
+<ol>
+  <li><a href="#quick">Quick Instructions</a></li>
+  <li><a href="#branches">Branches</a></li>
+  <li><a href="#local">Local changes</a></li>
+    <ol>
+      <li><a href="#conflict">Conflicting changes</a></li>
+    </ol>
+  </li>
+  <li><a href="#contrib">Contributing code</a></li>
+  <li><a href="#lowband">Low bandwidth option</a></li>
+  <li><a href="#repos">Alternate repos</a></li>
+  <li><a href="#reading">Further Reading</a></li>
+</ol>
+</div> <!--col1-->
+
+<div id="col2" class="widecol">
+<a name="quick"><h5 class="text">Quick Instructions</h5></a>
+
+<p>
+To get up and running, you just need one command. This will create a directory
+called openbox and download the git repository into it:
+</p>
+<blockcode>
+git clone git://git.openbox.org/dana/openbox openbox
+</blockcode>
+
+<p>To get the latest changes, from inside the downloaded git repository, run</p>
+<blockcode>
+git pull
+</blockcode>
+
+<p>
+Note however that this only does what you expect if you haven't made any changes.
+If you have, it will attempt to merge your changes which may or may not be what
+you want, see <a href="#local">Local Changes</a> below.
+</p>
+
+<p>
+Read the <code>README.GIT</code> file for instructions on building the
+source code from the git repository.
+</p>
+
+<a name="branches"><h5 class="text">Branches</h5></a>
+
+<p>
+Currently, there are two branches of interest in the Openbox git repos:
+master and 3.4-working. Master is the branch that will most likely become
+Openbox 3.5 or so, 3.4-working keeps compatibility with the rc.xml file from
+the 3.4.x releases. There is also a branch called backport which is where we
+put fixes and features that should go in both the other branches.
+</p>
+
+<p>
+By default you will get the master branch, hence the name. If you want the
+3.4-working branch, run
+</p>
+<blockcode>
+git checkout --track -b 3.4-working origin/3.4-working
+</blockcode>
+
+<p>
+You can now switch between them with git checkout master and git checkout
+3.4-working.
+</p>
+
+<p>
+If you want the very latest changes, first decide if you want 3.4-working or master,
+then check if we've recently merged the backport branch, for example by checking
+the output of git-log, looking at gitk --all or at the gitweb interface (look
+near the bottom under the "heads" header). If there are any interesting changes
+in the backport branch you want, just run
+</p>
+<blockcode>
+git merge origin/backport
+</blockcode>
+
+<p>
+and git will pull in the changes for you. If it did not succeed or if the result
+didn't compile, you should wait for us to merge it instead. Note however that a
+git pull will not remerge backport for you, it will only get updates from the
+branch you're currently on. If there are new commits on backport just rerun the
+merge command. If you've merged backport, you might want to reset your master
+branch before rerunning git pull. (this will remove local changes, so make
+sure they're committed on another branch as detailed below if you have those).
+</p>
+<blockcode>
+git reset --hard origin/3.4-working
+</blockcode>
+
+<p>
+or if you're using master, type origin/master instead of course. And make sure
+you've checked out the correct branch first. If you messed up, read
+<code>man git-reflog</code>.
+</p>
+
+<a name="local"><h5 class="text">Local changes</h5></a>
+
+<p>
+Unlike CVS and Subversion, git lets you have local changes while still tracking
+upstream development, in a nut shell, make your changes and run
+</p>
+<blockcode>
+git commit -a -m "informative message"
+</blockcode>
+
+<p>
+It's usually a good idea to keep your changes in a separate branch. You can do
+this in a couple of ways, the easiest way is to run
+</p>
+<blockcode>
+git checkout -b my-branch master
+</blockcode>
+<p>
+then commit all your changes to that branch.
+</p>
+
+<a name="conflict"><h6 class="text">Conflicting changes</h6></a>
+
+<p>
+If you hang on to your changes for a long time, it's likely that
+we will make commits that conflict with yours. There are two ways to
+deal with this, you can either <code>git-merge</code> our branch and resolve the
+differences, but the better way is to use <code>git-rebase</code>.
+This command
+will take your commits and apply them to the tip (ie latest version)
+of the specified branch, pausing after each commit that conflicts.
+This usually makes it easier to resolve the conflicts and also gives
+a nicer history. Using git-rebase is a bit complicated so read the
+man page.
+</p>
+
+<p>
+If you just want to test that your changes work with the
+latest version of openbox, you can merge master and then
+later use <code>git reset --hard HEAD^</code> to revert
+the merge. However, I recommend first doing a
+<code>git checkout -b my-temp</code>, since running
+git-reset twice will continue reverting real commits, so it's
+easy to mess up. If you're doing all the temp merging on a
+separate branch you don't have to worry about that.
+</p>
+
+<a name="contrib"><h5 class="text">Contributing code</h5></a>
+
+<p>
+You've coded an exciting feature and now you want to send a
+diff, how to do it? git-diff you might guess, and while that
+will produce a diff you can send, git-format-patch is a bit
+nicer as it will automatically give you a patch file per commit
+that you want to send, with the commit message in each file.
+</p>
+
+<p>
+Another option is to set up your own public repo and simply tell
+us where to pull your changes from, look at the git-daemon man
+page for details. You can also use the git-bundle command to send
+a file that contains all commits, which we can then pull from. For
+example if you've made all your commits on the branch my-branch
+which you produced at some point from <code>git checkout -b master</code>,
+you can produce your bundle with
+</p>
+<blockcode>
+git bundle create my-bundle master..my-branch
+</blockcode>
+<p>
+then send the file my-bundle to us.
+</p>
+
+<a name="lowband"><h5 class="text">Low bandwidth option</h5></a>
+
+<p>
+If your internet connection is very slow (the full git
+repo is currently around 8.5MB) and you just want the very
+latest version without any history, you can run
+</p>
+<blockcode>
+git clone --depth 1 git://git.openbox.org/dana/openbox openbox
+</blockcode>
+
+<p>
+This will give you only the current and preceding commit from
+each branch, but you can't do much more with your repo than compile
+the code. Merging as described above will only work if you use a
+depth high enough to include the point where the backport branch
+separated from master. See the git-clone and git-fetch man pages
+for further details.
+</p>
+
+<p>
+You can also download a tarball of any revision via
+<a href="http://git.openbox.org/?p=dana/openbox.git;a=summary">gitweb</a>.
+Click "tree" next to a branch name at the bottom, then "snapshot" at the
+top of the new page.
+</p>
+
+<a name="repos"><h5 class="text">Alternate repos</h5></a>
+
+<p>
+Due to the distributed nature of git, you can choose to pull
+from various upstream locations (see the git-remote man page for
+details on how to use several remotes).
+</p>
+<blockcode>git://git.openbox.org/dana/openbox</blockcode>
+<blockcode>git://git.openbox.org/mikachu/openbox</blockcode>
+<blockcode>git://git.mika.l3ib.org/openbox.git</blockcode>
+<blockcode>git://repo.or.cz/openbox.git</blockcode>
+
+<p>
+The astute git user will notice that there are some variations in branches
+offered among these, for example dana has a libs branch that separates out
+some common wm code in a library, and mikachu has a mikabox branch which
+is just some crazy stuff.
+</p>
+
+<a name="reading"><h5 class="text">Further reading</h5></a>
+
+<p>
+On the <a href="http://git-scm.com/">git homepage</a> there are many great
+tutorials and all the man
+pages are available for browsing as well.
+</p>
+
+</div> <!--col2-->
+
+<?php include('bottom.php') ?>
diff --git a/develop-translate.php b/develop-translate.php
new file mode 100644 (file)
index 0000000..268ef11
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+$title='Help Translate Openbox';
+$breadcrumb=array('Home', '.', 'Develop', 'develop.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/develop.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/splash/translate.png', $title); ?>
+
+<?php include('content.php') ?>
+
+<div id="col1" class="widecol">
+<dl> 
+<dt><img src="images/icons/openbox_logo.png" alt="openbox"/></dt> 
+<dd><a href="http://git.icculus.org/?p=mikachu/openbox.git;a=tree;f=po;hb=backport">
+  Openbox Translations</a><br />
+  Browse existing translations for Openbox, and see the
+  <a href="http://git.icculus.org/?p=mikachu/openbox.git;a=blob_plain;f=po/openbox.pot;hb=backport">
+  translation template</a>.</dd>
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/status.png" alt="status"/></dt> 
+<dd><a href="http://mika.l3ib.org/ob_translation_status">
+  Openbox Translation Status</a><br />
+  See how many strings are translated for a language in Openbox.</dd>
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/obconf.png" alt="obconf"/></dt> 
+<dd><a href="http://git.icculus.org/?p=dana/obconf.git;a=tree;f=po;hb=HEAD">
+  ObConf Translations</a><br />
+  Browse existing translations for ObConf, and see the
+  <a href="http://git.icculus.org/?p=dana/obconf.git;a=blob_plain;f=po/obconf.pot;hb=HEAD">
+  translation template</a>.</dd>
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/share.png" alt="share"/></dt> 
+<dd><a href="http://bugzilla.icculus.org/enter_bug.cgi?product=Openbox&component=Translations&form_name=enter_bug">
+  Share Your Work</a><br />
+  Submit a new or updated translation.<br/>
+  <div class="clear"></div>
+  <img class="emblem" src="images/importantsmall.png" alt="!"/>
+  <strong>Note:</strong> you will get the opportunity to upload the file
+  <strong>after</strong> you create the entry, don't paste the file in the
+  comments box.
+</dd>
+</dl> 
+
+</div>
+
+<div id="col2" class="widecol">
+<h3>
+Help us translate Openbox! Any improvements to existing translations,
+or translations to new languages would be greatly appreciated by your fellow users.
+</h3>
+
+<p>
+Translations are done through "po" files. The easiest way to edit these files is to use <a href="http://kbabel.kde.org/">KBabel</a>, which is a part of KDE (in the kdesdk package).
+</p>
+
+<p>
+If you want to update an existing translation,
+<a href="http://git.icculus.org/?p=mikachu/openbox.git;a=tree;f=po;hb=backport">browse through</a>
+our latest translations. You can download and modify the translation from there (right click on the "raw" link and select "save as" or the equivalent).
+</p>
+<p>
+If you want to create a new translation from scratch, download the current
+<a href="http://git.icculus.org/?p=mikachu/openbox.git;a=blob_plain;f=po/openbox.pot;hb=backport">translation template for Openbox</a>
+or the
+<a href="http://git.icculus.org/?p=dana/obconf.git;a=blob_plain;f=po/obconf.pot;hb=HEAD">translation template for ObConf</a>
+and add your translations to it. Download the file and run the command <code>msginit --locale LL_CC</code> where LL_CC is the appropriate code for your language. For example ru for Russian, sv for swedish or en_CA for the Canadian variant of English. If you don't have the msginit command, you can save the file directly as <code>LL_CC.po</code> and fill in the header yourself, using an existing translation as a template.
+</p>
+<p>
+When you've completed a new translation, you can submit it to the bugzilla to have it included in the next release. To submit a translation, follow the link below and fill out the template to create a bug report. After the bug report has been created, attach your new "po" file to the bug. If you for some reason don't want to use bugzilla, you can also try to send the translation to the mailing list or contact us directly on IRC but these methods are less reliable and the translation might get lost.
+</p>
+<p>
+<img class="emblem" src="images/importantsmall.png" />
+Please make sure to specify the character encoding properly or Openbox won't be able to read the strings.  UTF-8 is preferable.
+</p>
+<p>
+If you have any questions about what the english text means, or anything else is unclear, please don't hesitate to contact us via the
+<a href="discuss.php">mailing list or on IRC</a>.
+</p>
+<h3>Thank you for your help!</h3>
+</div> <!-- col2 -->
+
+<?php include('bottom.php') ?>
diff --git a/develop.php b/develop.php
new file mode 100644 (file)
index 0000000..1357d1f
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+$title = 'Develop';
+$breadcrumb = array('Home', '.');
+?>
+
+<html>
+<?php include('head.php'); ?>
+  <link rel="stylesheet" type="text/css" href="css/develop.css" />
+</head>
+
+<?php include('top.php'); ?>
+
+<?php splash_title('images/splash/develop.png', $title); ?>
+
+<?php include('content.php'); ?>
+
+<div id="col1"> 
+
+<dl> 
+<dt><img src="images/icons/git.png" alt="code"/></dt> 
+<dd><a href="develop-git.php">Check Out the Source Code</a><br/>
+Browse our <a href="http://git.icculus.org/?p=mikachu/openbox.git;a=summary">
+git repository</a> and learn <a href="develop-git.php">
+how to get</a> the latest code.</dd>
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/code.png" alt="patch"/></dt> 
+<dd><a href="develop-git.php#contrib">Contribute Code</a><br/>
+Help improve Openbox by
+<a href="http://bugzilla.icculus.org/buglist.cgi?product=Openbox&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial&bug_severity=upstream+issue">
+submitting patches</a> for open bugs and feature requests.</dd>
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/obconf.png" alt="obconf"/></dt> 
+<dd><a href="http://git.icculus.org/?p=dana/obconf.git;a=summary">ObConf Source Code</a><br/>
+Start by browsing the
+<a href="http://git.icculus.org/?p=dana/obconf.git;a=summary">
+git repository</a>.  Instructions for
+<a href="develop-git.php">using git</a> also apply here.
+</dd>
+</dl> 
+</div> 
+<div id="col2"> 
+
+<dl> 
+<dt><img src="images/icons/bug.png" alt="bug"/></dt> 
+<dd><a href="http://bugzilla.icculus.org/enter_bug.cgi?product=Openbox&component=general&form_name=enter_bug">Report a Bug</a><br/>
+Browse
+<a href="http://bugzilla.icculus.org/buglist.cgi?product=Openbox&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial&bug_severity=upstream+issue">
+known bugs</a> in our database, or make a
+<a href="http://bugzilla.icculus.org/enter_bug.cgi?product=Openbox&component=general&form_name=enter_bug">new bug</a> report.
+<div class="clear"></div>
+<img class="emblem" src="images/importantsmall.png" alt="!" />
+When submitting a bug report, please make sure to explain
+how to reproduce your problem. If we can't reproduce it, we probably can't
+fix it.
+
+</dd>
+</dl> 
+
+
+<dl> 
+<dt><img src="images/icons/translate.png" alt="translate"/></dt> 
+<dd><a href="develop-translate.php">Help Translate Openbox</a><br/>Any improvements to translations are greatly appreciated.</dd> 
+</dl> 
+<dl> 
+<dt><img src="images/icons/feature.png" alt="feature requests"/></dt> 
+<dd>
+<a href="http://bugzilla.icculus.org/buglist.cgi?product=Openbox&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=enhancement">
+Feature Requests</a><br/>Browse
+<a href="http://bugzilla.icculus.org/buglist.cgi?product=Openbox&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=enhancement">
+existing feature requests</a>, or
+<a href="http://bugzilla.icculus.org/enter_bug.cgi?product=Openbox&component=general&bug_severity=enhancement&form_name=enter_bug">
+contribute your own</a>.</dd> 
+</dl> 
+</div>
+
+<div id="col3"> 
+<a href="http://cia.vc/stats/project/Openbox/.rss"><img class="rsslink" src="images/rss.png" title="Subscribe to the feed" /></a>
+<h5>Recent Commits</h5> 
+<dl>
+
+<div id="commits" class="ticker"></div>
+<script type="text/javascript">
+  xmlNews('commits',     // the feed name
+         'commits',     // the div name
+         5,             // count
+         'showname,showdate');
+</script>
+<div class="tickermore"> 
+  <a href="http://cia.vc/stats/project/Openbox/">More Openbox commits...</a> 
+</div> 
+<div class="tickermore"> 
+  <a href="http://cia.vc/stats/project/ObConf/">More ObConf commits...</a> 
+</div> 
+
+</dl>
+</div> <!--col3-->
+
+<?php include('bottom.php'); ?>
diff --git a/discuss-miniplanet.php b/discuss-miniplanet.php
new file mode 100644 (file)
index 0000000..609e9e7
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+$title='Mini Planet Openbox';
+$breadcrumb=array('Home', '.', 'Discuss', 'discuss.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/discuss.css" />
+  <link rel="stylesheet" type="text/css" href="css/discuss-rss.css" />
+  <link rel="stylesheet" type="text/css" href="css/discuss-miniplanet.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/splash/planet.png', $title); ?>
+
+<div id="subscribe"><a href="rss/mini"><img border="0" src="images/rssshort.png" />Subscribe</a></div>
+
+<?php include('content.php') ?>
+
+<div id="col1" class="widecol">
+<h5>Oh Hello!</h5>
+<p>
+Mini Planet Openbox is a collection of <a href="http://twitter.com/">tweets</a>
+and <a href="http://identi.ca/">dents</a> (and in theory whatever
+<a href="http://jaiku.com/">jaiku</a> produces). It is just another
+aggregator of RSS feeds. 
+</p>
+<p>
+You can stalk openbox babbling going on at twitter
+<a href="http://search.twitter.com/search?q=openbox">here</a>. With
+identi.ca you just have to use the
+<a href="http://identi.ca/group/openbox">openbox group</a>.
+</p>
+
+<h6>Feeds</h6>
+<ul id="feedlist">
+</ul>
+
+<!-- load the feeds from an external file encoded in xml -->
+<script type="text/javascript">
+xmlFeedList('feedlist', 'mini', true);
+</script>
+
+<h6>Join Us!</h6>
+<p>
+If your twitter/ident has at least some openbox related banter, then we need you!
+</p>
+<p>
+Email <a href="mailto:david@chalkskeletons.com">me</a> if you want to be added.
+</p>
+
+<h6>Planet Openbox:</h6>
+<p>
+Feeling unfulfilled? Try
+<a href="discuss-planet.php">planet openbox</a>,
+a blog aggregator.
+
+<h6>Hash Tags:</h6>
+<p>
+Some twitter hash tag searches of possible interest.
+</p>
+<ul>
+<li><a href="http://search.twitter.com/search?q=%23openbox">#openbox</a></li>
+<li><a href="http://search.twitter.com/search?q=%23gnome">#gnome</a></li>
+<li><a href="http://search.twitter.com/search?q=%23kde">#kde</a></li>
+<li><a href="http://search.twitter.com/search?q=xfce">#xfce</a></li>
+<li><a href="http://search.twitter.com/search?q=%23gnome-shell">#gnome-shell</a></li>
+<li><a href="http://search.twitter.com/search?q=%23crunchbang">#crunchbang</a></li>
+</ul>
+
+</div> <!--col1-->
+
+<div id="col2" class="widecol">
+<div id="miniplanet" class="ticker">
+<script type="text/javascript">
+  xmlNews('miniplanet', // the feed name
+         'miniplanet', // the div name
+         40,     // count
+         'links,twitter,showdate,showimage,idname');
+</script>
+</div>
+</div> <!--col2-->
+
+<div class="disclaimer clear">
+The entries aggregated on this page are owned by, and
+represent the opinion of the author(s).
+</div>
+
+<?php include('bottom.php') ?>
diff --git a/discuss-news.php b/discuss-news.php
new file mode 100644 (file)
index 0000000..245e52e
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+$title='Recent Announcements';
+$breadcrumb=array('Home', '.', 'Discuss', 'discuss.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/discuss.css" />
+  <link rel="stylesheet" type="text/css" href="css/discuss-rss.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/icons/news.png', $title); ?>
+
+<div id="subscribe"><a href="rss/news"><img border="0" src="images/rssshort.png" />Subscribe</a></div>
+
+<?php include('content.php') ?>
+
+<!-- container for the html output -->
+<div id="news" class="ticker">
+<script type="text/javascript">
+xmlNews('news', // the feed name
+        'news', // the div name
+       20,     // count
+       'links,fulldescription,showdate,idname');
+</script>
+</div>
+
+<?php include('bottom.php') ?>
diff --git a/discuss-planet.php b/discuss-planet.php
new file mode 100644 (file)
index 0000000..abd1148
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+$title='Planet Openbox';
+$breadcrumb=array('Home', '.', 'Discuss', 'discuss.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/discuss.css" />
+  <link rel="stylesheet" type="text/css" href="css/discuss-rss.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/splash/planet.png', $title); ?>
+
+<div id="subscribe"><a href="rss/planet"><img border="0" src="images/rssshort.png" />Subscribe</a></div>
+
+<?php include('content.php') ?>
+
+<div id="col1" class="widecol">
+<h5>Planet Openbox!</h5>
+<p>
+The fascinating world of Openbox users, contributors and even sometimes a
+bit of development news.
+</p>
+<p>
+Some feeds are missing in action; they might be back, they
+might not, only time will tell... 
+</p>
+
+<h6>Feeds</h6>
+<ul id="feedlist">
+</ul>
+
+<!-- load the feeds from an external file encoded in xml -->
+<script type="text/javascript">
+xmlFeedList('feedlist', 'planet', false);
+</script>
+
+<h6>Join Us!</h6>
+<p>
+If your blog has at least some openbox related banter, then we need you!
+</p>
+<p>
+Email <a href="mailto:david@chalkskeletons.com">me</a> if you want to be added.
+</p>
+
+<h6>Mini Planet:</h6>
+<p>
+Too lazy to read this? Try
+<a href="discuss-miniplanet.php">mini planet openbox</a>,
+a tweet and dent aggregator.
+
+<h6>Planet Links:</h6>
+<ul>
+<li><a href="http://planet.gnome.org/">Planet Gnome</a></li>
+<li><a href="http://crunchbanglinux.org/planet/">Planet Crunch Bang</a></li>
+<li><a href="http://planet.archlinux.org/">Planet Arch</a></li>
+<li><a href="http://planet.debian.net/">Planet Debian</a></li>
+<li><a href="http://planet.gentoo.org/">Planet Gentoo</a></li>
+<li><a href="http://www.planetplanet.org/">planetplanet</a></li>
+</ul>
+
+</div> <!--col1-->
+
+<div id="col2" class="widecol">
+<div id="planet" class="ticker">
+<script type="text/javascript">
+xmlNews('planet', // the feed name
+        'planet', // the div name
+       20,     // count
+       'shownamelink,fulldescription,showimage,showdate,idname');
+</script>
+</div>
+</div> <!--col2-->
+
+<div class="disclaimer clear">
+The entries aggregated on this page are owned by, and
+represent the opinion of the author(s).
+</div>
+
+<?php include('bottom.php') ?>
diff --git a/discuss.php b/discuss.php
new file mode 100644 (file)
index 0000000..e625d0f
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+$title='Discuss';
+$breadcrumb=array('Home', '.');
+?>
+
+<html>
+  <?php include('head.php'); ?>
+  <link rel="stylesheet" type="text/css" href="css/discuss.css" />
+</head>
+
+<?php include('top.php'); ?>
+
+<?php splash_title('images/splash/discuss.png', $title); ?>
+
+<?php include('content.php'); ?>
+
+<div id="col1"> 
+<dl> 
+<dt><img src="images/icons/mail.png" alt="mail"/></dt> 
+<dd><a href="http://icculus.org/mailman/listinfo/openbox">Join the Mailing List</a><br/>Ask questions about using Openbox, or <a href="http://news.gmane.org/gmane.comp.window-managers.openbox">read the archives</a>.</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/irc.png" alt="irc"/></dt> 
+<dd><a href="irc://irc.oftc.net:6667/openbox">Talk on IRC</a><br/>Openbox has
+an IRC channel on <a href="http://www.oftc.net/">oftc</a>, stealthily called
+<a href="irc://irc.oftc.net:6667/openbox">#openbox</a>.</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/sshots.png" alt="screenshots"/></dt> 
+<dd><a href="discuss-sshots.php">
+Show Off Your Desktop</a><br/>
+Browse screenshots by other users and show off your own.
+</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/news.png" alt="irc"/></dt> 
+<dd><a href="discuss-news.php">Recent Announcements</a><br/>
+Read the latest announcements from the Openbox team.</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/facebook.png" alt="facebook"/></dt> 
+<dd><a href="http://www.facebook.com/pages/Openbox/44681126602">
+Become a Fan</a><br/>
+Join the Openbox facebook page.
+</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/lastfmlogo.jpg" alt="facebook"/></dt> 
+<dd><a href="http://www.last.fm/group/Openbox">
+Last.fm Community</a><br/>
+Share music with other Openbox users.
+</dd> 
+</dl> 
+</div> 
+<div id="col2"> 
+<a href="rss/planet"><img class="rsslink" src="images/rss.png" title="Subscribe to the feed"/></a>
+<h5>Community Blogroll</h5> 
+<dl>
+
+<div id="planetfeed" class="ticker">
+<script type="text/javascript">
+  xmlNews('planet',     // the feed name
+         'planetfeed', // the div name
+         4,            // count
+         'showimage,shownamebottom,showdate,showdescription,titlelinktoid=discuss-planet.php');
+</script>
+</div>
+<div class="tickermore"> 
+  <a href="discuss-planet.php">Planet Openbox...</a> 
+</div> 
+</div><!--col2-->
+
+<div id="col3"> 
+<a href="rss/mini"><img class="rsslink" src="images/rss.png" title="Subscribe to the feed"/></a>
+<h5>Twitter Feed</h5> 
+<dl>
+<div id="minifeed" class="ticker">
+<script type="text/javascript">
+  xmlNews('miniplanet', // the feed name
+         'minifeed', // the div name
+         5,     // count
+         'showimage,twitter,showdate,titlelinktoid=discuss-miniplanet.php');
+</script>
+</div>
+<div class="tickermore"> 
+  <a href="discuss-miniplanet.php">More tweets...</a> 
+</div> 
+</dl>
+</div> <!--col3-->
+
+<?php include('bottom.php'); ?>
diff --git a/dist/obconf/README b/dist/obconf/README
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/dist/openbox/README b/dist/openbox/README
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/dist/tools/README b/dist/tools/README
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/download-changelog.php b/download-changelog.php
new file mode 100644 (file)
index 0000000..eff8dd0
--- /dev/null
@@ -0,0 +1,905 @@
+<?php
+$title='Changelog';
+$breadcrumb=array('Home', '.', 'Download', 'download.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/download.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/splash/changelog.png', $title); ?>
+
+<?php include('content.php') ?>
+
+<div id="col1" class="widecol">
+<ol>
+  <li><a href="#3.4.11">3.4.11</a></li>
+  <li><a href="#3.4.10">3.4.10</a></li>
+  <li><a href="#3.4.9">3.4.9</a></li>
+  <li><a href="#3.4.8">3.4.8</a></li>
+  <li><a href="#3.4.8-rc1">3.4.8-rc1</a></li>
+  <li><a href="#3.4.7.2">3.4.7.2</a></li>
+  <li><a href="#3.4.7.1">3.4.7.1</a></li>
+  <li><a href="#3.4.7">3.4.7</a></li>
+  <li><a href="#3.4.6.1">3.4.6.1</a></li>
+  <li><a href="#3.4.6">3.4.6</a></li>
+  <li><a href="#3.4.5">3.4.5</a></li>
+  <li><a href="#3.4.4">3.4.4</a></li>
+  <li><a href="#3.4.3">3.4.3</a></li>
+  <li><a href="#3.4.2">3.4.2</a></li>
+  <li><a href="#3.4.1">3.4.1</a></li>
+  <li><a href="#3.4.0">3.4.0</a></li>
+  <li><a href="#3.3.995">3.3.995</a></li>
+  <li><a href="#3.3.994">3.3.994</a></li>
+  <li><a href="#3.3.993">3.3.993</a></li>
+  <li><a href="#3.3.992">3.3.992</a></li>
+  <li><a href="#3.3.991">3.3.991</a></li>
+  <li><a href="#3.3.990">3.3.990</a></li>
+  <li><a href="#3.3.1">3.3.1</a></li>
+  <li><a href="#3.3">3.3</a></li>
+  <li><a href="#3.3-rc2">3.3-rc2</a></li>
+  <li><a href="#3.3-rc1">3.3-rc1</a></li>
+  <li><a href="#3.2">3.2</a></li>
+  <li><a href="#3.1">3.1</a></li>
+  <li><a href="#3.0">3.0</a></li>
+  <li><a href="#3.0-rc4">3.0-rc4</a></li>
+  <li><a href="#3.0-rc3">3.0-rc3</a></li>
+  <li><a href="#3.0-rc2">3.0-rc2</a></li>
+  <li><a href="#3.0-rc1">3.0-rc1</a></li>
+  <li><a href="#3.0-beta6">3.0-beta6</a></li>
+  <li><a href="#3.0-beta5">3.0-beta5</a></li>
+</ol>
+</div> <!--col1-->
+
+<div id="col2" class="widecol"> 
+
+<a name="3.4.11"><h5 class="text">3.4.11</h5></a><ul>
+  <li>Update Hungarian, Japanese, and Latvian translations.</li>
+  <li>Make xdg-autostart use the OPENBOX environment by default, so you can use OnlyShowIn=OPENBOX in an autostart .desktop and it will work as expected.</li>
+  <li>Don't close the menu when you hold control and execute something.</li>
+  <li>Fix bug #4503 (Adjust who shows up in the Alt-Tab list using SKIP_TASKBAR).</li>
+  <li>Fix flickering window when moving maximized window between monitors of different sizes.</li>
+  <li>Fix bug #4355 (Allow multiple escaped _'s in a menu label and allow a menu shortcut to come after an escaped _).</li>
+  <li>Remember the maximized state of a window when it goes fullscreen, and restore it when leaving fullscreen state.</li>
+  <li>Fix bug #4072 (Openbox is stopped by terminal applications writing to stdout).</li>
+  <li>Fix bug #4492 (Mistake in openbox-gnome-session check while setting up).</li>
+  <li>Fix obxprop to make --root and --id work correctly.</li>
+  <li>Add _OB_APP_ROLE/CLASS/NAME/TYPE properties (replaces _OB_ROLE/CLASS/NAME).</li>
+  <li>Make the focus cycling popup dynamic when windows appear/disappear.</li>
+  <li>Fix bug #4411 (Crash when window appears during focus cycling).</li>
+  <li>Allow the user to specify which properties should be shown by obxprop.</li>
+  <li>Fix tilde expansion in the Execute action</li>
+  <li>Make Home and End keys move to the top/bottom of the active menu.</li>
+  <li>Use the submenuShowDelay when navigating menus with the keyboard.</li>
+</ul>
+
+<a name="3.4.10"><h5 class="text">3.4.10</h5></a><ul>
+  <li>Improve keyboard navigation in Openbox menus.</li>
+  <li> Add a --root option and a manpage for obxprop.</li>
+  <li>Use a negative value for submenuShowDelay and submenuHideDelay to cause an infinite delay.  This means you have to click to show a submenu, rather than just hover over it.</li>
+  <li>Improved code for submenu show/hide delay.  Added the submenuHideDelay config file option, under the "menu" section.</li>
+  <li>Fixed bug #4464 (Typo in openbox-gnome-session script).</li>
+  <li>Fixed bug #4436 (Focusing a window used to stop focus cycling).</li>
+  <li>Renamed obprop to obxprop due to collision with Open Babel (See bug #4419).</li>
+</ul>
+
+<a name="3.4.9"><h5 class="text">3.4.9</h5></a><ul>
+  <li>Allow focus to move while inside an Openbox menu, or during an interactive action such as window cycling.</li>
+  <li>Fixed bug #3717 (Empty dock interfered with move/grow to edge actions).</li>
+  <li>Fixed bug #4411 (Crash when switching desktops and window cycling).</li>
+  <li>Fixed bug #4377 (Window resistance against struts).</li>
+  <li>Fixed bug #4035 (Prevent focus from moving under the mouse after activating a window with an Openbox menu.</li>
+  <li>Correct the value provided by the _NET_WORKAREA hint, so desktop icons will place across all monitors.</li>
+  <li>Don't hide submenus immediately when moving through the parent menu. (Resolves request #3762).</li>
+  <li>Fix for showing Openbox menus with multiple monitors, don't restrict them to the monitor where the mouse is.</li>
+  <li>Fixed bug #4023 (Allow the user to have multiple keys which perform the same function in Openbox menus/move/resize.  E.g. two keys which are both bound to Escape.</li>
+  <li>Add a new obprop tool, which can be used to read the _OB_ROLE, _OB_NAME, and _OB_CLASS (as well as any other UTF-8 window properties) off of a window.</li>
+  <li>Add _OB_ROLE, _OB_NAME, and _OB_CLASS hints on each window that show the respective values for use in the rc.xml applications section, to modify the window when it appears.</li>
+  <li>Improve Openbox interoperability with gnome-session >= 2.24.</li>
+  <li>Fixed bug #4040 (Remove desktop hints set by gdm in the openbox-session scripts, so that Openbox can set the number of desktops (assuming gnome-settings-daemon doesn't first)).</li>
+  <li>Fix a bug in xdg-autostart preventing some .desktop files from working.</li>
+  <li>Show the desktop pager popup on the primary monitor instead of on all monitors.</li>
+  <li>Add a new primaryMonitor config option, which is where Openbox popups will appear.  Defaults to a fixed monitor, but can be made to behave as before with the "active" value for it.</li>
+  <li>Correct edge detection for move/grow to edge to properly use monitor edges for multi-monitor setups.</li>
+  <li>Change default window placement policy to stay on the active monitor for multi-monitor setups.</li>
+  <li>Fixed bug #1149 (Crash with some window icon sizes).</li>
+  <li>Respond to all strut changes, fixes moving/hiding panels.</li>
+  <li>Fix internal code to focus windows on other desktops correctly (Fixes bug #4413).</li>
+  <li>Focus correctness fixups for switching desktops.</li>
+  <li>Fixed bug #4373 (Decoration bug for shaded maximized windows).</li>
+  <li>Fixed bug #4350 (Allow a window to be made skip_taskbar but still get focused by the user's rc.xml).</li>
+  <li>Fixed bug #4307 (Set a minimum time for screenEdgeWarpTime).</li>
+  <li>Fixed bug #4253 (Support for Solaris in openbox-session scripts).</li>
+  <li>Fixed bug #3851 (Allow transient windows to be above helper windows).</li>
+</ul>
+
+<a name="3.4.8"><h5 class="text">3.4.8</h5></a><ul>
+  <li>Updated translations: Slovak, Italian, Croatian, Ukrainian.</li>
+  <li>Allow windows to change their decorations at any time (Fix for Google Chrome).</li>
+  <li>Make openbox-session to respect the $XDG_CONFIG_HOME environment variable.</li>
+  <li>Fixed bug #4344 where borders were given to windows that should not have them.</li>
+  <li>Merge the SessionLogout and Exit actions.  They now test if connected to a session manager and ask it to exit if so, or simply kill Openbox if not.</li>
+  <li>Further tweaks to the _NET_ACTIVE_WINDOW message handling.  Use the same logic for focus-stealing as is used when mapping a new window.</li>
+  <li>Don't go out of our way any more to prevent focus from moving while the keyboard is grabbed.</li>
+  <li>Fix openbox-gnome-session when using gnome-session > 2.22.</li>
+  <li>When resizing a window while focus cycling with bar=no, the bar no longer reappears.</li>
+  <li>Correctly handle shaped windows using the ShapeInput kind, this is used by many composited apps to pass through clicks in their transparent areas.</li>
+  <li>Fix the <monitor> per-app setting.</li>
+  <li>Avoid using anonymous unions.</li>
+  <li>Windows that had their decorations removed by per-app settings were still placed as if they still had their decorations.</li>
+  <li>Fix event handling not to ignore events on a window when they have an unmap event in the queue, if that unmap event doesn't cause the window to be unmanaged.</li>
+  <li>Show the desktop switch on every monitor in xinerama.</li>
+  <li>Fix interpretation of struts in xinerama where the screens have different sizes.</li>
+  <li>Add "next" and "prev" as possible <monitor> targets in the moveto and resizeto actions.</li>
+  <li>Allow escaping the _ used to mark the shortcut character in menu labels. You can now change the (first) _ in a label to __, this will be displayed as a single underscore. The rest of the _ in the string will be unaffected, so only double the first one.</li>
+  <li>Only replace ~ with the home directory when it is preceded by whitespace or is at the start of the string, and when it is followed by a space, slash, or the end of the string. This is implemented with GRegex, and so the required glib version has been bumped to 2.14.</li>
+  <li>Some other small fixes.</li>
+</ul>
+
+<a name="3.4.8-rc1"><h5 class="text">3.4.8-rc1</h5></a><ul>
+  <li>Updated translations: Basque, Catalan, Turkish, Italian, Spanish, Russian.</li>
+  <li>New translations: Danish, Turkish, Lithuanian.</li>
+  <li>Set the _MOTIF_WM_INFO atom so urxvt uses motif hints for borderless mode.</li>
+  <li>Properly escape the xml used in session files.</li>
+  <li>Correct a 64-bit issue related to comparing timestamps.</li>
+  <li>There is a sneaky sentence right at the end of a big paragraph in the wm-spec document that says windows mapping with _NET_WM_USER_TIME=0 should not be focused initially, honor this request.</li>
+  <li>When moving a window to another desktop with following on, bring the window's helper windows (for example gimp image windows with the toolbox set to utility window).</li>
+  <li>Change the _NET_ACTIVE_WINDOW messages again, if they originate from the app and the window is on another desktop, just set the demands_attention flag. If the event came from the user (ie pager/panel), then the window is still moved to the current desktop.</li>
+</ul>
+
+<a name="3.4.7.2"><h5 class="text">3.4.7.2</h5></a><ul>
+  <li>The system I used to generate the dist tarball didn't have the docbook-to-man command so the manpages were empty.</li>
+</ul>
+
+<a name="3.4.7.1"><h5 class="text">3.4.7.1</h5></a><ul>
+  <li>Not to be outdone by the cairo team, I introduced a bug in the last release which made resizing not give any feedback. This is now fixed.</li>
+</ul>
+
+<a name="3.4.7"><h5 class="text">3.4.7</h5></a><ul>
+  <li>Fully updated Czech, Simplified Chinese, Traditional Chinese, German, French, Hungarian, Norwegian, Vietnamese, Dutch, Swedish, Finnish, Brazilian Portuguese, Japanese and Portuguese translations</li>
+  <li>Partially updated Spanish translation</li>
+  <li>Add an example of the "force" option for the per-app placement options to the default rc.xml file</li>
+  <li>Add a new xdg-autostart script.  This will eventually end up in the PyXDG distribution hopefully, but it is included in Openbox for now.  This script runs things based on the freedesktop.org autostart specification.  You can have it run GNOME, KDE, ROX, or XFCE specific things if you want.  The new default system-wide autostart.sh script runs it automatically</li>
+  <li>Update the default menu.xml to include a lot of common apps</li>
+  <li>Fix white font shadows (negative shadowtint)</li>
+  <li>Update the autostart.sh to find gnome-settings-daemon correctly, as the GNOME people have moved it to libexec</li>
+  <li>Fix focus possibly getting stolen when using the Focus action</li>
+  <li>Drastically speed up rendering of Vertical and SplitVertical gradients</li>
+  <li>Speed improvements also for Horizonal and Pyramid gradients</li>
+  <li>Add new theme options, menu.overlap.x and menu.overlap.y options, that let you independently control the horizontal and vertical position of submenus</li>
+  <li>Change _NET_ACTIVE_WINDOW messages to not change the current desktop, but to bring the window to the current desktop instead.  This is the industry standard policy</li>
+  <li>Use the pretty new openbox.png icon as the default window icon</li>
+  <li>Allow matching per-application rules to windows by their window type (normal, dialog, splash, etc).  The default rc.xml has more details</li>
+  <li>Add new Openbox-themed prompt windows.  Use these prompt windows to ask before killing off windows that aren't responding.  This also means we don't need to ping every window constantly forever</li>
+  <li>Add a new &lt;prompt&gt; option to the Execute action.  If this is set to a string, a dialog will be shown with that string in it and "yes"/"no" buttons.  The command to be executed will only be run if the user selects "yes" in the dialog</li>
+  <li>Add a new &lt;prompt&gt; option to the Exit action, which is a boolean (not a string).  When true, Openbox will show a dialog confirming if you want to exit.  The default is to show the prompt</li>
+  <li>Reduce Openbox's memory footprint and speed up rendering through the use of a new icon cache, so that Openbox only needs to keep 1 copy of an icon when 100 different windows share it</li>
+  <li>Make Openbox menus have the "menu type" hint for compositors to see and use</li>
+  <li>Fix the MoveResizeTo action for negative coords (opposite edges)</li>
+  <li>Fix key bindings getting lost if multiple bindings at the same level could not be translated (Fixes VMWare causing Openbox keybindings to stop working)</li>
+  <li>Fix the resize popup box for terminal windows with a base size of 0 (show the right size values for urxvt terminals)</li>
+  <li>Fix some off-by-one bugs with the edge growing/shrinking code</li>
+  <li>Add new theme options for menu line separators: menu.separator.color, menu.separator.width, menu.separator.padding.width, menu.separator.padding.height</li>
+  <li>Add xfce-mcs-manager to the default autostart.sh, and run it automatically when gnome-settings-daemon is not present to have GTK apps inherit settings from the XFCE configuration tools</li>
+  <li>Make the send-to-desktop menu in the client-menu indicate which is the current desktop for omnipresent windows, and don't close it if just toggling omni-presence when ctrl-clicking</li>
+  <li>Add a new SessionLogout action that logs out through the session manager, when running Openbox within a session manager such as within an GNOME/Openbox or KDE/Openbox session.  The action includes a &lt;prompt&gt; option which is similar to the Exit action's</li>
+  <li>Add a new gdm-control command that lets you control gdm from within an X session.  The gdm-control lets you change GDM's behaviour for when you end the current session.  For instance, you can tell GDM to reboot, and then immediately log out of the current session, and the computer will be rebooted</li>
+  <li>Show an information dialog when an error occurs for Openbox, such as when the Execute action fails or when XML syntax errors are present in the configuration files</li>
+  <li>When making a window very narrow, don't draw buttons to the right of the title on top of the ones on its left.</li>
+</ul>
+
+<a name="3.4.6.1"><h5 class="text">3.4.6.1</h5></a><ul>
+  <li>Updated Clearlooks theme</li>
+  <li>Add the force="yes/no" option for the per-app settings' &lt;position&gt; tag</li>
+  <li>Raise and focus modal children and their direct parents together, improved usability with direct modal transient windows</li>
+  <li>Fix crash when using &lt;raise&gt; for NextWindow and there are no windows to move focus to</li>
+  <li>Add the &lt;manageDesktops&gt; option in the rc.xml &lt;menu&gt; section, which toggles the "Manage Desktops" section appearing in the combined-client-list-menu</li>
+  <li>Fix for menu headers showing the wrong text</li>
+  <li>Fix for the &lt;focusLast&gt; behavior</li>
+  <li>Treat modal direct children as one window with their parent consistently</li>
+</ul>
+
+<a name="3.4.6"><h5 class="text">3.4.6</h5></a><ul>
+  <li>Added Basque translation</li>
+  <li>Updated French, Vietnamese German, Simplified Chinese, Russian, Portuguese, Brasilian Portuguese, Norwegian, and Finnish translations</li>
+  <li>New Clearlooks theme, updated by David Barr</li>
+  <li>Updated the previous Clearlooks theme, and renamed it to Clearlooks-3.4</li>
+  <li>Allow dialog type windows to go fullscreen (Fixes Kpdf)</li>
+  <li>Remove the extraneous top border for undecorated windows while maximized</li>
+  <li>Fixes for keyboard modifiers (Alt-tab dialog getting stuck on screen for some users)</li>
+  <li>Automatically catch changes to the keyboard map and reconfigure the key bindings on the fly</li>
+  <li>Fix focus moving incorrectly sometimes with focus under mouse enabled</li>
+  <li>Make default configuration focus the desktop when you right click</li>
+  <li>Add the &lt;bar&gt; and &lt;raise&gt; options for all window cycling actions, allowing you to have your target window temporarily raised above all others, and to turn the focus target indicator bar off</li>
+  <li>Improve the LastDesktop action to not remember desktops you skipped across</li>
+  <li>Ignore mouse clicks that are made on override-redirect (unmanaged) windows</li>
+  <li>When opening a menu with a key binding, don't use the key binding to run something in the menu</li>
+  <li>Add a &lt;monitor&gt; option for window placement, which gives you the option to place new windows on the active monitor, or the monitor where the mouse is, instead of on any monitor (for xinerama multihead setups)</li>
+  <li>Add options for placing the window move/resize coordinate popu window in a fixed position on screen, rather than relative to the window being moved or resized</li>
+  <li>Prevent the dock from auto-hiding completely offscreen if the theme has no borders for it</li>
+  <li>New icon</li>
+  <li>Fix race condition when running things that want to grab the keyboard (e.g. gnome-panel-control --main-menu)</li>
+  <li>When dialog windows ask to not appear in the taskbar, still give them focus in normal ways (fixes new GNOME session logout dialogs)</li>
+  <li>Fix bug with resizing corners on certain parts of the window frame</li>
+  <li>Ping applications to tell when they are running or have become frozen.  Show a [Not Responding] message in the title bar of windows which are frozen.</li>
+  <li>When closing a window which is [Not Responding], kill the window's process if it is running on the same machine as Openbox.  Otherwise, just disconnect the window from the X display.  A second attempt to close a [Not Responding] window will kill it forcefully (kill -9).</li>
+  <li>Fixes for internal timers</li>
+  <li>Add a &lt;wmclass&gt; option for the execute action's startup-notification.  This lets you tell Openbox that the application will map a window with the specified class - for applications that do not support startup-notification natively.</li>
+  <li>Fix for empty dock taking up space onscreen after a reconfigure</li>
+  <li>Reduce Openbox's additional memory footprint per-window and per-menu</li>
+  <li>Faster horizontal gradient rendering</li>
+  <li>Don't deiconify windows that aren't allowed to be directly iconified on restart (eg toolbars), as they can be iconified by other means</li>
+  <li>Improve support for fullscreen windows in xinerama (TwinView) and multiple-screen setups</li>
+  <li>Add a --config-file command line option, to specify an alternate configuration file path</li>
+</ul>
+
+<a name="3.4.5"><h5 class="text">3.4.5</h5></a><ul>
+  <li>Added Hungarian translation</li>
+  <li>Updated Finnish, Russian, German and French translations</li>
+  <li>Fixed some very minor memory leaks</li>
+  <li>Hide the desktop popup when showing the focus popup</li>
+  <li>Fix a crash when trying to access the More... menu of client-list-combined-menu</li>
+  <li>Fix the coordinate popup only showing up on the first monitor in xinerama</li>
+  <li>Add --exit to exit the currently running openbox instance</li>
+</ul>
+
+<a name="3.4.4"><h5 class="text">3.4.4</h5></a><ul>
+  <li>Updated Traditional Chinese translation</li>
+  <li>Updated Norwegian translation</li>
+  <li>Fix for MoveToEdge skipping edges sometimes</li>
+  <li>Let you specify the vertical and horizontal padding independently in themes</li>
+  <li>Fix so that if you select an omnipresent window on another desktop in the client list menus, it will go to that desktop</li>
+  <li>Make the GrowToEdge action shrink once there is no more room to grow, similar to in 3.4.2, but shrinking to edges as well</li>
+  <li>Move the Send To and Layers submenus to the top of the client menu</li>
+  <li>Fix race causing omnipresent windows to lose focus when switching desktops very quickly</li>
+  <li>Don't focus new windows on other desktops if they aren't related to the currently focused window</li>
+  <li>Add corner resizing areas in the inner client border (Fixes themes such as Onyx)</li>
+  <li>New focus stealing prevention that is smart and not intrusive and not annoying</li>
+  <li>Revert a small change in 3.4.3 that caused windows to be placed funny in Smart placement when there was a dock or something on the side of the screen</li>
+  <li>Show a notification when switching desktops</li>
+  <li>Fix for delayed focus-follows-mouse interrupting move/resize or menus</li>
+  <li>Make screen edge warp keep warping without having the move the mouse 1 pixel</li>
+  <li>Fix for resizing terminals in the top/left sides getting a little confused</li>
+  <li>Fix to keep oldschool (Non-EWMH) fullscreen windows from being moved and resized inside of the struts (Fixes Acroread)</li>
+  <li>Accept the &lt;command&gt; option for the Restart command, similar to the Execute action</li>
+  <li>Don't make clicking on dock apps sometimes act like clicking on the root window (Don't propogate button events up)</li>
+  <li>Fix a bug introduced in 3.4.3 which caused the Windows key as a modifier for bindings to not work properly</li>
+  <li>Let windows skip across monitors in a Xinerama setup when using MoveToEdge or Shift-arrow in an interactive move</li>
+  <li>Make move and resize take the dock into account for resistance</li>
+  <li>Raise new windows when it makes sense, when they aren't being focused</li>
+  <li>Change default config to use click events for mouse wheel bindings instead of presses</li>
+
+<a name="3.4.3"><h5 class="text">3.4.3</h5></a><ul>
+  <li>Add Ukrainian translation</li>
+  <li>Updated translations: Japanese, Dutch, Polish, Italian, Estonian, German, Portuguese, Vietnamese, Finnish, Czech, Arabic, Spanish, Swedish, French</li>
+  <li>Improve focus fallback - don't fallback to windows you can't focus cycle (Alt-Tab) to</li>
+  <li>Don't show the client border for undecorated windows when keepBorder is on, just the outer border</li>
+  <li>Some improvements in the smart placement to help it find a place more often.  This needs more work still.</li>
+  <li>Don't focus windows that appear under the mouse in mouse-focus mode unless underMouse is enabled</li>
+  <li>Don't move focus when the window under the pointer iconifies unless underMouse is enabled</li>
+  <li>Respect min/max window sizes when a window is fullscreened or maximized.  This fixes problems experienced with maximizing vnc windows</li>
+  <li>Don't XUngrabKeyboard unless we need to</li>
+  <li>Correct calculations for the menu header width, so that they are not ellipsized unnecessarily</li>
+  <li>Advanced support for partial struts.  When you maximize a window it will now only use the struts it needs to.  This can greatly improve Xinerama functionality.</li>
+  <li>Fixes for how the dock is placed in certain positions on screen (off by 1 errors)</li>
+  <li>New default bindings:</li>
+  <ul>
+    <li>don't unshade when clicking on the titlebar</li>
+    <li>raise when unshading with the scrollwheel</li>
+    <li>lower when shading with the scrollwheel</li>
+  </ul>
+  <li>Don't show the top resize area in the titlebar when a window is shaded</li>
+  <li>Optimize rendering of window decorations</li>
+  <li>Optimize splitvertical gradients - no more malloc/free during render</li>
+  <li>Let the theme specify all colors for a splitvertical gradient with the new .splitTo theme elements</li>
+  <li>Improve decorations for maximized windows.  Don't draw the side borders in the titlebar.</li>
+  <li>Don't resist against desklet windows (below layer + skip taskbar)</li>
+  <li>New actions for dynamically adjusting your desktop workspaces:</li>
+  <ul>
+    <li>AddDesktopLast, RemoveDesktopLast</li>
+    <li>AddDesktopCurrent, RemoveDestopCurrent</li>
+  </ul>
+  <li>New &lt;center&gt; option for smart placement (default is on)</li>
+  <li>Fix MoveToCenter in Xinerama (TwinView) setups</li>
+  <li>Let you lower a window without lowering its children or siblings</li>
+  <li>Don't set the default Openbox icon on child windows, let them inherit the icon from their parents</li>
+  <li>Fix Onyx themes - fade out disabled buttons</li>
+  <li>Don't auto-resize windows to fit on screen if they are UserSpecified Size or Position</li>
+  <li>Don't activate windows which raise themselves anymore. It was a nice thought, but it caused too much problems</li>
+  <li>Rewrite of the actions subsystem</li>
+  <li>Removed deprecated actions:</li>
+  <ul>
+    <li>ShowDesktop, UnshowDesktop (Use ToggleShowDesktop)</li>
+    <li>ResizeRelativeVert, ResizeRelativeHorz (Use ResizeRelative)</li>
+  </ul>
+  <li>Combined the MoveFromEdge* actions with MoveToEdge* actions, and removed the MoveFromEdge* action names.</li>
+  <li>Switch desktops when moving a window and you drag it to the edge of the screen (added the &lt;screenEdgeWarpTime&gt; option for this)</li>
+  <li>Add actions to add/remove the last desktop in the client list menus</li>
+  <li>Use startup notification when launching ObConf in the default root menu</li>
+  <li>Remove the desktop switching dialog, as it confuses people and they don't know how to turn it off to switch desktops instantly.  Some other incarnation may return in the future.</li>
+  <li>Add optional &lt;finalactions&gt; option for NextWindow, PreviousWindow, DirectionalFocus*, and DirectionalTarget* actions</li>
+  <li>Don't focus new helper windows unless they are alone in their group.  This fixes gucharmap</li>
+  <li>Fancy keyboard window moving:</li>
+  <ul>
+    <li>Shift-arrow will move the window to the next edge</li>
+    <li>Control-arrow will move the window by only 1 pixel</li>
+    <li>Arrow will move the window by a larger number of pixels</li>
+  </ul>
+  <li>Fancy keyboard window resizing:</li>
+  <ul>
+    <li>The first arrow will choose an edge to resize (then you can grow or shrink the window on that edge)</li>
+    <li>Hitting an arrow perpendicular to your selected edge will choose a different edge to resize</li>
+    <li>Shift-arrow will grow/shrink the window to the next edge</li>
+    <li>Control arrow will grow/shrink the window by only 1 pixel</li>
+    <li>Arrow will grow/shrink the window by a larger number of pixel</li>
+  </ul>
+  <li>Timeout when synchronously resizing a window so you can still resize busy or dead application windows</li>
+  <li>Let you specify keyboard shortcuts in your root menus with _. Such as label="XTe_rm" would make 'r' the shortcut key.</li>
+  <li>Fixes for placing windows with per-app settings:</li>
+    <li> <ul></li>
+    <li>you can now place windows relative to any edge of the screen instead of only the top left. (-0 uses the far edge, +0 uses the near edge.  You can use --0 and +-0 to specify negative numbers.)</li>
+    <li>fix bug with windows being placed far off-screen occasionally</li>
+    <li>allow you to place windows partially outside of the screen</li>
+    <li>let per-app settings override program-specified positions (but not if it is user-specified)</li>
+  </ul>
+  <li>Add user-specified margins to the configuration file</li>
+  <li>Fix for transient windows in groups with transient windows of the group transients.  That wasn't supposed to be legible.  i.e. 2 group transients and 1 direct transient for one of the group transients.</li>
+  <li>Don't include child/parent windows in tests for being occluded or occluding other windows, since you can't raise/lower above/below them.  This fixes the raiselower action for windows which have children.</li>
+  <li>Reduce the size of the middle gradient in splitvertical gradients.  This makes the split harder than it was in 3.4.2</li>
+  <li>Don't include debian/ dir in releases</li>
+  <li>Add resize bindings for the edges to the default hardcoded bindings</li>
+  <li>Fix focus cycle indicator positioning for some windows (i.e. OpenOffice)</li>
+  <li>Add the MoveResizeTo action.  This is very xinerama aware!  It also lets you move a window to any edge of any screen.</li>
+  <li>Make actions that look for edges include the dock's edges (e.g. MoveToEdge)</li>
+  <li>New preferred option for the Execute action is &lt;command&gt; instead of &lt;execute&gt; but the old one will still work.</li>
+  <li>Fix for moving windows partially offsceen causing them to jump far away</li>
+  <li>Fix for windows which are not on any monitor, to keep them on screen partically too</li>
+  <li>Require libstartupnotification 0.8 in configure (we use stuff that was not around in some earlier versions)</li>
+  <li>Grab the server when mapping windows to avoid race conditions in other programs (getting MapNotify before you are visible)</li>
+  <li>Handle case gracefully when ConfigureRequent for restacking specifies a sibling which we aren't managing</li>
+  <li>Use KeyRelease to run things from Openbox menus, so that the release does not go to the focused window (causing the new window to not get focus)</li>
+  <li>Add new actions for controlling window decorations: Decorate, Undecorate</li>
+  <li>Fix so that the values for per-app settings are not case sensitive</li>
+  <li>Fix crash with very small windows</li>
+  <li>Fix resize resistance for windows with aspect ratio limits</li>
+  <li>Let you resize windows with aspect ratio limits in the vertical directions</li>
+  <li>Fix rare crash when menu is hidden while browsing it</li>
+  <li>End move/resize more cleanly when focus moves during a move/resize</li>
+  <li>Don't focus new windows when browsing a menu or moving/resizing a window, just flash the window instead, so that the menu/move/resize doesn't have to cancel</li>
+</ul>
+
+<a name="3.4.2"><h5 class="text">3.4.2</h5></a><ul>
+  <li>Add ability to set the bevel strength in themes</li>
+  <li>Fix for focusLast with omnipresent windows</li>
+  <li>Cache pipe menus while the menus are open</li>
+  <li>Allow non-interactive directional focus key bindings</li>
+  <li>Change how nested interactive key bindings work (it stays in the key chain, like chroot, until you end the interactive action)</li>
+  <li>Fix for gtk apps trying to get focus - mostly nullify focus stealing prevention (Fixes Tilda)</li>
+  <li>Send ConfigureNotify always on ConfigureRequest (Previous emacs fix makes this possible now)</li>
+  <li>Fix RelativeResize action for right/bottom edges</li>
+  <li>Remove SCIM from the default autostart.sh - it has caused problems with some (buggy) panels, such as pypanel</li>
+  <li>Fix the titlebar changing to non-focused when iconifying a window with animation</li>
+  <li>Use the new osd theme hints for the dock, rather than the titlebar hints</li>
+</ul>
+
+<a name="3.4.1"><h5 class="text">3.4.1</h5></a><ul>
+  <li>Add Vietnamese translation</li>
+  <li>Add Japanese translation</li>
+  <li>Keep new transient windows from not getting focus when any related window has focus already</li>
+  <li>Change behavior of underMouse option - make focus go under the mouse when no window has focus anymore, rather than to the last used window</li>
+  <li>Make on-screen display dialogs (such as the Alt-Tab dialog) appear on the active monitor when using Xinerama (a.k.a. TwinView)</li>
+  <li>Fix for window stacking - let you lower sibling transient windows behind eachother</li>
+  <li>Fix directional focus actions when used without a dialog</li>
+  <li>Fix race that could prevent ObConf from setting the desktop names correctly</li>
+  <li>Add new theme options:</li>
+  <ul>
+    <li>window.active.button.toggled.image.color has been split into:</li>
+    <ul>
+      <li>window.active.button.toggled.unpressed.image.color</li>
+      <li>window.active.button.toggled.pressed.image.color</li>
+      <li>window.active.button.toggled.hover.image.color</li>
+    </ul>
+    <li>window.inactive.button.toggled.image.color has been split into:</li>
+    <ul>
+      <li>window.inactive.button.toggled.unpressed.image.color</li>
+      <li>window.inactive.button.toggled.pressed.image.color</li>
+      <li>window.inactive.button.toggled.hover.image.color</li>
+   </ul>
+   <li>window.active.button.toggled.bg has been split into:</li>
+   <ul>
+      <li>window.active.button.toggled.unpressed.bg</li>
+      <li>window.active.button.toggled.pressed.bg</li>
+      <li>window.active.button.toggled.hover.bg</li>
+   </ul>
+   <li>window.inactive.button.toggled.bg has been split into:</li>
+   <ul>
+      <li>window.inactive.button.toggled.unpressed.bg</li>
+      <li>window.inactive.button.toggled.pressed.bg</li>
+      <li>window.inactive.button.toggled.hover.bg</li>
+  </ul>
+  <li>Add new Onyx and Onyx-Citrus themes</li>
+  <li>Updated Mikachu theme using new theme options</li>
+  <li>Improvements to splitvertical gradients - Add a small gradient in the middle between the upper and lower gradients</li>
+  <li>Fix another emacs event storm, don't configure the window when it sets its WM_NORMAL_HINTS unless we have to</li>
+  <li>Fix for focus cycling to helper windows - Don't count dialogs as a sibling, so they don't stop you</li>
+  <li>Allow the use of negative numbers in per-app settings position to place a window relative to the right/bottom edges of your monitor (taking the struts (panels) into account) (similar syntax to X geometry options)</li>
+  <li>Fix focus moving irrationally when focusLast was off</li>
+</ul>
+
+<a name="3.4.0"><h5 class="text">3.4.0</h5></a><ul>
+  <li>Add Indian Bengali translation</li>
+  <li>Updated Italian translation</li>
+  <li>Small updates to Czech, Estonian, Norwegian, and German translations</li>
+  <li>Removed out-of-date Japanese translation (ja.po)</li>
+  <li>Removed out-of-date Croatian translation (hr.po)</li>
+  <li>Allow parentrelative theme textures to have borders, bevels and interlacing</li>
+  <li>Add new theme elements: window.active.title.separator.color and window.inactive.title.separator.color</li>
+  <li>Add new theme elements: osd.border.width, osd.border.color, osd.bg, osd.label.bg, osd.label.text.color, osd.label.text.font, osd.hilight.bg, osd.unhilight.bg</li>
+  <li>Improvements for how on-screen-display dialogs are drawn with different themes</li>
+  <li>Add new underMouse focus option</li>
+  <li>Rename new theme element menu.items.activedisabled to menu.items.active.disabled for consistency with other elements</li>
+  <li>Improvements to smart placement - especially with xinerama (Twinview)</li>
+  <li>Fixes for focus with omnipresent windows - Allow focus to fallback to them except during desktop switches (other mechanisms exist for that)</li>
+  <li>Fix for putting child windows (transients) on all desktops</li>
+  <li>Changes to how Shift/Control/CapsLock are used</li>
+  <li>Fix focus fallback when windows are not visible (showing the desktop, or iconic windows)</li>
+  <li>Fix bug #3196 - Unable to alt-tab away from full-screen windows</li>
+  <li>Fix crash in parsing empty xml fields</li>
+  <li>Fix left and right contexts resizing the wrong way in the example mouse focus config file</li>
+  <li>Fix so dock doesn't auto-hide when the mouse is inside it (over top of a dock app)</li>
+  <li>Allow new utility windows to gain focus like normal windows</li>
+  <li>Add workarounds for Java Swing applications (Extra ConfigureNotify events)</li>
+  <li>More fixes for modal window usability (Deiconify the modal window when you try to focus its parent)</li>
+  <li>Fixes to focus tracking, especially with iconify animation</li>
+  <li>Changes to libobrender's API for ObConf 2.0 (RrThemeNew)</li>
+  <li>Check for libxml >= 2.6.0 when compiling</li>
+  <li>Fix for Openoffice windows (Static window gravity)</li>
+  <li>Fix for hovering over window buttons while a menu is open</li>
+  <li>Make the Escape key close all levels of a menu, not just one</li>
+  <li>Change default drag threshold to 8px (Same as in XSettings)</li>
+  <li>Fixes for windows restacking with TopIf, BottomIf, or Opposite modes.  Only compare with valid windows</li>
+  <li>Fix for actions which find other window edges.  Find all windows, and only windows which are on the right desktop</li>
+  <li>Improve RaiseLower action (Not lower when it doesn't need to move the window)</li>
+  <li>Fix for the menu hideDelay (Don't hide immediately when you click to open the menu), make it work reliably</li>
+  <li>Make focusLast default to true when not present in the config file</li>
+</ul>
+
+<a name="3.3.995"><h5 class="text">3.3.995</h5></a><ul>
+  <li>Fix bug introduced in 3.3.993 that prevented you from raising focused windows above fullscreen windows</li>
+  <li>Fix bug introduced in 3.3.993 that made the desktop window keep focus when changing desktops</li>
+  <li>Add Arabic translations</li>
+  <li>Added Control-Alt-Up/Down bindings to the mouse focus example rc.xml</li>
+  <li>Don't raise on clients in the client context in the mouse focus example rc.xml</li>
+  <li>Fixes for when to focus new windows - improve keeping transient windows from stealing focus, and allow new windows to get focus when any relative window is focused</li>
+  <li>Fixes for frame decorations layout</li>
+  <li>Fixes for forcing window sizes to fit on the screen.  Don't resize windows if they are a user-specified size (USSize) or if they are non-normal windows.  (Fix Rox pinboard mapping across multiple monitors)</li>
+  <li>Centre window icons when they are not square</li>
+  <li>Fixes for Java windows behaving badly - Java makes all kinds of non-standard-compliant assumptions which we are forced to meet</li>
+  <li>Changed startup notification timeout from 30 to 20 seconds</li>
+  <li>Fix possible crashes and misbehaviors with new focus cycling dialogs</li>
+  <li>Recreate enter events when Press mouse actions move windows (e.g. Lower action) for focus-follows-mouse</li>
+  <li>Update Slovak translation</li>
+  <li>Highlight the first menu entry when there is a separator/header at the top</li>
+  <li>Only highlight the first menu entry when the menu is opened with a key binding</li>
+  <li>Fix crash when you press enter with nothing selected in the menu</li>
+  <li>Fix for ignoring an unmap event after restart</li>
+  <li>Fixes for setting the clients' colormaps</li>
+  <li>Change focusLast option behavior to what it was in 3.3.1.  It only affects changing desktops.</li>
+  <li>Add comments to the default rc.xml files about the various focus options</li>
+  <li>Fix focus bug where a window had the keyboard grabbed when it unmapped (Firefox gmarks extension)</li>
+  <li>Update Catalan translation</li>
+  <li>Fix alignment of the titlebar elements when the window icon is placed to the right of the label</li>
+  <li>Improve placement of child (transient) windows.  When their parent is omnipresent, open the child on the current desktop only.</li>
+  <li>When a window has modal children on another desktop and you try to focus it, bring the modal child to the current desktop to focus it instead</li>
+  <li>Let you focus cycle to windows with a modal child on another desktop</li>
+  <li>Fix for not seeing windows change their partial strut</li>
+  <li>Give iconified windows a faded icon in the focus cycling (Alt-Tab) dialog, and in the client list menus</li>
+  <li>Make it more difficult to select items by accident in parent menus when it changes direction.  Moving the mouse only selects menu entries for a few levels of open menus.  Mouse clicks will select menu entries further down.</li>
+  <li>Add Simplified Chinese translation</li>
+  <li>Set the current theme in the OB_THEME root property for other applications</li>
+  <li>Notify ksplash when we have started up if dcop is installed</li>
+  <li>Allow you to resize the window on the client padding as well as the outer border</li>
+  <li>Fix to show the focus cycle indicator when focus cycling and there is only 1 valid target</li>
+  <li>Centre splash screens on one monitor</li>
+  <li>Don't centre parent-less utility/menu/toolbar windows on the screen</li>
+  <li>Remove the bottom decorations for fully maximized windows</li>
+  <li>Fix crash when reconfiguring and no themes can be found</li>
+</ul>
+
+<a name="3.3.994"><h5 class="text">3.3.994</h5></a><ul>
+  <li>Fix a bug introduced in .993 that prevented you from switching desktops and caused general mayhem</li>
+</ul>
+
+<a name="3.3.993"><h5 class="text">3.3.993</h5></a><ul>
+  <li>Update for Russian translation</li>
+  <li>Added Dutch translation</li>
+  <li>Fix for choosing badly sized icons from the window for the window cycling dialog (and other things). (Fixes Pidgin icon)</li>
+  <li>Open child (transient) windows on the current desktop if they don't have a direct parent, or if the parents are not all on some other desktop. (Fixes Pidgin and Gimp dialogs appearing on the wrong desktop)</li>
+  <li>Make windows fit within the available space when they are first created, if they are not user-positioned. (Fix xpdf making itself bigger than the space inside the struts, and hiding behind them).</li>
+  <li>Don't let child (transient) windows steal focus when the situation is ambiguous</li>
+  <li>Fix bevels and borders display in the titlebar</li>
+  <li>Set the _NET_ACTIVE_WINDOW hint properly, when nothing is focused (This is the proper fix for libwnck pagers.)</li>
+  <li>Fallback focus immediately during iconify animation in all cases (was missing RevertToParent case)</li>
+  <li>Fix new frame elements being given 0 sizes for very small windows</li>
+  <li>Send iconified windows to the bottom of the focus order so you can Alt-Shift-Tab to get back what you just iconified. This makes things more predictable.</li>
+  <li>Show the hostname for remotely run programs in iconified titles</li>
+  <li>Stop focus flicker when sending windows to a desktop and following them, and when changing desktops with an omnipresent window focused</li>
+  <li>Empty desktop names in the configuration file are not used, so you can set a name on the second desktop without having to set one on the first</li>
+  <li>Make control key work for menu accelerators like it does for mouse clicking and hitting enter</li>
+  <li>Add C-A-Up/Down mouse bindings to switch desktops, similar to the C-A-Left/Right/Up/Down keyboard bindings</li>
+</ul>
+
+<a name="3.3.992"><h5 class="text">3.3.992</h5></a><ul>
+  <li>Don't move mouse focus when the mouse is over the focus cycling dialog</li>
+  <li>Fixes for positioning of frame decoration elements</li>
+  <li>Update for Brazilian Portuguese translation</li>
+  <li>Improvements in how decorations respond for maximized windows. (If they can't be resized don't "hide" the resizing contexts)</li>
+  <li>Updated Italian translation</li>
+  <li>Added Czech translation</li>
+  <li>Fix for applications that do weird things with modal windows (Make sure you can focus cycle to them)</li>
+  <li>Updated Spanish translation</li>
+  <li>Fix for programs using the old WM-spec, and not setting unused fields to 0 in _NET_ACTIVE_WINDOW messages (Rox pinboard)</li>
+  <li>Fixes for default rc.xml configuration file. Updated comments and comment out the applications section in an xml compatible way.</li>
+  <li>Update for Portuguese translation</li>
+  <li>Fix support for window gravity (eg xterm -geometry -0+0)</li>
+  <li>Fix for libwnck with iconify animation (Unmap the parent of the client's window)</li>
+  <li>Force the top left corner of new windows onto the screen area, if the position wasn't requested by the user (Fix xpdf and others hiding their titlebar under a panel)</li>
+  <li>Fix for determining text geometry from Pango</li>
+  <li>Save the desktop layout and names in the session, and restore them on next log in.</li>
+  <li>The &lt;desktop&gt; section from the configuration file is only used for defaults, and so is only applied at the start of a new log-in. (Use ObConf 1.6.2 to change the config file for these options, and have them set immediately, if you don't use a session manager to save them.)</li>
+  <li>Fix updating and crashing in the old split client list menu</li>
+  <li>Translate the default desktop names</li>
+  <li>Update Taiwanese Chinese translation</li>
+  <li>Less restrictions of behavior based on window type (Let you maximize dialogs and utility windows)</li>
+  <li>Fix for focus tracking when Press mouse actions are used</li>
+  <li>Fix bug which let the openbox-*-session scripts take command-line arguments</li>
+  <li>Better detection of legacy fullscreen windows vs. undercorated windows that the user has maximized</li>
+</ul>
+
+<a name="3.3.991"><h5 class="text">3.3.991</h5></a><ul>
+  <li>Added Brazilian Portuguese translation</li>
+  <li>Added a rough Italian translation</li>
+  <li>Added Estonian translation</li>
+  <li>Update Polish translation</li>
+  <li>Make focus stealing prevention a little less intrusive, especially with default config</li>
+  <li>Updates for Swedish translation</li>
+  <li>Fixes for decorations of maximized windows</li>
+  <li>Fix so that clicking in the corner of a maximized window presses the button</li>
+  <li>Don't reload the session and reapply it when restarting</li>
+  <li>Fix for losing the original size of a window that mapped with maximized state (or on restart)</li>
+  <li>Let you move splash type windows</li>
+  <li>Fix for window placement using wrong dimensions</li>
+  <li>Stop xemacs ConfigureNotify storm</li>
+  <li>Fix bug stopping panels from moving themselves off-screen to hide themselves</li>
+  <li>Fix for GNOME/Openbox and openbox-gnome-session to use a new session name, because GNOME won't let you replace the window manager in the saved session</li>
+  <li>Don't restore session state when multiple windows have the same identifiers, because we can't tell them apart then (Firefox/Thunderbird)</li>
+  <li>Small fixes to build system to make it more reliable</li>
+  <li>Fix for what manpage files are distributed in the source code, so they will not be pre-built with the wrong info</li>
+  <li>Fix pkg-config files for compiling things against Openbox libraries</li>
+</ul>
+
+<a name="3.3.990"><h5 class="text">3.3.990</h5></a><ul>
+  <li>Wildcard matching for per-application (per-window) settings. Let you match multiple rules for a window. (Props to Mark Pustjens for code to do this.)</li>
+  <li>Added startup notification support to the menus and key/mouse bindings with &lt;startupnotify&gt;. It's an option for execute actions.</li>
+  <li>New combined client menu, accessed with &lt;action name="ShowMenu"&gt;&lt;menu&gt;client-list-combined-menu&lt;/menu&gt;&lt;/action&gt;</li>
+  <li>No menu titles - instead added separators with labels to be used as menu headers anywhere in menus</li>
+  <li>Improved client menu - placement, the options in it, and added an icon for "All Desktops"</li>
+  <li>Keyboard shortcuts in menus, by highlighted letter or by the first letter</li>
+  <li>Menus dont jump around, are always placed on screen</li>
+  <li>Menus larger than can fit on the screen are broken into a submenu at the bottom titled "More..."</li>
+  <li>Disabled menu items can be selected now (not used though, of course)</li>
+  <li>Using ()'s instead of a line separator to signify iconified windows in the client list menus</li>
+  <li>New Root context for mouse bindings</li>
+  <li>New "alt-tab" focus switching dialog</li>
+  <li>openbox-session command and log-in option which provides [[Help:Autostart| autostart]] capability.</li>
+  <li>SCIM support in the default Openbox session launched by the openbox-session command</li>
+  <li>Many code paths made significantly faster.</li>
+  <li>Sections of code rewritten to be more reliable, such as session save/restore and input focus handling</li>
+  <li>Handle the X server's clock going backwards, without locking up. Sometimes the server can still lock up though, it is not recommended to do this!</li>
+  <li>Better handling of window types such as docks, utility windows, tool bar windows. Clicking to focus these windows is done more intelligently.  Dock windows no longer get focus when you click them, so that you don't have focus flickering when you use a dock window with a taskbar.</li>
+  <li>Better language support through Pango, which is now mandatory, and the code for Pango has been greatly improved and optimized.</li>
+  <li>Support for windows that use true 32-bit transparency</li>
+  <li>Resize grips (with mouse binding contexts) for the top, left, and right of the window frame</li>
+  <li>Smarter about keeping windows on the screen without invading user's capabilities</li>
+  <li>Add MoveFromEdge* actions corresponding to MoveToEdge* but aligns far edges instead of near edges, so if you have two overlapping windows you can easily put them side by side.</li>
+  <li>Better choice of mouse cursors for startup notification</li>
+  <li>Focus stealing prevention</li>
+  <li>Improve window placement across multiple Xinerama monitors</li>
+  <li>Support 8-bit truecolor visuals (such as in vncserver)</li>
+  <li>Better, more friendly support for omnipresent windows</li>
+  <li>Full support for EWMH 1.4-draft2</li>
+  <li>Iconify/restore animation !</li>
+  <li>Improved support for running openbox with multiple screens (non-xinerama) - won't steal focus from other screens, and let you focus a screen by clicking on the desktop (root window).</li>
+  <li>Support for more cursors through XCursor, means that startup notification can use a pointer+watch cursor if you are using an XCursor theme</li>
+  <li>Fully maximize terminal windows (and any resized-by-increment window)</li>
+  <li>Show the hostname of clients running on remote computers in the titlebar</li>
+  <li>Add &lt;panels&gt; and &lt;desktop&gt; options to NextWindow, PreviousWindow, DirectionalFocusNorth etc..</li>
+  <li>Synchronize resizing with the application when possible</li>
+  <li>Smarter subdivision of windows into 9 sections for resizing</li>
+  <li>Set default icon on windows so applications can agree on an icon</li>
+  <li>Better support for programs that are on more than one desktop (multiple firefox windows for example) - move to the desktop when you're using the application and it opens a window on another desktop.</li>
+  <li>Chrooted key chains, and key quoting through chroots</li>
+  <li>New BreakChroot action to break out of the current chroot</li>
+  <li>New keychains popup, to show where you are in a keychain</li>
+  <li>Improved show-desktop mode. When you open a new window, the old windows are not all restored</li>
+  <li>Add &lt;allDesktops&gt; option to NextWindow and PreviousWindow. The desktop name will be shown in the focus cycling popup</li>
+  <li>Dynamically size the window and desktop dialogs. Desktop layouts that aren't horizontal look better in the desktop cycling dialog.</li>
+  <li>Support for legacy fullscreen applications (that don't use EWMH) such as VLC</li>
+  <li>Session support for old clients that do not use the session management protocol</li>
+  <li>Desktop setup is only changed on startup, so as to not overwrite settings from other apps like pagers</li>
+  <li>Take advantage of ksmserver (KDE Session Manager) features</li>
+  <li>KDE/Openbox and GNOME/Openbox options for display manager GDM/KDM. Use openbox-gnome-session and openbox-kde-session to run a GNOME or KDE session with Openbox as the window manager.</li>
+  <li>Titlebar buttons autohide when hiding won't move other buttons (removed the hideDisabled option from config file)</li>
+  <li>Support user time window hint, which is good for laptops power usage</li>
+  <li>When legacy windows raise themselves, interpreate as wanting to be activated. Makes Firefox more pleasant.</li>
+  <li>Don't show handles on windows that cant resize for more extreme visual minimalism</li>
+  <li>Let you move maximized windows between Xinerama monitors</li>
+  <li>Improve application awareness of focus, e.g. Kopete and Firefox, so they know when they are or aren't focused, and which window in their application is focused</li>
+  <li>Improvements in the distributed themes</li>
+  <li>Add new Clearlooks and Clearlooks-Olive themes by John McKnight</li>
+  <li>Fonts are no longer loaded from theme. They are loaded from the rc.xml config file. Font shadow settings are still loaded from the theme though. 5 fonts to be set: ActiveWindow InactiveWindow, MenuHeader, MenuItem and OnScreenDisplay</li>
+  <li>Distributed theme names have been renamed with Capitalization</li>
+  <li>menu.items.activedisabled.text.color</li>
+  <li>menu.border.color   (note that globbing might set these properties when you didnt mean to)</li>
+  <li>window.active.border.color   (note that globbing might set these properties when you didnt mean to)</li>
+  <li>window.inactive.border.color   (note that globbing might set these properties when you didnt mean to)</li>
+  <li>menu.border.width</li>
+  <li>Guarantee that titlebar buttons are even sized, so even sized icons (button masks) will be centered</li>
+  <li>Default titlebar button icons (as xbms) installed to /usr/share/doc/openbox</li>
+  <li>New mouse binding contexts Left, Right, TLCorner, TRCorner and Top. These need bindings in config file to be useful. Also new context Bottom which is synonym for Handle.</li>
+  <li>W is no longer hard coded to Mod4. It is now a shortcut for Super, which is usually bound to Mod4. xmodmap will show your mapping.</li>
+  <li>The per-app setting &lt;head&gt; has been renamed to &lt;monitor&gt;</li>
+  <li>Can use "default" for anything in per-app settings</li>
+  <li>Removed &lt;edges_hit_layers_below&gt; option from config file</li>
+  <li>--reconfigure command line option</li>
+  <li>--restart command line option</li>
+  <li>Closed bug #886 - Reference point for client-menu</li>
+  <li>Closed bug #898 - Add option for OB2 style menu behaviour</li>
+  <li>Closed bug #952 - Focus sometimes gets lost when closing windows</li>
+  <li>Closed bug #1006 - duplicate window title numbering is so-so</li>
+  <li>Closed bug #1080 - menus dont update when using ctrl to keep them open</li>
+  <li>Closed bug #1082 - doing window stuff while changing focus is mad slow</li>
+  <li>Closed bug #1106 - Openbox resize problems with Beep Media Player and some websites using Mozilla</li>
+  <li>Closed bug #1146 - minimized windows dont unminimize from fspanel if ob restarted</li>
+  <li>Closed bug #1409 - Window stacking is messed up when dealing with multiple nested dialog boxes</li>
+  <li>Closed bug #1526 - Incorrect handling of utility windows</li>
+  <li>Closed bug #1846 - Patch for theme overrides</li>
+  <li>Closed bug #1974 - Limit the number of resizes per second to make window resizing smoother</li>
+  <li>Closed bug #2060 - Apps disappear when using composite extension</li>
+  <li>Closed bug #2221 - _NET_WM_STATE_(ABOVE|BELOW) is being inherited</li>
+  <li>Closed bug #2250 - openbox ignores size request ?</li>
+  <li>Closed bug #2251 - support for legacy ""fullscreen""</li>
+  <li>Closed bug #2254 - segfault in render/render.c on sendtodesktop [endian?]</li>
+  <li>Closed bug #2255 - segmentation fault on 8-bit truecolor visual</li>
+  <li>Closed bug #2258 - long menus truncated</li>
+  <li>Closed bug #2311 - Does not display the pressed state while a button in the frame is toggled</li>
+  <li>Closed bug #2321 - ResizeRelative -up and -left makes window move when at min_size</li>
+  <li>Closed bug #2483 - Pinned windows raise to top on all desktops when they become focused on just one desktop</li>
+  <li>Closed bug #2491 - Client List by App instead of by Desktop</li>
+  <li>Closed bug #2551 - Request to be able to cycle docks (e.g.</li>
+  <li>Closed bug #2659 - Menu header display should be configurable</li>
+  <li>Closed bug #2769 - temporarily chroot the keychain tree</li>
+  <li>Closed bug #2841 - Changes to the keepborder option aren't applied when reconfiguring</li>
+  <li>Closed bug #2850 - Openbox gives black backgrounds to windows using the new 'rgba' or 'argb' visual</li>
+  <li>Closed bug #2865 - openbox 3.3 is not C89 compatible</li>
+  <li>Closed bug #2872 - Focus issues with Eclipse and Firefox</li>
+  <li>Closed bug #2878 - Openbox crash when used with vncserver</li>
+  <li>Closed bug #2897 - Openbox shouldn't redraw the whole screen everytime when minimizing windows.</li>
+  <li>Closed bug #2898 - Patch adding advanced keyboard support in popup menus.</li>
+  <li>Closed bug #2982 - tilda doesn't work propertly</li>
+  <li>Closed bug #3034 - themeupdate.py seems to bee broken</li>
+  <li>Closed bug #3045 - RrPaint in obrender should be split for easier use by external apps</li>
+  <li>Closed bug #3050 - 'syscrash' theme update</li>
+  <li>Closed bug #3051 - When closing windows</li>
+  <li>Closed bug #3053 - Updates de.po for German Localisation</li>
+  <li>Closed bug #3059 - Feature Request: NextWindowForAllWorkspaces</li>
+  <li>Closed bug #3063 - extensions_xinerama_screens() leaks memory if Xinerama is enabled</li>
+  <li>Closed bug #3064 - slist_path_add() might leak memory</li>
+  <li>Closed bug #3068 - Multimonitor focus problems</li>
+  <li>Closed bug #3081 - window doesn't appear</li>
+  <li>Closed bug #3092 - Config parser expects wrong values of ""layer"" in per-application settings</li>
+  <li>Closed bug #3094 - smart placement should Ignore maximized windows</li>
+  <li>Closed bug #3100 - Netwmpager is configured with layer = ""below"" but OB is ignoring it</li>
+  <li>Closed bug #3101 - Openbox won't compile on CentOS 4.4</li>
+  <li>Closed bug #3102 - svn-6175 windows come not back in the foregroud</li>
+  <li>Closed bug #3106 - Fullscreened mplayer loses focus when switching to another desktop and back</li>
+  <li>Closed bug #3108 - After revision 6437 the desktop dialog window stays on screen</li>
+</ul>
+
+<a name="3.3.1"><h5 class="text">3.3.1</h5></a><ul>
+  <li> Fix panels getting a border with keepBorder turned on</li>
+  <li>Fix a crash in mirrorhorizontal when drawing a surface with width 1</li>
+</ul>
+
+<a name="3.3"><h5 class="text">3.3</h5></a><ul>
+  <li> Add a showDelay option for the dock.</li>
+  <li>Fixed onscreen-keeping code which broke a bit in -rc2.</li>
+  <li>Fix incorrect handling of window properties on 64 bit arches.</li>
+  <li>Fix pixelsize being the same as size for pango, now it is correct.</li>
+  <li>Fix drawing of icons taller than wide, eg gimp.</li>
+  <li>Add a 'mirrorhorizontal' gradient, like horizontal but mirrored in the center and 'splitvertical' which is like vertical but nonlinear in a fancy way.</li>
+  <li>Translations for de, hr and zh_TW added.</li>
+  <li>Add initial per-app settings support.</li>
+  <li>Fix some outstanding issues with 64-bit support.</li>
+  <li>Add an optional delay for displaying submenus so you can move the mouse over some entries without flashing each submenu.</li>
+  <li>Plug some minor memleaks and fix minor bugs.</li>
+  <li>Changed algorithm for downscaling window icons.</li>
+  <li>New themes!</li>
+  <li>Disable support for libstartup-notification by default, it doesn't seem to work well.</li>
+  <li>Allow disabling of duplicate window numbering by option titleNumber in theme section.</li>
+  <li>Add moverelative and resizerelative actions.</li>
+  <li>Option middle for menus that make submenus be centered instead of aligned by the top edge to the parent entry.</li>
+  <li>Fix transient (ie dialog) windows being placed offscreen if the parent is close to the edge of the screen.</li>
+</ul>
+
+<a name="3.3-rc2"><h5 class="text">3.3-rc2</h5></a><ul>
+  <li>Fixed some typos and errors in rc.xsd</li>
+  <li>Add the noStrut option to the dock (to allow maximizing windows over it), useful when it is not in the above layer.</li>
+  <li>Fix transparent terminals not updating when using ToggleDecor.</li>
+  <li>Yet more poking at the onscreen-keeping code, should now do the right thing always.</li>
+  <li>Add an option to hide disabled buttons instead of showing them as disabled.</li>
+  <li>Hopefully fixed all the remaining pango issues. The new 1.10 release also fixes shadows again.</li>
+  <li>I think the lib linking in Makefile.am is right now, please tell me if it isn't.</li>
+  <li>Added a finnish translation and some minor updates to others.</li>
+  <li>Fixed configure.ac so --enable-pango doesn't disable pango support or the other way around, make enabled be default to get some extra testing.</li>
+</ul>
+
+<a name="3.3-rc1"><h5 class="text">3.3-rc1</h5></a><ul>
+  <li>Poked around a bit in the code that keeps windows onscreen, if you are using xinerama, please let me know if things are better/worse/same.</li>
+  <li>Add support for pango, disabled by default due to a bug in pango 1.8 that breaks shadows, it works fine with 1.6.x though. Poke the pango developers here http://bugzilla.gnome.org/show_bug.cgi?id=169622 if you want this to be fixed.</li>
+  <li>Made edge resist and Send/MoveToEdge not hit windows at layers below the current one, add option to disable this behaviour.</li>
+  <li>Fixed directional focus not getting trapped in omnipresent windows</li>
+  <li>Fixed focus actions when bound to the mouse, normal focus cycle is always linear and directional focus is totally disabled, it makes no sense anyway, just move the mouse.</li>
+  <li>Added an option for the raise/lower/raiselower/unshaderaise/shadelower options called group that lets you bind stuff to raise/lower the whole window group. yes</li>
+  <li>Add various new actions. I haven't updated the web docs yet, but I think I managed to get all of them listed in rc.xsd.</li>
+  <li>Bugs 1783, 1812, 1863, 1905, 2005, 1957 fixed.</li>
+  <li>Some translations added. (ca, no, pl, ru, fr) </li>
+</ul>
+
+<a name="3.2"><h5 class="text">3.2</h5></a><ul>
+  <li>Added spanish and swedish translations</li>
+  <li>Changed "Unnamed Desktop" to "Desktop n" where n is the actual number of the desktop</li>
+  <li>Hopefully no more of the hanging X totally bug</li>
+  <li>the fullscreen property now overrides aspect hints, all programs i've tried that use it (mplayer and tvtime) handle the aspect internally anyway, this just makes sure you have black borders all the way to the edge. If this breaks anything for you, let me know.</li>
+  <li>Added M as an alias for Mod3 in the same manner that W is an alias for Mod4</li>
+  <li>Added probably too many options and actions</li>
+  <li>ToggleDockAutohide to toggle the autohide option at runtime, doesn't save it to the config</li>
+  <li>keepBorder option to set if you want the 1-pixel border when you toggleDecorations</li>
+  <li>added popupShow and popupPosition to control where and when the move/resize-popup is shown, these go in the resize section of the config popupPosition can be Top or Center, popupShow can be Always, Never or Nonpixel (this is the default).</li>
+  <li>Added the xorStyle option to change the behaviour of menus along the bottom edge, note that the default is true</li>
+  <li>warpPointer option in the menu section to control if the mouse cursor is to be warped by openbox when the menu moves to keep on screen to keep the cursor in the same place relative to the menu. (I think i got that right)</li>
+  <li>Added back the focusLast option (this controls what happens when you change desktops and have followMouse on)</li>
+  <li>Added an option to set which desktop to start on when you start openbox, firstdesk, for example you might like to set it to 5 if you have a 3x3 grid to start in the middle.</li>
+  <li>I think that was everything, have fun</li>
+</ul>
+
+<a name="3.1"><h5 class="text">3.1</h5></a><ul>
+  <li>Added japanese translation (bug #1029)</li>
+  <li>Closed bug #1060 (modal unfocused window should be placed above focused parent)</li>
+  <li>Closed bug #1012 (Openbox stalls gnome session startup after --replace)</li>
+  <li>Closed bug #1073 (The Desktop action doesn't work)</li>
+  <li>Closed bug #1023 (config_focus_raise declared as guint)</li>
+  <li>Closed bug #1019 (Strange behavior with focus:followMouse and RaiseLower action)</li>
+  <li>Closed bug #1007 (use g_snprintf in openbox/session.c instead of sprintf)</li>
+  <li>Closed bug #1001 (gimp crashes openbox)</li>
+  <li>Closed bug #1005 (import -frame leaves windows in a temporary "on top" state)</li>
+  <li>Closed bug #881 (Programs started with X become zombies upon shutdown.)</li>
+  <li>Closed bug #1025 (desktopnext/previous and desktopleft/right dont quite get along) </li>
+</ul>
+
+<a name="3.0"><h5 class="text">3.0</h5></a><ul>
+  <li>Closed bug #908 (sometimes some weird grab is left)</li>
+  <li>Closed bug #945 (xawtv overlay visible on every desktop)</li>
+  <li>Closed bug #944 (remove restarting/reconfiguring messages from openbox.c)</li>
+  <li>Closed bug #946 (use g_strsplit in parse.c:split_paths())</li>
+  <li>Closed bug #943 (consistent glib type (gint, gchar, etc.) usage)</li>
+  <li>Closed bug #951 (stale openbox session files)</li>
+  <li>Closed bug #947 (Sloppyfocus can yield two windows at the same time with focus (!))</li>
+  <li>Closed bug #948 (Gets stuck in 'move' mode if mouse is let up while dragged away from title bar)</li>
+  <li>Closed bug #949 (dock above gnome panel behaviour)</li>
+  <li>Closed bug #902 (Openbox raises gDesklets when clicked)</li>
+  <li>Closed bug #904 (ToggleMaximizeHorz & Vert dont always toggle)</li>
+  <li>Closed bug #907 (window focus is not properly indicated)</li>
+  <li>Closed bug #919 (Temporary raise window when alt tabbing)</li>
+  <li>Closed bug #921 (focus rectangle stays on the screen after modifier release)</li>
+  <li>Closed bug #925 (Invalid option: '--sm-save' & '--sm-disable')</li>
+  <li>Closed bug #926 (problem with client-list-menu, destkop switching, and sticky client)</li>
+  <li>Closed bug #927 (disappearing windows, crash with I-merry theme)</li>
+  <li>Closed bug #929 (crash (signal 11) when activating Reconfigure)</li>
+  <li>Closed bug #940 (actions dont work on desktops with no client windows)</li>
+  <li>Closed bug #943 (consistent glib type (gint, gchar, etc.) usage)</li>
+  <li>Closed bug #957 (openbox crashes when exiting out of OpenOffice Impress)</li>
+  <li>Closed bug #960 (look for dupes in xdg paths when setting up slists?)</li>
+  <li>Closed bug #961 (Menu causes core dump)</li>
+  <li>Closed bug #963 (wrapper for mkdir() in parse.c)</li>
+  <li>Closed bug #964 (free GErrors in action.c, openbox.c)</li>
+  <li>Closed bug #965 (add message for chdir() failure in openbox.c)</li>
+  <li>Closed bug #966 (list->next/prev to g_[s]list_next/previous, list != NULL to list</li>
+  <li>Closed bug #971 (typo in code)</li>
+  <li>Closed bug #974 (use g_getenv() in parser/parse.c)</li>
+  <li>Closed bug #975 (void -> gpointer)</li>
+  <li>Closed bug #976 (use g_strerror() in openbox/session.c)</li>
+  <li>Closed bug #978 (disable entry to go to desktop if it is the current)</li>
+  <li>Closed bug #979 (request for version check in ob libraries)</li>
+  <li>Closed bug #944 (remove restarting/reconfiguring messages from openbox.c)</li>
+  <li>Closed bug #968 (rc.xml refers to a non-existant "debian" menu file)</li>
+</ul>
+
+<a name="3.0-rc4"><h5 class="text">3.0-rc4</h5></a><ul>
+  <li>Closed bug #921 (focus rectangle stays on the screen after modifier release)</li>
+  <li>Closed bug #927 (disappearing windows, crash with I-merry theme)</li>
+  <li>Fix crash when restoring a session with a maximized window</li>
+  <li>Fix leak of RrColors in menus</li>
+  <li>Closed bug #929 (crash (signal 11) when activating Reconfigure)</li>
+  <li>Allow focus to be moved around by clients (for WM_TAKE_FOCUS to work as it is meant to). This means fullscreen apps like wine and bzflag work now</li>
+  <li>Reversed the default directions for the mouse wheel desktop switching actions</li>
+  <li>Don't wrap around in the default keyboard desktop switching bindings</li>
+  <li>Place parentless dialogs so they avoid always-on-top windows</li>
+  <li>Ignore fullscreen windows in placing new ones</li>
+  <li>Closed bug #940 (actions dont work on desktops with no client windows)</li>
+</ul>
+
+<a name="3.0-rc3"><h5 class="text">3.0-rc3</h5></a><ul>
+  <li>Closed bug #904 (ToggleMaximizeHorz & Vert dont always toggle)</li>
+  <li>Allow resizing of windows in only vertical/horizontal directions (via Alt-MiddleClick-Drag with the default bindings)</li>
+  <li>Added intelligence to window cycling and raise/lowering based on window types</li>
+  <li>Closed bug #902 (Openbox raises gDesklets when clicked). This has the side effect that panels which do not set the ABOVE state (most panels curerntly around) will no longer be kept always on top. You can set the ABOVE state yourself by using the client menu (Alt-RightClick in the default bindings) and selecting the Always on top Layer</li>
+  <li>Closed bug #907 (window focus is not properly indicated)</li>
+  <li>Added a focus indicator during focus cycling that is always visible instead of just moving the focus hilight around.</li>
+</ul>
+
+<a name="3.0-rc2"><h5 class="text">3.0-rc2</h5></a><ul>
+  <li>Closed bug #885 (raiseOnFocus is flawed)</li>
+  <li>Closed bug #887 (Mouse-wheel scrolling only changes 1 desktop when using "dialog" option)</li>
+  <li>Closed bug #888 (some random coredump)</li>
+  <li>Closed bug #889 (focus follow mouse not following)</li>
+  <li>Closed bug #892 (client_under_pointer() doesn't check DESKTOP_ALL)</li>
+  <li>Avoid the focus flicker when switching desktops</li>
+  <li>Free the XML DOM trees properly, fixes mem leak</li>
+</ul>
+
+<a name="3.0-rc1"><h5 class="text">3.0-rc1</h5></a><ul>
+  <li>Closed bug #875 (RaiseLower fails to funtion on windows with dialogs)</li>
+  <li>Added the option for moving dock apps around inside the dock. (Closes bug #798)</li>
+  <li>Made the "Desktop" action show the pager/desktop dialog</li>
+  <li>Add the option to the Desktop and Focus switching actions</li>
+  <li>No longer iconify fullscreen windows when they lose focus (Closes bug #876)</li>
+  <li>When not using focusLast, when a focused transient is closed, focus will still fallback to its parent or transient siblings</li>
+  <li>Improved intelligence for focus cycling with modal transients</li>
+  <li>Removed the focusLast option</li>
+  <li>Added the placement-policy option to select if windows are placed under the mouse pointer</li>
+  <li>Children inherit their window icon from their parent</li>
+  <li>Closed bug #878 (minimal resizing of mplayer makes openbox crash)</li>
+  <li>Fix case where opening a menu would leave Openbox in a locked state</li>
+  <li>Upstream updates for TheBear theme</li>
+</ul>
+
+<a name="3.0-beta6"><h5 class="text">3.0-beta6</h5></a><ul>
+  <li>Added _OB_WM_STATE_UNDECORATED hint, which can be read and controlled by external applications</li>
+  <li>Closed bug #874 (libtool won't install libobrender.la)</li>
+  <li>Launch ObConf when selecting GNOME's Desktop Preferences for Windows</li>
+  <li>Focus new children always if their direct parent is focused </li>
+</ul>
+
+<a name="3.0-beta5"><h5 class="text">3.0-beta5</h5></a><ul>
+  <li>Initial release</li>
+</ul>
+
+</div> <!--col2-->
+
+<script>
+function bug_linkize(id) {
+  var a = document.getElementById(id);
+  a.innerHTML= a.innerHTML.replace
+    (/(bug #|request #)([0-9]+)/ig, function(a, t, num) {
+      return t+'<a href="http://bugzilla.icculus.org/show_bug.cgi?id='+
+      num+'">'+num+'</a>';
+    });
+}
+bug_linkize('col2');
+</script>
+
+<?php include('bottom.php') ?>
diff --git a/download-pipemenus.php b/download-pipemenus.php
new file mode 100644 (file)
index 0000000..6b62c9d
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+$title='Pipe Menus';
+$breadcrumb=array('Home', '.', 'Download', 'download.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/download.css" />
+  <link rel="stylesheet" type="text/css" href="css/download-content.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/icons/menu.png', $title); ?>
+
+<?php include('content.php') ?>
+
+<div id="col2" class="fullcol">
+
+<h5 class="text">
+Pipe menu collections
+</h5>
+
+<dl> 
+<dt><img src="images/icons/menu.png" alt="pipe menus"/></dt> 
+<dd>
+
+<ul>
+<li>
+http://icculus.org/openbox/index.php/Openbox:Pipemenus
+</li>
+<li>
+http://crunchbanglinux.org/forums/topic/4647/the-ultimate-pipe-menu-thread/
+</li>
+<li>
+http://david.chalkskeletons.com/scripts/scripts.html
+</li>
+<li>
+http://david.chalkskeletons.com/scripts/
+</li>
+<li>
+http://bbs.archlinux.org/viewtopic.php?id=69365
+</li>
+<li>
+http://www.google.ca/search?hl=en&q=+site:bbs.archlinux.org+arch+openbox+pipe+menus&ei=A4YdS9PvBJDelAfC2unxCQ&sa=X&oi=forum_cluster&resnum=1&ct=more-results&ved=0CA8QrQIwAA
+</li>
+</ul>
+
+</dd> 
+</dl> 
+
+</div><!--col1-->
+
+<?php include('bottom.php') ?>
diff --git a/download-themes.php b/download-themes.php
new file mode 100644 (file)
index 0000000..3ca82cf
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+$title='Themes';
+$breadcrumb=array('Home', '.', 'Download', 'download.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/download.css" />
+  <link rel="stylesheet" type="text/css" href="css/download-content.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/icons/themes.png', $title); ?>
+
+<?php include('content.php') ?>
+
+<div id="col2" class="fullcol">
+
+<h5 class="text">Theme Sites</h5>
+
+<dl> 
+<dt><img src="images/sites/deviantart.png" alt="deviantART.com"/></dt> 
+<dd><a href="http://browse.deviantart.com/customization/skins/linuxutil/winmanagers/openbox/?order=9">deviantART.org</a><br/>
+A large collection of themes for Openbox.</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/sites/box-look.png" alt="box-look.org"/></dt> 
+<dd><a href="http://www.box-look.org/index.php?xcontentmode=7402">Box-Look.org</a><br/>
+Another large collection of themes for Openbox and other *box type window
+managers.</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/sites/customize.org.png" alt="customize.org"/></dt> 
+<dd><a href="http://customize.org/browse/tags/openbox">Customize.org</a><br/>
+Screenshots of many Openbox desktops with various themes.</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/sshots.png" alt="sshots"/></dt> 
+<dd><a href="discuss-sshots.php">Our Screenshots page</a><br/>
+View many screenshots of users' Openbox desktops, and submit
+your own.</dd> 
+</dl> 
+
+<h5 class="text">Theme Authors</h5>
+
+<p>
+A number of Openbox theme authors have websites for their own theme
+collections:
+</p>
+
+<dl> 
+<dt><img src="images/icons/www.png" alt="www"/></dt> 
+<dd>
+<ul>
+<li><a href="http://tr.openmonkey.com/pages/openbox">Safari Al's themes</a></li>
+<li><a href="http://www.minuslab.net/themes">nightm4re's themes</a></li>
+<li><a href="http://david.chalkskeletons.com/files/?dir=./themes">David's themes</a></li>
+<li><a href="http://celo.wordpress.com/themes/">Crimeboy's themes</a></li>
+</ul>
+</dd> 
+</dl> 
+
+<h5 class="text">Theme Tools</h5>
+
+<ul>
+
+<dl> 
+<dt><img src="images/icons/themes.png" alt="obtheme"/></dt> 
+<dd><a href="http://xyne.archlinux.ca/info/obtheme">ObTheme</a><br/>
+A GUI editor for Openbox themes.
+</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/script.png" alt="themeupdate"/></dt> 
+<dd><a href="http://openbox.org/dist/tools/themeupdate.py">ThemeUpdate</a><br/>
+A simple tool to create an Openbox theme from a Fluxbox/Blackbox theme.  This
+tool works only for themes that do not use XPM images to fill the decorations.
+</dd> 
+</dl> 
+
+</div><!--col1-->
+
+<?php include('bottom.php') ?>
diff --git a/download.php b/download.php
new file mode 100644 (file)
index 0000000..3cd99bb
--- /dev/null
@@ -0,0 +1,192 @@
+<?php
+$title='Download';
+$breadcrumb=array('Home', '.');
+
+$openbox[1]='3.4.11';
+$openbox[2]='3.4.10';
+$obconf[1]='2.0.3';
+$obconf[2]='2.0.2';
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/download.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/splash/download.png', $title); ?>
+
+<?php include('content.php') ?>
+
+<div id="col1" class="widecol">
+<dl> 
+<dt><img src="images/icons/feature.png" alt="changelog"/></dt> 
+<dd><a href="download-changelog.php">
+  Changelog</a><br />
+  See what's new in each version of Openbox.
+</dd>
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/themes.png" alt="themes"/></dt> 
+<dd><a href="download-themes.php">
+  Download Themes</a><br />
+  Make Openbox pretty with new themes.
+</dd>
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/menu.png" alt="menu"/></dt> 
+<dd><a href="download-pipemenus.php">
+  Download Pipe Menus</a><br/>Extend Openbox with dynamic pipemenus.</dd> 
+</dl> 
+
+</div> <!--col1-->
+
+<div id="col2" class="widecol"> 
+
+<h5 class="text">Openbox is available in most Linux distributions</h5>
+
+<p>
+To install Openbox on your Linux computer, run the following command (choose the one appropriate for your Linux distribution):
+</p>
+
+<div class="iconlist">
+<p>
+<img src="images/distro/ubuntu.png" />
+<strong>Ubuntu</strong>: gksu aptitude install openbox obconf
+</p>
+<p>
+<img src="images/distro/fedora.png" />
+<strong>Fedora</strong>: gksu yum install openbox obconf
+</p>
+<p>
+<img src="images/distro/arch.png" />
+<strong>Arch</strong>: sudo pacman -S openbox obconf
+</p>
+<p>
+<img src="images/distro/debian.png" />
+<strong>Debian</strong>: sudo aptitude install openbox obconf
+</p>
+<p>
+<img src="images/distro/gentoo.png" />
+<strong>Gentoo</strong>: sudo emerge openbox obconf
+</p>
+<p>
+<img src="images/distro/foresight.png" />
+<strong>Foresight</strong>: sudo conary update group-openbox
+</p>
+<p>
+<img src="images/distro/pclinuxos.png" />
+<strong>PcLinuxOS</strong>: sudo apt-get install openbox obconf
+</p>
+</div>
+
+<p>
+You can run these commands in a terminal, or through a launcher such as provided in GNOME by pressing Alt-F2.
+</p>
+
+<h5 class="text">Openbox Source Code</h5>
+<img style="float: left; margin: 0 5 5 0;" src="images/icons/openbox_logo.png">
+
+<div>
+  <div class="version"><?php echo $openbox[1] ?>:</div>
+  <ul class="version">
+    <li>
+      <span class="name">Source code</span>:
+      <a class="download"
+         href="dist/openbox/openbox-<?php echo $openbox[1] ?>.tar.gz">
+         openbox-<?php echo $openbox[1] ?>.tar.gz</a>
+      (<a href="help-install.php">Build instructions</a>)
+     </li>
+   </ul>
+</div>
+
+<div>
+  <div class="version"><?php echo $openbox[2] ?>:</div>
+  <ul class="version">
+<!--
+    <li>
+      <span class="name">Arch Linux</span>:
+      <a class="download"
+         href="dist/openbox/openbox-<?php echo $openbox[2] ?>.PKGBUILD">
+           build script (.pkgbuild)</a>
+    </li>
+-->
+    <li>
+      <span class="name">Source code</span>:
+      <a class="download"
+         href="dist/openbox/openbox-<?php echo $openbox[2] ?>.tar.gz">
+         openbox-<?php echo $openbox[2] ?>.tar.gz</a>
+      (<a href="help-install.php">Build instructions</a>)
+     </li>
+   </ul>
+</div>
+
+<h5 class="text">Obconf Source Code</h5>
+<img style="float: left; margin: 0 5 5 0;" src="images/icons/obconf.png">
+
+<div>
+  <div class="version"><?php echo $obconf[1] ?>:</div>
+  <ul class="version">
+<!--
+    <li>
+      <span class="name">Ubuntu/Debian</span>:
+      <a class="download"
+         href="dist/obconf/obconf_<?php echo $obconf[1] ?>-0_i386.deb">
+            package for ia86 (.deb)</a>
+    </li>
+    <li>
+      <span class="name">Arch Linux</span>:
+      <a class="download"
+         href="dist/obconf/obconf-<?php echo $obconf[1] ?>-1-i686.pkg.tar.gz">
+           package (.tar.gz)</a>
+    </li>
+-->
+    <li>
+      <span class="name">Source code</span>:
+      <a class="download"
+         href="dist/obconf/obconf-<?php echo $obconf[1] ?>.tar.gz">
+         obconf-<?php echo $obconf[1] ?>.tar.gz</a>
+      (<a href="help-obconf.php#install">Build instructions</a>)
+   </li>
+   </ul>
+</div>
+
+<div>
+  <div class="version"><?php echo $obconf[2] ?>:</div>
+  <ul class="version">
+<!--
+    <li>
+      <span class="name">Ubuntu</span>:
+      <a class="download"
+         href="http://openbox.org/dist/obconf/obconf_<?php echo $obconf[2] ?>-0_i386.deb">
+            package for ia86 (.deb)</a>
+    </li>
+    <li>
+      <span class="name">Fedora 7</span>:
+      <a class="download"
+         href="http://openbox.org/dist/obconf/obconf-<?php echo $obconf[2] ?>-1.fc7.i386.rpm">
+            package for ia86 (.rpm)</a>
+    </li>
+    <li>
+      <span class="name">Slackware</span>:
+      <a class="download"
+         href="http://openbox.org/dist/obconf/obconf-<?php echo $obconf[2] ?>-i486-1.tgz">
+           package for ia86 (.tgz)</a>
+    </li>
+-->
+    <li>
+      <span class="name">Source code</span>:
+      <a class="download"
+         href="http://openbox.org/dist/obconf/obconf-<?php echo $obconf[2] ?>.tar.gz">
+         obconf-<?php echo $obconf[2] ?>.tar.gz</a>
+      (<a href="help-obconf.php#install">Build instructions</a>)
+   </li>
+   </ul>
+</div>
+</div> <!--col2-->
+
+<?php include('bottom.php') ?>
diff --git a/favicon.ico b/favicon.ico
new file mode 100644 (file)
index 0000000..f90b807
Binary files /dev/null and b/favicon.ico differ
diff --git a/h/agg.php b/h/agg.php
new file mode 100644 (file)
index 0000000..8dbcd35
--- /dev/null
+++ b/h/agg.php
@@ -0,0 +1,133 @@
+<?
+
+function date_cmp($a, $b) 
+{
+  $ad = (int)$a['date'];
+  $bd = (int)$b['date'];
+  return $bd - $ad;
+}
+
+function agg_single($url, $num, $skiptr)
+{
+  $feed = new SimplePie($url);
+  $feed->enable_cache(true);
+  $feed->set_cache_duration(3600);
+  $feed->set_cache_location('./cache');
+  if ($feed->init()) {
+    $chtitle = $feed->get_title();
+    $chdesc = $feed->get_description();
+    $chlink = $feed->get_permalink();
+
+    $f = array('url' => $url);
+
+    $items = read_feed($feed, $f, $num, $skiptr);
+    return write_xml($items, $chtitle, $chlink, $chdesc);
+  }
+  return '';
+}
+
+function agg($feeds, $chtitle, $chlink, $chdesc, $numperfeed,
+             $skiptwitterreplies)
+{
+  require_once('simplepie.inc');
+
+  $items = array();
+
+  foreach ($feeds as $f) {
+    $feed = new SimplePie($f['url']);
+    $feed->enable_cache(true);
+    $feed->set_cache_duration(3600);
+    $feed->set_cache_location('./cache');
+
+    if ($feed->init()) {
+      $a = read_feed($feed, $f, $numperfeed, $skiptwitterreplies);
+      $items = array_merge($items, $a);
+    }
+  }
+
+  // sort all the items by date
+  usort(&$items, 'date_cmp');
+
+  return write_xml($items, $chtitle, $chlink, $chdesc);
+}
+
+function read_feed($feed, $f, $n, $skiptwitterreplies)
+{
+  $items = array();
+
+  $c=0;
+  foreach ($feed->get_items() as $r) {
+    if ($n >= 0 && $c >= $n) break;
+
+    $i = array();
+    if (!empty($f['name']))
+      $i['name'] = $f['name'];
+    else {
+      $ra = $r->get_author();
+      if ($ra && $ra->get_name())
+        $i['name'] = $ra->get_name();
+      if ($ra && $ra->get_email())
+        $i['name'] = $ra->get_email();
+      else
+        $i['name'] = '';
+    }
+
+    $i['nick'] = $f['nick'];
+
+    $i['image'] = $r->get_link(0, 'image');
+    if (empty($i['image'])) {
+      if (!empty($f['image']))
+        $i['image'] = 'rss/heads/'.$f['image'];
+      else
+        $i['image'] = 'rss/heads/noimage.png';
+    }
+    $i['link'] = $r->get_permalink();
+    $i['text'] = $r->get_content();
+    $i['title'] = $r->get_title();
+    $i['feedurl'] = $feed->get_permalink();
+    $i['feedtitle'] = $feed->get_title();
+    $i['id'] = md5($i['link'].$i['feedurl'].$i['date']);
+    $i['date'] = (int)$r->get_date('U')-(int)$r->get_date('Z');
+
+    // strip off an enclosing div (wordpress)
+    $i['text'] = preg_replace("/^\s*<div.*?>(.*)<\/div.*?>\s*$/s",
+                              '\1', $i['text']);
+    // strip off leading br's
+    $i['text'] = preg_replace('/^\s*(<br[^>]*>)*/s', '', $i['text']);
+    // strip off trailing br's
+    $i['text'] = preg_replace('/(<br[^>]*>)*\s*$/s', '', $i['text']);
+    // strip out script tags
+    $i['text'] = preg_replace('/<script(>| .*?>).*?<\/script(>| .*?>)/s', '', $i['text']);
+
+    if ($skiptwitterreplies) {
+      if (preg_match('/^[a-zA-Z0-9_]+: @[a-zA-Z0-9_\/]+/', $i['title']))
+        continue; // skip this
+    }
+
+    $items[] = $i;
+    $c++;
+  }
+  return $items;
+}
+
+function write_xml($items, $chtitle, $chlink, $chdesc) {
+  $w = new XMLWriter();
+  $w->openMemory();
+  $w->startDocument('1.0');
+  $w->setIndent(4);
+  $w->startElement('feed');
+  $w->writeElement('title', $chtitle);
+  $w->writeElement('link', $chlink);
+  $w->writeElement('description', $chdesc);
+  foreach ($items as &$i) {
+    $w->startElement('item');
+    foreach ($i as $k => $v)
+      $w->writeElement($k, htmlspecialchars_decode($v));
+    $w->endElement(); // item
+  }
+  $w->endElement(); // feed
+
+  return $w->outputMemory();
+}
+
+?>
\ No newline at end of file
diff --git a/h/ajax.js b/h/ajax.js
new file mode 100644 (file)
index 0000000..325b3c2
--- /dev/null
+++ b/h/ajax.js
@@ -0,0 +1,20 @@
+function createAjaxObj() {
+  var httprequest=false;
+  if (window.XMLHttpRequest) { // if Mozilla, Safari etc
+    httprequest=new XMLHttpRequest();
+    if (httprequest.overrideMimeType)
+      httprequest.overrideMimeType('text/xml');
+  }
+  else if (window.ActiveXObject) { // if IE
+    try {
+      httprequest=new ActiveXObject("Msxml2.XMLHTTP");
+    } 
+    catch (e) {
+      try{
+        httprequest=new ActiveXObject("Microsoft.XMLHTTP");
+      }
+      catch (e) {}
+    }
+  }
+  return httprequest;
+}
diff --git a/h/breadcrumb.js b/h/breadcrumb.js
new file mode 100644 (file)
index 0000000..b1afccc
--- /dev/null
@@ -0,0 +1,20 @@
+  var b = document.getElementById('breadcrumb');
+  var t = '';
+
+  for (var i = 0; i < bc.length;) {
+    var name = bc[i], url = false;
+    if (i < bc.length-1)
+      url = bc[i+1];
+
+    t += '<span class="bcitem">';
+    if (url) t += '<a href="'+url+'">';
+    t += name;
+    if (url) t += '</a>';
+    t += '</span>';
+
+    i += 2;
+    if (i < bc.length)
+      t += '<img alt=">" src="images/bc_sep.png" />';
+  }
+
+  b.innerHTML = t;
diff --git a/h/breadcrumb.php b/h/breadcrumb.php
new file mode 100644 (file)
index 0000000..0b5d57b
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+$t = '';
+
+// append the title to the end of the breadcrumb trail
+$breadcrumb[] = $title;
+
+for ($i = 0; $i < count($breadcrumb);) {
+  $name = $breadcrumb[$i]; $url = false;
+  if ($i < count($breadcrumb)-1)
+    $url = $breadcrumb[$i+1];
+
+  $t .= '<span class="bcitem">';
+  if ($url) $t .= '<a href="'.$url.'">';
+  $t .= $name;
+  if ($url) $t .= '</a>';
+  $t .= '</span>';
+
+  $i += 2;
+  if ($i < count($breadcrumb))
+      $t .= '<img alt=">" src="/images/bc_sep.png" />';
+  //$t .= '<span class="bcsep">&gt;</span>';
+}
+
+echo $t;
+?>
\ No newline at end of file
diff --git a/h/dateformat.js b/h/dateformat.js
new file mode 100644 (file)
index 0000000..4ef392b
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Date Format 1.2.3
+ * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
+ * MIT license
+ *
+ * Includes enhancements by Scott Trenda <scott.trenda.net>
+ * and Kris Kowal <cixar.com/~kris.kowal/>
+ *
+ * Accepts a date, a mask, or a date and a mask.
+ * Returns a formatted version of the given date.
+ * The date defaults to the current date/time.
+ * The mask defaults to dateFormat.masks.default.
+ */
+
+var dateFormat = function () {
+       var     token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
+               timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
+               timezoneClip = /[^-+\dA-Z]/g,
+               pad = function (val, len) {
+                       val = String(val);
+                       len = len || 2;
+                       while (val.length < len) val = "0" + val;
+                       return val;
+               };
+
+       // Regexes and supporting functions are cached through closure
+       return function (date, mask, utc) {
+               var dF = dateFormat;
+
+               // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
+               if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
+                       mask = date;
+                       date = undefined;
+               }
+
+               // Passing date through Date applies Date.parse, if necessary
+               date = date ? new Date(date) : new Date;
+               if (isNaN(date)) throw SyntaxError("invalid date");
+
+               mask = String(dF.masks[mask] || mask || dF.masks["default"]);
+
+               // Allow setting the utc argument via the mask
+               if (mask.slice(0, 4) == "UTC:") {
+                       mask = mask.slice(4);
+                       utc = true;
+               }
+
+               var     _ = utc ? "getUTC" : "get",
+                       d = date[_ + "Date"](),
+                       D = date[_ + "Day"](),
+                       m = date[_ + "Month"](),
+                       y = date[_ + "FullYear"](),
+                       H = date[_ + "Hours"](),
+                       M = date[_ + "Minutes"](),
+                       s = date[_ + "Seconds"](),
+                       L = date[_ + "Milliseconds"](),
+                       o = utc ? 0 : date.getTimezoneOffset(),
+                       flags = {
+                               d:    d,
+                               dd:   pad(d),
+                               ddd:  dF.i18n.dayNames[D],
+                               dddd: dF.i18n.dayNames[D + 7],
+                               m:    m + 1,
+                               mm:   pad(m + 1),
+                               mmm:  dF.i18n.monthNames[m],
+                               mmmm: dF.i18n.monthNames[m + 12],
+                               yy:   String(y).slice(2),
+                               yyyy: y,
+                               h:    H % 12 || 12,
+                               hh:   pad(H % 12 || 12),
+                               H:    H,
+                               HH:   pad(H),
+                               M:    M,
+                               MM:   pad(M),
+                               s:    s,
+                               ss:   pad(s),
+                               l:    pad(L, 3),
+                               L:    pad(L > 99 ? Math.round(L / 10) : L),
+                               t:    H < 12 ? "a"  : "p",
+                               tt:   H < 12 ? "am" : "pm",
+                               T:    H < 12 ? "A"  : "P",
+                               TT:   H < 12 ? "AM" : "PM",
+                               Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
+                               o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
+                               S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
+                       };
+
+               return mask.replace(token, function ($0) {
+                       return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
+               });
+       };
+}();
+
+// Some common format strings
+dateFormat.masks = {
+       "default":      "ddd mmm dd yyyy HH:MM:ss",
+       shortDate:      "m/d/yy",
+       mediumDate:     "mmm d, yyyy",
+       longDate:       "mmmm d, yyyy",
+       fullDate:       "dddd, mmmm d, yyyy",
+       shortTime:      "h:MM TT",
+       mediumTime:     "h:MM:ss TT",
+       longTime:       "h:MM:ss TT Z",
+       isoDate:        "yyyy-mm-dd",
+       isoTime:        "HH:MM:ss",
+       isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
+       isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
+};
+
+// Internationalization strings
+dateFormat.i18n = {
+       dayNames: [
+               "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
+               "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
+       ],
+       monthNames: [
+               "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+               "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
+       ]
+};
+
+// For convenience...
+Date.prototype.format = function (mask, utc) {
+       return dateFormat(this, mask, utc);
+};
\ No newline at end of file
diff --git a/h/geom.js b/h/geom.js
new file mode 100644 (file)
index 0000000..20637ac
--- /dev/null
+++ b/h/geom.js
@@ -0,0 +1,19 @@
+function getElementHeight(Elem) {
+    elem = $(Elem);
+    if (elem.style.pixelHeight) { 
+        xPos = elem.style.pixelHeight;
+    } else {
+        xPos = elem.offsetHeight;
+    }
+    return xPos;
+}
+
+function getElementWidth(Elem) {
+    elem = $(Elem);
+    if (elem.style.pixelWidth) {
+        xPos = elem.style.pixelWidth;
+    } else {
+        xPos = elem.offsetWidth;
+    }
+    return xPos;
+}
diff --git a/h/index.html b/h/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/h/misc.js b/h/misc.js
new file mode 100644 (file)
index 0000000..46a696d
--- /dev/null
+++ b/h/misc.js
@@ -0,0 +1,9 @@
+function $(name) {
+  var elem = null;
+  if(document.getElementById) {
+      elem = document.getElementById(name);
+  } else if (document.all){
+      elem = document.all[name];
+  }
+  return elem;
+}
diff --git a/h/old/buildrss.php b/h/old/buildrss.php
new file mode 100644 (file)
index 0000000..f5ddff8
--- /dev/null
@@ -0,0 +1,108 @@
+<?
+
+function get_date($i)
+{
+    $r = $i[date_timestamp];
+    if (!$r)
+        $r = strtotime($i[dc][date]);
+    if (!$r)
+        $r = strtotime($i[published]);
+    return $r;
+}
+
+function get_datestr($i)
+{
+    $d = get_date($i);
+    return date('D, d M Y H:i:s +0000', $d);
+}    
+
+function buildrss($feeds, $chtitle, $chlink, $chlang, $num)
+{
+  require_once('simplepie.inc');
+
+  define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
+  require('magpierss/rss_fetch.inc');
+
+  $w = new XMLWriter();
+  $w->openMemory();
+  $w->startDocument('1.0');
+  $w->setIndent(4);
+
+  $w->startElement('rss');
+  $w->writeAttribute('version', '2.0');
+
+  $w->startElement('channel');
+
+  $items = array();
+
+  // loop thru all feeds and merge the items together into the $items array
+  error_reporting(E_ERROR);
+  foreach ($feeds as $f) {
+    $url = $f[0];
+    $name = $f[1];
+    $rss = fetch_rss($url);
+    if (!$rss) continue;
+    foreach ($rss->items as &$item) {
+      $item['name'] = $name;
+      $item['source_url'] = $url;
+      $item['source_title'] = $rss->channel['title'];
+      if (isset($item['content']['encoded']))
+        print $item['content']['encoded']."\n\n";
+    }
+    $items = array_merge($items, $rss->items);
+  }
+  error_reporting(USER_WARNINGS);
+
+  // sorts feed array based on published date (used with usort)
+  // -------------------------------------------------------------
+  function date_cmp($a, $b) 
+  {
+    $atime = get_date($a);
+    $btime = get_date($b);
+
+    if ($atime == $btime)
+      return 0;
+    
+    return ($atime > $btime) ? -1 : 1;
+  }
+  // sort all items in array by date
+  usort($items, 'date_cmp');
+
+  // channel info
+  $w->writeElement('title', $chtitle);
+  $w->writeElement('link', $chlink);
+  $w->writeElement('language', $chlang);
+
+  $i=0;
+  foreach ($items as $item) {
+    if ($i >= $num) break;
+    $i++;
+
+    $w->startElement('item');
+    $w->writeElement('title', htmlspecialchars_decode($item['title']));
+    $w->writeElement('pubDate', get_datestr($item));
+    $w->writeElement('link', htmlspecialchars_decode($item['link']));
+    if (isset($item['content']['encoded'])) {
+      $w->writeElement('content:encoded',
+                       htmlspecialchars_decode($item['content']['encoded']));
+      $w->writeElement('content:encoded2',
+                       $item['content']['encoded']);
+    }
+    $w->writeElement('description', htmlspecialchars_decode($item['description']));
+
+    $w->startElement('source');
+    $w->writeAttribute('url', htmlspecialchars_decode($item['source_url']));
+    $w->text(htmlspecialchars_decode($item['source_title']));
+    $w->endElement();
+    
+    $w->endElement();
+  }
+
+  $w->endElement(); // channel
+  $w->endElement(); // rss
+  $w->endDocument();
+
+  return $w->outputMemory();
+}
+
+?>
\ No newline at end of file
diff --git a/h/old/buildrss2.php b/h/old/buildrss2.php
new file mode 100644 (file)
index 0000000..a125fe9
--- /dev/null
@@ -0,0 +1,106 @@
+<?
+
+function get_date($i)
+{
+    $r = $i[date_timestamp];
+    if (!$r)
+        $r = strtotime($i[dc][date]);
+    if (!$r)
+        $r = strtotime($i[published]);
+    return $r;
+}
+
+function get_datestr($i)
+{
+    $d = get_date($i);
+    return date('D, d M Y H:i:s +0000', $d);
+}    
+
+function buildrss($feeds, $chtitle, $chlink, $chlang, $num)
+{
+  define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
+  require('magpierss/rss_fetch.inc');
+
+  $w = new XMLWriter();
+  $w->openMemory();
+  $w->startDocument('1.0');
+  $w->setIndent(4);
+
+  $w->startElement('rss');
+  $w->writeAttribute('version', '2.0');
+
+  $w->startElement('channel');
+
+  $items = array();
+
+  // loop thru all feeds and merge the items together into the $items array
+  error_reporting(E_ERROR);
+  foreach ($feeds as $f) {
+    $url = $f[0];
+    $name = $f[1];
+    $rss = fetch_rss($url);
+    if (!$rss) continue;
+    foreach ($rss->items as &$item) {
+      $item['name'] = $name;
+      $item['source_url'] = $url;
+      $item['source_title'] = $rss->channel['title'];
+      if (isset($item['content']['encoded']))
+        print $item['content']['encoded']."\n\n";
+    }
+    $items = array_merge($items, $rss->items);
+  }
+  error_reporting(USER_WARNINGS);
+
+  // sorts feed array based on published date (used with usort)
+  // -------------------------------------------------------------
+  function date_cmp($a, $b) 
+  {
+    $atime = get_date($a);
+    $btime = get_date($b);
+
+    if ($atime == $btime)
+      return 0;
+    
+    return ($atime > $btime) ? -1 : 1;
+  }
+  // sort all items in array by date
+  usort($items, 'date_cmp');
+
+  // channel info
+  $w->writeElement('title', $chtitle);
+  $w->writeElement('link', $chlink);
+  $w->writeElement('language', $chlang);
+
+  $i=0;
+  foreach ($items as $item) {
+    if ($i >= $num) break;
+    $i++;
+
+    $w->startElement('item');
+    $w->writeElement('title', htmlspecialchars_decode($item['title']));
+    $w->writeElement('pubDate', get_datestr($item));
+    $w->writeElement('link', htmlspecialchars_decode($item['link']));
+    if (isset($item['content']['encoded'])) {
+      $w->writeElement('content:encoded',
+                       htmlspecialchars_decode($item['content']['encoded']));
+      $w->writeElement('content:encoded2',
+                       $item['content']['encoded']);
+    }
+    $w->writeElement('description', htmlspecialchars_decode($item['description']));
+
+    $w->startElement('source');
+    $w->writeAttribute('url', htmlspecialchars_decode($item['source_url']));
+    $w->text(htmlspecialchars_decode($item['source_title']));
+    $w->endElement();
+    
+    $w->endElement();
+  }
+
+  $w->endElement(); // channel
+  $w->endElement(); // rss
+  $w->endDocument();
+
+  return $w->outputMemory();
+}
+
+?>
\ No newline at end of file
diff --git a/h/old/rss.js b/h/old/rss.js
new file mode 100644 (file)
index 0000000..ed2af3b
--- /dev/null
@@ -0,0 +1,162 @@
+function createAjaxObj() {
+  var httprequest=false;
+  if (window.XMLHttpRequest) { // if Mozilla, Safari etc
+    httprequest=new XMLHttpRequest();
+    if (httprequest.overrideMimeType)
+      httprequest.overrideMimeType('text/xml');
+  }
+  else if (window.ActiveXObject) { // if IE
+    try {
+      httprequest=new ActiveXObject("Msxml2.XMLHTTP");
+    } 
+    catch (e) {
+      try{
+        httprequest=new ActiveXObject("Microsoft.XMLHTTP");
+      }
+      catch (e) {}
+    }
+  }
+  return httprequest;
+}
+
+// -------------------------------------------------------------------
+// Main RSS Ticker Object function
+// rss_ticker(RSS_id, divId, divClass, delay, optionalswitch)
+// 1) RSS_id: "Array key of RSS feed in PHP script"
+// 2) divId: "ID of DIV to display ticker in. DIV id dynamically created"
+// 3) divClass: "Class name of this ticker, for styling purposes"
+// 4) refresh: delay between refresh, in minutes
+// 5) num: number of elements to show
+// 6) optionalswitch: "optional arbitrary" string to create additional logic in call back function
+// -------------------------------------------------------------------
+function rss_ticker(RSS_id, divId, divClass, refresh, num, optionalswitch)
+{
+  this.RSS_id=RSS_id; //Array key indicating which RSS feed to display
+  this.tickerid=divId; //ID of ticker div to display information
+  this.delay=refresh*1000*60;
+  this.numDisplay=num;
+  this.logicswitch=(typeof optionalswitch!="undefined")? optionalswitch : -1;
+  this.ajaxobj=createAjaxObj();
+  document.write('<div id="'+divId+'" class="'+divClass+'">Initializing ticker...</div>');
+  this.getAjaxcontent(); // fill the ticker
+}
+
+// -------------------------------------------------------------------
+// getAjaxcontent()- Makes asynchronous GET request to "rssrelay.php"
+// -------------------------------------------------------------------
+rss_ticker.prototype.getAjaxcontent=function()
+{
+  if (this.ajaxobj) {
+    var instanceOfTicker=this;
+    var parameters="id="+encodeURIComponent(this.RSS_id)+
+      "&count="+this.numDisplay;
+    this.ajaxobj.onreadystatechange=function(){instanceOfTicker.display()};
+    this.ajaxobj.open('GET', "h/rssrelay.php?"+parameters, true);
+    this.ajaxobj.send(null);
+  }
+}
+
+rss_ticker.prototype.showError=function(m, n) {
+  var d=document.getElementById(this.tickerid);
+  d.innerHTML='<b>Error</b> fetching remote RSS feed!<br />'+m+'<br />'+n;
+}
+
+rss_ticker.prototype.display=function() { 
+  if (this.ajaxobj.readyState!=4)
+    return;
+  if (this.ajaxobj.status!=200) {
+    this.showError(this.ajaxobj.status);
+    return;
+  }
+  var xmldata=this.ajaxobj.responseXML;
+  if (xmldata==null) {
+    this.showError('No XML response.', this.ajaxobj.responseText);
+    return;
+  }
+  var items=xmldata.getElementsByTagName("item");
+  if (items.length==0) {
+    this.showError('No items found.');
+    return;
+  }
+
+  // the output for the div
+  var c='<ul>';
+
+  for (var i=0; i<items.length&&i<this.numDisplay; i++){
+    var last=(i+1>=items.length||i+1>=this.numDisplay);
+    var item=items[i];
+    var n,date,time,title,link,desc;
+
+    if (item.getElementsByTagName("pubDate")[0]!=undefined) {
+      n = item.getElementsByTagName("pubDate")[0].firstChild;
+      var t=new Date();
+      t.setTime(Date.parse(n.nodeValue));
+      date=t.format('mediumDate');
+      time=t.format('shortTime');
+    }
+
+    n=item.getElementsByTagName("title")[0].firstChild;
+    title=n.nodeValue;
+    n=item.getElementsByTagName("link")[0].firstChild;
+    link=n.nodeValue;
+
+    n = item.getElementsByTagName("description")[0];
+    if (n)n=n.firstChild;
+
+    if (this.logicswitch.match(/(show|full)description/)&&n){
+      var t = n.nodeValue;
+      if (this.logicswitch.match(/showdescription/)) {
+        /* remove tags */
+        var filter =
+          t.replace(/<\/? *(br|p|div|li|ul|ol|span)( +[^>]+)* *\/?>/g,
+                    '');
+        var short = filter.slice(0, 80);
+        if (short.length < filter.length)
+          short+='...';
+        t = short;
+      }
+      else if (this.logicswitch.match(/fulldescription/)) {
+        // strip off an enclosing div and leading/trailing br's
+        t = t.replace(/\n/g,'\uffff').
+          replace(/^[ \uffff]*<div[^>]*>(.+)<\/div *>[ \uffff]*$/,
+                  function(a, b){return b;}).
+          replace(/^[ \uffff]*<br *\/?>/, '').
+          replace(/<br *\/?>[ \uffff]*$/, '').
+          replace(/\uffff/g,'\n');
+
+        // turn urls into links
+        // - don't let them end with .,:;)]}!
+        // - don't replace links preceded by a '="' (like href= or src=)
+        t = t.replace(/(=\" *)?([a-z]+:\/\/[A-Z0-9a-z%_#?&$@!\*\(\)\[\]{};:\'\"\\\|,.\/-]+[A-Z0-9a-z%_#?&$@\*\(\[{\'\"\\\|\/-])/g,
+                      function(all) {
+                        if (all.charAt(0) == '=')
+                        return all;
+                        else
+                        return '<a href="'+all+'">'+all+'</a>';
+                      });
+      } // fulldescription
+      desc=t;  
+    } // description enabled
+
+    c+='<li><div class="title"><a href="'+link+'">'+title+'</a></div>';
+    if (this.logicswitch.match(/(show|full)description/))
+      c+='<div class="description">'+desc+'</div>';
+    if (this.logicswitch.match(/showdate/)){
+      c+='<div class="date">'+date+'</div>';
+      c+='<div class="time">'+time+'</div>';
+    }
+    if (!last && this.logicswitch.match(/fulldescription/))
+      c+='<hr />'; // separate things in full description mode
+    c+='</li>';
+  }
+  c+='</ul>';
+  document.getElementById(this.tickerid).innerHTML=c;
+
+  // don't try save the content
+  this.ajaxobj.responseXML = null;
+  this.ajaxobj.responseText = null;
+
+  // refresh
+  var instanceOfTicker=this;
+  setTimeout(function(){instanceOfTicker.getAjaxcontent()}, this.delay);
+}
diff --git a/h/old/rss2.js b/h/old/rss2.js
new file mode 100644 (file)
index 0000000..4d8d98d
--- /dev/null
@@ -0,0 +1,167 @@
+// list of valid feeds
+var feeds = new Array();
+feeds['news'] = './feed';
+feeds['planet'] = './planet/feed';
+feeds['miniplanet'] = './planet/mini';
+
+function showError(out, m) {
+  out.innerHTML='<b>Error</b> showing RSS feed!<br />'+m;
+}
+
+function fetchRss(feed, out, count, options) {
+  this.out=out;
+  this.count=count;
+  this.options = function(){};
+  this.options.showdescription=options.match(/(show|full)description/);
+  this.options.fulldescription=options.match(/fulldescription/);
+  this.options.showdate=options.match(/showdate/);
+
+  // the file to load
+  this.url = feeds[feed];
+
+  this.out.innerHTML='Initializing ticker...';
+
+  // read the xml document
+  this.ajax=createAjaxObj();
+  if (this.ajax) {
+
+    var me=this; // remember me
+    this.ajax.onreadystatechange=function(){response(me);};
+
+    //var parameters='id='+encodeURIComponent(feed)+'&count='+count;
+    //this.ajax.open('GET', "h/xmlfetch.php?"+parameters, true);
+
+    this.ajax.open('GET', this.url);
+
+    this.ajax.send(null);
+  }
+  else {
+    showError(this.out, 'Unable to create AJAX object');
+  }
+
+}
+
+function response(me) {
+  // are we ready yet ?
+  if (me.ajax.readyState!=4)
+    return;
+  if (me.ajax.status!=200) {
+    showError(me.out, 'Status: '+me.ajax.status+'<br>'+me.url);
+    return;
+  }
+
+  // get the xml document
+  me.xml=me.ajax.responseXML;
+  if (me.xml==null) {
+    showError(me.out, 'No XML response: '+me.ajax.responseText);
+    return;
+  }
+
+  showRss(me);
+}
+
+function showRss(me) {
+  // get the rss feed
+  var rss=me.xml.getElementsByTagName('rss')[0];
+  var channel=rss.getElementsByTagName('channel')[0];
+
+  // get the channel information
+  var chtitle=rss.getElementsByTagName('title')[0].firstChild.nodeValue;
+  var chlink=rss.getElementsByTagName('link')[0].firstChild.nodeValue;
+
+  var items=rss.getElementsByTagName('item');
+  if (items.length==0) {
+    this.showError(me.out, 'No items found.');
+    return;
+  }
+
+  // the output for the div
+  var c='<ul>';
+
+  // add all the items in the feed
+  for (var i=0; i<items.length&&i<me.count; i++){
+    var last=(i+1>=items.length||i+1>=me.count);
+    var item=items[i];
+    var n,date,time,title,link,desc;
+
+    if (me.options.showdate&&item.getElementsByTagName("pubDate")[0]!=undefined) {
+      n = item.getElementsByTagName("pubDate")[0].firstChild;
+      var here=new Date();
+      var offset=t.getTimezoneOffset();
+      t.setTime(Date.parse(n.nodeValue) + offset*(1000*60*60));
+      date=t.format('mediumDate');
+      time=t.format('shortTime');
+    }
+
+    n=item.getElementsByTagName("title")[0].firstChild;
+    title=n.nodeValue;
+    n=item.getElementsByTagName("link")[0].firstChild;
+    link=n.nodeValue;
+    n=item.getElementsByTagName("name")[0].firstChild;
+    name=n.nodeValue;
+
+    n = item.getElementsByTagName("content:encoded")[0];
+    if (n)n=n.firstChild;
+    else {
+      n = item.getElementsByTagName("description")[0];
+      if (n)n=n.firstChild;
+    }
+
+    if (me.options.showdescription&&n){
+      var t = n.nodeValue;
+      if (!me.options.fulldescription) {
+        /* remove tags */
+        var filter =
+          t.replace(/<\/? *(br|p|div|li|ul|ol|span|script)( +[^>]+)* *\/?>/g,
+                    '');
+        var short = filter.slice(0, 80);
+        if (short.length < filter.length)
+          short+='...';
+        t = short;
+      }
+      else {
+        // strip off an enclosing div and leading/trailing br's and all script tags
+        t = t.replace(/\n/g,'\uffff').
+          replace(/^[ \uffff]*<div[^>]*>(.+)<\/div *>[ \uffff]*$/,
+                  function(a, b){return b;}).
+          replace(/^[ \uffff]*<br *\/?>/, '').
+          replace(/<br *\/?>[ \uffff]*$/, '').
+          replace(/<script[^>]>([^<]|<[^\/]|<\/[^s]|<\/s[^c]|<\/sc[^r]|<\/scr[^i]|<\/scri[^p]|<\/scrip[^t]|<\/script[^ >])*<\/script[^>]*>/g, '').
+          replace(/\uffff/g,'\n');
+
+        // turn urls into links
+        // - don't let them end with .,:;)]}!
+        // - don't replace links preceded by a '="' (like href= or src=)
+        t = t.replace(/(=\" *)?([a-z]+:\/\/[A-Z0-9a-z%_#?&$@!\*\(\)\[\]{};:\'\"\\\|,.\/-]+[A-Z0-9a-z%_#?&$@\*\(\[{\'\"\\\|\/-])/g,
+                      function(all) {
+                        if (all.charAt(0) == '=')
+                        return all;
+                        else
+                        return '<a href="'+all+'">'+all+'</a>';
+                      });
+      } // fulldescription
+      desc=t;  
+    } // description enabled
+
+    c+='<li><div class="title"><a href="'+link+'">'+title+'</a></div>';
+    if (me.options.showdescription)
+      c+='<div class="description">'+desc+'</div>';
+    if (me.options.showdate){
+      c+='<div class="date">'+date+'</div>';
+      c+='<div class="time">'+time+'</div>';
+    }
+    if (!last && me.options.fulldescription)
+      c+='<hr />'; // separate things in full description mode
+    c+='</li>';
+  }
+  c+='</ul>';
+
+
+  me.out.innerHTML=c;
+}
+
+function loadRss(feed, to, count, options)
+{
+  var o=document.getElementById(to); // destination container
+  var fetch = new fetchRss(feed, o, count, options);
+}
diff --git a/h/old/rssfetch.php b/h/old/rssfetch.php
new file mode 100644 (file)
index 0000000..a5099f3
--- /dev/null
@@ -0,0 +1,130 @@
+<?
+
+$rsslist = array(
+    'openbox_news' => 'http://icculus.org/openbox/rss.xml',
+    'openbox_commits' => 'http://cia.vc/stats/project/Openbox/.rss',
+    'openbox_blogroll' => 'http://planetob.openmonkey.com/rss20.xml',
+    'openbox_twitterbig' => 'http://planetob.openmonkey.com/mini/feed2.php',
+    'openbox_twitter' => array(
+        // crunchbangers...
+        //'http://identi.ca/faemir/rss',
+        //'http://identi.ca/mossgarden/rss',
+        //'http://identi.ca/4yrs2l8/rss',
+        // just to test
+        //'http://roxeteer.jaiku.com/feed/rss',
+        'http://identi.ca/moparx/rss',
+        'http://twitter.com/statuses/user_timeline/14423164.atom',
+        'http://twitter.com/statuses/user_timeline/12341.atom',
+        'http://twitter.com/statuses/user_timeline/18455974.atom',
+        'http://identi.ca/michaelramm/rss',
+        'http://identi.ca/ogmaciel/rss',
+        'http://identi.ca/nikdoof/rss',
+        'http://identi.ca/corenominal/rss',
+        'http://identi.ca/willsimpson/rss',
+        'http://twitter.com/statuses/user_timeline/14292405.atom',
+        'http://twitter.com/statuses/user_timeline/17181890.atom',
+        'http://twitter.com/statuses/user_timeline/48417042.atom'
+        )
+    );
+
+function get_date($i)
+{
+    $r = $i[date_timestamp];
+    if (!$r)
+        $r = strtotime($i[dc][date]);
+    if (!$r)
+        $r = strtotime($i[published]);
+    return $r;
+}
+
+function get_datestr($i)
+{
+    $d = get_date($i);
+    return date('D, d M Y H:i:s +0000', $d);
+}    
+
+require('magpierss/rss_fetch.inc');
+
+// header
+header('Content-type: text/xml');
+
+$w = new XMLWriter();
+$w->openMemory();
+$w->startDocument('1.0');
+$w->setIndent(4);
+
+$w->startElement('rss');
+$w->writeAttribute('version', '2.0');
+
+
+$w->startElement('channel');
+
+$feed = $rsslist[$_GET['id']];
+if (is_array($feed)) {
+    $items = array();
+
+    // loop thru all urls & merge feeds into master array
+    foreach ($feed as $url) {
+        $rss = fetch_rss($url);
+        if (!$rss) continue;
+        $items = array_merge($items, $rss->items);
+    }
+
+    // sorts feed array based on published date (used with usort)
+    // -------------------------------------------------------------
+    function date_cmp($a, $b) 
+    {
+        $atime = get_date($a);
+        $btime = get_date($b);
+
+        if ($atime == $btime)
+            return 0;
+    
+        return ($atime > $btime) ? -1 : 1;
+    }
+
+
+    // sort all items in array by date
+    usort($items, 'date_cmp');
+
+    // channel info
+    $w->writeElement('title', 'Openbox Aggregated Feed');
+    $w->writeElement('link', 'http://icculus.org/openbox');
+    $w->writeElement('language', 'en');
+}
+else {
+    $rss = fetch_rss($rsslist[$_GET['id']]);
+    $items = $rss->items;
+    // channel info
+    $w->writeElement('title', htmlspecialchars_decode($rss->channel[title]));
+    $w->writeElement('link', htmlspecialchars_decode($rss->channel[link]));
+    if ($rss->channel[description])
+      $w->writeElement('description', htmlspecialchars_decode($rss->channel[description]));
+    if ($rss->channel[language])
+      $w->writeElement('language', $rss->channel[language]);
+    if ($rss->channel[tagline])
+      $w->writeElement('tagline', $rss->channel[tagline]);
+}
+
+$max = $_GET[count];
+$count = 0;
+foreach ($items as $item) {
+    if ($max && $count++ >= $max) break;
+    $w->startElement('item');
+    $w->writeElement('title', htmlspecialchars_decode($item[title]));
+    $w->writeElement('pubDate', get_datestr($item));
+    $w->writeElement('link', htmlspecialchars_decode($item[link]));
+    $w->writeElement('link', htmlspecialchars_decode($item[link]));
+    if ($item[description]) {
+      $w->writeElement('description', htmlspecialchars_decode($item[description]));
+    }
+    $w->endElement();
+}
+
+$w->endElement(); // channel
+$w->endElement(); // rss
+$w->endDocument();
+
+echo $w->outputMemory();
+
+?>
\ No newline at end of file
diff --git a/h/old/rssrelay.php b/h/old/rssrelay.php
new file mode 100644 (file)
index 0000000..e64f424
--- /dev/null
@@ -0,0 +1,74 @@
+<?
+$rsslist = array(
+  'openbox_news' => 'http://icculus.org/openbox/rss.xml',
+  'openbox_commits' => 'http://cia.vc/stats/project/Openbox/.rss',
+  'openbox_blogroll' => 'http://cg.scs.carleton.ca/~dana/ob/planet/feed',
+  'openbox_twitterbig' => 'http://planetob.openmonkey.com/mini/feed2.php',
+  'openbox_twitter' => 'http://cg.scs.carleton.ca/~dana/ob/planet/mini'
+  );
+
+function get_date($i)
+{
+    $r = $i[date_timestamp];
+    if (!$r)
+        $r = strtotime($i[dc][date]);
+    if (!$r)
+        $r = strtotime($i[published]);
+    return $r;
+}
+
+function get_datestr($i)
+{
+    $d = get_date($i);
+    return date('D, d M Y H:i:s +0000', $d);
+}    
+
+define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
+require('magpierss/rss_fetch.inc');
+$rss = fetch_rss($rsslist[$_GET['id']]);
+$items = $rss->items;
+
+$w = new XMLWriter();
+$w->openMemory();
+$w->startDocument('1.0');
+$w->setIndent(4);
+
+$w->startElement('rss');
+$w->writeAttribute('version', '2.0');
+
+
+$w->startElement('channel');
+
+// channel info
+$w->writeElement('title', htmlspecialchars_decode($rss->channel[title]));
+$w->writeElement('link', htmlspecialchars_decode($rss->channel[link]));
+if ($rss->channel[description])
+  $w->writeElement('description', htmlspecialchars_decode($rss->channel[description]));
+if ($rss->channel[language])
+  $w->writeElement('language', $rss->channel[language]);
+if ($rss->channel[tagline])
+  $w->writeElement('tagline', $rss->channel[tagline]);
+
+$max = $_GET[count];
+$count = 0;
+foreach ($items as $item) {
+  if ($max && $count++ >= $max) break;
+  $w->startElement('item');
+  $w->writeElement('title', htmlspecialchars_decode($item[title]));
+  $w->writeElement('pubDate', date('D, d M Y H:i:s +0000', $item[date_timestamp]));
+  $w->writeElement('link', htmlspecialchars_decode($item[link]));
+  $w->writeElement('link', htmlspecialchars_decode($item[link]));
+  if ($item[content_encoded])
+    $w->writeElement('description', htmlspecialchars_decode($item[content_encoded]));
+  else if ($item[description])
+    $w->writeElement('description', htmlspecialchars_decode($item[description]));
+  $w->endElement();
+}
+
+$w->endElement(); // channel
+$w->endElement(); // rss
+$w->endDocument();
+
+// output
+header('Content-type: text/xml');
+print $w->outputMemory();
diff --git a/h/simplepie.inc b/h/simplepie.inc
new file mode 100644 (file)
index 0000000..887d567
--- /dev/null
@@ -0,0 +1,10841 @@
+<?php
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ *     * Redistributions of source code must retain the above copyright notice, this list of
+ *       conditions and the following disclaimer.
+ *
+ *     * Redistributions in binary form must reproduce the above copyright notice, this list
+ *       of conditions and the following disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *
+ *     * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ *       to endorse or promote products derived from this software without specific prior
+ *       written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @version "Razzleberry"
+ * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @link http://simplepie.org/ SimplePie
+ * @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @todo phpDoc comments
+ */
+
+/**
+ * SimplePie Name
+ */
+define('SIMPLEPIE_NAME', 'SimplePie');
+
+/**
+ * SimplePie Version
+ */
+define('SIMPLEPIE_VERSION', '1.0.1');
+
+/**
+ * SimplePie Build
+ * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::parse_date() only every load of simplepie.inc)
+ */
+define('SIMPLEPIE_BUILD', 20070719221955);
+
+/**
+ * SimplePie Website URL
+ */
+define('SIMPLEPIE_URL', 'http://simplepie.org/');
+
+/**
+ * SimplePie Useragent
+ * @see SimplePie::set_useragent()
+ */
+define('SIMPLEPIE_USERAGENT', SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION . ' (Feed Parser; ' . SIMPLEPIE_URL . '; Allow like Gecko) Build/' . SIMPLEPIE_BUILD);
+
+/**
+ * SimplePie Linkback
+ */
+define('SIMPLEPIE_LINKBACK', '<a href="' . SIMPLEPIE_URL . '" title="' . SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . '">' . SIMPLEPIE_NAME . '</a>');
+
+/**
+ * No Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_NONE', 0);
+
+/**
+ * Feed Link Element Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1);
+
+/**
+ * Local Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2);
+
+/**
+ * Local Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4);
+
+/**
+ * Remote Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8);
+
+/**
+ * Remote Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16);
+
+/**
+ * All Feed Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_ALL', 31);
+
+/**
+ * No known feed type
+ */
+define('SIMPLEPIE_TYPE_NONE', 0);
+
+/**
+ * RSS 0.90
+ */
+define('SIMPLEPIE_TYPE_RSS_090', 1);
+
+/**
+ * RSS 0.91 (Netscape)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2);
+
+/**
+ * RSS 0.91 (Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4);
+
+/**
+ * RSS 0.91 (both Netscape and Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091', 6);
+
+/**
+ * RSS 0.92
+ */
+define('SIMPLEPIE_TYPE_RSS_092', 8);
+
+/**
+ * RSS 0.93
+ */
+define('SIMPLEPIE_TYPE_RSS_093', 16);
+
+/**
+ * RSS 0.94
+ */
+define('SIMPLEPIE_TYPE_RSS_094', 32);
+
+/**
+ * RSS 1.0
+ */
+define('SIMPLEPIE_TYPE_RSS_10', 64);
+
+/**
+ * RSS 2.0
+ */
+define('SIMPLEPIE_TYPE_RSS_20', 128);
+
+/**
+ * RDF-based RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_RDF', 65);
+
+/**
+ * Non-RDF-based RSS (truly intended as syndication format)
+ */
+define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190);
+
+/**
+ * All RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_ALL', 255);
+
+/**
+ * Atom 0.3
+ */
+define('SIMPLEPIE_TYPE_ATOM_03', 256);
+
+/**
+ * Atom 1.0
+ */
+define('SIMPLEPIE_TYPE_ATOM_10', 512);
+
+/**
+ * All Atom
+ */
+define('SIMPLEPIE_TYPE_ATOM_ALL', 768);
+
+/**
+ * All feed types
+ */
+define('SIMPLEPIE_TYPE_ALL', 1023);
+
+/**
+ * No construct
+ */
+define('SIMPLEPIE_CONSTRUCT_NONE', 0);
+
+/**
+ * Text construct
+ */
+define('SIMPLEPIE_CONSTRUCT_TEXT', 1);
+
+/**
+ * HTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_HTML', 2);
+
+/**
+ * XHTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_XHTML', 4);
+
+/**
+ * base64-encoded construct
+ */
+define('SIMPLEPIE_CONSTRUCT_BASE64', 8);
+
+/**
+ * IRI construct
+ */
+define('SIMPLEPIE_CONSTRUCT_IRI', 16);
+
+/**
+ * A construct that might be HTML
+ */
+define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32);
+
+/**
+ * All constructs
+ */
+define('SIMPLEPIE_CONSTRUCT_ALL', 63);
+
+/**
+ * PCRE for HTML attributes
+ */
+define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[a-z0-9\-._:]*)))?)*)\s*');
+
+/**
+ * PCRE for XML attributes
+ */
+define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*');
+
+/**
+ * XML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace');
+
+/**
+ * Atom 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom');
+
+/**
+ * Atom 0.3 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#');
+
+/**
+ * RDF Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
+
+/**
+ * RSS 0.90 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/');
+
+/**
+ * RSS 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/');
+
+/**
+ * RSS 1.0 Content Module Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/');
+
+/**
+ * DC 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/');
+
+/**
+ * DC 1.1 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/');
+
+/**
+ * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#');
+
+/**
+ * GeoRSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss');
+
+/**
+ * Media RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/');
+
+/**
+ * iTunes RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
+
+/**
+ * XHTML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml');
+
+/**
+ * IANA Link Relations Registry
+ */
+define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/');
+
+/**
+ * Whether we're running on PHP5
+ */
+define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>='));
+
+/**
+ * SimplePie
+ *
+ * @package SimplePie
+ * @version "Razzleberry"
+ * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @todo Option for type of fetching (cache, not modified header, fetch, etc.)
+ */
+class SimplePie
+{
+       /**
+        * @var array Raw data
+        * @access private
+        */
+       var $data = array();
+
+       /**
+        * @var mixed Error string
+        * @access private
+        */
+       var $error;
+
+       /**
+        * @var object Instance of SimplePie_Sanitize (or other class)
+        * @see SimplePie::set_sanitize_class()
+        * @access private
+        */
+       var $sanitize;
+
+       /**
+        * @var string SimplePie Useragent
+        * @see SimplePie::set_useragent()
+        * @access private
+        */
+       var $useragent = SIMPLEPIE_USERAGENT;
+
+       /**
+        * @var string Feed URL
+        * @see SimplePie::set_feed_url()
+        * @access private
+        */
+       var $feed_url;
+
+       /**
+        * @var object Instance of SimplePie_File to use as a feed
+        * @see SimplePie::set_file()
+        * @access private
+        */
+       var $file;
+
+       /**
+        * @var string Raw feed data
+        * @see SimplePie::set_raw_data()
+        * @access private
+        */
+       var $raw_data;
+
+       /**
+        * @var int Timeout for fetching remote files
+        * @see SimplePie::set_timeout()
+        * @access private
+        */
+       var $timeout = 10;
+
+       /**
+        * @var bool Forces fsockopen() to be used for remote files instead
+        * of cURL, even if a new enough version is installed
+        * @see SimplePie::force_fsockopen()
+        * @access private
+        */
+       var $force_fsockopen = false;
+
+       /**
+        * @var bool Enable/Disable XML dump
+        * @see SimplePie::enable_xml_dump()
+        * @access private
+        */
+       var $xml_dump = false;
+
+       /**
+        * @var bool Enable/Disable Caching
+        * @see SimplePie::enable_cache()
+        * @access private
+        */
+       var $cache = true;
+
+       /**
+        * @var int Cache duration (in seconds)
+        * @see SimplePie::set_cache_duration()
+        * @access private
+        */
+       var $cache_duration = 3600;
+
+       /**
+        * @var int Auto-discovery cache duration (in seconds)
+        * @see SimplePie::set_autodiscovery_cache_duration()
+        * @access private
+        */
+       var $autodiscovery_cache_duration = 604800; // 7 Days.
+
+       /**
+        * @var string Cache location (relative to executing script)
+        * @see SimplePie::set_cache_location()
+        * @access private
+        */
+       var $cache_location = './cache';
+
+       /**
+        * @var string Function that creates the cache filename
+        * @see SimplePie::set_cache_name_function()
+        * @access private
+        */
+       var $cache_name_function = 'md5';
+
+       /**
+        * @var bool Reorder feed by date descending
+        * @see SimplePie::enable_order_by_date()
+        * @access private
+        */
+       var $order_by_date = true;
+
+       /**
+        * @var mixed Force input encoding to be set to the follow value
+        * (false, or anything type-cast to false, disables this feature)
+        * @see SimplePie::set_input_encoding()
+        * @access private
+        */
+       var $input_encoding = false;
+
+       /**
+        * @var int Feed Autodiscovery Level
+        * @see SimplePie::set_autodiscovery_level()
+        * @access private
+        */
+       var $autodiscovery = SIMPLEPIE_LOCATOR_ALL;
+
+       /**
+        * @var string Class used for caching feeds
+        * @see SimplePie::set_cache_class()
+        * @access private
+        */
+       var $cache_class = 'SimplePie_Cache';
+
+       /**
+        * @var string Class used for locating feeds
+        * @see SimplePie::set_locator_class()
+        * @access private
+        */
+       var $locator_class = 'SimplePie_Locator';
+
+       /**
+        * @var string Class used for parsing feeds
+        * @see SimplePie::set_parser_class()
+        * @access private
+        */
+       var $parser_class = 'SimplePie_Parser';
+
+       /**
+        * @var string Class used for fetching feeds
+        * @see SimplePie::set_file_class()
+        * @access private
+        */
+       var $file_class = 'SimplePie_File';
+
+       /**
+        * @var string Class used for items
+        * @see SimplePie::set_item_class()
+        * @access private
+        */
+       var $item_class = 'SimplePie_Item';
+
+       /**
+        * @var string Class used for authors
+        * @see SimplePie::set_author_class()
+        * @access private
+        */
+       var $author_class = 'SimplePie_Author';
+
+       /**
+        * @var string Class used for categories
+        * @see SimplePie::set_category_class()
+        * @access private
+        */
+       var $category_class = 'SimplePie_Category';
+
+       /**
+        * @var string Class used for enclosures
+        * @see SimplePie::set_enclosures_class()
+        * @access private
+        */
+       var $enclosure_class = 'SimplePie_Enclosure';
+
+       /**
+        * @var string Class used for Media RSS <media:text> captions
+        * @see SimplePie::set_caption_class()
+        * @access private
+        */
+       var $caption_class = 'SimplePie_Caption';
+
+       /**
+        * @var string Class used for Media RSS <media:copyright>
+        * @see SimplePie::set_copyright_class()
+        * @access private
+        */
+       var $copyright_class = 'SimplePie_Copyright';
+
+       /**
+        * @var string Class used for Media RSS <media:credit>
+        * @see SimplePie::set_credit_class()
+        * @access private
+        */
+       var $credit_class = 'SimplePie_Credit';
+
+       /**
+        * @var string Class used for Media RSS <media:rating>
+        * @see SimplePie::set_rating_class()
+        * @access private
+        */
+       var $rating_class = 'SimplePie_Rating';
+
+       /**
+        * @var string Class used for Media RSS <media:restriction>
+        * @see SimplePie::set_restriction_class()
+        * @access private
+        */
+       var $restriction_class = 'SimplePie_Restriction';
+
+       /**
+        * @var mixed Set javascript query string parameter (false, or
+        * anything type-cast to false, disables this feature)
+        * @see SimplePie::set_javascript()
+        * @access private
+        */
+       var $javascript = 'js';
+
+       /**
+        * @var int Maximum number of feeds to check with autodiscovery
+        * @see SimplePie::set_max_checked_feeds()
+        * @access private
+        */
+       var $max_checked_feeds = 10;
+
+       /**
+        * @var string Web-accessible path to the handler_favicon.php file.
+        * @see SimplePie::set_favicon_handler()
+        * @access private
+        */
+       var $favicon_handler = '';
+
+       /**
+        * @var string Web-accessible path to the handler_image.php file.
+        * @see SimplePie::set_image_handler()
+        * @access private
+        */
+       var $image_handler = '';
+
+       /**
+        * @var array Stores the URLs when multiple feeds are being initialized.
+        * @see SimplePie::set_feed_url()
+        * @access private
+        */
+       var $multifeed_url = array();
+
+       /**
+        * @var array Stores SimplePie objects when multiple feeds initialized.
+        * @access private
+        */
+       var $multifeed_objects = array();
+
+       /**
+        * @var array Stores the get_object_vars() array for use with multifeeds.
+        * @see SimplePie::set_feed_url()
+        * @access private
+        */
+       var $config_settings = null;
+
+       /**
+        * @var array Stores the default attributes to be stripped by strip_attributes().
+        * @see SimplePie::strip_attributes()
+        * @access private
+        */
+       var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+
+       /**
+        * @var array Stores the default tags to be stripped by strip_htmltags().
+        * @see SimplePie::strip_htmltags()
+        * @access private
+        */
+       var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+
+       /**
+        * The SimplePie class contains feed level data and options
+        *
+        * There are two ways that you can create a new SimplePie object. The first
+        * is by passing a feed URL as a parameter to the SimplePie constructor
+        * (as well as optionally setting the cache location and cache expiry). This
+        * will initialise the whole feed with all of the default settings, and you
+        * can begin accessing methods and properties immediately.
+        *
+        * The second way is to create the SimplePie object with no parameters
+        * at all. This will enable you to set configuration options. After setting
+        * them, you must initialise the feed using $feed->init(). At that point the
+        * object's methods and properties will be available to you. This format is
+        * what is used throughout this documentation.
+        *
+        * @access public
+        * @since 1.0 Preview Release
+        * @param string $feed_url This is the URL you want to parse.
+        * @param string $cache_location This is where you want the cache to be stored.
+        * @param int $cache_duration This is the number of seconds that you want to store the cache file for.
+        */
+       function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null)
+       {
+               // Other objects, instances created here so we can set options on them
+               $this->sanitize =& new SimplePie_Sanitize;
+
+               // Set options if they're passed to the constructor
+               if ($cache_location !== null)
+               {
+                       $this->set_cache_location($cache_location);
+               }
+
+               if ($cache_duration !== null)
+               {
+                       $this->set_cache_duration($cache_duration);
+               }
+
+               // Only init the script if we're passed a feed URL
+               if ($feed_url !== null)
+               {
+                       $this->set_feed_url($feed_url);
+                       $this->init();
+               }
+       }
+
+       /**
+        * Used for converting object to a string
+        */
+       function __toString()
+       {
+               return md5(serialize($this->data));
+       }
+
+       /**
+        * This is the URL of the feed you want to parse.
+        *
+        * This allows you to enter the URL of the feed you want to parse, or the
+        * website you want to try to use auto-discovery on. This takes priority
+        * over any set raw data.
+        *
+        * You can set multiple feeds to mash together by passing an array instead
+        * of a string for the $url. Remember that with each additional feed comes
+        * additional processing and resources.
+        *
+        * @access public
+        * @since 1.0 Preview Release
+        * @param mixed $url This is the URL (or array of URLs) that you want to parse.
+        * @see SimplePie::set_raw_data()
+        */
+       function set_feed_url($url)
+       {
+               if (is_array($url))
+               {
+                       $this->multifeed_url = array();
+                       foreach ($url as $value)
+                       {
+                               $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1);
+                       }
+               }
+               else
+               {
+                       $this->feed_url = SimplePie_Misc::fix_protocol($url, 1);
+               }
+       }
+
+       /**
+        * Provides an instance of SimplePie_File to use as a feed
+        *
+        * @access public
+        * @param object &$file Instance of SimplePie_File (or subclass)
+        * @return bool True on success, false on failure
+        */
+       function set_file(&$file)
+       {
+               if (SimplePie_Misc::is_a($file, 'SimplePie_File'))
+               {
+                       $this->feed_url = $file->url;
+                       $this->file =& $file;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to use a string of RSS/Atom data instead of a remote feed.
+        *
+        * If you have a feed available as a string in PHP, you can tell SimplePie
+        * to parse that data string instead of a remote feed. Any set feed URL
+        * takes precedence.
+        *
+        * @access public
+        * @since 1.0 Beta 3
+        * @param string $data RSS or Atom data as a string.
+        * @see SimplePie::set_feed_url()
+        */
+       function set_raw_data($data)
+       {
+               $this->raw_data = trim($data);
+       }
+
+       /**
+        * Allows you to override the default timeout for fetching remote feeds.
+        *
+        * This allows you to change the maximum time the feed's server to respond
+        * and send the feed back.
+        *
+        * @access public
+        * @since 1.0 Beta 3
+        * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
+        */
+       function set_timeout($timeout = 10)
+       {
+               $this->timeout = (int) $timeout;
+       }
+
+       /**
+        * Forces SimplePie to use fsockopen() instead of the preferred cURL
+        * functions.
+        *
+        * @access public
+        * @since 1.0 Beta 3
+        * @param bool $enable Force fsockopen() to be used
+        */
+       function force_fsockopen($enable = false)
+       {
+               $this->force_fsockopen = (bool) $enable;
+       }
+
+       /**
+        * Outputs the raw XML content of the feed, after it has gone through
+        * SimplePie's filters.
+        *
+        * Used only for debugging, this function will output the XML content as
+        * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up
+        * before trying to parse it. Many parts of the feed are re-written in
+        * memory, and in the end, you have a parsable feed. XML dump shows you the
+        * actual XML that SimplePie tries to parse, which may or may not be very
+        * different from the original feed.
+        *
+        * @access public
+        * @since 1.0 Preview Release
+        * @param bool $enable Enable XML dump
+        */
+       function enable_xml_dump($enable = false)
+       {
+               $this->xml_dump = (bool) $enable;
+       }
+
+       /**
+        * Enables/disables caching in SimplePie.
+        *
+        * This option allows you to disable caching all-together in SimplePie.
+        * However, disabling the cache can lead to longer load times.
+        *
+        * @access public
+        * @since 1.0 Preview Release
+        * @param bool $enable Enable caching
+        */
+       function enable_cache($enable = true)
+       {
+               $this->cache = (bool) $enable;
+       }
+
+       /**
+        * Set the length of time (in seconds) that the contents of a feed
+        * will be cached.
+        *
+        * @access public
+        * @param int $seconds The feed content cache duration.
+        */
+       function set_cache_duration($seconds = 3600)
+       {
+               $this->cache_duration = (int) $seconds;
+       }
+
+       /**
+        * Set the length of time (in seconds) that the autodiscovered feed
+        * URL will be cached.
+        *
+        * @access public
+        * @param int $seconds The autodiscovered feed URL cache duration.
+        */
+       function set_autodiscovery_cache_duration($seconds = 604800)
+       {
+               $this->autodiscovery_cache_duration = (int) $seconds;
+       }
+
+       /**
+        * Set the file system location where the cached files should be stored.
+        *
+        * @access public
+        * @param string $location The file system location.
+        */
+       function set_cache_location($location = './cache')
+       {
+               $this->cache_location = (string) $location;
+       }
+
+       /**
+        * Determines whether feed items should be sorted into reverse chronological order.
+        *
+        * @access public
+        * @param bool $enable Sort as reverse chronological order.
+        */
+       function enable_order_by_date($enable = true)
+       {
+               $this->order_by_date = (bool) $enable;
+       }
+
+       /**
+        * Allows you to override the character encoding reported by the feed.
+        *
+        * @access public
+        * @param string $encoding Character encoding.
+        */
+       function set_input_encoding($encoding = false)
+       {
+               if ($encoding)
+               {
+                       $this->input_encoding = (string) $encoding;
+               }
+               else
+               {
+                       $this->input_encoding = false;
+               }
+       }
+
+       /**
+        * Set how much feed autodiscovery to do
+        *
+        * @access public
+        * @see SIMPLEPIE_LOCATOR_NONE
+        * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY
+        * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION
+        * @see SIMPLEPIE_LOCATOR_LOCAL_BODY
+        * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION
+        * @see SIMPLEPIE_LOCATOR_REMOTE_BODY
+        * @see SIMPLEPIE_LOCATOR_ALL
+        * @param int $level Feed Autodiscovery Level (level can be a
+        * combination of the above constants, see bitwise OR operator)
+        */
+       function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL)
+       {
+               $this->autodiscovery = (int) $level;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for caching.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_cache_class($class = 'SimplePie_Cache')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache'))
+               {
+                       $this->cache_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for auto-discovery.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_locator_class($class = 'SimplePie_Locator')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator'))
+               {
+                       $this->locator_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for XML parsing.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_parser_class($class = 'SimplePie_Parser')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser'))
+               {
+                       $this->parser_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for remote file fetching.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_file_class($class = 'SimplePie_File')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File'))
+               {
+                       $this->file_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for data sanitization.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_sanitize_class($class = 'SimplePie_Sanitize')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize'))
+               {
+                       $this->sanitize =& new $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for handling feed items.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_item_class($class = 'SimplePie_Item')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item'))
+               {
+                       $this->item_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for handling author data.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_author_class($class = 'SimplePie_Author')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author'))
+               {
+                       $this->author_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for handling category data.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_category_class($class = 'SimplePie_Category')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category'))
+               {
+                       $this->category_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for feed enclosures.
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_enclosure_class($class = 'SimplePie_Enclosure')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure'))
+               {
+                       $this->enclosure_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for <media:text> captions
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_caption_class($class = 'SimplePie_Caption')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption'))
+               {
+                       $this->caption_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for <media:copyright>
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_copyright_class($class = 'SimplePie_Copyright')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright'))
+               {
+                       $this->copyright_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for <media:credit>
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_credit_class($class = 'SimplePie_Credit')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit'))
+               {
+                       $this->credit_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for <media:rating>
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_rating_class($class = 'SimplePie_Rating')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating'))
+               {
+                       $this->rating_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to change which class SimplePie uses for <media:restriction>
+        * Useful when you are overloading or extending SimplePie's default classes.
+        *
+        * @access public
+        * @param string $class Name of custom class.
+        * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+        */
+       function set_restriction_class($class = 'SimplePie_Restriction')
+       {
+               if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction'))
+               {
+                       $this->restriction_class = $class;
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Allows you to override the default user agent string.
+        *
+        * @access public
+        * @param string $ua New user agent string.
+        */
+       function set_useragent($ua = SIMPLEPIE_USERAGENT)
+       {
+               $this->useragent = (string) $ua;
+       }
+
+       /**
+        * Set callback function to create cache filename with
+        *
+        * @access public
+        * @param mixed $function Callback function
+        */
+       function set_cache_name_function($function = 'md5')
+       {
+               if (is_callable($function))
+               {
+                       $this->cache_name_function = $function;
+               }
+       }
+
+       /**
+        * Set javascript query string parameter
+        *
+        * @access public
+        * @param mixed $get Javascript query string parameter
+        */
+       function set_javascript($get = 'js')
+       {
+               if ($get)
+               {
+                       $this->javascript = (string) $get;
+               }
+               else
+               {
+                       $this->javascript = false;
+               }
+       }
+
+       /**
+        * Set options to make SP as fast as possible.  Forgoes a
+        * substantial amount of data sanitization in favor of speed.
+        *
+        * @access public
+        * @param bool $set Whether to set them or not
+        */
+       function set_stupidly_fast($set = false)
+       {
+               if ($set)
+               {
+                       $this->enable_order_by_date(false);
+                       $this->remove_div(false);
+                       $this->strip_comments(false);
+                       $this->strip_htmltags(false);
+                       $this->strip_attributes(false);
+                       $this->set_image_handler(false);
+               }
+       }
+
+       /**
+        * Set maximum number of feeds to check with autodiscovery
+        *
+        * @access public
+        * @param int $max Maximum number of feeds to check
+        */
+       function set_max_checked_feeds($max = 10)
+       {
+               $this->max_checked_feeds = (int) $max;
+       }
+
+       function remove_div($enable = true)
+       {
+               $this->sanitize->remove_div($enable);
+       }
+
+       function strip_htmltags($tags = '', $encode = null)
+       {
+               if ($tags === '')
+               {
+                       $tags = $this->strip_htmltags;
+               }
+               $this->sanitize->strip_htmltags($tags);
+               if ($encode !== null)
+               {
+                       $this->sanitize->encode_instead_of_strip($tags);
+               }
+       }
+
+       function encode_instead_of_strip($enable = true)
+       {
+               $this->sanitize->encode_instead_of_strip($enable);
+       }
+
+       function strip_attributes($attribs = '')
+       {
+               if ($attribs === '')
+               {
+                       $attribs = $this->strip_attributes;
+               }
+               $this->sanitize->strip_attributes($attribs);
+       }
+
+       function set_output_encoding($encoding = 'UTF-8')
+       {
+               $this->sanitize->set_output_encoding($encoding);
+       }
+
+       function strip_comments($strip = false)
+       {
+               $this->sanitize->strip_comments($strip);
+       }
+
+       /**
+        * Set element/attribute key/value pairs of HTML attributes
+        * containing URLs that need to be resolved relative to the feed
+        *
+        * @access public
+        * @since 1.0
+        * @param array $element_attribute Element/attribute key/value pairs
+        */
+       function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+       {
+               $this->sanitize->set_url_replacements($element_attribute);
+       }
+
+       /**
+        * Set the handler to enable the display of cached favicons.
+        *
+        * @access public
+        * @param str $page Web-accessible path to the handler_favicon.php file.
+        * @param str $qs The query string that the value should be passed to.
+        */
+       function set_favicon_handler($page = false, $qs = 'i')
+       {
+               if ($page != false)
+               {
+                       $this->favicon_handler = $page . '?' . $qs . '=';
+               }
+               else
+               {
+                       $this->favicon_handler = '';
+               }
+       }
+
+       /**
+        * Set the handler to enable the display of cached images.
+        *
+        * @access public
+        * @param str $page Web-accessible path to the handler_image.php file.
+        * @param str $qs The query string that the value should be passed to.
+        */
+       function set_image_handler($page = false, $qs = 'i')
+       {
+               if ($page != false)
+               {
+                       $this->sanitize->set_image_handler($page . '?' . $qs . '=');
+               }
+               else
+               {
+                       $this->image_handler = '';
+               }
+       }
+
+       function init()
+       {
+               if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.1.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre'))
+               {
+                       return false;
+               }
+               if (isset($_GET[$this->javascript]))
+               {
+                       if (function_exists('ob_gzhandler'))
+                       {
+                               ob_start('ob_gzhandler');
+                       }
+                       header('Content-type: text/javascript; charset: UTF-8');
+                       header('Cache-Control: must-revalidate');
+                       header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+                       ?>
+function embed_odeo(link) {
+       document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
+}
+
+function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
+       if (placeholder != '') {
+               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+       }
+       else {
+               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+       }
+}
+
+function embed_flash(bgcolor, width, height, link, loop, type) {
+       document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
+}
+
+function embed_flv(width, height, link, placeholder, loop, player) {
+       document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
+}
+
+function embed_wmedia(width, height, link) {
+       document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
+}
+                       <?php
+                       exit;
+               }
+
+               // Pass whatever was set with config options over to the sanitizer.
+               $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class);
+               $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen);
+
+               if ($this->feed_url !== null || $this->raw_data !== null)
+               {
+                       $this->data = array();
+                       $this->multifeed_objects = array();
+                       $cache = false;
+
+                       if ($this->feed_url !== null)
+                       {
+                               $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url);
+                               // Decide whether to enable caching
+                               if ($this->cache && $parsed_feed_url['scheme'] !== '')
+                               {
+                                       $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc');
+                               }
+                               // If it's enabled and we don't want an XML dump, use the cache
+                               if ($cache && !$this->xml_dump)
+                               {
+                                       // Load the Cache
+                                       $this->data = $cache->load();
+                                       if (!empty($this->data))
+                                       {
+                                               // If the cache is for an outdated build of SimplePie
+                                               if (!isset($this->data['build']) || $this->data['build'] != SIMPLEPIE_BUILD)
+                                               {
+                                                       $cache->unlink();
+                                                       $this->data = array();
+                                               }
+                                               // If we've hit a collision just rerun it with caching disabled
+                                               elseif (isset($this->data['url']) && $this->data['url'] != $this->feed_url)
+                                               {
+                                                       $cache = false;
+                                                       $this->data = array();
+                                               }
+                                               // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
+                                               elseif (isset($this->data['feed_url']))
+                                               {
+                                                       // If the autodiscovery cache is still valid use it.
+                                                       if ($cache->mtime() + $this->autodiscovery_cache_duration > time())
+                                                       {
+                                                               // Do not need to do feed autodiscovery yet.
+                                                               if ($this->data['feed_url'] == $this->data['url'])
+                                                               {
+                                                                       $cache->unlink();
+                                                                       $this->data = array();
+                                                               }
+                                                               else
+                                                               {
+                                                                       $this->set_feed_url($this->data['feed_url']);
+                                                                       return $this->init();
+                                                               }
+                                                       }
+                                               }
+                                               // Check if the cache has been updated
+                                               elseif ($cache->mtime() + $this->cache_duration < time())
+                                               {
+                                                       // If we have last-modified and/or etag set
+                                                       if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag']))
+                                                       {
+                                                               $headers = array();
+                                                               if (isset($this->data['headers']['last-modified']))
+                                                               {
+                                                                       $headers['if-modified-since'] = $this->data['headers']['last-modified'];
+                                                               }
+                                                               if (isset($this->data['headers']['etag']))
+                                                               {
+                                                                       $headers['if-none-match'] = $this->data['headers']['etag'];
+                                                               }
+                                                               $file =& new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen);
+                                                               if ($file->success)
+                                                               {
+                                                                       if ($file->status_code == 304)
+                                                                       {
+                                                                               $cache->touch();
+                                                                               return true;
+                                                                       }
+                                                                       else
+                                                                       {
+                                                                               $headers = $file->headers;
+                                                                       }
+                                                               }
+                                                               else
+                                                               {
+                                                                       unset($file);
+                                                               }
+                                                       }
+                                               }
+                                               // If the cache is still valid, just return true
+                                               else
+                                               {
+                                                       return true;
+                                               }
+                                       }
+                                       // If the cache is empty, delete it
+                                       else
+                                       {
+                                               $cache->unlink();
+                                               $this->data = array();
+                                       }
+                               }
+                               // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
+                               if (!isset($file))
+                               {
+                                       if (SimplePie_Misc::is_a($this->file, 'SimplePie_File') && $this->file->url == $this->feed_url)
+                                       {
+                                               $file =& $this->file;
+                                       }
+                                       else
+                                       {
+                                               $file =& new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen);
+                                       }
+                               }
+                               // If the file connection has an error, set SimplePie::error to that and quit
+                               if (!$file->success)
+                               {
+                                       $this->error = $file->error;
+                                       if (!empty($this->data))
+                                       {
+                                               return true;
+                                       }
+                                       else
+                                       {
+                                               return false;
+                                       }
+                               }
+
+                               // Check if the supplied URL is a feed, if it isn't, look for it.
+                               $locate =& new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds);
+                               if (!$locate->is_feed($file))
+                               {
+                                       // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
+                                       unset($file);
+                                       if ($file = $locate->find($this->autodiscovery))
+                                       {
+                                               if ($cache)
+                                               {
+                                                       if (!$cache->save(array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD)))
+                                                       {
+                                                               trigger_error("$cache->name is not writeable", E_USER_WARNING);
+                                                       }
+                                                       $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc');
+                                               }
+                                               $this->feed_url = $file->url;
+                                       }
+                                       else
+                                       {
+                                               $this->error = "A feed could not be found at $this->feed_url";
+                                               SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+                                               return false;
+                                       }
+                               }
+                               $locate = null;
+
+                               $headers = $file->headers;
+                               $data = trim($file->body);
+                               unset($file);
+                       }
+                       else
+                       {
+                               $data = $this->raw_data;
+                       }
+
+                       // First check to see if input has been overridden.
+                       if ($this->input_encoding !== false)
+                       {
+                               $encoding = $this->input_encoding;
+                       }
+                       // Second try HTTP headers
+                       elseif (isset($headers['content-type']) && preg_match('/;[\x09\x20]*charset=([^;]*)/i', $headers['content-type'], $charset))
+                       {
+                               $encoding = $charset[1];
+                       }
+                       // Then prolog, if at the very start of the document
+                       elseif (preg_match("/^<\?xml[\x20\x9\xD\xA]+version([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"1.0\"|'1.0'|\"1.1\"|'1.1')[\x20\x9\xD\xA]+encoding([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"[A-Za-z][A-Za-z0-9._\-]*\"|'[A-Za-z][A-Za-z0-9._\-]*')([\x20\x9\xD\xA]+standalone([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"(yes|no)\"|'(yes|no)'))?([\x20\x9\xD\xA]+)?\?>/", $data, $prolog))
+                       {
+                               $encoding = substr($prolog[6], 1, -1);
+                       }
+                       // UTF-32 Big Endian BOM
+                       elseif (strpos($data, "\x0\x0\xFE\xFF") === 0)
+                       {
+                               $encoding = 'UTF-32be';
+                       }
+                       // UTF-32 Little Endian BOM
+                       elseif (strpos($data, "\xFF\xFE\x0\x0") === 0)
+                       {
+                               $encoding = 'UTF-32';
+                       }
+                       // UTF-16 Big Endian BOM
+                       elseif (strpos($data, "\xFE\xFF") === 0)
+                       {
+                               $encoding = 'UTF-16be';
+                       }
+                       // UTF-16 Little Endian BOM
+                       elseif (strpos($data, "\xFF\xFE") === 0)
+                       {
+                               $encoding = 'UTF-16le';
+                       }
+                       // UTF-8 BOM
+                       elseif (strpos($data, "\xEF\xBB\xBF") === 0)
+                       {
+                               $encoding = 'UTF-8';
+                       }
+                       // Fallback to the default (US-ASCII for text/xml, ISO-8859-1 for text/* MIME types, UTF-8 otherwise)
+                       elseif (isset($headers['content-type']) && strtolower(SimplePie_Misc::parse_mime($headers['content-type'])) == 'text/xml')
+                       {
+                               $encoding = 'US-ASCII';
+                       }
+                       elseif (isset($headers['content-type']) && SimplePie_Misc::stripos(SimplePie_Misc::parse_mime($headers['content-type']), 'text/') === 0)
+                       {
+                               $encoding = 'ISO-8859-1';
+                       }
+                       else
+                       {
+                               $encoding = 'UTF-8';
+                       }
+
+                       // Change the encoding to UTF-8 (as we always use UTF-8 internally)
+                       if ($encoding != 'UTF-8')
+                       {
+                               $data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8');
+                       }
+
+                       // Strip illegal characters
+                       $data = SimplePie_Misc::utf8_bad_replace($data);
+
+                       $parser =& new $this->parser_class();
+                       $parser->pre_process($data, 'UTF-8');
+                       // If we want the XML, just output that and quit
+                       if ($this->xml_dump)
+                       {
+                               header('Content-type: text/xml; charset=UTF-8');
+                               echo $data;
+                               exit;
+                       }
+                       // If it's parsed fine
+                       elseif ($parser->parse($data))
+                       {
+                               unset($data);
+                               $this->data = $parser->get_data();
+                               if (isset($this->data['child']))
+                               {
+                                       if (isset($headers))
+                                       {
+                                               $this->data['headers'] = $headers;
+                                       }
+                                       $this->data['build'] = SIMPLEPIE_BUILD;
+
+                                       // Cache the file if caching is enabled
+                                       if ($cache && !$cache->save($this->data))
+                                       {
+                                               trigger_error("$cache->name is not writeable", E_USER_WARNING);
+                                       }
+                                       return true;
+                               }
+                               else
+                               {
+                                       $this->error = "A feed could not be found at $this->feed_url";
+                                       SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+                                       return false;
+                               }
+                       }
+                       // If we have an error, just set SimplePie::error to it and quit
+                       else
+                       {
+                               $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
+                               SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+                               return false;
+                       }
+               }
+               elseif (!empty($this->multifeed_url))
+               {
+                       $i = 0;
+                       $success = 0;
+                       $this->multifeed_objects = array();
+                       foreach ($this->multifeed_url as $url)
+                       {
+                               if (SIMPLEPIE_PHP5)
+                               {
+                                       // This keyword needs to defy coding standards for PHP4 compatibility
+                                       $this->multifeed_objects[$i] = clone($this);
+                               }
+                               else
+                               {
+                                       $this->multifeed_objects[$i] = $this;
+                               }
+                               $this->multifeed_objects[$i]->set_feed_url($url);
+                               $success |= $this->multifeed_objects[$i]->init();
+                               $i++;
+                       }
+                       return (bool) $success;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       /**
+        * Return the error message for the occured error
+        *
+        * @access public
+        * @return string Error message
+        */
+       function error()
+       {
+               return $this->error;
+       }
+
+       function get_encoding()
+       {
+               return $this->sanitize->output_encoding;
+       }
+
+       function handle_content_type($mime = 'text/html')
+       {
+               if (!headers_sent())
+               {
+                       $header = "Content-type: $mime;";
+                       if ($this->get_encoding())
+                       {
+                               $header .= ' charset=' . $this->get_encoding();
+                       }
+                       else
+                       {
+                               $header .= ' charset=UTF-8';
+                       }
+                       header($header);
+               }
+       }
+
+       function get_type()
+       {
+               if (!isset($this->data['type']))
+               {
+                       $this->data['type'] = SIMPLEPIE_TYPE_ALL;
+                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed']))
+                       {
+                               $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10;
+                       }
+                       elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed']))
+                       {
+                               $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03;
+                       }
+                       elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF']))
+                       {
+                               if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel'])
+                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image'])
+                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])
+                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput']))
+                               {
+                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10;
+                               }
+                               if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel'])
+                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image'])
+                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])
+                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput']))
+                               {
+                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090;
+                               }
+                       }
+                       elseif (isset($this->data['child']['']['rss']))
+                       {
+                               $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL;
+                               if (isset($this->data['child']['']['rss'][0]['attribs']['']['version']))
+                               {
+                                       switch (trim($this->data['child']['']['rss'][0]['attribs']['']['version']))
+                                       {
+                                               case '0.91':
+                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091;
+                                                       if (isset($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+                                                       {
+                                                               switch (trim($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+                                                               {
+                                                                       case '0':
+                                                                               $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE;
+                                                                               break;
+
+                                                                       case '24':
+                                                                               $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND;
+                                                                               break;
+                                                               }
+                                                       }
+                                                       break;
+
+                                               case '0.92':
+                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092;
+                                                       break;
+
+                                               case '0.93':
+                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093;
+                                                       break;
+
+                                               case '0.94':
+                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094;
+                                                       break;
+
+                                               case '2.0':
+                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20;
+                                                       break;
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               $this->data['type'] = SIMPLEPIE_TYPE_NONE;
+                       }
+               }
+               return $this->data['type'];
+       }
+
+       /**
+        * Returns the URL for the favicon of the feed's website.
+        *
+        * @access public
+        * @since 1.0
+        */
+       function get_favicon()
+       {
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url))
+               {
+                       $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url);
+
+                       if ($this->cache && $this->favicon_handler)
+                       {
+                               $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $favicon), 'spi');
+
+                               if ($cache->load())
+                               {
+                                       return $this->sanitize($this->favicon_handler . rawurlencode($favicon), SIMPLEPIE_CONSTRUCT_IRI);
+                               }
+                               else
+                               {
+                                       $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+
+                                       if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0)
+                                       {
+                                               if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+                                               {
+                                                       return $this->sanitize($this->favicon_handler . rawurlencode($favicon), SIMPLEPIE_CONSTRUCT_IRI);
+                                               }
+                                               else
+                                               {
+                                                       trigger_error("$cache->name is not writeable", E_USER_WARNING);
+                                                       return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+                                               }
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * @todo If we have a perm redirect we should return the new URL
+        * @todo When we make the above change, let's support <itunes:new-feed-url> as well
+        * @todo Also, |atom:link|@rel=self
+        */
+       function subscribe_url()
+       {
+               if ($this->feed_url !== null)
+               {
+                       return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function subscribe_feed()
+       {
+               if ($this->feed_url !== null)
+               {
+                       return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function subscribe_outlook()
+       {
+               if ($this->feed_url !== null)
+               {
+                       return 'outlook' . $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function subscribe_podcast()
+       {
+               if ($this->feed_url !== null)
+               {
+                       return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function subscribe_itunes()
+       {
+               if ($this->feed_url !== null)
+               {
+                       return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       /**
+        * Creates the subscribe_* methods' return data
+        *
+        * @access private
+        * @param string $feed_url String to prefix to the feed URL
+        * @param string $site_url String to prefix to the site URL (and
+        * suffix to the feed URL)
+        * @return mixed URL if feed exists, false otherwise
+        */
+       function subscribe_service($feed_url, $site_url = null)
+       {
+               if ($this->subscribe_url())
+               {
+                       $return = $this->sanitize($feed_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->subscribe_url());
+                       if ($site_url !== null && $this->get_link() !== null)
+                       {
+                               $return .= $this->sanitize($site_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_link());
+                       }
+                       return $return;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function subscribe_aol()
+       {
+               return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url=');
+       }
+
+       function subscribe_bloglines()
+       {
+               return urldecode($this->subscribe_service('http://www.bloglines.com/sub/'));
+       }
+
+       function subscribe_eskobo()
+       {
+               return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage=');
+       }
+
+       function subscribe_feedfeeds()
+       {
+               return $this->subscribe_service('http://www.feedfeeds.com/add?feed=');
+       }
+
+       function subscribe_feedster()
+       {
+               return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl=');
+       }
+
+       function subscribe_google()
+       {
+               return $this->subscribe_service('http://fusion.google.com/add?feedurl=');
+       }
+
+       function subscribe_gritwire()
+       {
+               return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=');
+       }
+
+       function subscribe_msn()
+       {
+               return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru=');
+       }
+
+       function subscribe_netvibes()
+       {
+               return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url=');
+       }
+
+       function subscribe_newsburst()
+       {
+               return $this->subscribe_service('http://www.newsburst.com/Source/?add=');
+       }
+
+       function subscribe_newsgator()
+       {
+               return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url=');
+       }
+
+       function subscribe_odeo()
+       {
+               return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed=');
+       }
+
+       function subscribe_podnova()
+       {
+               return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url=');
+       }
+
+       function subscribe_rojo()
+       {
+               return $this->subscribe_service('http://www.rojo.com/add-subscription?resource=');
+       }
+
+       function subscribe_yahoo()
+       {
+               return $this->subscribe_service('http://add.my.yahoo.com/rss?url=');
+       }
+
+       function get_feed_tags($namespace, $tag)
+       {
+               $type = $this->get_type();
+               if ($type & SIMPLEPIE_TYPE_ATOM_10)
+               {
+                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]))
+                       {
+                               return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag];
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_ATOM_03)
+               {
+                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]))
+                       {
+                               return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag];
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_RSS_RDF)
+               {
+                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]))
+                       {
+                               return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag];
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+               {
+                       if (isset($this->data['child']['']['rss'][0]['child'][$namespace][$tag]))
+                       {
+                               return $this->data['child']['']['rss'][0]['child'][$namespace][$tag];
+                       }
+               }
+               return null;
+       }
+
+       function get_channel_tags($namespace, $tag)
+       {
+               $type = $this->get_type();
+               if ($type & SIMPLEPIE_TYPE_ATOM_ALL)
+               {
+                       if ($return = $this->get_feed_tags($namespace, $tag))
+                       {
+                               return $return;
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_RSS_10)
+               {
+                       if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel'))
+                       {
+                               if (isset($channel[0]['child'][$namespace][$tag]))
+                               {
+                                       return $channel[0]['child'][$namespace][$tag];
+                               }
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_RSS_090)
+               {
+                       if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel'))
+                       {
+                               if (isset($channel[0]['child'][$namespace][$tag]))
+                               {
+                                       return $channel[0]['child'][$namespace][$tag];
+                               }
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+               {
+                       if ($channel = $this->get_feed_tags('', 'channel'))
+                       {
+                               if (isset($channel[0]['child'][$namespace][$tag]))
+                               {
+                                       return $channel[0]['child'][$namespace][$tag];
+                               }
+                       }
+               }
+               return null;
+       }
+
+       function get_image_tags($namespace, $tag)
+       {
+               $type = $this->get_type();
+               if ($type & SIMPLEPIE_TYPE_RSS_10)
+               {
+                       if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image'))
+                       {
+                               if (isset($image[0]['child'][$namespace][$tag]))
+                               {
+                                       return $image[0]['child'][$namespace][$tag];
+                               }
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_RSS_090)
+               {
+                       if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image'))
+                       {
+                               if (isset($image[0]['child'][$namespace][$tag]))
+                               {
+                                       return $image[0]['child'][$namespace][$tag];
+                               }
+                       }
+               }
+               if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+               {
+                       if ($image = $this->get_channel_tags('', 'image'))
+                       {
+                               if (isset($image[0]['child'][$namespace][$tag]))
+                               {
+                                       return $image[0]['child'][$namespace][$tag];
+                               }
+                       }
+               }
+               return null;
+       }
+
+       function get_base($element = array())
+       {
+               if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base']))
+               {
+                       return $element['xml_base'];
+               }
+               elseif ($this->get_link() !== null)
+               {
+                       return $this->get_link();
+               }
+               elseif (isset($this->data['headers']['content-location']))
+               {
+                       return SimplePie_Misc::absolutize_url($this->data['headers']['content-location'], $this->subscribe_url());
+               }
+               else
+               {
+                       return $this->subscribe_url();
+               }
+       }
+
+       function sanitize($data, $type, $base = '')
+       {
+               return $this->sanitize->sanitize($data, $type, $base);
+       }
+
+       function get_title()
+       {
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags('', 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_link($key = 0, $rel = 'alternate')
+       {
+               $links = $this->get_links($rel);
+               if (isset($links[$key]))
+               {
+                       return $links[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       /**
+        * Added for parity between the parent-level and the item/entry-level.
+        */
+       function get_permalink()
+       {
+               return $this->get_link(0);
+       }
+
+       function get_links($rel = 'alternate')
+       {
+               if (!isset($this->data['links']))
+               {
+                       $this->data['links'] = array();
+                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
+                       {
+                               foreach ($links as $link)
+                               {
+                                       if (isset($link['attribs']['']['href']))
+                                       {
+                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+                                       }
+                               }
+                       }
+                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
+                       {
+                               foreach ($links as $link)
+                               {
+                                       if (isset($link['attribs']['']['href']))
+                                       {
+                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+                                       }
+                               }
+                       }
+                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+                       {
+                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+                       }
+                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+                       {
+                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+                       }
+                       if ($links = $this->get_channel_tags('', 'link'))
+                       {
+                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+                       }
+
+                       $keys = array_keys($this->data['links']);
+                       foreach ($keys as $key)
+                       {
+                               if (SimplePie_Misc::is_isegment_nz_nc($key))
+                               {
+                                       if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+                                       {
+                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+                                               $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+                                       }
+                                       else
+                                       {
+                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+                                       }
+                               }
+                               elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+                               {
+                                       $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+                               }
+                               $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+                       }
+               }
+
+               if (isset($this->data['links'][$rel]))
+               {
+                       return $this->data['links'][$rel];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_description()
+       {
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags('', 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_copyright()
+       {
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags('', 'copyright'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_language()
+       {
+               if ($return = $this->get_channel_tags('', 'language'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang']))
+               {
+                       return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang']))
+               {
+                       return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang']))
+               {
+                       return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif (isset($this->data['headers']['content-language']))
+               {
+                       return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_latitude()
+       {
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+               {
+                       return (float) $return[0]['data'];
+               }
+               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+               {
+                       return (float) $match[1];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_longitude()
+       {
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+               {
+                       return (float) $return[0]['data'];
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+               {
+                       return (float) $return[0]['data'];
+               }
+               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+               {
+                       return (float) $match[2];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_image_title()
+       {
+               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_image_tags('', 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_image_url()
+       {
+               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
+               {
+                       return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_image_tags('', 'url'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_image_link()
+       {
+               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_image_tags('', 'link'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_image_width()
+       {
+               if ($return = $this->get_image_tags('', 'width'))
+               {
+                       return round($return[0]['data']);
+               }
+               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+               {
+                       return 88.0;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_image_height()
+       {
+               if ($return = $this->get_image_tags('', 'height'))
+               {
+                       return round($return[0]['data']);
+               }
+               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+               {
+                       return 31.0;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_item_quantity($max = 0)
+       {
+               $qty = count($this->get_items());
+               if ($max == 0)
+               {
+                       return $qty;
+               }
+               else
+               {
+                       return ($qty > $max) ? $max : $qty;
+               }
+       }
+
+       function get_item($key = 0)
+       {
+               $items = $this->get_items();
+               if (isset($items[$key]))
+               {
+                       return $items[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_items($start = 0, $end = 0)
+       {
+               if (!empty($this->multifeed_objects))
+               {
+                       return SimplePie::merge_items($this->multifeed_objects, $start, $end);
+               }
+               elseif (!isset($this->data['items']))
+               {
+                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry'))
+                       {
+                               $keys = array_keys($items);
+                               foreach ($keys as $key)
+                               {
+                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                               }
+                       }
+                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry'))
+                       {
+                               $keys = array_keys($items);
+                               foreach ($keys as $key)
+                               {
+                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                               }
+                       }
+                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item'))
+                       {
+                               $keys = array_keys($items);
+                               foreach ($keys as $key)
+                               {
+                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                               }
+                       }
+                       if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item'))
+                       {
+                               $keys = array_keys($items);
+                               foreach ($keys as $key)
+                               {
+                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                               }
+                       }
+                       if ($items = $this->get_channel_tags('', 'item'))
+                       {
+                               $keys = array_keys($items);
+                               foreach ($keys as $key)
+                               {
+                                       $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+                               }
+                       }
+               }
+
+               if (!empty($this->data['items']))
+               {
+                       // If we want to order it by date, check if all items have a date, and then sort it
+                       if ($this->order_by_date)
+                       {
+                               if (!isset($this->data['ordered_items']))
+                               {
+                                       $do_sort = true;
+                                       foreach ($this->data['items'] as $item)
+                                       {
+                                               if (!$item->get_date('U'))
+                                               {
+                                                       $do_sort = false;
+                                                       break;
+                                               }
+                                       }
+                                       $item = null;
+                                       $this->data['ordered_items'] = $this->data['items'];
+                                       if ($do_sort)
+                                       {
+                                               usort($this->data['ordered_items'], array(&$this, 'sort_items'));
+                                       }
+                               }
+                               $items = $this->data['ordered_items'];
+                       }
+                       else
+                       {
+                               $items = $this->data['items'];
+                       }
+
+                       // Slice the data as desired
+                       if ($end == 0)
+                       {
+                               return array_slice($items, $start);
+                       }
+                       else
+                       {
+                               return array_slice($items, $start, $end);
+                       }
+               }
+               else
+               {
+                       return array();
+               }
+       }
+
+       function sort_items($a, $b)
+       {
+               return $a->get_date('U') <= $b->get_date('U');
+       }
+
+       function merge_items($urls, $start = 0, $end = 0)
+       {
+               if (is_array($urls) && sizeof($urls) > 0)
+               {
+                       $items = array();
+                       foreach ($urls as $arg)
+                       {
+                               if (SimplePie_Misc::is_a($arg, 'SimplePie'))
+                               {
+                                       $items = array_merge($items, $arg->get_items());
+                               }
+                               else
+                               {
+                                       trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
+                               }
+                       }
+
+                       $do_sort = true;
+                       foreach ($items as $item)
+                       {
+                               if (!$item->get_date('U'))
+                               {
+                                       $do_sort = false;
+                                       break;
+                               }
+                       }
+                       $item = null;
+                       if ($do_sort)
+                       {
+                               usort($items, array('SimplePie', 'sort_items'));
+                       }
+
+                       if ($end == 0)
+                       {
+                               return array_slice($items, $start);
+                       }
+                       else
+                       {
+                               return array_slice($items, $start, $end);
+                       }
+               }
+               else
+               {
+                       trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
+                       return array();
+               }
+       }
+}
+
+class SimplePie_Item
+{
+       var $feed;
+       var $data = array();
+
+       function SimplePie_Item($feed, $data)
+       {
+               $this->feed = $feed;
+               $this->data = $data;
+       }
+
+       function __toString()
+       {
+               return md5(serialize($this->data));
+       }
+
+       function get_item_tags($namespace, $tag)
+       {
+               if (isset($this->data['child'][$namespace][$tag]))
+               {
+                       return $this->data['child'][$namespace][$tag];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_base($element = array())
+       {
+               return $this->feed->get_base($element);
+       }
+
+       function sanitize($data, $type, $base = '')
+       {
+               return $this->feed->sanitize($data, $type, $base);
+       }
+
+       function get_feed()
+       {
+               return $this->feed;
+       }
+
+       function get_id($hash = false)
+       {
+               if ($hash)
+               {
+                       return $this->__toString();
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_item_tags('', 'guid'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif (($return = $this->get_permalink()) !== null)
+               {
+                       return $return;
+               }
+               elseif (($return = $this->get_title()) !== null)
+               {
+                       return $return;
+               }
+               else
+               {
+                       return $this->__toString();
+               }
+       }
+
+       function get_title()
+       {
+               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags('', 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_description($description_only = false)
+       {
+               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags('', 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif (!$description_only)
+               {
+                       return $this->get_content(true);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_content($content_only = false)
+       {
+               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
+               {
+                       return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
+               {
+                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+               }
+               elseif (!$content_only)
+               {
+                       return $this->get_description(true);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_category($key = 0)
+       {
+               $categories = $this->get_categories();
+               if (isset($categories[$key]))
+               {
+                       return $categories[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_categories()
+       {
+               $categories = array();
+
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
+               {
+                       $term = null;
+                       $scheme = null;
+                       $label = null;
+                       if (isset($category['attribs']['']['term']))
+                       {
+                               $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       if (isset($category['attribs']['']['scheme']))
+                       {
+                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       if (isset($category['attribs']['']['label']))
+                       {
+                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+               }
+               foreach ((array) $this->get_item_tags('', 'category') as $category)
+               {
+                       $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+               }
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
+               {
+                       $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+               }
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
+               {
+                       $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+               }
+
+               if (!empty($categories))
+               {
+                       return SimplePie_Misc::array_unique($categories);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_author($key = 0)
+       {
+               $authors = $this->get_authors();
+               if (isset($authors[$key]))
+               {
+                       return $authors[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       /**
+        * @todo Atom inheritance (item author, source author, feed author)
+        */
+       function get_authors()
+       {
+               $authors = array();
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
+               {
+                       $name = null;
+                       $uri = null;
+                       $email = null;
+                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+                       {
+                               $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+                       {
+                               $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+                       }
+                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+                       {
+                               $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       if ($name !== null || $email !== null || $uri !== null)
+                       {
+                               $authors[] =& new $this->feed->author_class($name, $uri, $email);
+                       }
+               }
+               if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
+               {
+                       $name = null;
+                       $url = null;
+                       $email = null;
+                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+                       {
+                               $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+                       {
+                               $uri = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+                       }
+                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+                       {
+                               $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       }
+                       if ($name !== null || $email !== null || $uri !== null)
+                       {
+                               $authors[] =& new $this->feed->author_class($name, $url, $email);
+                       }
+               }
+               if ($author = $this->get_item_tags('', 'author'))
+               {
+                       $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+               }
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
+               {
+                       $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+               }
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
+               {
+                       $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+               }
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
+               {
+                       $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+               }
+
+               if (!empty($authors))
+               {
+                       return SimplePie_Misc::array_unique($authors);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_date($date_format = 'j F Y, g:i a')
+       {
+               if (!isset($this->data['date']))
+               {
+                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+                       elseif ($return = $this->get_item_tags('', 'pubDate'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
+                       {
+                               $this->data['date']['raw'] = $return[0]['data'];
+                       }
+
+                       if (!empty($this->data['date']['raw']))
+                       {
+                               $this->data['date']['parsed'] = SimplePie_Misc::parse_date($this->data['date']['raw']);
+                       }
+                       else
+                       {
+                               $this->data['date'] = null;
+                       }
+               }
+               if ($this->data['date'])
+               {
+                       $date_format = (string) $date_format;
+                       switch ($date_format)
+                       {
+                               case '':
+                                       return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
+
+                               case 'U':
+                                       return $this->data['date']['parsed'];
+
+                               default:
+                                       return date($date_format, $this->data['date']['parsed']);
+                       }
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_local_date($date_format = '%c')
+       {
+               if (!$date_format)
+               {
+                       return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
+               }
+               elseif (($date = $this->get_date('U')) !== null)
+               {
+                       return strftime($date_format, $date);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_permalink()
+       {
+               $link = $this->get_link();
+               $enclosure = $this->get_enclosure(0);
+               if ($link !== null)
+               {
+                       return $link;
+               }
+               elseif ($enclosure !== null)
+               {
+                       return $enclosure->get_link();
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_link($key = 0, $rel = 'alternate')
+       {
+               $links = $this->get_links($rel);
+               if ($links[$key] !== null)
+               {
+                       return $links[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_links($rel = 'alternate')
+       {
+               if (!isset($this->data['links']))
+               {
+                       $this->data['links'] = array();
+                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+                       {
+                               if (isset($link['attribs']['']['href']))
+                               {
+                                       $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+                                       $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+                               }
+                       }
+                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+                       {
+                               if (isset($link['attribs']['']['href']))
+                               {
+                                       $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+                                       $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+                               }
+                       }
+                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+                       {
+                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+                       }
+                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+                       {
+                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+                       }
+                       if ($links = $this->get_item_tags('', 'link'))
+                       {
+                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+                       }
+                       if ($links = $this->get_item_tags('', 'guid'))
+                       {
+                               if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) == 'true')
+                               {
+                                       $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+                               }
+                       }
+
+                       $keys = array_keys($this->data['links']);
+                       foreach ($keys as $key)
+                       {
+                               if (SimplePie_Misc::is_isegment_nz_nc($key))
+                               {
+                                       if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+                                       {
+                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+                                               $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+                                       }
+                                       else
+                                       {
+                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+                                       }
+                               }
+                               elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+                               {
+                                       $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+                               }
+                               $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+                       }
+               }
+               if (isset($this->data['links'][$rel]))
+               {
+                       return $this->data['links'][$rel];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       /**
+        * @todo Add ability to prefer one type of content over another (in a media group).
+        */
+       function get_enclosure($key = 0, $prefer = null)
+       {
+               $enclosures = $this->get_enclosures();
+               if (isset($enclosures[$key]))
+               {
+                       return $enclosures[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       /**
+        * Grabs all available enclosures (podcasts, etc.)
+        *
+        * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
+        *
+        * At this point, we're pretty much assuming that all enclosures for an item are the same content.  Anything else is too complicated to properly support.
+        *
+        * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
+        * @todo Add support for itunes: tags.  These should be relatively simple compared to media:.
+        * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
+        */
+       function get_enclosures()
+       {
+               if (!isset($this->data['enclosures']))
+               {
+                       $this->data['enclosures'] = array();
+
+                       // Elements
+                       $captions_parent = null;
+                       $categories_parent = null;
+                       $copyrights_parent = null;
+                       $credits_parent = null;
+                       $description_parent = null;
+                       $duration_parent = null;
+                       $hashes_parent = null;
+                       $keywords_parent = null;
+                       $player_parent = null;
+                       $ratings_parent = null;
+                       $restrictions_parent = null;
+                       $thumbnails_parent = null;
+                       $title_parent = null;
+
+                       // Let's do the channel and item-level ones first, and just re-use them if we need to.
+                       $parent = $this->get_feed();
+
+                       // CAPTIONS
+                       if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+                       {
+                               foreach ($captions as $caption)
+                               {
+                                       $caption_type = null;
+                                       $caption_lang = null;
+                                       $caption_startTime = null;
+                                       $caption_endTime = null;
+                                       $caption_text = null;
+                                       if (isset($caption['attribs']['']['type']))
+                                       {
+                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['attribs']['']['lang']))
+                                       {
+                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['attribs']['']['start']))
+                                       {
+                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['attribs']['']['end']))
+                                       {
+                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['data']))
+                                       {
+                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+                               }
+                       }
+                       elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+                       {
+                               foreach ($captions as $caption)
+                               {
+                                       $caption_type = null;
+                                       $caption_lang = null;
+                                       $caption_startTime = null;
+                                       $caption_endTime = null;
+                                       $caption_text = null;
+                                       if (isset($caption['attribs']['']['type']))
+                                       {
+                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['attribs']['']['lang']))
+                                       {
+                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['attribs']['']['start']))
+                                       {
+                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['attribs']['']['end']))
+                                       {
+                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($caption['data']))
+                                       {
+                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+                               }
+                       }
+                       if (is_array($captions_parent))
+                       {
+                               $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent));
+                       }
+
+                       // CATEGORIES
+                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+                       {
+                               $term = null;
+                               $scheme = null;
+                               $label = null;
+                               if (isset($category['data']))
+                               {
+                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               if (isset($category['attribs']['']['scheme']))
+                               {
+                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               else
+                               {
+                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
+                               }
+                               if (isset($category['attribs']['']['label']))
+                               {
+                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+                       }
+                       foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+                       {
+                               $term = null;
+                               $scheme = null;
+                               $label = null;
+                               if (isset($category['data']))
+                               {
+                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               if (isset($category['attribs']['']['scheme']))
+                               {
+                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               else
+                               {
+                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
+                               }
+                               if (isset($category['attribs']['']['label']))
+                               {
+                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+                       }
+                       foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
+                       {
+                               $term = null;
+                               $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
+                               $label = null;
+                               if (isset($category['attribs']['']['text']))
+                               {
+                                       $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+
+                               if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
+                               {
+                                       foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
+                                       {
+                                               if (isset($subcategory['attribs']['']['text']))
+                                               {
+                                                       $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+                                       }
+                               }
+                       }
+                       if (is_array($categories_parent))
+                       {
+                               $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent));
+                       }
+
+                       // COPYRIGHT
+                       if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+                       {
+                               $copyright_url = null;
+                               $copyright_label = null;
+                               if (isset($copyright[0]['attribs']['']['url']))
+                               {
+                                       $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               if (isset($copyright[0]['data']))
+                               {
+                                       $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+                       }
+                       elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+                       {
+                               $copyright_url = null;
+                               $copyright_label = null;
+                               if (isset($copyright[0]['attribs']['']['url']))
+                               {
+                                       $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               if (isset($copyright[0]['data']))
+                               {
+                                       $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                               $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+                       }
+
+                       // CREDITS
+                       if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+                       {
+                               foreach ($credits as $credit)
+                               {
+                                       $credit_role = null;
+                                       $credit_scheme = null;
+                                       $credit_name = null;
+                                       if (isset($credit['attribs']['']['role']))
+                                       {
+                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($credit['attribs']['']['scheme']))
+                                       {
+                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       else
+                                       {
+                                               $credit_scheme = 'urn:ebu';
+                                       }
+                                       if (isset($credit['data']))
+                                       {
+                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+                               }
+                       }
+                       elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+                       {
+                               foreach ($credits as $credit)
+                               {
+                                       $credit_role = null;
+                                       $credit_scheme = null;
+                                       $credit_name = null;
+                                       if (isset($credit['attribs']['']['role']))
+                                       {
+                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($credit['attribs']['']['scheme']))
+                                       {
+                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       else
+                                       {
+                                               $credit_scheme = 'urn:ebu';
+                                       }
+                                       if (isset($credit['data']))
+                                       {
+                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+                               }
+                       }
+                       if (is_array($credits_parent))
+                       {
+                               $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent));
+                       }
+
+                       // DESCRIPTION
+                       if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+                       {
+                               if (isset($description_parent[0]['data']))
+                               {
+                                       $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                       }
+                       elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+                       {
+                               if (isset($description_parent[0]['data']))
+                               {
+                                       $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                       }
+
+                       // DURATION
+                       if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
+                       {
+                               $seconds = null;
+                               $minutes = null;
+                               $hours = null;
+                               if (isset($duration_parent[0]['data']))
+                               {
+                                       $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                       if (sizeof($temp) > 0)
+                                       {
+                                               (int) $seconds = array_pop($temp);
+                                       }
+                                       if (sizeof($temp) > 0)
+                                       {
+                                               (int) $minutes = array_pop($temp);
+                                               $seconds += $minutes * 60;
+                                       }
+                                       if (sizeof($temp) > 0)
+                                       {
+                                               (int) $hours = array_pop($temp);
+                                               $seconds += $hours * 3600;
+                                       }
+                                       unset($temp);
+                                       $duration_parent = $seconds;
+                               }
+                       }
+
+                       // HASHES
+                       if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+                       {
+                               foreach ($hashes_iterator as $hash)
+                               {
+                                       $value = null;
+                                       $algo = null;
+                                       if (isset($hash['data']))
+                                       {
+                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($hash['attribs']['']['algo']))
+                                       {
+                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       else
+                                       {
+                                               $algo = 'md5';
+                                       }
+                                       $hashes_parent[] = $algo.':'.$value;
+                               }
+                       }
+                       elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+                       {
+                               foreach ($hashes_iterator as $hash)
+                               {
+                                       $value = null;
+                                       $algo = null;
+                                       if (isset($hash['data']))
+                                       {
+                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($hash['attribs']['']['algo']))
+                                       {
+                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       else
+                                       {
+                                               $algo = 'md5';
+                                       }
+                                       $hashes_parent[] = $algo.':'.$value;
+                               }
+                       }
+                       if (is_array($hashes_parent))
+                       {
+                               $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent));
+                       }
+
+                       // KEYWORDS
+                       if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+                       {
+                               if (isset($keywords[0]['data']))
+                               {
+                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                       foreach ($temp as $word)
+                                       {
+                                               $keywords_parent[] = trim($word);
+                                       }
+                               }
+                               unset($temp);
+                       }
+                       elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+                       {
+                               if (isset($keywords[0]['data']))
+                               {
+                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                       foreach ($temp as $word)
+                                       {
+                                               $keywords_parent[] = trim($word);
+                                       }
+                               }
+                               unset($temp);
+                       }
+                       elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+                       {
+                               if (isset($keywords[0]['data']))
+                               {
+                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                       foreach ($temp as $word)
+                                       {
+                                               $keywords_parent[] = trim($word);
+                                       }
+                               }
+                               unset($temp);
+                       }
+                       elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+                       {
+                               if (isset($keywords[0]['data']))
+                               {
+                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                       foreach ($temp as $word)
+                                       {
+                                               $keywords_parent[] = trim($word);
+                                       }
+                               }
+                               unset($temp);
+                       }
+                       if (is_array($keywords_parent))
+                       {
+                               $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent));
+                       }
+
+                       // PLAYER
+                       if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+                       {
+                               if (isset($player_parent[0]['attribs']['']['url']))
+                               {
+                                       $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                               }
+                       }
+                       elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+                       {
+                               if (isset($player_parent[0]['attribs']['']['url']))
+                               {
+                                       $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                               }
+                       }
+
+                       // RATINGS
+                       if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+                       {
+                               foreach ($ratings as $rating)
+                               {
+                                       $rating_scheme = null;
+                                       $rating_value = null;
+                                       if (isset($rating['attribs']['']['scheme']))
+                                       {
+                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       else
+                                       {
+                                               $rating_scheme = 'urn:simple';
+                                       }
+                                       if (isset($rating['data']))
+                                       {
+                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+                               }
+                       }
+                       elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+                       {
+                               foreach ($ratings as $rating)
+                               {
+                                       $rating_scheme = 'urn:itunes';
+                                       $rating_value = null;
+                                       if (isset($rating['data']))
+                                       {
+                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+                               }
+                       }
+                       elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+                       {
+                               foreach ($ratings as $rating)
+                               {
+                                       $rating_scheme = null;
+                                       $rating_value = null;
+                                       if (isset($rating['attribs']['']['scheme']))
+                                       {
+                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       else
+                                       {
+                                               $rating_scheme = 'urn:simple';
+                                       }
+                                       if (isset($rating['data']))
+                                       {
+                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+                               }
+                       }
+                       elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+                       {
+                               foreach ($ratings as $rating)
+                               {
+                                       $rating_scheme = 'urn:itunes';
+                                       $rating_value = null;
+                                       if (isset($rating['data']))
+                                       {
+                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+                               }
+                       }
+                       if (is_array($ratings_parent))
+                       {
+                               $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent));
+                       }
+
+                       // RESTRICTIONS
+                       if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+                       {
+                               foreach ($restrictions as $restriction)
+                               {
+                                       $restriction_relationship = null;
+                                       $restriction_type = null;
+                                       $restriction_value = null;
+                                       if (isset($restriction['attribs']['']['relationship']))
+                                       {
+                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($restriction['attribs']['']['type']))
+                                       {
+                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($restriction['data']))
+                                       {
+                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+                               }
+                       }
+                       elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+                       {
+                               foreach ($restrictions as $restriction)
+                               {
+                                       $restriction_relationship = 'allow';
+                                       $restriction_type = null;
+                                       $restriction_value = 'itunes';
+                                       if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
+                                       {
+                                               $restriction_relationship = 'deny';
+                                       }
+                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+                               }
+                       }
+                       elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+                       {
+                               foreach ($restrictions as $restriction)
+                               {
+                                       $restriction_relationship = null;
+                                       $restriction_type = null;
+                                       $restriction_value = null;
+                                       if (isset($restriction['attribs']['']['relationship']))
+                                       {
+                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($restriction['attribs']['']['type']))
+                                       {
+                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($restriction['data']))
+                                       {
+                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+                               }
+                       }
+                       elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+                       {
+                               foreach ($restrictions as $restriction)
+                               {
+                                       $restriction_relationship = 'allow';
+                                       $restriction_type = null;
+                                       $restriction_value = 'itunes';
+                                       if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
+                                       {
+                                               $restriction_relationship = 'deny';
+                                       }
+                                       $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+                               }
+                       }
+                       if (is_array($restrictions_parent))
+                       {
+                               $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent));
+                       }
+
+                       // THUMBNAILS
+                       if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+                       {
+                               foreach ($thumbnails as $thumbnail)
+                               {
+                                       if (isset($thumbnail['attribs']['']['url']))
+                                       {
+                                               $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                       }
+                               }
+                       }
+                       elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+                       {
+                               foreach ($thumbnails as $thumbnail)
+                               {
+                                       if (isset($thumbnail['attribs']['']['url']))
+                                       {
+                                               $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                       }
+                               }
+                       }
+
+                       // TITLES
+                       if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+                       {
+                               if (isset($title_parent[0]['data']))
+                               {
+                                       $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                       }
+                       elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+                       {
+                               if (isset($title_parent[0]['data']))
+                               {
+                                       $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                               }
+                       }
+
+                       // Clear the memory
+                       unset($parent);
+
+                       // If we have media:group tags, loop through them.
+                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
+                       {
+                               // If we have media:content tags, loop through them.
+                               foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+                               {
+                                       if (isset($content['attribs']['']['url']))
+                                       {
+                                               // Attributes
+                                               $bitrate = null;
+                                               $channels = null;
+                                               $duration = null;
+                                               $expression = null;
+                                               $framerate = null;
+                                               $height = null;
+                                               $javascript = null;
+                                               $lang = null;
+                                               $length = null;
+                                               $medium = null;
+                                               $samplingrate = null;
+                                               $type = null;
+                                               $url = null;
+                                               $width = null;
+
+                                               // Elements
+                                               $captions = null;
+                                               $categories = null;
+                                               $copyrights = null;
+                                               $credits = null;
+                                               $description = null;
+                                               $hashes = null;
+                                               $keywords = null;
+                                               $player = null;
+                                               $ratings = null;
+                                               $restrictions = null;
+                                               $thumbnails = null;
+                                               $title = null;
+
+                                               // Start checking the attributes of media:content
+                                               if (isset($content['attribs']['']['bitrate']))
+                                               {
+                                                       $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['channels']))
+                                               {
+                                                       $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['duration']))
+                                               {
+                                                       $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               else
+                                               {
+                                                       $duration = $duration_parent;
+                                               }
+                                               if (isset($content['attribs']['']['expression']))
+                                               {
+                                                       $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['framerate']))
+                                               {
+                                                       $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['height']))
+                                               {
+                                                       $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['lang']))
+                                               {
+                                                       $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['fileSize']))
+                                               {
+                                                       $length = ceil($content['attribs']['']['fileSize']);
+                                               }
+                                               if (isset($content['attribs']['']['medium']))
+                                               {
+                                                       $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['samplingrate']))
+                                               {
+                                                       $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['type']))
+                                               {
+                                                       $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['width']))
+                                               {
+                                                       $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+
+                                               // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+                                               // CAPTIONS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+                                                       {
+                                                               $caption_type = null;
+                                                               $caption_lang = null;
+                                                               $caption_startTime = null;
+                                                               $caption_endTime = null;
+                                                               $caption_text = null;
+                                                               if (isset($caption['attribs']['']['type']))
+                                                               {
+                                                                       $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['lang']))
+                                                               {
+                                                                       $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['start']))
+                                                               {
+                                                                       $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['end']))
+                                                               {
+                                                                       $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['data']))
+                                                               {
+                                                                       $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+                                                       }
+                                                       if (is_array($captions))
+                                                       {
+                                                               $captions = array_values(SimplePie_Misc::array_unique($captions));
+                                                       }
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+                                               {
+                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+                                                       {
+                                                               $caption_type = null;
+                                                               $caption_lang = null;
+                                                               $caption_startTime = null;
+                                                               $caption_endTime = null;
+                                                               $caption_text = null;
+                                                               if (isset($caption['attribs']['']['type']))
+                                                               {
+                                                                       $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['lang']))
+                                                               {
+                                                                       $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['start']))
+                                                               {
+                                                                       $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['end']))
+                                                               {
+                                                                       $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['data']))
+                                                               {
+                                                                       $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+                                                       }
+                                                       if (is_array($captions))
+                                                       {
+                                                               $captions = array_values(SimplePie_Misc::array_unique($captions));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $captions = $captions_parent;
+                                               }
+
+                                               // CATEGORIES
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+                                               {
+                                                       foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+                                                       {
+                                                               $term = null;
+                                                               $scheme = null;
+                                                               $label = null;
+                                                               if (isset($category['data']))
+                                                               {
+                                                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($category['attribs']['']['scheme']))
+                                                               {
+                                                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
+                                                               }
+                                                               if (isset($category['attribs']['']['label']))
+                                                               {
+                                                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+                                                       }
+                                               }
+                                               if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+                                               {
+                                                       foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+                                                       {
+                                                               $term = null;
+                                                               $scheme = null;
+                                                               $label = null;
+                                                               if (isset($category['data']))
+                                                               {
+                                                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($category['attribs']['']['scheme']))
+                                                               {
+                                                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
+                                                               }
+                                                               if (isset($category['attribs']['']['label']))
+                                                               {
+                                                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+                                                       }
+                                               }
+                                               if (is_array($categories) && is_array($categories_parent))
+                                               {
+                                                       $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+                                               }
+                                               elseif (is_array($categories))
+                                               {
+                                                       $categories = array_values(SimplePie_Misc::array_unique($categories));
+                                               }
+                                               elseif (is_array($categories_parent))
+                                               {
+                                                       $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+                                               }
+
+                                               // COPYRIGHTS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+                                               {
+                                                       $copyright_url = null;
+                                                       $copyright_label = null;
+                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+                                                       {
+                                                               $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                       }
+                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+                                                       {
+                                                               $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                       }
+                                                       $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+                                               {
+                                                       $copyright_url = null;
+                                                       $copyright_label = null;
+                                                       if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+                                                       {
+                                                               $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                       }
+                                                       if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+                                                       {
+                                                               $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                       }
+                                                       $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+                                               }
+                                               else
+                                               {
+                                                       $copyrights = $copyrights_parent;
+                                               }
+
+                                               // CREDITS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+                                                       {
+                                                               $credit_role = null;
+                                                               $credit_scheme = null;
+                                                               $credit_name = null;
+                                                               if (isset($credit['attribs']['']['role']))
+                                                               {
+                                                                       $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($credit['attribs']['']['scheme']))
+                                                               {
+                                                                       $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $credit_scheme = 'urn:ebu';
+                                                               }
+                                                               if (isset($credit['data']))
+                                                               {
+                                                                       $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+                                                       }
+                                                       if (is_array($credits))
+                                                       {
+                                                               $credits = array_values(SimplePie_Misc::array_unique($credits));
+                                                       }
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+                                               {
+                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+                                                       {
+                                                               $credit_role = null;
+                                                               $credit_scheme = null;
+                                                               $credit_name = null;
+                                                               if (isset($credit['attribs']['']['role']))
+                                                               {
+                                                                       $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($credit['attribs']['']['scheme']))
+                                                               {
+                                                                       $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $credit_scheme = 'urn:ebu';
+                                                               }
+                                                               if (isset($credit['data']))
+                                                               {
+                                                                       $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+                                                       }
+                                                       if (is_array($credits))
+                                                       {
+                                                               $credits = array_values(SimplePie_Misc::array_unique($credits));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $credits = $credits_parent;
+                                               }
+
+                                               // DESCRIPTION
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+                                               {
+                                                       $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+                                               {
+                                                       $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               else
+                                               {
+                                                       $description = $description_parent;
+                                               }
+
+                                               // HASHES
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+                                                       {
+                                                               $value = null;
+                                                               $algo = null;
+                                                               if (isset($hash['data']))
+                                                               {
+                                                                       $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($hash['attribs']['']['algo']))
+                                                               {
+                                                                       $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $algo = 'md5';
+                                                               }
+                                                               $hashes[] = $algo.':'.$value;
+                                                       }
+                                                       if (is_array($hashes))
+                                                       {
+                                                               $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+                                                       }
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+                                               {
+                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+                                                       {
+                                                               $value = null;
+                                                               $algo = null;
+                                                               if (isset($hash['data']))
+                                                               {
+                                                                       $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($hash['attribs']['']['algo']))
+                                                               {
+                                                                       $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $algo = 'md5';
+                                                               }
+                                                               $hashes[] = $algo.':'.$value;
+                                                       }
+                                                       if (is_array($hashes))
+                                                       {
+                                                               $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $hashes = $hashes_parent;
+                                               }
+
+                                               // KEYWORDS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+                                               {
+                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+                                                       {
+                                                               $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                                               foreach ($temp as $word)
+                                                               {
+                                                                       $keywords[] = trim($word);
+                                                               }
+                                                               unset($temp);
+                                                       }
+                                                       if (is_array($keywords))
+                                                       {
+                                                               $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+                                                       }
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+                                               {
+                                                       if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+                                                       {
+                                                               $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                                               foreach ($temp as $word)
+                                                               {
+                                                                       $keywords[] = trim($word);
+                                                               }
+                                                               unset($temp);
+                                                       }
+                                                       if (is_array($keywords))
+                                                       {
+                                                               $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $keywords = $keywords_parent;
+                                               }
+
+                                               // PLAYER
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+                                               {
+                                                       $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+                                               {
+                                                       $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                               }
+                                               else
+                                               {
+                                                       $player = $player_parent;
+                                               }
+
+                                               // RATINGS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+                                                       {
+                                                               $rating_scheme = null;
+                                                               $rating_value = null;
+                                                               if (isset($rating['attribs']['']['scheme']))
+                                                               {
+                                                                       $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $rating_scheme = 'urn:simple';
+                                                               }
+                                                               if (isset($rating['data']))
+                                                               {
+                                                                       $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+                                                       }
+                                                       if (is_array($ratings))
+                                                       {
+                                                               $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+                                                       }
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+                                               {
+                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+                                                       {
+                                                               $rating_scheme = null;
+                                                               $rating_value = null;
+                                                               if (isset($rating['attribs']['']['scheme']))
+                                                               {
+                                                                       $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $rating_scheme = 'urn:simple';
+                                                               }
+                                                               if (isset($rating['data']))
+                                                               {
+                                                                       $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+                                                       }
+                                                       if (is_array($ratings))
+                                                       {
+                                                               $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $ratings = $ratings_parent;
+                                               }
+
+                                               // RESTRICTIONS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+                                                       {
+                                                               $restriction_relationship = null;
+                                                               $restriction_type = null;
+                                                               $restriction_value = null;
+                                                               if (isset($restriction['attribs']['']['relationship']))
+                                                               {
+                                                                       $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($restriction['attribs']['']['type']))
+                                                               {
+                                                                       $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($restriction['data']))
+                                                               {
+                                                                       $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+                                                       }
+                                                       if (is_array($restrictions))
+                                                       {
+                                                               $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+                                                       }
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+                                               {
+                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+                                                       {
+                                                               $restriction_relationship = null;
+                                                               $restriction_type = null;
+                                                               $restriction_value = null;
+                                                               if (isset($restriction['attribs']['']['relationship']))
+                                                               {
+                                                                       $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($restriction['attribs']['']['type']))
+                                                               {
+                                                                       $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($restriction['data']))
+                                                               {
+                                                                       $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+                                                       }
+                                                       if (is_array($restrictions))
+                                                       {
+                                                               $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $restrictions = $restrictions_parent;
+                                               }
+
+                                               // THUMBNAILS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+                                                       {
+                                                               $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                                       }
+                                                       if (is_array($thumbnails))
+                                                       {
+                                                               $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+                                                       }
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+                                               {
+                                                       foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+                                                       {
+                                                               $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                                       }
+                                                       if (is_array($thumbnails))
+                                                       {
+                                                               $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $thumbnails = $thumbnails_parent;
+                                               }
+
+                                               // TITLES
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+                                               {
+                                                       $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+                                               {
+                                                       $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               else
+                                               {
+                                                       $title = $title_parent;
+                                               }
+
+                                               $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+                                       }
+                               }
+                       }
+
+                       // If we have standalone media:content tags, loop through them.
+                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
+                       {
+                               foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+                               {
+                                       if (isset($content['attribs']['']['url']))
+                                       {
+                                               // Attributes
+                                               $bitrate = null;
+                                               $channels = null;
+                                               $duration = null;
+                                               $expression = null;
+                                               $framerate = null;
+                                               $height = null;
+                                               $javascript = null;
+                                               $lang = null;
+                                               $length = null;
+                                               $medium = null;
+                                               $samplingrate = null;
+                                               $type = null;
+                                               $url = null;
+                                               $width = null;
+
+                                               // Elements
+                                               $captions = null;
+                                               $categories = null;
+                                               $copyrights = null;
+                                               $credits = null;
+                                               $description = null;
+                                               $hashes = null;
+                                               $keywords = null;
+                                               $player = null;
+                                               $ratings = null;
+                                               $restrictions = null;
+                                               $thumbnails = null;
+                                               $title = null;
+
+                                               // Start checking the attributes of media:content
+                                               if (isset($content['attribs']['']['bitrate']))
+                                               {
+                                                       $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['channels']))
+                                               {
+                                                       $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['duration']))
+                                               {
+                                                       $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               else
+                                               {
+                                                       $duration = $duration_parent;
+                                               }
+                                               if (isset($content['attribs']['']['expression']))
+                                               {
+                                                       $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['framerate']))
+                                               {
+                                                       $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['height']))
+                                               {
+                                                       $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['lang']))
+                                               {
+                                                       $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['fileSize']))
+                                               {
+                                                       $length = ceil($content['attribs']['']['fileSize']);
+                                               }
+                                               if (isset($content['attribs']['']['medium']))
+                                               {
+                                                       $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['samplingrate']))
+                                               {
+                                                       $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['type']))
+                                               {
+                                                       $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               if (isset($content['attribs']['']['width']))
+                                               {
+                                                       $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+
+                                               // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+                                               // CAPTIONS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+                                                       {
+                                                               $caption_type = null;
+                                                               $caption_lang = null;
+                                                               $caption_startTime = null;
+                                                               $caption_endTime = null;
+                                                               $caption_text = null;
+                                                               if (isset($caption['attribs']['']['type']))
+                                                               {
+                                                                       $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['lang']))
+                                                               {
+                                                                       $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['start']))
+                                                               {
+                                                                       $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['attribs']['']['end']))
+                                                               {
+                                                                       $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($caption['data']))
+                                                               {
+                                                                       $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+                                                       }
+                                                       if (is_array($captions))
+                                                       {
+                                                               $captions = array_values(SimplePie_Misc::array_unique($captions));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $captions = $captions_parent;
+                                               }
+
+                                               // CATEGORIES
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+                                               {
+                                                       foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+                                                       {
+                                                               $term = null;
+                                                               $scheme = null;
+                                                               $label = null;
+                                                               if (isset($category['data']))
+                                                               {
+                                                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($category['attribs']['']['scheme']))
+                                                               {
+                                                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
+                                                               }
+                                                               if (isset($category['attribs']['']['label']))
+                                                               {
+                                                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+                                                       }
+                                               }
+                                               if (is_array($categories) && is_array($categories_parent))
+                                               {
+                                                       $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+                                               }
+                                               elseif (is_array($categories))
+                                               {
+                                                       $categories = array_values(SimplePie_Misc::array_unique($categories));
+                                               }
+                                               elseif (is_array($categories_parent))
+                                               {
+                                                       $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+                                               }
+                                               else
+                                               {
+                                                       $categories = null;
+                                               }
+
+                                               // COPYRIGHTS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+                                               {
+                                                       $copyright_url = null;
+                                                       $copyright_label = null;
+                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+                                                       {
+                                                               $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                       }
+                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+                                                       {
+                                                               $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                       }
+                                                       $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+                                               }
+                                               else
+                                               {
+                                                       $copyrights = $copyrights_parent;
+                                               }
+
+                                               // CREDITS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+                                                       {
+                                                               $credit_role = null;
+                                                               $credit_scheme = null;
+                                                               $credit_name = null;
+                                                               if (isset($credit['attribs']['']['role']))
+                                                               {
+                                                                       $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($credit['attribs']['']['scheme']))
+                                                               {
+                                                                       $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $credit_scheme = 'urn:ebu';
+                                                               }
+                                                               if (isset($credit['data']))
+                                                               {
+                                                                       $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+                                                       }
+                                                       if (is_array($credits))
+                                                       {
+                                                               $credits = array_values(SimplePie_Misc::array_unique($credits));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $credits = $credits_parent;
+                                               }
+
+                                               // DESCRIPTION
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+                                               {
+                                                       $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               else
+                                               {
+                                                       $description = $description_parent;
+                                               }
+
+                                               // HASHES
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+                                                       {
+                                                               $value = null;
+                                                               $algo = null;
+                                                               if (isset($hash['data']))
+                                                               {
+                                                                       $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($hash['attribs']['']['algo']))
+                                                               {
+                                                                       $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $algo = 'md5';
+                                                               }
+                                                               $hashes[] = $algo.':'.$value;
+                                                       }
+                                                       if (is_array($hashes))
+                                                       {
+                                                               $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $hashes = $hashes_parent;
+                                               }
+
+                                               // KEYWORDS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+                                               {
+                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+                                                       {
+                                                               $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+                                                               foreach ($temp as $word)
+                                                               {
+                                                                       $keywords[] = trim($word);
+                                                               }
+                                                               unset($temp);
+                                                       }
+                                                       if (is_array($keywords))
+                                                       {
+                                                               $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $keywords = $keywords_parent;
+                                               }
+
+                                               // PLAYER
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+                                               {
+                                                       $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                               }
+                                               else
+                                               {
+                                                       $player = $player_parent;
+                                               }
+
+                                               // RATINGS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+                                                       {
+                                                               $rating_scheme = null;
+                                                               $rating_value = null;
+                                                               if (isset($rating['attribs']['']['scheme']))
+                                                               {
+                                                                       $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               else
+                                                               {
+                                                                       $rating_scheme = 'urn:simple';
+                                                               }
+                                                               if (isset($rating['data']))
+                                                               {
+                                                                       $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+                                                       }
+                                                       if (is_array($ratings))
+                                                       {
+                                                               $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $ratings = $ratings_parent;
+                                               }
+
+                                               // RESTRICTIONS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+                                                       {
+                                                               $restriction_relationship = null;
+                                                               $restriction_type = null;
+                                                               $restriction_value = null;
+                                                               if (isset($restriction['attribs']['']['relationship']))
+                                                               {
+                                                                       $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($restriction['attribs']['']['type']))
+                                                               {
+                                                                       $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               if (isset($restriction['data']))
+                                                               {
+                                                                       $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                                               }
+                                                               $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+                                                       }
+                                                       if (is_array($restrictions))
+                                                       {
+                                                               $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $restrictions = $restrictions_parent;
+                                               }
+
+                                               // THUMBNAILS
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+                                               {
+                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+                                                       {
+                                                               $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+                                                       }
+                                                       if (is_array($thumbnails))
+                                                       {
+                                                               $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $thumbnails = $thumbnails_parent;
+                                               }
+
+                                               // TITLES
+                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+                                               {
+                                                       $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                               }
+                                               else
+                                               {
+                                                       $title = $title_parent;
+                                               }
+
+                                               $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+                                       }
+                               }
+                       }
+
+                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+                       {
+                               if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
+                               {
+                                       // Attributes
+                                       $bitrate = null;
+                                       $channels = null;
+                                       $duration = null;
+                                       $expression = null;
+                                       $framerate = null;
+                                       $height = null;
+                                       $javascript = null;
+                                       $lang = null;
+                                       $length = null;
+                                       $medium = null;
+                                       $samplingrate = null;
+                                       $type = null;
+                                       $url = null;
+                                       $width = null;
+
+                                       $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+                                       if (isset($link['attribs']['']['type']))
+                                       {
+                                               $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($link['attribs']['']['length']))
+                                       {
+                                               $length = ceil($link['attribs']['']['length']);
+                                       }
+
+                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+                                       $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+                               }
+                       }
+
+                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+                       {
+                               if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
+                               {
+                                       // Attributes
+                                       $bitrate = null;
+                                       $channels = null;
+                                       $duration = null;
+                                       $expression = null;
+                                       $framerate = null;
+                                       $height = null;
+                                       $javascript = null;
+                                       $lang = null;
+                                       $length = null;
+                                       $medium = null;
+                                       $samplingrate = null;
+                                       $type = null;
+                                       $url = null;
+                                       $width = null;
+
+                                       $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+                                       if (isset($link['attribs']['']['type']))
+                                       {
+                                               $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($link['attribs']['']['length']))
+                                       {
+                                               $length = ceil($link['attribs']['']['length']);
+                                       }
+
+                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+                                       $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+                               }
+                       }
+
+                       if ($enclosure = $this->get_item_tags('', 'enclosure'))
+                       {
+                               if (isset($enclosure[0]['attribs']['']['url']))
+                               {
+                                       // Attributes
+                                       $bitrate = null;
+                                       $channels = null;
+                                       $duration = null;
+                                       $expression = null;
+                                       $framerate = null;
+                                       $height = null;
+                                       $javascript = null;
+                                       $lang = null;
+                                       $length = null;
+                                       $medium = null;
+                                       $samplingrate = null;
+                                       $type = null;
+                                       $url = null;
+                                       $width = null;
+
+                                       $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
+                                       if (isset($enclosure[0]['attribs']['']['type']))
+                                       {
+                                               $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       if (isset($enclosure[0]['attribs']['']['length']))
+                                       {
+                                               $length = ceil($enclosure[0]['attribs']['']['length']);
+                                       }
+
+                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+                                       $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+                               }
+                       }
+                       $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures']));
+               }
+               if (!empty($this->data['enclosures']))
+               {
+                       return $this->data['enclosures'];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_latitude()
+       {
+               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+               {
+                       return (float) $return[0]['data'];
+               }
+               elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+               {
+                       return (float) $match[1];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_longitude()
+       {
+               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+               {
+                       return (float) $return[0]['data'];
+               }
+               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+               {
+                       return (float) $return[0]['data'];
+               }
+               elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+               {
+                       return (float) $match[2];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       /**
+        * Creates the add_to_* methods' return data
+        *
+        * @access private
+        * @param string $item_url String to prefix to the item permalink
+        * @param string $title_url String to prefix to the item title
+        * (and suffix to the item permalink)
+        * @return mixed URL if feed exists, false otherwise
+        */
+       function add_to_service($item_url, $title_url = null)
+       {
+               if ($this->get_permalink() !== null)
+               {
+                       $return = $this->sanitize($item_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_permalink());
+                       if ($title_url !== null && $this->get_title() !== null)
+                       {
+                               $return .= $this->sanitize($title_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_title());
+                       }
+                       return $return;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function add_to_blinklist()
+       {
+               return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title=');
+       }
+
+       function add_to_blogmarks()
+       {
+               return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title=');
+       }
+
+       function add_to_delicious()
+       {
+               return $this->add_to_service('http://del.icio.us/post/?v=3&url=', '&title=');
+       }
+
+       function add_to_digg()
+       {
+               return $this->add_to_service('http://digg.com/submit?phase=2&URL=');
+       }
+
+       function add_to_furl()
+       {
+               return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t=');
+       }
+
+       function add_to_magnolia()
+       {
+               return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title=');
+       }
+
+       function add_to_myweb20()
+       {
+               return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t=');
+       }
+
+       function add_to_newsvine()
+       {
+               return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h=');
+       }
+
+       function add_to_reddit()
+       {
+               return $this->add_to_service('http://reddit.com/submit?url=', '&title=');
+       }
+
+       function add_to_segnalo()
+       {
+               return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title=');
+       }
+
+       function add_to_simpy()
+       {
+               return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title=');
+       }
+
+       function add_to_spurl()
+       {
+               return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title=');
+       }
+
+       function add_to_wists()
+       {
+               return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title=');
+       }
+
+       function search_technorati()
+       {
+               return $this->add_to_service('http://www.technorati.com/search/');
+       }
+}
+
+class SimplePie_Author
+{
+       var $name;
+       var $link;
+       var $email;
+
+       // Constructor, used to input the data
+       function SimplePie_Author($name = null, $link = null, $email = null)
+       {
+               $this->name = $name;
+               $this->link = $link;
+               $this->email = $email;
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_name()
+       {
+               if ($this->name !== null)
+               {
+                       return $this->name;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_link()
+       {
+               if ($this->link !== null)
+               {
+                       return $this->link;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_email()
+       {
+               if ($this->email !== null)
+               {
+                       return $this->email;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+}
+
+class SimplePie_Category
+{
+       var $term;
+       var $scheme;
+       var $label;
+
+       // Constructor, used to input the data
+       function SimplePie_Category($term = null, $scheme = null, $label = null)
+       {
+               $this->term = $term;
+               $this->scheme = $scheme;
+               $this->label = $label;
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_term()
+       {
+               if ($this->term !== null)
+               {
+                       return $this->term;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_scheme()
+       {
+               if ($this->scheme !== null)
+               {
+                       return $this->scheme;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_label()
+       {
+               if ($this->label !== null)
+               {
+                       return $this->label;
+               }
+               else
+               {
+                       return $this->get_term();
+               }
+       }
+}
+
+class SimplePie_Enclosure
+{
+       var $bitrate;
+       var $captions;
+       var $categories;
+       var $channels;
+       var $copyright;
+       var $credits;
+       var $description;
+       var $duration;
+       var $expression;
+       var $framerate;
+       var $handler;
+       var $hashes;
+       var $height;
+       var $javascript;
+       var $keywords;
+       var $lang;
+       var $length;
+       var $link;
+       var $medium;
+       var $player;
+       var $ratings;
+       var $restrictions;
+       var $samplingrate;
+       var $thumbnails;
+       var $title;
+       var $type;
+       var $width;
+
+       // Constructor, used to input the data
+       function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
+       {
+               $this->bitrate = $bitrate;
+               $this->captions = $captions;
+               $this->categories = $categories;
+               $this->channels = $channels;
+               $this->copyright = $copyright;
+               $this->credits = $credits;
+               $this->description = $description;
+               $this->duration = $duration;
+               $this->expression = $expression;
+               $this->framerate = $framerate;
+               $this->hashes = $hashes;
+               $this->height = $height;
+               $this->javascript = $javascript;
+               $this->keywords = $keywords;
+               $this->lang = $lang;
+               $this->length = $length;
+               $this->link = $link;
+               $this->medium = $medium;
+               $this->player = $player;
+               $this->ratings = $ratings;
+               $this->restrictions = $restrictions;
+               $this->samplingrate = $samplingrate;
+               $this->thumbnails = $thumbnails;
+               $this->title = $title;
+               $this->type = $type;
+               $this->width = $width;
+               if (class_exists('idna_convert'))
+               {
+                       $idn =& new idna_convert;
+                       $parsed = SimplePie_Misc::parse_url($link);
+                       $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+               }
+               $this->handler = $this->get_handler(); // Needs to load last
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_bitrate()
+       {
+               if ($this->bitrate !== null)
+               {
+                       return $this->bitrate;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_caption($key = 0)
+       {
+               $captions = $this->get_captions();
+               if (isset($captions[$key]))
+               {
+                       return $captions[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_captions()
+       {
+               if ($this->captions !== null)
+               {
+                       return $this->captions;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_category($key = 0)
+       {
+               $categories = $this->get_categories();
+               if (isset($categories[$key]))
+               {
+                       return $categories[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_categories()
+       {
+               if ($this->categories !== null)
+               {
+                       return $this->categories;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_channels()
+       {
+               if ($this->channels !== null)
+               {
+                       return $this->channels;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_copyright()
+       {
+               if ($this->copyright !== null)
+               {
+                       return $this->copyright;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_credit($key = 0)
+       {
+               $credits = $this->get_credits();
+               if (isset($credits[$key]))
+               {
+                       return $credits[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_credits()
+       {
+               if ($this->credits !== null)
+               {
+                       return $this->credits;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_description()
+       {
+               if ($this->description !== null)
+               {
+                       return $this->description;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_duration($convert = false)
+       {
+               if ($this->duration !== null)
+               {
+                       if ($convert)
+                       {
+                               $time = SimplePie_Misc::time_hms($this->duration);
+                               return $time;
+                       }
+                       else
+                       {
+                               return $this->duration;
+                       }
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_expression()
+       {
+               if ($this->expression !== null)
+               {
+                       return $this->expression;
+               }
+               else
+               {
+                       return 'full';
+               }
+       }
+
+       function get_extension()
+       {
+               if ($this->link !== null)
+               {
+                       $url = SimplePie_Misc::parse_url($this->link);
+                       if ($url['path'] !== '')
+                       {
+                               return pathinfo($url['path'], PATHINFO_EXTENSION);
+                       }
+               }
+               return null;
+       }
+
+       function get_framerate()
+       {
+               if ($this->framerate !== null)
+               {
+                       return $this->framerate;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_handler()
+       {
+               return $this->get_real_type(true);
+       }
+
+       function get_hash($key = 0)
+       {
+               $hashes = $this->get_hashes();
+               if (isset($hashes[$key]))
+               {
+                       return $hashes[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_hashes()
+       {
+               if ($this->hashes !== null)
+               {
+                       return $this->hashes;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_height()
+       {
+               if ($this->height !== null)
+               {
+                       return $this->height;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_language()
+       {
+               if ($this->lang !== null)
+               {
+                       return $this->lang;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_keyword($key = 0)
+       {
+               $keywords = $this->get_keywords();
+               if (isset($keywords[$key]))
+               {
+                       return $keywords[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_keywords()
+       {
+               if ($this->keywords !== null)
+               {
+                       return $this->keywords;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_length()
+       {
+               if ($this->length !== null)
+               {
+                       return $this->length;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_link()
+       {
+               if ($this->link !== null)
+               {
+                       return urldecode($this->link);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_medium()
+       {
+               if ($this->medium !== null)
+               {
+                       return $this->medium;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_player()
+       {
+               if ($this->player !== null)
+               {
+                       return $this->player;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_rating($key = 0)
+       {
+               $ratings = $this->get_ratings();
+               if (isset($ratings[$key]))
+               {
+                       return $ratings[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_ratings()
+       {
+               if ($this->ratings !== null)
+               {
+                       return $this->ratings;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_restriction($key = 0)
+       {
+               $restrictions = $this->get_restrictions();
+               if (isset($restrictions[$key]))
+               {
+                       return $restrictions[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_restrictions()
+       {
+               if ($this->restrictions !== null)
+               {
+                       return $this->restrictions;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_sampling_rate()
+       {
+               if ($this->samplingrate !== null)
+               {
+                       return $this->samplingrate;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_size()
+       {
+               $length = $this->get_length();
+               if ($length !== null)
+               {
+                       return round($length/1048576, 2);
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_thumbnail($key = 0)
+       {
+               $thumbnails = $this->get_thumbnails();
+               if (isset($thumbnails[$key]))
+               {
+                       return $thumbnails[$key];
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_thumbnails()
+       {
+               if ($this->thumbnails !== null)
+               {
+                       return $this->thumbnails;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_title()
+       {
+               if ($this->title !== null)
+               {
+                       return $this->title;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_type()
+       {
+               if ($this->type !== null)
+               {
+                       return $this->type;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_width()
+       {
+               if ($this->width !== null)
+               {
+                       return $this->width;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function native_embed($options='')
+       {
+               return $this->embed($options, true);
+       }
+
+       /**
+        * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
+        */
+       function embed($options = '', $native = false)
+       {
+               // Set up defaults
+               $audio = '';
+               $video = '';
+               $alt = '';
+               $altclass = '';
+               $loop = 'false';
+               $width = 'auto';
+               $height = 'auto';
+               $bgcolor = '#ffffff';
+               $mediaplayer = '';
+               $widescreen = false;
+               $handler = $this->get_handler();
+               $type = $this->get_real_type();
+
+               // Process options and reassign values as necessary
+               if (is_array($options))
+               {
+                       extract($options);
+               }
+               else
+               {
+                       $options = explode(',', $options);
+                       foreach($options as $option)
+                       {
+                               $opt = explode(':', $option, 2);
+                               if (isset($opt[0], $opt[1]))
+                               {
+                                       $opt[0] = trim($opt[0]);
+                                       $opt[1] = trim($opt[1]);
+                                       switch ($opt[0])
+                                       {
+                                               case 'audio':
+                                                       $audio = $opt[1];
+                                                       break;
+
+                                               case 'video':
+                                                       $video = $opt[1];
+                                                       break;
+
+                                               case 'alt':
+                                                       $alt = $opt[1];
+                                                       break;
+
+                                               case 'altclass':
+                                                       $altclass = $opt[1];
+                                                       break;
+
+                                               case 'loop':
+                                                       $loop = $opt[1];
+                                                       break;
+
+                                               case 'width':
+                                                       $width = $opt[1];
+                                                       break;
+
+                                               case 'height':
+                                                       $height = $opt[1];
+                                                       break;
+
+                                               case 'bgcolor':
+                                                       $bgcolor = $opt[1];
+                                                       break;
+
+                                               case 'mediaplayer':
+                                                       $mediaplayer = $opt[1];
+                                                       break;
+
+                                               case 'widescreen':
+                                                       $widescreen = $opt[1];
+                                                       break;
+                                       }
+                               }
+                       }
+               }
+
+               $mime = explode('/', $type, 2);
+               $mime = $mime[0];
+
+               // Process values for 'auto'
+               if ($width == 'auto')
+               {
+                       if ($mime == 'video')
+                       {
+                               if ($height == 'auto')
+                               {
+                                       $width = 480;
+                               }
+                               elseif ($widescreen)
+                               {
+                                       $width = round((intval($height)/9)*16);
+                               }
+                               else
+                               {
+                                       $width = round((intval($height)/3)*4);
+                               }
+                       }
+                       else
+                       {
+                               $width = '100%';
+                       }
+               }
+
+               if ($height == 'auto')
+               {
+                       if ($mime == 'audio')
+                       {
+                               $height = 0;
+                       }
+                       elseif ($mime == 'video')
+                       {
+                               if ($width == 'auto')
+                               {
+                                       if ($widescreen)
+                                       {
+                                               $height = 270;
+                                       }
+                                       else
+                                       {
+                                               $height = 360;
+                                       }
+                               }
+                               elseif ($widescreen)
+                               {
+                                       $height = round((intval($width)/16)*9);
+                               }
+                               else
+                               {
+                                       $height = round((intval($width)/4)*3);
+                               }
+                       }
+                       else
+                       {
+                               $height = 376;
+                       }
+               }
+               elseif ($mime == 'audio')
+               {
+                       $height = 0;
+               }
+
+               // Set proper placeholder value
+               if ($mime == 'audio')
+               {
+                       $placeholder = $audio;
+               }
+               elseif ($mime == 'video')
+               {
+                       $placeholder = $video;
+               }
+
+               $embed = '';
+
+               // Make sure the JS library is included
+               if (!$native)
+               {
+                       static $javascript_outputted = null;
+                       if (!$javascript_outputted && $this->javascript)
+                       {
+                               $embed .= '<script type="text/javascript" src="?' . htmlspecialchars($this->javascript) . '"></script>';
+                               $javascript_outputted = true;
+                       }
+               }
+
+               // Odeo Feed MP3's
+               if ($handler == 'odeo')
+               {
+                       if ($native)
+                       {
+                               $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://adobe.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
+                       }
+                       else
+                       {
+                               $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';
+                       }
+               }
+
+               // Flash
+               elseif ($handler == 'flash')
+               {
+                       if ($native)
+                       {
+                               $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
+                       }
+               }
+
+               // Flash Media Player file types.
+               // Preferred handler for MP3 file types.
+               elseif ($handler == 'fmedia' || ($handler == 'mp3' && $mediaplayer != ''))
+               {
+                       $height += 20;
+                       if ($native)
+                       {
+                               $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
+                       }
+               }
+
+               // QuickTime 7 file types.  Need to test with QuickTime 6.
+               // Only handle MP3's if the Flash Media Player is not present.
+               elseif ($handler == 'quicktime' || ($handler == 'mp3' && $mediaplayer == ''))
+               {
+                       $height += 16;
+                       if ($native)
+                       {
+                               if ($placeholder != ""){
+                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+                               }
+                               else {
+                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+                               }
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
+                       }
+               }
+
+               // Windows Media
+               elseif ($handler == 'wmedia')
+               {
+                       $height += 45;
+                       if ($native)
+                       {
+                               $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
+                       }
+               }
+
+               // Everything else
+               else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
+
+               return $embed;
+       }
+
+       function get_real_type($find_handler = false)
+       {
+               // If it's Odeo, let's get it out of the way.
+               if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com')
+               {
+                       return 'odeo';
+               }
+
+               // Mime-types by handler.
+               $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash
+               $types_fmedia = array('video/flv', 'video/x-flv'); // Flash Media Player
+               $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime
+               $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media
+               $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3
+
+               if ($this->get_type() !== null)
+               {
+                       $type = strtolower($this->type);
+               }
+               else
+               {
+                       $type = null;
+               }
+
+               // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
+               if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3)))
+               {
+                       switch (strtolower($this->get_extension()))
+                       {
+                               // Audio mime-types
+                               case 'aac':
+                               case 'adts':
+                                       $type = 'audio/acc';
+                                       break;
+
+                               case 'aif':
+                               case 'aifc':
+                               case 'aiff':
+                               case 'cdda':
+                                       $type = 'audio/aiff';
+                                       break;
+
+                               case 'bwf':
+                                       $type = 'audio/wav';
+                                       break;
+
+                               case 'kar':
+                               case 'mid':
+                               case 'midi':
+                               case 'smf':
+                                       $type = 'audio/midi';
+                                       break;
+
+                               case 'm4a':
+                                       $type = 'audio/x-m4a';
+                                       break;
+
+                               case 'mp3':
+                               case 'swa':
+                                       $type = 'audio/mp3';
+                                       break;
+
+                               case 'wav':
+                                       $type = 'audio/wav';
+                                       break;
+
+                               case 'wax':
+                                       $type = 'audio/x-ms-wax';
+                                       break;
+
+                               case 'wma':
+                                       $type = 'audio/x-ms-wma';
+                                       break;
+
+                               // Video mime-types
+                               case '3gp':
+                               case '3gpp':
+                                       $type = 'video/3gpp';
+                                       break;
+
+                               case '3g2':
+                               case '3gp2':
+                                       $type = 'video/3gpp2';
+                                       break;
+
+                               case 'asf':
+                                       $type = 'video/x-ms-asf';
+                                       break;
+
+                               case 'flv':
+                                       $type = 'video/x-flv';
+                                       break;
+
+                               case 'm1a':
+                               case 'm1s':
+                               case 'm1v':
+                               case 'm15':
+                               case 'm75':
+                               case 'mp2':
+                               case 'mpa':
+                               case 'mpeg':
+                               case 'mpg':
+                               case 'mpm':
+                               case 'mpv':
+                                       $type = 'video/mpeg';
+                                       break;
+
+                               case 'm4v':
+                                       $type = 'video/x-m4v';
+                                       break;
+
+                               case 'mov':
+                               case 'qt':
+                                       $type = 'video/quicktime';
+                                       break;
+
+                               case 'mp4':
+                               case 'mpg4':
+                                       $type = 'video/mp4';
+                                       break;
+
+                               case 'sdv':
+                                       $type = 'video/sd-video';
+                                       break;
+
+                               case 'wm':
+                                       $type = 'video/x-ms-wm';
+                                       break;
+
+                               case 'wmv':
+                                       $type = 'video/x-ms-wmv';
+                                       break;
+
+                               case 'wvx':
+                                       $type = 'video/x-ms-wvx';
+                                       break;
+
+                               // Flash mime-types
+                               case 'spl':
+                                       $type = 'application/futuresplash';
+                                       break;
+
+                               case 'swf':
+                                       $type = 'application/x-shockwave-flash';
+                                       break;
+                       }
+               }
+
+               if ($find_handler)
+               {
+                       if (in_array($type, $types_flash))
+                       {
+                               return 'flash';
+                       }
+                       elseif (in_array($type, $types_fmedia))
+                       {
+                               return 'fmedia';
+                       }
+                       elseif (in_array($type, $types_quicktime))
+                       {
+                               return 'quicktime';
+                       }
+                       elseif (in_array($type, $types_wmedia))
+                       {
+                               return 'wmedia';
+                       }
+                       elseif (in_array($type, $types_mp3))
+                       {
+                               return 'mp3';
+                       }
+                       else
+                       {
+                               return null;
+                       }
+               }
+               else
+               {
+                       return $type;
+               }
+       }
+}
+
+class SimplePie_Caption
+{
+       var $type;
+       var $lang;
+       var $startTime;
+       var $endTime;
+       var $text;
+
+       // Constructor, used to input the data
+       function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
+       {
+               $this->type = $type;
+               $this->lang = $lang;
+               $this->startTime = $startTime;
+               $this->endTime = $endTime;
+               $this->text = $text;
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_endtime()
+       {
+               if ($this->endTime !== null)
+               {
+                       return $this->endTime;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_language()
+       {
+               if ($this->language !== null)
+               {
+                       return $this->language;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_starttime()
+       {
+               if ($this->startTime !== null)
+               {
+                       return $this->startTime;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_text()
+       {
+               if ($this->text !== null)
+               {
+                       return $this->text;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_type()
+       {
+               if ($this->type !== null)
+               {
+                       return $this->type;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+}
+
+class SimplePie_Credit
+{
+       var $role;
+       var $scheme;
+       var $name;
+
+       // Constructor, used to input the data
+       function SimplePie_Credit($role = null, $scheme = null, $name = null)
+       {
+               $this->role = $role;
+               $this->scheme = $scheme;
+               $this->name = $name;
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_role()
+       {
+               if ($this->role !== null)
+               {
+                       return $this->role;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_scheme()
+       {
+               if ($this->scheme !== null)
+               {
+                       return $this->scheme;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_name()
+       {
+               if ($this->name !== null)
+               {
+                       return $this->name;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+}
+
+class SimplePie_Copyright
+{
+       var $url;
+       var $label;
+
+       // Constructor, used to input the data
+       function SimplePie_Copyright($url = null, $label = null)
+       {
+               $this->url = $url;
+               $this->label = $label;
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_url()
+       {
+               if ($this->url !== null)
+               {
+                       return $this->url;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_attribution()
+       {
+               if ($this->label !== null)
+               {
+                       return $this->label;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+}
+
+class SimplePie_Rating
+{
+       var $scheme;
+       var $value;
+
+       // Constructor, used to input the data
+       function SimplePie_Rating($scheme = null, $value = null)
+       {
+               $this->scheme = $scheme;
+               $this->value = $value;
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_scheme()
+       {
+               if ($this->scheme !== null)
+               {
+                       return $this->scheme;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_value()
+       {
+               if ($this->value !== null)
+               {
+                       return $this->value;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+}
+
+class SimplePie_Restriction
+{
+       var $relationship;
+       var $type;
+       var $value;
+
+       // Constructor, used to input the data
+       function SimplePie_Restriction($relationship = null, $type = null, $value = null)
+       {
+               $this->relationship = $relationship;
+               $this->type = $type;
+               $this->value = $value;
+       }
+
+       function __toString()
+       {
+               // There is no $this->data here
+               return md5(serialize($this));
+       }
+
+       function get_relationship()
+       {
+               if ($this->relationship !== null)
+               {
+                       return $this->relationship;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_type()
+       {
+               if ($this->type !== null)
+               {
+                       return $this->type;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+
+       function get_value()
+       {
+               if ($this->value !== null)
+               {
+                       return $this->value;
+               }
+               else
+               {
+                       return null;
+               }
+       }
+}
+
+/**
+ * @todo Move to properly supporting RFC2616 (HTTP/1.1)
+ */
+class SimplePie_File
+{
+       var $url;
+       var $useragent;
+       var $success = true;
+       var $headers = array();
+       var $body;
+       var $status_code;
+       var $redirects = 0;
+       var $error;
+       var $method;
+
+       function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+       {
+               if (class_exists('idna_convert'))
+               {
+                       $idn =& new idna_convert;
+                       $parsed = SimplePie_Misc::parse_url($url);
+                       $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+               }
+               $this->url = $url;
+               $this->useragent = $useragent;
+               if (preg_match('/^http(s)?:\/\//i', $url))
+               {
+                       if ($useragent === null)
+                       {
+                               $useragent = ini_get('user_agent');
+                               $this->useragent = $useragent;
+                       }
+                       if (!is_array($headers))
+                       {
+                               $headers = array();
+                       }
+                       if (!$force_fsockopen && extension_loaded('curl'))
+                       {
+                               $this->method = 'curl';
+                               $fp = curl_init();
+                               $headers2 = array();
+                               foreach ($headers as $key => $value)
+                               {
+                                       $headers2[] = "$key: $value";
+                               }
+                               if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>='))
+                               {
+                                       curl_setopt($fp, CURLOPT_ENCODING, '');
+                               }
+                               curl_setopt($fp, CURLOPT_URL, $url);
+                               curl_setopt($fp, CURLOPT_HEADER, 1);
+                               curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
+                               curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
+                               curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
+                               curl_setopt($fp, CURLOPT_REFERER, $url);
+                               curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
+                               curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
+                               if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>='))
+                               {
+                                       curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
+                                       curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
+                               }
+
+                               $this->headers = curl_exec($fp);
+                               if (curl_errno($fp) == 23 || curl_errno($fp) == 61)
+                               {
+                                       curl_setopt($fp, CURLOPT_ENCODING, 'none');
+                                       $this->headers = curl_exec($fp);
+                               }
+                               if (curl_errno($fp))
+                               {
+                                       $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
+                                       $this->success = false;
+                               }
+                               else
+                               {
+                                       $info = curl_getinfo($fp);
+                                       curl_close($fp);
+                                       $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1);
+                                       $this->headers = array_pop($this->headers);
+                                       $parser =& new SimplePie_HTTP_Parser($this->headers);
+                                       if ($parser->parse())
+                                       {
+                                               $this->headers = $parser->headers;
+                                               $this->body = $parser->body;
+                                               $this->status_code = $parser->status_code;
+                                               if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+                                               {
+                                                       $this->redirects++;
+                                                       if (isset($this->headers['content-location']))
+                                                       {
+                                                               $location = SimplePie_Misc::absolutize_url($this->headers['location'], SimplePie_Misc::absolutize_url($this->headers['content-location'], $url));
+                                                       }
+                                                       else
+                                                       {
+                                                               $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+                                                       }
+                                                       return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+                                               }
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               $this->method = 'fsockopen';
+                               $url_parts = parse_url($url);
+                               if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https')
+                               {
+                                       $url_parts['host'] = "ssl://$url_parts[host]";
+                                       $url_parts['port'] = 443;
+                               }
+                               if (!isset($url_parts['port']))
+                               {
+                                       $url_parts['port'] = 80;
+                               }
+                               $fp = fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
+                               if (!$fp)
+                               {
+                                       $this->error = 'fsockopen error: ' . $errstr;
+                                       $this->success = false;
+                               }
+                               else
+                               {
+                                       if (function_exists('stream_set_timeout'))
+                                       {
+                                               stream_set_timeout($fp, $timeout);
+                                       }
+                                       else
+                                       {
+                                               socket_set_timeout($fp, $timeout);
+                                       }
+                                       if (isset($url_parts['path']))
+                                       {
+                                               if (isset($url_parts['query']))
+                                               {
+                                                       $get = "$url_parts[path]?$url_parts[query]";
+                                               }
+                                               else
+                                               {
+                                                       $get = $url_parts['path'];
+                                               }
+                                       }
+                                       else
+                                       {
+                                               $get = '/';
+                                       }
+                                       $out = "GET $get HTTP/1.0\r\n";
+                                       $out .= "Host: $url_parts[host]\r\n";
+                                       $out .= "User-Agent: $useragent\r\n";
+                                       if (function_exists('gzinflate'))
+                                       {
+                                               $out .= "Accept-Encoding: gzip,deflate\r\n";
+                                       }
+
+                                       if (isset($url_parts['user']) && isset($url_parts['pass']))
+                                       {
+                                               $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
+                                       }
+                                       foreach ($headers as $key => $value)
+                                       {
+                                               $out .= "$key: $value\r\n";
+                                       }
+                                       $out .= "Connection: Close\r\n\r\n";
+                                       fwrite($fp, $out);
+
+                                       if (function_exists('stream_get_meta_data'))
+                                       {
+                                               $info = stream_get_meta_data($fp);
+                                       }
+                                       else
+                                       {
+                                               $info = socket_get_status($fp);
+                                       }
+
+                                       $this->headers = '';
+                                       while (!$info['eof'] && !$info['timed_out'])
+                                       {
+                                               $this->headers .= fread($fp, 1160);
+                                               if (function_exists('stream_get_meta_data'))
+                                               {
+                                                       $info = stream_get_meta_data($fp);
+                                               }
+                                               else
+                                               {
+                                                       $info = socket_get_status($fp);
+                                               }
+                                       }
+                                       if (!$info['timed_out'])
+                                       {
+                                               $parser =& new SimplePie_HTTP_Parser($this->headers);
+                                               if ($parser->parse())
+                                               {
+                                                       $this->headers = $parser->headers;
+                                                       $this->body = $parser->body;
+                                                       $this->status_code = $parser->status_code;
+                                                       if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+                                                       {
+                                                               $this->redirects++;
+                                                               if (isset($this->headers['content-location']))
+                                                               {
+                                                                       $location = SimplePie_Misc::absolutize_url($this->headers['location'], SimplePie_Misc::absolutize_url($this->headers['content-location'], $url));
+                                                               }
+                                                               else
+                                                               {
+                                                                       $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+                                                               }
+                                                               return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+                                                       }
+                                                       if (isset($this->headers['content-encoding']) && ($this->headers['content-encoding'] == 'gzip' || $this->headers['content-encoding'] == 'deflate'))
+                                                       {
+                                                               if (substr($this->body, 0, 8) == "\x1f\x8b\x08\x00\x00\x00\x00\x00")
+                                                               {
+                                                                       $this->body = substr($this->body, 10);
+                                                               }
+                                                               $this->body = gzinflate($this->body);
+                                                       }
+                                               }
+                                       }
+                                       else
+                                       {
+                                               $this->error = 'fsocket timed out';
+                                               $this->success = false;
+                                       }
+                                       fclose($fp);
+                               }
+                       }
+               }
+               elseif (function_exists('file_get_contents'))
+               {
+                       $this->method = 'file_get_contents';
+                       if (!$this->body = file_get_contents($url))
+                       {
+                               $this->error = 'file_get_contents could not read the file';
+                               $this->success = false;
+                       }
+               }
+               else
+               {
+                       $this->method = 'fopen';
+                       if (($fp = fopen($url, 'rb')) === false)
+                       {
+                               $this->error = 'failed to open stream: No such file or directory';
+                               $this->success = false;
+                       }
+                       else
+                       {
+                               $this->body = '';
+                               while (!feof($fp))
+                               {
+                                       $this->body .= fread($fp, 8192);
+                               }
+                               fclose($fp);
+                       }
+               }
+       }
+}
+
+/**
+ * HTTP Response Parser
+ *
+ * @package SimplePie
+ * @todo Support HTTP Requests
+ */
+class SimplePie_HTTP_Parser
+{
+       /**
+        * HTTP Version
+        *
+        * @access public
+        * @var string
+        */
+       var $http_version = '';
+
+       /**
+        * Status code
+        *
+        * @access public
+        * @var string
+        */
+       var $status_code = '';
+
+       /**
+        * Reason phrase
+        *
+        * @access public
+        * @var string
+        */
+       var $reason = '';
+
+       /**
+        * Key/value pairs of the headers
+        *
+        * @access public
+        * @var array
+        */
+       var $headers = array();
+
+       /**
+        * Body of the response
+        *
+        * @access public
+        * @var string
+        */
+       var $body = '';
+
+       /**
+        * Current state of the state machine
+        *
+        * @access private
+        * @var string
+        */
+       var $state = 'start';
+
+       /**
+        * Input data
+        *
+        * @access private
+        * @var string
+        */
+       var $data = '';
+
+       /**
+        * Input data length (to avoid calling strlen() everytime this is needed)
+        *
+        * @access private
+        * @var int
+        */
+       var $data_length = 0;
+
+       /**
+        * Current position of the pointer
+        *
+        * @access private
+        * @var int
+        */
+       var $position = 0;
+
+       /**
+        * Name of the hedaer currently being parsed
+        *
+        * @access private
+        * @var string
+        */
+       var $name = '';
+
+       /**
+        * Value of the hedaer currently being parsed
+        *
+        * @access private
+        * @var string
+        */
+       var $value = '';
+
+       /**
+        * Create an instance of the class with the input data
+        *
+        * @access public
+        * @param string $data Input data
+        */
+       function SimplePie_HTTP_Parser($data)
+       {
+               $this->data = $data;
+               $this->data_length = strlen($this->data);
+       }
+
+       /**
+        * Parse the input data
+        *
+        * @access public
+        * @return bool true on success, false on failure
+        */
+       function parse()
+       {
+               while ($this->state && $this->state != 'emit' && $this->has_data())
+               {
+                       $state = $this->state;
+                       $this->$state();
+               }
+               $this->data = '';
+               if ($this->state == 'emit')
+               {
+                       return true;
+               }
+               else
+               {
+                       $this->http_version = '';
+                       $this->status_code = '';
+                       $this->headers = array();
+                       $this->body = '';
+                       return false;
+               }
+       }
+
+       /**
+        * Check whether there is data beyond the pointer
+        *
+        * @access private
+        * @return bool true if there is further data, false if not
+        */
+       function has_data()
+       {
+               return (bool) ($this->position < $this->data_length);
+       }
+
+       /**
+        * See if the next character is LWS
+        *
+        * @access private
+        * @return bool true if the next character is LWS, false if not
+        */
+       function is_linear_whitespace()
+       {
+               return (bool) (strspn($this->data, "\x09\x20", $this->position, 1)
+                       || (substr($this->data, $this->position, 2) == "\r\n" && strspn($this->data, "\x09\x20", $this->position + 2, 1))
+                       || (strspn($this->data, "\r\n", $this->position, 1) && strspn($this->data, "\x09\x20", $this->position + 1, 1)));
+       }
+
+       /**
+        * The starting state of the state machine, see if the data is a response or request
+        *
+        * @access private
+        */
+       function start()
+       {
+               $this->state = 'http_version_response';
+       }
+
+       /**
+        * Parse an HTTP-version string
+        *
+        * @access private
+        */
+       function http_version()
+       {
+               if (preg_match('/^HTTP\/([0-9]+\.[0-9]+)/i', substr($this->data, $this->position, strcspn($this->data, "\r\n", $this->position)), $match))
+               {
+                       $this->position += strlen($match[0]);
+                       $this->http_version = $match[1];
+                       return true;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       /**
+        * Parse LWS, replacing consecutive characters with a single space
+        *
+        * @access private
+        */
+       function linear_whitespace()
+       {
+               do
+               {
+                       if (substr($this->data, $this->position, 2) == "\r\n")
+                       {
+                               $this->position += 2;
+                       }
+                       elseif (strspn($this->data, "\r\n", $this->position, 1))
+                       {
+                               $this->position++;
+                       }
+                       $this->position += strspn($this->data, "\x09\x20", $this->position);
+               } while ($this->is_linear_whitespace());
+               $this->value .= "\x20";
+       }
+
+       /**
+        * Parse an HTTP-version string within a response
+        *
+        * @access private
+        */
+       function http_version_response()
+       {
+               if ($this->http_version() && $this->data[$this->position] == "\x20")
+               {
+                       $this->state = 'status_code';
+                       $this->position++;
+               }
+               else
+               {
+                       $this->state = false;
+               }
+       }
+
+       /**
+        * Parse a status code
+        *
+        * @access private
+        */
+       function status_code()
+       {
+               if (strspn($this->data, '1234567890', $this->position, 3) == 3)
+               {
+                       $this->status_code = substr($this->data, $this->position, 3);
+                       $this->state = 'reason_phrase';
+                       $this->position += 3;
+               }
+               else
+               {
+                       $this->state = false;
+               }
+       }
+
+       /**
+        * Skip over the reason phrase (it has no normative value, and you can send absolutely anything here)
+        *
+        * @access private
+        */
+       function reason_phrase()
+       {
+               $len = strcspn($this->data, "\r\n", $this->position);
+               $this->reason = substr($this->data, $this->position, $len);
+               $this->position += $len;
+               if ($this->has_data())
+               {
+                       if (substr($this->data, $this->position, 2) == "\r\n")
+                       {
+                               $this->position += 2;
+                       }
+                       elseif (strspn($this->data, "\r\n", $this->position, 1))
+                       {
+                               $this->position++;
+                       }
+                       $this->state = 'name';
+               }
+       }
+
+       /**
+        * Parse a header name
+        *
+        * @access private
+        */
+       function name()
+       {
+               $len = strcspn($this->data, ':', $this->position);
+               $this->name = substr($this->data, $this->position, $len);
+               $this->position += $len;
+
+               if ($this->has_data() && $this->data[$this->position] == ':')
+               {
+                       $this->state = 'value_next';
+                       $this->position++;
+               }
+               else
+               {
+                       $this->state = false;
+               }
+       }
+
+       /**
+        * See what state to move the state machine to while within non-quoted header values
+        *
+        * @access private
+        */
+       function value_next()
+       {
+               if ($this->is_linear_whitespace())
+               {
+                       $this->state = 'value_linear_whitespace';
+               }
+               elseif ($this->data[$this->position] == '"')
+               {
+                       $this->state = 'value_quote_next';
+                       $this->position++;
+               }
+               elseif (substr($this->data, $this->position, 2) == "\r\n")
+               {
+                       $this->state = 'end_crlf';
+                       $this->position += 2;
+               }
+               elseif (strspn($this->data, "\r\n", $this->position, 1))
+               {
+                       $this->state = 'end_crlf';
+                       $this->position++;
+               }
+               else
+               {
+                       $this->state = 'value_no_quote';
+               }
+       }
+
+       /**
+        * Parse a header value while outside quotes
+        *
+        * @access private
+        */
+       function value_no_quote()
+       {
+               $len = strcspn($this->data, "\x09\x20\r\n\"", $this->position);
+               $this->value .= substr($this->data, $this->position, $len);
+               $this->state = 'value_next';
+               $this->position += $len;
+       }
+
+       /**
+        * Parse LWS outside quotes
+        *
+        * @access private
+        */
+       function value_linear_whitespace()
+       {
+               $this->linear_whitespace();
+               $this->state = 'value_next';
+       }
+
+       /**
+        * See what state to move the state machine to while within quoted header values
+        *
+        * @access private
+        */
+       function value_quote_next()
+       {
+               if ($this->is_linear_whitespace())
+               {
+                       $this->state = 'value_linear_whitespace_quote';
+               }
+               else
+               {
+                       switch ($this->data[$this->position])
+                       {
+                               case '"':
+                                       $this->state = 'value_next';
+                                       $this->position++;
+                                       break;
+
+                               case '\\':
+                                       $this->state = 'value_quote_char';
+                                       $this->position++;
+                                       break;
+
+                               default:
+                                       $this->state = 'value_quote';
+                                       break;
+                       }
+               }
+       }
+
+       /**
+        * Parse a header value while within quotes
+        *
+        * @access private
+        */
+       function value_quote()
+       {
+               $len = strcspn($this->data, "\x09\x20\r\n\"\\", $this->position);
+               $this->value .= substr($this->data, $this->position, $len);
+               $this->position += $len;
+               $this->state = 'value_quote_next';
+       }
+
+       /**
+        * Parse an escaped character within quotes
+        *
+        * @access private
+        */
+       function value_quote_char()
+       {
+               $this->value .= $this->data[$this->position];
+               $this->state = 'value_quote_next';
+               $this->position++;
+       }
+
+       /**
+        * Parse LWS within quotes
+        *
+        * @access private
+        */
+       function value_linear_whitespace_quote()
+       {
+               $this->linear_whitespace();
+               $this->state = 'value_quote_next';
+       }
+
+       /**
+        * Parse a CRLF, and see whether we have a further header, or whether we are followed by the body
+        *
+        * @access private
+        */
+       function end_crlf()
+       {
+               $this->name = strtolower($this->name);
+               $this->value = trim($this->value, "\x20");
+               if (isset($this->headers[$this->name]))
+               {
+                       $this->headers[$this->name] .= ', ' . $this->value;
+               }
+               else
+               {
+                       $this->headers[$this->name] = $this->value;
+               }
+
+               if (substr($this->data, $this->position, 2) == "\r\n")
+               {
+                       $this->body = substr($this->data, $this->position + 2);
+                       $this->state = 'emit';
+               }
+               elseif (strspn($this->data, "\r\n", $this->position, 1))
+               {
+                       $this->body = substr($this->data, $this->position + 1);
+                       $this->state = 'emit';
+               }
+               else
+               {
+                       $this->name = '';
+                       $this->value = '';
+                       $this->state = 'name';
+               }
+       }
+}
+
+class SimplePie_Cache
+{
+       var $location;
+       var $filename;
+       var $extension;
+       var $name;
+
+       function SimplePie_Cache($location, $filename, $extension)
+       {
+               $this->location = $location;
+               $this->filename = rawurlencode($filename);
+               $this->extension = rawurlencode($extension);
+               $this->name = "$location/$this->filename.$this->extension";
+       }
+
+       function save($data)
+       {
+               if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
+               {
+                       if (function_exists('file_put_contents'))
+                       {
+                               return (bool) file_put_contents($this->name, serialize($data));
+                       }
+                       else
+                       {
+                               $fp = fopen($this->name, 'wb');
+                               if ($fp)
+                               {
+                                       fwrite($fp, serialize($data));
+                                       fclose($fp);
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       }
+
+       function load()
+       {
+               if (file_exists($this->name) && is_readable($this->name))
+               {
+                       if (function_exists('file_get_contents'))
+                       {
+                               return unserialize(file_get_contents($this->name));
+                       }
+                       elseif (($fp = fopen($this->name, 'rb')) !== false)
+                       {
+                               $data = '';
+                               while (!feof($fp))
+                               {
+                                       $data .= fread($fp, 8192);
+                               }
+                               fclose($fp);
+                               return unserialize($data);
+                       }
+               }
+               return false;
+       }
+
+       function mtime()
+       {
+               if (file_exists($this->name))
+               {
+                       return filemtime($this->name);
+               }
+               return false;
+       }
+
+       function touch()
+       {
+               if (file_exists($this->name))
+               {
+                       return touch($this->name);
+               }
+               return false;
+       }
+
+       function unlink()
+       {
+               if (file_exists($this->name))
+               {
+                       return unlink($this->name);
+               }
+               return false;
+       }
+}
+
+class SimplePie_Misc
+{
+       function time_hms($seconds)
+       {
+               $time = '';
+
+               $hours = floor($seconds / 3600);
+               $remainder = $seconds % 3600;
+               if ($hours > 0)
+               {
+                       $time .= $hours.':';
+               }
+
+               $minutes = floor($remainder / 60);
+               $seconds = $remainder % 60;
+               if ($minutes < 10 && $hours > 0)
+               {
+                       $minutes = '0' . $minutes;
+               }
+               if ($seconds < 10)
+               {
+                       $seconds = '0' . $seconds;
+               }
+
+               $time .= $minutes.':';
+               $time .= $seconds;
+
+               return $time;
+       }
+
+       function absolutize_url($relative, $base)
+       {
+               if ($relative !== '')
+               {
+                       $relative = SimplePie_Misc::parse_url($relative);
+                       if ($relative['scheme'] !== '')
+                       {
+                               $target = $relative;
+                       }
+                       elseif ($base !== '')
+                       {
+                               $base = SimplePie_Misc::parse_url($base);
+                               $target = SimplePie_Misc::parse_url('');
+                               if ($relative['authority'] !== '')
+                               {
+                                       $target = $relative;
+                                       $target['scheme'] = $base['scheme'];
+                               }
+                               else
+                               {
+                                       $target['scheme'] = $base['scheme'];
+                                       $target['authority'] = $base['authority'];
+                                       if ($relative['path'] !== '')
+                                       {
+                                               if (strpos($relative['path'], '/') === 0)
+                                               {
+                                                       $target['path'] = $relative['path'];
+                                               }
+                                               elseif (($target['path'] = dirname("$base[path].")) == '/')
+                                               {
+                                                       $target['path'] .= $relative['path'];
+                                               }
+                                               else
+                                               {
+                                                       $target['path'] .= '/' . $relative['path'];
+                                               }
+                                               if ($relative['query'] !== '')
+                                               {
+                                                       $target['query'] = $relative['query'];
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if ($base['path'] !== '')
+                                               {
+                                                       $target['path'] = $base['path'];
+                                               }
+                                               else
+                                               {
+                                                       $target['path'] = '/';
+                                               }
+                                               if ($relative['query'] !== '')
+                                               {
+                                                       $target['query'] = $relative['query'];
+                                               }
+                                               elseif ($base['query'] !== '')
+                                               {
+                                                       $target['query'] = $base['query'];
+                                               }
+                                       }
+                               }
+                               if ($relative['fragment'] !== '')
+                               {
+                                       $target['fragment'] = $relative['fragment'];
+                               }
+                       }
+                       else
+                       {
+                               // No base URL, just return the relative URL
+                               $target = $relative;
+                       }
+                       $return = SimplePie_Misc::compress_parse_url($target['scheme'], $target['authority'], $target['path'], $target['query'], $target['fragment']);
+               }
+               else
+               {
+                       $return = $base;
+               }
+               $return = SimplePie_Misc::normalize_url($return);
+               return $return;
+       }
+
+       function remove_dot_segments($input)
+       {
+               $output = '';
+               while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input == '.' || $input == '..')
+               {
+                       // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
+                       if (strpos($input, '../') === 0)
+                       {
+                               $input = substr($input, 3);
+                       }
+                       elseif (strpos($input, './') === 0)
+                       {
+                               $input = substr($input, 2);
+                       }
+                       // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
+                       elseif (strpos($input, '/./') === 0)
+                       {
+                               $input = substr_replace($input, '/', 0, 3);
+                       }
+                       elseif ($input == '/.')
+                       {
+                               $input = '/';
+                       }
+                       // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
+                       elseif (strpos($input, '/../') === 0)
+                       {
+                               $input = substr_replace($input, '/', 0, 4);
+                               $output = substr_replace($output, '', strrpos($output, '/'));
+                       }
+                       elseif ($input == '/..')
+                       {
+                               $input = '/';
+                               $output = substr_replace($output, '', strrpos($output, '/'));
+                       }
+                       // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
+                       elseif ($input == '.' || $input == '..')
+                       {
+                               $input = '';
+                       }
+                       // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
+                       elseif (($pos = strpos($input, '/', 1)) !== false)
+                       {
+                               $output .= substr($input, 0, $pos);
+                               $input = substr_replace($input, '', 0, $pos);
+                       }
+                       else
+                       {
+                               $output .= $input;
+                               $input = '';
+                       }
+               }
+               return $output . $input;
+       }
+
+       function get_element($realname, $string)
+       {
+               $return = array();
+               $name = preg_quote($realname, '/');
+               if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
+               {
+                       for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++)
+                       {
+                               $return[$i]['tag'] = $realname;
+                               $return[$i]['full'] = $matches[$i][0][0];
+                               $return[$i]['offset'] = $matches[$i][0][1];
+                               if (strlen($matches[$i][3][0]) <= 2)
+                               {
+                                       $return[$i]['self_closing'] = true;
+                               }
+                               else
+                               {
+                                       $return[$i]['self_closing'] = false;
+                                       $return[$i]['content'] = $matches[$i][4][0];
+                               }
+                               $return[$i]['attribs'] = array();
+                               if (isset($matches[$i][2][0]) && preg_match_all('/((?:[^\s:]+:)?[^\s:]+)(?:\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([a-z0-9\-._:]*)))?\s/U', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER))
+                               {
+                                       for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++)
+                                       {
+                                               if (count($attribs[$j]) == 2)
+                                               {
+                                                       $attribs[$j][2] = $attribs[$j][1];
+                                               }
+                                               $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8');
+                                       }
+                               }
+                       }
+               }
+               return $return;
+       }
+
+       function element_implode($element)
+       {
+               $full = "<$element[tag]";
+               foreach ($element['attribs'] as $key => $value)
+               {
+                       $key = strtolower($key);
+                       $full .= " $key=\"" . htmlspecialchars($value['data']) . '"';
+               }
+               if ($element['self_closing'])
+               {
+                       $full .= ' />';
+               }
+               else
+               {
+                       $full .= ">$element[content]</$element[tag]>";
+               }
+               return $full;
+       }
+
+       function error($message, $level, $file, $line)
+       {
+               switch ($level)
+               {
+                       case E_USER_ERROR:
+                               $note = 'PHP Error';
+                               break;
+                       case E_USER_WARNING:
+                               $note = 'PHP Warning';
+                               break;
+                       case E_USER_NOTICE:
+                               $note = 'PHP Notice';
+                               break;
+                       default:
+                               $note = 'Unknown Error';
+                               break;
+               }
+               error_log("$note: $message in $file on line $line", 0);
+               return $message;
+       }
+
+       /**
+        * If a file has been cached, retrieve and display it.
+        *
+        * This is most useful for caching images (get_favicon(), etc.),
+        * however it works for all cached files.  This WILL NOT display ANY
+        * file/image/page/whatever, but rather only display what has already
+        * been cached by SimplePie.
+        *
+        * @access public
+        * @see SimplePie::get_favicon()
+        * @param str $identifier_url URL that is used to identify the content.
+        * This may or may not be the actual URL of the live content.
+        * @param str $cache_location Location of SimplePie's cache.  Defaults
+        * to './cache'.
+        * @param str $cache_extension The file extension that the file was
+        * cached with.  Defaults to 'spc'.
+        * @param str $cache_class Name of the cache-handling class being used
+        * in SimplePie.  Defaults to 'SimplePie_Cache', and should be left
+        * as-is unless you've overloaded the class.
+        * @param str $cache_name_function Function that converts the filename
+        * for saving.  Defaults to 'md5'.
+        */
+       function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5')
+       {
+               $cache =& new $cache_class($cache_location, call_user_func($cache_name_function, $identifier_url), $cache_extension);
+
+               if ($file = $cache->load())
+               {
+                       header('Content-type:' . $file['headers']['content-type']);
+                       header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+                       echo $file['body'];
+                       exit;
+               }
+
+               die('Cached file for ' . $identifier_url . ' cannot be found.');
+       }
+
+       function fix_protocol($url, $http = 1)
+       {
+               $url = SimplePie_Misc::normalize_url($url);
+               $parsed = SimplePie_Misc::parse_url($url);
+               if ($parsed['scheme'] !== '' && $parsed['scheme'] != 'http' && $parsed['scheme'] != 'https')
+               {
+                       return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
+               }
+               
+               if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url))
+               {
+                       return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
+               }
+
+               if ($http == 2 && $parsed['scheme'] !== '')
+               {
+                       return "feed:$url";
+               }
+               elseif ($http == 3 && strtolower($parsed['scheme']) == 'http')
+               {
+                       return substr_replace($url, 'podcast', 0, 4);
+               }
+               elseif ($http == 4 && strtolower($parsed['scheme']) == 'http')
+               {
+                       return substr_replace($url, 'itpc', 0, 4);
+               }
+               else
+               {
+                       return $url;
+               }
+       }
+
+       function parse_url($url)
+       {
+               static $cache = array();
+               if (isset($cache[$url]))
+               {
+                       return $cache[$url];
+               }
+               elseif (preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $url, $match))
+               {
+                       for ($i = count($match); $i <= 9; $i++)
+                       {
+                               $match[$i] = '';
+                       }
+                       return $cache[$url] = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]);
+               }
+               else
+               {
+                       return $cache[$url] = array('scheme' => '', 'authority' => '', 'path' => '', 'query' => '', 'fragment' => '');
+               }
+       }
+
+       function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
+       {
+               $return = '';
+               if ($scheme !== '')
+               {
+                       $return .= "$scheme:";
+               }
+               if ($authority !== '')
+               {
+                       $return .= "//$authority";
+               }
+               if ($path !== '')
+               {
+                       $return .= $path;
+               }
+               if ($query !== '')
+               {
+                       $return .= "?$query";
+               }
+               if ($fragment !== '')
+               {
+                       $return .= "#$fragment";
+               }
+               return $return;
+       }
+
+       function normalize_url($url)
+       {
+               $url = preg_replace_callback('/%([0-9A-Fa-f]{2})/', array('SimplePie_Misc', 'percent_encoding_normalization'), $url);
+               $url = SimplePie_Misc::parse_url($url);
+               $url['scheme'] = strtolower($url['scheme']);
+               if ($url['authority'] !== '')
+               {
+                       $url['authority'] = strtolower($url['authority']);
+                       $url['path'] = SimplePie_Misc::remove_dot_segments($url['path']);
+               }
+               return SimplePie_Misc::compress_parse_url($url['scheme'], $url['authority'], $url['path'], $url['query'], $url['fragment']);
+       }
+
+       function percent_encoding_normalization($match)
+       {
+               $integer = hexdec($match[1]);
+               if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer == 0x2D || $integer == 0x2E || $integer == 0x5F || $integer == 0x7E)
+               {
+                       return chr($integer);
+               }
+               else
+               {
+                       return strtoupper($match[0]);
+               }
+       }
+
+       /**
+        * Remove bad UTF-8 bytes
+        *
+        * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C
+        * FAQ: Multilingual Forms (modified to include full ASCII range)
+        *
+        * @author Geoffrey Sneddon
+        * @see http://www.w3.org/International/questions/qa-forms-utf-8
+        * @param string $str String to remove bad UTF-8 bytes from
+        * @return string UTF-8 string
+        */
+       function utf8_bad_replace($str)
+       {
+               if (function_exists('iconv'))
+               {
+                       return iconv('UTF-8', 'UTF-8//IGNORE', $str);
+               }
+               elseif (function_exists('mb_convert_encoding'))
+               {
+                       return mb_convert_encoding($str, 'UTF-8', 'UTF-8');
+               }
+               elseif (preg_match_all('/([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})/', $str, $matches))
+               {
+                       return implode("\xEF\xBF\xBD", $matches[0]);
+               }
+               elseif ($str !== '')
+               {
+                       return "\xEF\xBF\xBD";
+               }
+               else
+               {
+                       return '';
+               }
+       }
+
+       function change_encoding($data, $input, $output)
+       {
+               $input = SimplePie_Misc::encoding($input);
+               $output = SimplePie_Misc::encoding($output);
+
+               if (function_exists('iconv') && ($return = @iconv($input, "$output//IGNORE", $data)))
+               {
+                       return $return;
+               }
+               elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data)))
+               {
+                       return $return;
+               }
+               elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input)))
+               {
+                       return $return;
+               }
+               elseif ($input == 'ISO-8859-1' && $output == 'UTF-8')
+               {
+                       return utf8_encode($data);
+               }
+               elseif ($input == 'UTF-8' && $output == 'ISO-8859-1')
+               {
+                       return utf8_decode($data);
+               }
+               return $data;
+       }
+
+       function encoding($encoding)
+       {
+               // Character sets are case-insensitive (though we'll return them in the form given in their registration)
+               switch (strtoupper($encoding))
+               {
+                       case 'ANSI_X3.4-1968':
+                       case 'ISO-IR-6':
+                       case 'ANSI_X3.4-1986':
+                       case 'ISO_646.IRV:1991':
+                       case 'ASCII':
+                       case 'ISO646-US':
+                       case 'US-ASCII':
+                       case 'US':
+                       case 'IBM367':
+                       case 'CP367':
+                       case 'CSASCII':
+                               return 'US-ASCII';
+
+                       case 'ISO_8859-1:1987':
+                       case 'ISO-IR-100':
+                       case 'ISO_8859-1':
+                       case 'ISO-8859-1':
+                       case 'LATIN1':
+                       case 'L1':
+                       case 'IBM819':
+                       case 'CP819':
+                       case 'CSISOLATIN1':
+                               return 'ISO-8859-1';
+
+                       case 'ISO_8859-2:1987':
+                       case 'ISO-IR-101':
+                       case 'ISO_8859-2':
+                       case 'ISO-8859-2':
+                       case 'LATIN2':
+                       case 'L2':
+                       case 'CSISOLATIN2':
+                               return 'ISO-8859-2';
+
+                       case 'ISO_8859-3:1988':
+                       case 'ISO-IR-109':
+                       case 'ISO_8859-3':
+                       case 'ISO-8859-3':
+                       case 'LATIN3':
+                       case 'L3':
+                       case 'CSISOLATIN3':
+                               return 'ISO-8859-3';
+
+                       case 'ISO_8859-4:1988':
+                       case 'ISO-IR-110':
+                       case 'ISO_8859-4':
+                       case 'ISO-8859-4':
+                       case 'LATIN4':
+                       case 'L4':
+                       case 'CSISOLATIN4':
+                               return 'ISO-8859-4';
+
+                       case 'ISO_8859-5:1988':
+                       case 'ISO-IR-144':
+                       case 'ISO_8859-5':
+                       case 'ISO-8859-5':
+                       case 'CYRILLIC':
+                       case 'CSISOLATINCYRILLIC':
+                               return 'ISO-8859-5';
+
+                       case 'ISO_8859-6:1987':
+                       case 'ISO-IR-127':
+                       case 'ISO_8859-6':
+                       case 'ISO-8859-6':
+                       case 'ECMA-114':
+                       case 'ASMO-708':
+                       case 'ARABIC':
+                       case 'CSISOLATINARABIC':
+                               return 'ISO-8859-6';
+
+                       case 'ISO_8859-7:1987':
+                       case 'ISO-IR-126':
+                       case 'ISO_8859-7':
+                       case 'ISO-8859-7':
+                       case 'ELOT_928':
+                       case 'ECMA-118':
+                       case 'GREEK':
+                       case 'GREEK8':
+                       case 'CSISOLATINGREEK':
+                               return 'ISO-8859-7';
+
+                       case 'ISO_8859-8:1988':
+                       case 'ISO-IR-138':
+                       case 'ISO_8859-8':
+                       case 'ISO-8859-8':
+                       case 'HEBREW':
+                       case 'CSISOLATINHEBREW':
+                               return 'ISO-8859-8';
+
+                       case 'ISO_8859-9:1989':
+                       case 'ISO-IR-148':
+                       case 'ISO_8859-9':
+                       case 'ISO-8859-9':
+                       case 'LATIN5':
+                       case 'L5':
+                       case 'CSISOLATIN5':
+                               return 'ISO-8859-9';
+
+                       case 'ISO-8859-10':
+                       case 'ISO-IR-157':
+                       case 'L6':
+                       case 'ISO_8859-10:1992':
+                       case 'CSISOLATIN6':
+                       case 'LATIN6':
+                               return 'ISO-8859-10';
+
+                       case 'ISO_6937-2-ADD':
+                       case 'ISO-IR-142':
+                       case 'CSISOTEXTCOMM':
+                               return 'ISO_6937-2-add';
+
+                       case 'JIS_X0201':
+                       case 'X0201':
+                       case 'CSHALFWIDTHKATAKANA':
+                               return 'JIS_X0201';
+
+                       case 'JIS_ENCODING':
+                       case 'CSJISENCODING':
+                               return 'JIS_Encoding';
+
+                       case 'SHIFT_JIS':
+                       case 'MS_KANJI':
+                       case 'CSSHIFTJIS':
+                               return 'Shift_JIS';
+
+                       case 'EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE':
+                       case 'CSEUCPKDFMTJAPANESE':
+                       case 'EUC-JP':
+                               return 'EUC-JP';
+
+                       case 'EXTENDED_UNIX_CODE_FIXED_WIDTH_FOR_JAPANESE':
+                       case 'CSEUCFIXWIDJAPANESE':
+                               return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
+
+                       case 'BS_4730':
+                       case 'ISO-IR-4':
+                       case 'ISO646-GB':
+                       case 'GB':
+                       case 'UK':
+                       case 'CSISO4UNITEDKINGDOM':
+                               return 'BS_4730';
+
+                       case 'SEN_850200_C':
+                       case 'ISO-IR-11':
+                       case 'ISO646-SE2':
+                       case 'SE2':
+                       case 'CSISO11SWEDISHFORNAMES':
+                               return 'SEN_850200_C';
+
+                       case 'IT':
+                       case 'ISO-IR-15':
+                       case 'ISO646-IT':
+                       case 'CSISO15ITALIAN':
+                               return 'IT';
+
+                       case 'ES':
+                       case 'ISO-IR-17':
+                       case 'ISO646-ES':
+                       case 'CSISO17SPANISH':
+                               return 'ES';
+
+                       case 'DIN_66003':
+                       case 'ISO-IR-21':
+                       case 'DE':
+                       case 'ISO646-DE':
+                       case 'CSISO21GERMAN':
+                               return 'DIN_66003';
+
+                       case 'NS_4551-1':
+                       case 'ISO-IR-60':
+                       case 'ISO646-NO':
+                       case 'NO':
+                       case 'CSISO60DANISHNORWEGIAN':
+                       case 'CSISO60NORWEGIAN1':
+                               return 'NS_4551-1';
+
+                       case 'NF_Z_62-010':
+                       case 'ISO-IR-69':
+                       case 'ISO646-FR':
+                       case 'FR':
+                       case 'CSISO69FRENCH':
+                               return 'NF_Z_62-010';
+
+                       case 'ISO-10646-UTF-1':
+                       case 'CSISO10646UTF1':
+                               return 'ISO-10646-UTF-1';
+
+                       case 'ISO_646.BASIC:1983':
+                       case 'REF':
+                       case 'CSISO646BASIC1983':
+                               return 'ISO_646.basic:1983';
+
+                       case 'INVARIANT':
+                       case 'CSINVARIANT':
+                               return 'INVARIANT';
+
+                       case 'ISO_646.IRV:1983':
+                       case 'ISO-IR-2':
+                       case 'IRV':
+                       case 'CSISO2INTLREFVERSION':
+                               return 'ISO_646.irv:1983';
+
+                       case 'NATS-SEFI':
+                       case 'ISO-IR-8-1':
+                       case 'CSNATSSEFI':
+                               return 'NATS-SEFI';
+
+                       case 'NATS-SEFI-ADD':
+                       case 'ISO-IR-8-2':
+                       case 'CSNATSSEFIADD':
+                               return 'NATS-SEFI-ADD';
+
+                       case 'NATS-DANO':
+                       case 'ISO-IR-9-1':
+                       case 'CSNATSDANO':
+                               return 'NATS-DANO';
+
+                       case 'NATS-DANO-ADD':
+                       case 'ISO-IR-9-2':
+                       case 'CSNATSDANOADD':
+                               return 'NATS-DANO-ADD';
+
+                       case 'SEN_850200_B':
+                       case 'ISO-IR-10':
+                       case 'FI':
+                       case 'ISO646-FI':
+                       case 'ISO646-SE':
+                       case 'SE':
+                       case 'CSISO10SWEDISH':
+                               return 'SEN_850200_B';
+
+                       case 'KS_C_5601-1987':
+                       case 'ISO-IR-149':
+                       case 'KS_C_5601-1989':
+                       case 'KSC_5601':
+                       case 'KOREAN':
+                       case 'CSKSC56011987':
+                               return 'KS_C_5601-1987';
+
+                       case 'ISO-2022-KR':
+                       case 'CSISO2022KR':
+                               return 'ISO-2022-KR';
+
+                       case 'EUC-KR':
+                       case 'CSEUCKR':
+                               return 'EUC-KR';
+
+                       case 'ISO-2022-JP':
+                       case 'CSISO2022JP':
+                               return 'ISO-2022-JP';
+
+                       case 'ISO-2022-JP-2':
+                       case 'CSISO2022JP2':
+                               return 'ISO-2022-JP-2';
+
+                       case 'JIS_C6220-1969-JP':
+                       case 'JIS_C6220-1969':
+                       case 'ISO-IR-13':
+                       case 'KATAKANA':
+                       case 'X0201-7':
+                       case 'CSISO13JISC6220JP':
+                               return 'JIS_C6220-1969-jp';
+
+                       case 'JIS_C6220-1969-RO':
+                       case 'ISO-IR-14':
+                       case 'JP':
+                       case 'ISO646-JP':
+                       case 'CSISO14JISC6220RO':
+                               return 'JIS_C6220-1969-ro';
+
+                       case 'PT':
+                       case 'ISO-IR-16':
+                       case 'ISO646-PT':
+                       case 'CSISO16PORTUGUESE':
+                               return 'PT';
+
+                       case 'GREEK7-OLD':
+                       case 'ISO-IR-18':
+                       case 'CSISO18GREEK7OLD':
+                               return 'greek7-old';
+
+                       case 'LATIN-GREEK':
+                       case 'ISO-IR-19':
+                       case 'CSISO19LATINGREEK':
+                               return 'latin-greek';
+
+                       case 'NF_Z_62-010_(1973)':
+                       case 'ISO-IR-25':
+                       case 'ISO646-FR1':
+                       case 'CSISO25FRENCH':
+                               return 'NF_Z_62-010_(1973)';
+
+                       case 'LATIN-GREEK-1':
+                       case 'ISO-IR-27':
+                       case 'CSISO27LATINGREEK1':
+                               return 'Latin-greek-1';
+
+                       case 'ISO_5427':
+                       case 'ISO-IR-37':
+                       case 'CSISO5427CYRILLIC':
+                               return 'ISO_5427';
+
+                       case 'JIS_C6226-1978':
+                       case 'ISO-IR-42':
+                       case 'CSISO42JISC62261978':
+                               return 'JIS_C6226-1978';
+
+                       case 'BS_VIEWDATA':
+                       case 'ISO-IR-47':
+                       case 'CSISO47BSVIEWDATA':
+                               return 'BS_viewdata';
+
+                       case 'INIS':
+                       case 'ISO-IR-49':
+                       case 'CSISO49INIS':
+                               return 'INIS';
+
+                       case 'INIS-8':
+                       case 'ISO-IR-50':
+                       case 'CSISO50INIS8':
+                               return 'INIS-8';
+
+                       case 'INIS-CYRILLIC':
+                       case 'ISO-IR-51':
+                       case 'CSISO51INISCYRILLIC':
+                               return 'INIS-cyrillic';
+
+                       case 'ISO_5427:1981':
+                       case 'ISO-IR-54':
+                       case 'ISO5427CYRILLIC1981':
+                               return 'ISO_5427:1981';
+
+                       case 'ISO_5428:1980':
+                       case 'ISO-IR-55':
+                       case 'CSISO5428GREEK':
+                               return 'ISO_5428:1980';
+
+                       case 'GB_1988-80':
+                       case 'ISO-IR-57':
+                       case 'CN':
+                       case 'ISO646-CN':
+                       case 'CSISO57GB1988':
+                               return 'GB_1988-80';
+
+                       case 'GB_2312-80':
+                       case 'ISO-IR-58':
+                       case 'CHINESE':
+                       case 'CSISO58GB231280':
+                               return 'GB_2312-80';
+
+                       case 'NS_4551-2':
+                       case 'ISO646-NO2':
+                       case 'ISO-IR-61':
+                       case 'NO2':
+                       case 'CSISO61NORWEGIAN2':
+                               return 'NS_4551-2';
+
+                       case 'VIDEOTEX-SUPPL':
+                       case 'ISO-IR-70':
+                       case 'CSISO70VIDEOTEXSUPP1':
+                               return 'videotex-suppl';
+
+                       case 'PT2':
+                       case 'ISO-IR-84':
+                       case 'ISO646-PT2':
+                       case 'CSISO84PORTUGUESE2':
+                               return 'PT2';
+
+                       case 'ES2':
+                       case 'ISO-IR-85':
+                       case 'ISO646-ES2':
+                       case 'CSISO85SPANISH2':
+                               return 'ES2';
+
+                       case 'MSZ_7795.3':
+                       case 'ISO-IR-86':
+                       case 'ISO646-HU':
+                       case 'HU':
+                       case 'CSISO86HUNGARIAN':
+                               return 'MSZ_7795.3';
+
+                       case 'JIS_C6226-1983':
+                       case 'ISO-IR-87':
+                       case 'X0208':
+                       case 'JIS_X0208-1983':
+                       case 'CSISO87JISX0208':
+                               return 'JIS_C6226-1983';
+
+                       case 'GREEK7':
+                       case 'ISO-IR-88':
+                       case 'CSISO88GREEK7':
+                               return 'greek7';
+
+                       case 'ASMO_449':
+                       case 'ISO_9036':
+                       case 'ARABIC7':
+                       case 'ISO-IR-89':
+                       case 'CSISO89ASMO449':
+                               return 'ASMO_449';
+
+                       case 'ISO-IR-90':
+                       case 'CSISO90':
+                               return 'iso-ir-90';
+
+                       case 'JIS_C6229-1984-A':
+                       case 'ISO-IR-91':
+                       case 'JP-OCR-A':
+                       case 'CSISO91JISC62291984A':
+                               return 'JIS_C6229-1984-a';
+
+                       case 'JIS_C6229-1984-B':
+                       case 'ISO-IR-92':
+                       case 'ISO646-JP-OCR-B':
+                       case 'JP-OCR-B':
+                       case 'CSISO92JISC62991984B':
+                               return 'JIS_C6229-1984-b';
+
+                       case 'JIS_C6229-1984-B-ADD':
+                       case 'ISO-IR-93':
+                       case 'JP-OCR-B-ADD':
+                       case 'CSISO93JIS62291984BADD':
+                               return 'JIS_C6229-1984-b-add';
+
+                       case 'JIS_C6229-1984-HAND':
+                       case 'ISO-IR-94':
+                       case 'JP-OCR-HAND':
+                       case 'CSISO94JIS62291984HAND':
+                               return 'JIS_C6229-1984-hand';
+
+                       case 'JIS_C6229-1984-HAND-ADD':
+                       case 'ISO-IR-95':
+                       case 'JP-OCR-HAND-ADD':
+                       case 'CSISO95JIS62291984HANDADD':
+                               return 'JIS_C6229-1984-hand-add';
+
+                       case 'JIS_C6229-1984-KANA':
+                       case 'ISO-IR-96':
+                       case 'CSISO96JISC62291984KANA':
+                               return 'JIS_C6229-1984-kana';
+
+                       case 'ISO_2033-1983':
+                       case 'ISO-IR-98':
+                       case 'E13B':
+                       case 'CSISO2033':
+                               return 'ISO_2033-1983';
+
+                       case 'ANSI_X3.110-1983':
+                       case 'ISO-IR-99':
+                       case 'CSA_T500-1983':
+                       case 'NAPLPS':
+                       case 'CSISO99NAPLPS':
+                               return 'ANSI_X3.110-1983';
+
+                       case 'T.61-7BIT':
+                       case 'ISO-IR-102':
+                       case 'CSISO102T617BIT':
+                               return 'T.61-7bit';
+
+                       case 'T.61-8BIT':
+                       case 'T.61':
+                       case 'ISO-IR-103':
+                       case 'CSISO103T618BIT':
+                               return 'T.61-8bit';
+
+                       case 'ECMA-CYRILLIC':
+                       case 'ISO-IR-111':
+                       case 'KOI8-E':
+                       case 'CSISO111ECMACYRILLIC':
+                               return 'ECMA-cyrillic';
+
+                       case 'CSA_Z243.4-1985-1':
+                       case 'ISO-IR-121':
+                       case 'ISO646-CA':
+                       case 'CSA7-1':
+                       case 'CA':
+                       case 'CSISO121CANADIAN1':
+                               return 'CSA_Z243.4-1985-1';
+
+                       case 'CSA_Z243.4-1985-2':
+                       case 'ISO-IR-122':
+                       case 'ISO646-CA2':
+                       case 'CSA7-2':
+                       case 'CSISO122CANADIAN2':
+                               return 'CSA_Z243.4-1985-2';
+
+                       case 'CSA_Z243.4-1985-GR':
+                       case 'ISO-IR-123':
+                       case 'CSISO123CSAZ24341985GR':
+                               return 'CSA_Z243.4-1985-gr';
+
+                       case 'ISO_8859-6-E':
+                       case 'CSISO88596E':
+                       case 'ISO-8859-6-E':
+                               return 'ISO-8859-6-E';
+
+                       case 'ISO_8859-6-I':
+                       case 'CSISO88596I':
+                       case 'ISO-8859-6-I':
+                               return 'ISO-8859-6-I';
+
+                       case 'T.101-G2':
+                       case 'ISO-IR-128':
+                       case 'CSISO128T101G2':
+                               return 'T.101-G2';
+
+                       case 'ISO_8859-8-E':
+                       case 'CSISO88598E':
+                       case 'ISO-8859-8-E':
+                               return 'ISO-8859-8-E';
+
+                       case 'ISO_8859-8-I':
+                       case 'CSISO88598I':
+                       case 'ISO-8859-8-I':
+                               return 'ISO-8859-8-I';
+
+                       case 'CSN_369103':
+                       case 'ISO-IR-139':
+                       case 'CSISO139CSN369103':
+                               return 'CSN_369103';
+
+                       case 'JUS_I.B1.002':
+                       case 'ISO-IR-141':
+                       case 'ISO646-YU':
+                       case 'JS':
+                       case 'YU':
+                       case 'CSISO141JUSIB1002':
+                               return 'JUS_I.B1.002';
+
+                       case 'IEC_P27-1':
+                       case 'ISO-IR-143':
+                       case 'CSISO143IECP271':
+                               return 'IEC_P27-1';
+
+                       case 'JUS_I.B1.003-SERB':
+                       case 'ISO-IR-146':
+                       case 'SERBIAN':
+                       case 'CSISO146SERBIAN':
+                               return 'JUS_I.B1.003-serb';
+
+                       case 'JUS_I.B1.003-MAC':
+                       case 'MACEDONIAN':
+                       case 'ISO-IR-147':
+                       case 'CSISO147MACEDONIAN':
+                               return 'JUS_I.B1.003-mac';
+
+                       case 'GREEK-CCITT':
+                       case 'ISO-IR-150':
+                       case 'CSISO150':
+                       case 'CSISO150GREEKCCITT':
+                               return 'greek-ccitt';
+
+                       case 'NC_NC00-10:81':
+                       case 'CUBA':
+                       case 'ISO-IR-151':
+                       case 'ISO646-CU':
+                       case 'CSISO151CUBA':
+                               return 'NC_NC00-10:81';
+
+                       case 'ISO_6937-2-25':
+                       case 'ISO-IR-152':
+                       case 'CSISO6937ADD':
+                               return 'ISO_6937-2-25';
+
+                       case 'GOST_19768-74':
+                       case 'ST_SEV_358-88':
+                       case 'ISO-IR-153':
+                       case 'CSISO153GOST1976874':
+                               return 'GOST_19768-74';
+
+                       case 'ISO_8859-SUPP':
+                       case 'ISO-IR-154':
+                       case 'LATIN1-2-5':
+                       case 'CSISO8859SUPP':
+                               return 'ISO_8859-supp';
+
+                       case 'ISO_10367-BOX':
+                       case 'ISO-IR-155':
+                       case 'CSISO10367BOX':
+                               return 'ISO_10367-box';
+
+                       case 'LATIN-LAP':
+                       case 'LAP':
+                       case 'ISO-IR-158':
+                       case 'CSISO158LAP':
+                               return 'latin-lap';
+
+                       case 'JIS_X0212-1990':
+                       case 'X0212':
+                       case 'ISO-IR-159':
+                       case 'CSISO159JISX02121990':
+                               return 'JIS_X0212-1990';
+
+                       case 'DS_2089':
+                       case 'DS2089':
+                       case 'ISO646-DK':
+                       case 'DK':
+                       case 'CSISO646DANISH':
+                               return 'DS_2089';
+
+                       case 'US-DK':
+                       case 'CSUSDK':
+                               return 'us-dk';
+
+                       case 'DK-US':
+                       case 'CSDKUS':
+                               return 'dk-us';
+
+                       case 'KSC5636':
+                       case 'ISO646-KR':
+                       case 'CSKSC5636':
+                               return 'KSC5636';
+
+                       case 'UNICODE-1-1-UTF-7':
+                       case 'CSUNICODE11UTF7':
+                               return 'UNICODE-1-1-UTF-7';
+
+                       case 'ISO-2022-CN':
+                               return 'ISO-2022-CN';
+
+                       case 'ISO-2022-CN-EXT':
+                               return 'ISO-2022-CN-EXT';
+
+                       case 'UTF-8':
+                               return 'UTF-8';
+
+                       case 'ISO-8859-13':
+                               return 'ISO-8859-13';
+
+                       case 'ISO-8859-14':
+                       case 'ISO-IR-199':
+                       case 'ISO_8859-14:1998':
+                       case 'ISO_8859-14':
+                       case 'LATIN8':
+                       case 'ISO-CELTIC':
+                       case 'L8':
+                               return 'ISO-8859-14';
+
+                       case 'ISO-8859-15':
+                       case 'ISO_8859-15':
+                       case 'LATIN-9':
+                               return 'ISO-8859-15';
+
+                       case 'ISO-8859-16':
+                       case 'ISO-IR-226':
+                       case 'ISO_8859-16:2001':
+                       case 'ISO_8859-16':
+                       case 'LATIN10':
+                       case 'L10':
+                               return 'ISO-8859-16';
+
+                       case 'GBK':
+                       case 'CP936':
+                       case 'MS936':
+                       case 'WINDOWS-936':
+                               return 'GBK';
+
+                       case 'GB18030':
+                               return 'GB18030';
+
+                       case 'OSD_EBCDIC_DF04_15':
+                               return 'OSD_EBCDIC_DF04_15';
+
+                       case 'OSD_EBCDIC_DF03_IRV':
+                               return 'OSD_EBCDIC_DF03_IRV';
+
+                       case 'OSD_EBCDIC_DF04_1':
+                               return 'OSD_EBCDIC_DF04_1';
+
+                       case 'ISO-11548-1':
+                       case 'ISO_11548-1':
+                       case 'ISO_TR_11548-1':
+                       case 'CSISO115481':
+                               return 'ISO-11548-1';
+
+                       case 'KZ-1048':
+                       case 'STRK1048-2002':
+                       case 'RK1048':
+                       case 'CSKZ1048':
+                               return 'KZ-1048';
+
+                       case 'ISO-10646-UCS-2':
+                       case 'CSUNICODE':
+                               return 'ISO-10646-UCS-2';
+
+                       case 'ISO-10646-UCS-4':
+                       case 'CSUCS4':
+                               return 'ISO-10646-UCS-4';
+
+                       case 'ISO-10646-UCS-BASIC':
+                       case 'CSUNICODEASCII':
+                               return 'ISO-10646-UCS-Basic';
+
+                       case 'ISO-10646-UNICODE-LATIN1':
+                       case 'CSUNICODELATIN1':
+                       case 'ISO-10646':
+                               return 'ISO-10646-Unicode-Latin1';
+
+                       case 'ISO-10646-J-1':
+                               return 'ISO-10646-J-1';
+
+                       case 'ISO-UNICODE-IBM-1261':
+                       case 'CSUNICODEIBM1261':
+                               return 'ISO-Unicode-IBM-1261';
+
+                       case 'ISO-UNICODE-IBM-1268':
+                       case 'CSUNICODEIBM1268':
+                               return 'ISO-Unicode-IBM-1268';
+
+                       case 'ISO-UNICODE-IBM-1276':
+                       case 'CSUNICODEIBM1276':
+                               return 'ISO-Unicode-IBM-1276';
+
+                       case 'ISO-UNICODE-IBM-1264':
+                       case 'CSUNICODEIBM1264':
+                               return 'ISO-Unicode-IBM-1264';
+
+                       case 'ISO-UNICODE-IBM-1265':
+                       case 'CSUNICODEIBM1265':
+                               return 'ISO-Unicode-IBM-1265';
+
+                       case 'UNICODE-1-1':
+                       case 'CSUNICODE11':
+                               return 'UNICODE-1-1';
+
+                       case 'SCSU':
+                               return 'SCSU';
+
+                       case 'UTF-7':
+                               return 'UTF-7';
+
+                       case 'UTF-16BE':
+                               return 'UTF-16BE';
+
+                       case 'UTF-16LE':
+                               return 'UTF-16LE';
+
+                       case 'UTF-16':
+                               return 'UTF-16';
+
+                       case 'CESU-8':
+                       case 'CSCESU-8':
+                               return 'CESU-8';
+
+                       case 'UTF-32':
+                               return 'UTF-32';
+
+                       case 'UTF-32BE':
+                               return 'UTF-32BE';
+
+                       case 'UTF-32LE':
+                               return 'UTF-32LE';
+
+                       case 'BOCU-1':
+                       case 'CSBOCU-1':
+                               return 'BOCU-1';
+
+                       case 'ISO-8859-1-WINDOWS-3.0-LATIN-1':
+                       case 'CSWINDOWS30LATIN1':
+                               return 'ISO-8859-1-Windows-3.0-Latin-1';
+
+                       case 'ISO-8859-1-WINDOWS-3.1-LATIN-1':
+                       case 'CSWINDOWS31LATIN1':
+                               return 'ISO-8859-1-Windows-3.1-Latin-1';
+
+                       case 'ISO-8859-2-WINDOWS-LATIN-2':
+                       case 'CSWINDOWS31LATIN2':
+                               return 'ISO-8859-2-Windows-Latin-2';
+
+                       case 'ISO-8859-9-WINDOWS-LATIN-5':
+                       case 'CSWINDOWS31LATIN5':
+                               return 'ISO-8859-9-Windows-Latin-5';
+
+                       case 'HP-ROMAN8':
+                       case 'ROMAN8':
+                       case 'R8':
+                       case 'CSHPROMAN8':
+                               return 'hp-roman8';
+
+                       case 'ADOBE-STANDARD-ENCODING':
+                       case 'CSADOBESTANDARDENCODING':
+                               return 'Adobe-Standard-Encoding';
+
+                       case 'VENTURA-US':
+                       case 'CSVENTURAUS':
+                               return 'Ventura-US';
+
+                       case 'VENTURA-INTERNATIONAL':
+                       case 'CSVENTURAINTERNATIONAL':
+                               return 'Ventura-International';
+
+                       case 'DEC-MCS':
+                       case 'DEC':
+                       case 'CSDECMCS':
+                               return 'DEC-MCS';
+
+                       case 'IBM850':
+                       case 'CP850':
+                       case '850':
+                       case 'CSPC850MULTILINGUAL':
+                               return 'IBM850';
+
+                       case 'PC8-DANISH-NORWEGIAN':
+                       case 'CSPC8DANISHNORWEGIAN':
+                               return 'PC8-Danish-Norwegian';
+
+                       case 'IBM862':
+                       case 'CP862':
+                       case '862':
+                       case 'CSPC862LATINHEBREW':
+                               return 'IBM862';
+
+                       case 'PC8-TURKISH':
+                       case 'CSPC8TURKISH':
+                               return 'PC8-Turkish';
+
+                       case 'IBM-SYMBOLS':
+                       case 'CSIBMSYMBOLS':
+                               return 'IBM-Symbols';
+
+                       case 'IBM-THAI':
+                       case 'CSIBMTHAI':
+                               return 'IBM-Thai';
+
+                       case 'HP-LEGAL':
+                       case 'CSHPLEGAL':
+                               return 'HP-Legal';
+
+                       case 'HP-PI-FONT':
+                       case 'CSHPPIFONT':
+                               return 'HP-Pi-font';
+
+                       case 'HP-MATH8':
+                       case 'CSHPMATH8':
+                               return 'HP-Math8';
+
+                       case 'ADOBE-SYMBOL-ENCODING':
+                       case 'CSHPPSMATH':
+                               return 'Adobe-Symbol-Encoding';
+
+                       case 'HP-DESKTOP':
+                       case 'CSHPDESKTOP':
+                               return 'HP-DeskTop';
+
+                       case 'VENTURA-MATH':
+                       case 'CSVENTURAMATH':
+                               return 'Ventura-Math';
+
+                       case 'MICROSOFT-PUBLISHING':
+                       case 'CSMICROSOFTPUBLISHING':
+                               return 'Microsoft-Publishing';
+
+                       case 'WINDOWS-31J':
+                       case 'CSWINDOWS31J':
+                               return 'Windows-31J';
+
+                       case 'GB2312':
+                       case 'CSGB2312':
+                               return 'GB2312';
+
+                       case 'BIG5':
+                       case 'CSBIG5':
+                               return 'Big5';
+
+                       case 'MACINTOSH':
+                       case 'MAC':
+                       case 'CSMACINTOSH':
+                               return 'macintosh';
+
+                       case 'IBM037':
+                       case 'CP037':
+                       case 'EBCDIC-CP-US':
+                       case 'EBCDIC-CP-CA':
+                       case 'EBCDIC-CP-WT':
+                       case 'EBCDIC-CP-NL':
+                       case 'CSIBM037':
+                               return 'IBM037';
+
+                       case 'IBM038':
+                       case 'EBCDIC-INT':
+                       case 'CP038':
+                       case 'CSIBM038':
+                               return 'IBM038';
+
+                       case 'IBM273':
+                       case 'CP273':
+                       case 'CSIBM273':
+                               return 'IBM273';
+
+                       case 'IBM274':
+                       case 'EBCDIC-BE':
+                       case 'CP274':
+                       case 'CSIBM274':
+                               return 'IBM274';
+
+                       case 'IBM275':
+                       case 'EBCDIC-BR':
+                       case 'CP275':
+                       case 'CSIBM275':
+                               return 'IBM275';
+
+                       case 'IBM277':
+                       case 'EBCDIC-CP-DK':
+                       case 'EBCDIC-CP-NO':
+                       case 'CSIBM277':
+                               return 'IBM277';
+
+                       case 'IBM278':
+                       case 'CP278':
+                       case 'EBCDIC-CP-FI':
+                       case 'EBCDIC-CP-SE':
+                       case 'CSIBM278':
+                               return 'IBM278';
+
+                       case 'IBM280':
+                       case 'CP280':
+                       case 'EBCDIC-CP-IT':
+                       case 'CSIBM280':
+                               return 'IBM280';
+
+                       case 'IBM281':
+                       case 'EBCDIC-JP-E':
+                       case 'CP281':
+                       case 'CSIBM281':
+                               return 'IBM281';
+
+                       case 'IBM284':
+                       case 'CP284':
+                       case 'EBCDIC-CP-ES':
+                       case 'CSIBM284':
+                               return 'IBM284';
+
+                       case 'IBM285':
+                       case 'CP285':
+                       case 'EBCDIC-CP-GB':
+                       case 'CSIBM285':
+                               return 'IBM285';
+
+                       case 'IBM290':
+                       case 'CP290':
+                       case 'EBCDIC-JP-KANA':
+                       case 'CSIBM290':
+                               return 'IBM290';
+
+                       case 'IBM297':
+                       case 'CP297':
+                       case 'EBCDIC-CP-FR':
+                       case 'CSIBM297':
+                               return 'IBM297';
+
+                       case 'IBM420':
+                       case 'CP420':
+                       case 'EBCDIC-CP-AR1':
+                       case 'CSIBM420':
+                               return 'IBM420';
+
+                       case 'IBM423':
+                       case 'CP423':
+                       case 'EBCDIC-CP-GR':
+                       case 'CSIBM423':
+                               return 'IBM423';
+
+                       case 'IBM424':
+                       case 'CP424':
+                       case 'EBCDIC-CP-HE':
+                       case 'CSIBM424':
+                               return 'IBM424';
+
+                       case 'IBM437':
+                       case 'CP437':
+                       case '437':
+                       case 'CSPC8CODEPAGE437':
+                               return 'IBM437';
+
+                       case 'IBM500':
+                       case 'CP500':
+                       case 'EBCDIC-CP-BE':
+                       case 'EBCDIC-CP-CH':
+                       case 'CSIBM500':
+                               return 'IBM500';
+
+                       case 'IBM851':
+                       case 'CP851':
+                       case '851':
+                       case 'CSIBM851':
+                               return 'IBM851';
+
+                       case 'IBM852':
+                       case 'CP852':
+                       case '852':
+                       case 'CSPCP852':
+                               return 'IBM852';
+
+                       case 'IBM855':
+                       case 'CP855':
+                       case '855':
+                       case 'CSIBM855':
+                               return 'IBM855';
+
+                       case 'IBM857':
+                       case 'CP857':
+                       case '857':
+                       case 'CSIBM857':
+                               return 'IBM857';
+
+                       case 'IBM860':
+                       case 'CP860':
+                       case '860':
+                       case 'CSIBM860':
+                               return 'IBM860';
+
+                       case 'IBM861':
+                       case 'CP861':
+                       case '861':
+                       case 'CP-IS':
+                       case 'CSIBM861':
+                               return 'IBM861';
+
+                       case 'IBM863':
+                       case 'CP863':
+                       case '863':
+                       case 'CSIBM863':
+                               return 'IBM863';
+
+                       case 'IBM864':
+                       case 'CP864':
+                       case 'CSIBM864':
+                               return 'IBM864';
+
+                       case 'IBM865':
+                       case 'CP865':
+                       case '865':
+                       case 'CSIBM865':
+                               return 'IBM865';
+
+                       case 'IBM868':
+                       case 'CP868':
+                       case 'CP-AR':
+                       case 'CSIBM868':
+                               return 'IBM868';
+
+                       case 'IBM869':
+                       case 'CP869':
+                       case '869':
+                       case 'CP-GR':
+                       case 'CSIBM869':
+                               return 'IBM869';
+
+                       case 'IBM870':
+                       case 'CP870':
+                       case 'EBCDIC-CP-ROECE':
+                       case 'EBCDIC-CP-YU':
+                       case 'CSIBM870':
+                               return 'IBM870';
+
+                       case 'IBM871':
+                       case 'CP871':
+                       case 'EBCDIC-CP-IS':
+                       case 'CSIBM871':
+                               return 'IBM871';
+
+                       case 'IBM880':
+                       case 'CP880':
+                       case 'EBCDIC-CYRILLIC':
+                       case 'CSIBM880':
+                               return 'IBM880';
+
+                       case 'IBM891':
+                       case 'CP891':
+                       case 'CSIBM891':
+                               return 'IBM891';
+
+                       case 'IBM903':
+                       case 'CP903':
+                       case 'CSIBM903':
+                               return 'IBM903';
+
+                       case 'IBM904':
+                       case 'CP904':
+                       case '904':
+                       case 'CSIBBM904':
+                               return 'IBM904';
+
+                       case 'IBM905':
+                       case 'CP905':
+                       case 'EBCDIC-CP-TR':
+                       case 'CSIBM905':
+                               return 'IBM905';
+
+                       case 'IBM918':
+                       case 'CP918':
+                       case 'EBCDIC-CP-AR2':
+                       case 'CSIBM918':
+                               return 'IBM918';
+
+                       case 'IBM1026':
+                       case 'CP1026':
+                       case 'CSIBM1026':
+                               return 'IBM1026';
+
+                       case 'EBCDIC-AT-DE':
+                       case 'CSIBMEBCDICATDE':
+                               return 'EBCDIC-AT-DE';
+
+                       case 'EBCDIC-AT-DE-A':
+                       case 'CSEBCDICATDEA':
+                               return 'EBCDIC-AT-DE-A';
+
+                       case 'EBCDIC-CA-FR':
+                       case 'CSEBCDICCAFR':
+                               return 'EBCDIC-CA-FR';
+
+                       case 'EBCDIC-DK-NO':
+                       case 'CSEBCDICDKNO':
+                               return 'EBCDIC-DK-NO';
+
+                       case 'EBCDIC-DK-NO-A':
+                       case 'CSEBCDICDKNOA':
+                               return 'EBCDIC-DK-NO-A';
+
+                       case 'EBCDIC-FI-SE':
+                       case 'CSEBCDICFISE':
+                               return 'EBCDIC-FI-SE';
+
+                       case 'EBCDIC-FI-SE-A':
+                       case 'CSEBCDICFISEA':
+                               return 'EBCDIC-FI-SE-A';
+
+                       case 'EBCDIC-FR':
+                       case 'CSEBCDICFR':
+                               return 'EBCDIC-FR';
+
+                       case 'EBCDIC-IT':
+                       case 'CSEBCDICIT':
+                               return 'EBCDIC-IT';
+
+                       case 'EBCDIC-PT':
+                       case 'CSEBCDICPT':
+                               return 'EBCDIC-PT';
+
+                       case 'EBCDIC-ES':
+                       case 'CSEBCDICES':
+                               return 'EBCDIC-ES';
+
+                       case 'EBCDIC-ES-A':
+                       case 'CSEBCDICESA':
+                               return 'EBCDIC-ES-A';
+
+                       case 'EBCDIC-ES-S':
+                       case 'CSEBCDICESS':
+                               return 'EBCDIC-ES-S';
+
+                       case 'EBCDIC-UK':
+                       case 'CSEBCDICUK':
+                               return 'EBCDIC-UK';
+
+                       case 'EBCDIC-US':
+                       case 'CSEBCDICUS':
+                               return 'EBCDIC-US';
+
+                       case 'UNKNOWN-8BIT':
+                       case 'CSUNKNOWN8BIT':
+                               return 'UNKNOWN-8BIT';
+
+                       case 'MNEMONIC':
+                       case 'CSMNEMONIC':
+                               return 'MNEMONIC';
+
+                       case 'MNEM':
+                       case 'CSMNEM':
+                               return 'MNEM';
+
+                       case 'VISCII':
+                       case 'CSVISCII':
+                               return 'VISCII';
+
+                       case 'VIQR':
+                       case 'CSVIQR':
+                               return 'VIQR';
+
+                       case 'KOI8-R':
+                       case 'CSKOI8R':
+                               return 'KOI8-R';
+
+                       case 'HZ-GB-2312':
+                               return 'HZ-GB-2312';
+
+                       case 'IBM866':
+                       case 'CP866':
+                       case '866':
+                       case 'CSIBM866':
+                               return 'IBM866';
+
+                       case 'IBM775':
+                       case 'CP775':
+                       case 'CSPC775BALTIC':
+                               return 'IBM775';
+
+                       case 'KOI8-U':
+                               return 'KOI8-U';
+
+                       case 'IBM00858':
+                       case 'CCSID00858':
+                       case 'CP00858':
+                       case 'PC-MULTILINGUAL-850+EURO':
+                               return 'IBM00858';
+
+                       case 'IBM00924':
+                       case 'CCSID00924':
+                       case 'CP00924':
+                       case 'EBCDIC-LATIN9--EURO':
+                               return 'IBM00924';
+
+                       case 'IBM01140':
+                       case 'CCSID01140':
+                       case 'CP01140':
+                       case 'EBCDIC-US-37+EURO':
+                               return 'IBM01140';
+
+                       case 'IBM01141':
+                       case 'CCSID01141':
+                       case 'CP01141':
+                       case 'EBCDIC-DE-273+EURO':
+                               return 'IBM01141';
+
+                       case 'IBM01142':
+                       case 'CCSID01142':
+                       case 'CP01142':
+                       case 'EBCDIC-DK-277+EURO':
+                       case 'EBCDIC-NO-277+EURO':
+                               return 'IBM01142';
+
+                       case 'IBM01143':
+                       case 'CCSID01143':
+                       case 'CP01143':
+                       case 'EBCDIC-FI-278+EURO':
+                       case 'EBCDIC-SE-278+EURO':
+                               return 'IBM01143';
+
+                       case 'IBM01144':
+                       case 'CCSID01144':
+                       case 'CP01144':
+                       case 'EBCDIC-IT-280+EURO':
+                               return 'IBM01144';
+
+                       case 'IBM01145':
+                       case 'CCSID01145':
+                       case 'CP01145':
+                       case 'EBCDIC-ES-284+EURO':
+                               return 'IBM01145';
+
+                       case 'IBM01146':
+                       case 'CCSID01146':
+                       case 'CP01146':
+                       case 'EBCDIC-GB-285+EURO':
+                               return 'IBM01146';
+
+                       case 'IBM01147':
+                       case 'CCSID01147':
+                       case 'CP01147':
+                       case 'EBCDIC-FR-297+EURO':
+                               return 'IBM01147';
+
+                       case 'IBM01148':
+                       case 'CCSID01148':
+                       case 'CP01148':
+                       case 'EBCDIC-INTERNATIONAL-500+EURO':
+                               return 'IBM01148';
+
+                       case 'IBM01149':
+                       case 'CCSID01149':
+                       case 'CP01149':
+                       case 'EBCDIC-IS-871+EURO':
+                               return 'IBM01149';
+
+                       case 'BIG5-HKSCS':
+                               return 'Big5-HKSCS';
+
+                       case 'IBM1047':
+                       case 'IBM-1047':
+                               return 'IBM1047';
+
+                       case 'PTCP154':
+                       case 'CSPTCP154':
+                       case 'PT154':
+                       case 'CP154':
+                       case 'CYRILLIC-ASIAN':
+                               return 'PTCP154';
+
+                       case 'AMIGA-1251':
+                       case 'AMI1251':
+                       case 'AMIGA1251':
+                       case 'AMI-1251':
+                               return 'Amiga-1251';
+
+                       case 'KOI7-SWITCHED':
+                               return 'KOI7-switched';
+
+                       case 'BRF':
+                       case 'CSBRF':
+                               return 'BRF';
+
+                       case 'TSCII':
+                       case 'CSTSCII':
+                               return 'TSCII';
+
+                       case 'WINDOWS-1250':
+                               return 'windows-1250';
+
+                       case 'WINDOWS-1251':
+                               return 'windows-1251';
+
+                       case 'WINDOWS-1252':
+                               return 'windows-1252';
+
+                       case 'WINDOWS-1253':
+                               return 'windows-1253';
+
+                       case 'WINDOWS-1254':
+                               return 'windows-1254';
+
+                       case 'WINDOWS-1255':
+                               return 'windows-1255';
+
+                       case 'WINDOWS-1256':
+                               return 'windows-1256';
+
+                       case 'WINDOWS-1257':
+                               return 'windows-1257';
+
+                       case 'WINDOWS-1258':
+                               return 'windows-1258';
+
+                       default:
+                               return (string) $encoding;
+               }
+       }
+
+       function get_curl_version()
+       {
+               if (is_array($curl = curl_version()))
+               {
+                       $curl = $curl['version'];
+               }
+               elseif (substr($curl, 0, 5) == 'curl/')
+               {
+                       $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
+               }
+               elseif (substr($curl, 0, 8) == 'libcurl/')
+               {
+                       $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
+               }
+               else
+               {
+                       $curl = 0;
+               }
+               return $curl;
+       }
+
+       function is_subclass_of($class1, $class2)
+       {
+               if (func_num_args() != 2)
+               {
+                       trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING);
+               }
+               elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1))
+               {
+                       return is_subclass_of($class1, $class2);
+               }
+               elseif (is_string($class1) && is_string($class2))
+               {
+                       if (class_exists($class1))
+                       {
+                               if (class_exists($class2))
+                               {
+                                       $class2 = strtolower($class2);
+                                       while ($class1 = strtolower(get_parent_class($class1)))
+                                       {
+                                               if ($class1 == $class2)
+                                               {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               trigger_error('Unknown class passed as parameter', E_USER_WARNNG);
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Strip HTML comments
+        *
+        * @access public
+        * @param string $data Data to strip comments from
+        * @return string Comment stripped string
+        */
+       function strip_comments($data)
+       {
+               $output = '';
+               while (($start = strpos($data, '<!--')) !== false)
+               {
+                       $output .= substr($data, 0, $start);
+                       if (($end = strpos($data, '-->', $start)) !== false)
+                       {
+                               $data = substr_replace($data, '', 0, $end + 3);
+                       }
+                       else
+                       {
+                               $data = '';
+                       }
+               }
+               return $output . $data;
+       }
+
+       function parse_date($dt, $rfc822_tz = true)
+       {
+               static $cache = array();
+               if (!isset($cache[$dt][$rfc822_tz]))
+               {
+                       $dt = SimplePie_Misc::uncomment_rfc822($dt);
+                       /*
+                       Capturing subpatterns:
+                       1: RFC 822 date
+                       2: RFC 822 day
+                       3: RFC 822 month
+                       4: RFC 822 year
+                       5: ISO 8601 date
+                       6: ISO 8601 century
+                       7: ISO 8601 year
+                       8: ISO 8601 month
+                       9: ISO 8601 day
+                       10: ISO 8601 ordinal day
+                       11: ISO 8601 month
+                       12: ISO 8601 day
+                       13: ISO 8601 week
+                       14: ISO 8601 day of week
+                       15: Time
+                       16: Hour
+                       17: Hour Decimal
+                       18: Minute
+                       19: Minute Decimal
+                       20: Second
+                       21: Second Decimal
+                       22: Timezone
+                       23: Diff ±
+                       24: Hour
+                       25: Hour Decimal
+                       26: Minute
+                       27: Minute Decimal
+                       28: Alphabetic Timezone
+                       */
+                       if (preg_match('/^(?:(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)[,\s]+)?(([0-9]{1,2})\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s*([0-9]{4}|[0-9]{2}))|(([0-9]{2})(?:([0-9]{2})(?:(?:-|\s)*(?:([0-9]{2})([0-9]{2})|([0-9]{3})|([0-9]{2})(?:(?:-|\s)*([0-9]{2}))?|W([0-9]{2})(?:(?:-|\s)*([0-9]))?))?)?))((?:T|\s)+([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*([0-9]{2})(?:(?:,|\.)([0-9]*))?)?)?(?:\s)*((?:(\+|-)([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*(?:([0-9]{2})(?:(?:,|\.)([0-9]*))?))?)|(UTC|GMT|EST|CST|MST|PST|EDT|CDT|MDT|PDT|UT|[A-IK-Z]))?)?$/i', $dt, $match))
+                       {
+                               // Fill all matches
+                               for ($i = count($match); $i <= 28; $i++)
+                               {
+                                       $match[$i] = '';
+                               }
+                               
+                               // Set blank vars
+                               $year = 1970;
+                               $month = 1;
+                               $day = 1;
+                               $hour = 0;
+                               $minute = 0;
+                               $second = 0;
+                               $timezone = false;
+
+                               // RFC 822
+                               if ($match[1] !== '')
+                               {
+                                       if (strlen($match[4]) == 2)
+                                       {
+                                               $year = ($match[4] < 70) ? "20$match[4]" : "19$match[4]";
+                                       }
+                                       else
+                                       {
+                                               $year = $match[4];
+                                       }
+                                       switch (strtolower($match[3]))
+                                       {
+                                               case 'jan':
+                                                       $month = 1;
+                                                       break;
+
+                                               case 'feb':
+                                                       $month = 2;
+                                                       break;
+
+                                               case 'mar':
+                                                       $month = 3;
+                                                       break;
+
+                                               case 'apr':
+                                                       $month = 4;
+                                                       break;
+
+                                               case 'may':
+                                                       $month = 5;
+                                                       break;
+
+                                               case 'jun':
+                                                       $month = 6;
+                                                       break;
+
+                                               case 'jul':
+                                                       $month = 7;
+                                                       break;
+
+                                               case 'aug':
+                                                       $month = 8;
+                                                       break;
+
+                                               case 'sep':
+                                                       $month = 9;
+                                                       break;
+
+                                               case 'oct':
+                                                       $month = 10;
+                                                       break;
+
+                                               case 'nov':
+                                                       $month = 11;
+                                                       break;
+
+                                               case 'dec':
+                                                       $month = 12;
+                                                       break;
+                                       }
+                                       $day = $match[2];
+                               }
+                               // ISO 8601
+                               else
+                               {
+                                       // Year
+                                       if ($match[7] !== '')
+                                       {
+                                               $year = "$match[6]$match[7]";
+
+                                               // Two Digit Month/Day
+                                               if ($match[11] !== '')
+                                               {
+                                                       $month = $match[11];
+                                                       if ($match[12] !== '')
+                                                       {
+                                                               $day = $match[12];
+                                                       }
+                                               }
+
+                                               // Four Digit Month/Day
+                                               elseif ($match[8] !== '')
+                                               {
+                                                       $month = $match[8];
+                                                       $day = $match[9];
+                                               }
+
+                                               // Ordinal Day
+                                               elseif ($match[10] !== '')
+                                               {
+                                                       $day = $match[10];
+                                               }
+
+                                               // Week Date
+                                               elseif ($match[13] !== '')
+                                               {
+                                                       // Week Day
+                                                       if ($match[14] !== '')
+                                                       {
+                                                               $day = $match[14];
+                                                       }
+
+                                                       $first_day_of_year = date('w', mktime(0, 0, 0, 1, 1, $year));
+                                                       if ($first_day_of_year == 0)
+                                                       {
+                                                               $first_day_of_year = 7;
+                                                       }
+
+                                                       $day = 7 * ($match[13] - 1) + $day - ($first_day_of_year - 1);
+                                               }
+                                       }
+                                       else
+                                       {
+                                               $year = "$match[6]00";
+                                       }
+                               }
+                               // Time
+                               if ($match[15] !== '')
+                               {
+                                       $time = 0;
+                                       $time += ($match[16] + ('.' . $match[17])) * 3600;
+                                       $time += ($match[18] + ('.' . $match[19])) * 60;
+                                       $time += $match[20] + ('.' . $match[21]);
+                                       $hour = floor($time / 3600);
+                                       $time -= $hour * 3600;
+                                       $minute = floor($time / 60);
+                                       $time -= $minute * 60;
+                                       $second = round($time);
+
+                                       // Timezone
+                                       if ($match[22] !== '')
+                                       {
+                                               // Alphabetic Timezone
+                                               if ($match[28] !== '')
+                                               {
+                                                       // Military
+                                                       if (strlen($match[28]) == 1)
+                                                       {
+                                                               if ($match[28] == 'Z' || $match[28] == 'z' || !$rfc822_tz)
+                                                               {
+                                                                       $timezone = 0;
+                                                               }
+                                                               else
+                                                               {
+                                                                       $timezone = ord(strtoupper($match[28]));
+
+                                                                       if ($timezone > 74)
+                                                                       {
+                                                                               $timezone--;
+                                                                       }
+
+                                                                       if ($timezone <= 76)
+                                                                       {
+                                                                               $timezone = -($timezone - 64);
+                                                                       }
+                                                                       else
+                                                                       {
+                                                                               $timezone -= 76;
+                                                                       }
+
+                                                                       $timezone *= 3600;
+                                                               }
+                                                       }
+                                                       // Code
+                                                       else
+                                                       {
+                                                               switch (strtoupper($match[28]))
+                                                               {
+                                                                       case 'UT':
+                                                                       case 'UTC':
+                                                                       case 'GMT':
+                                                                               $timezone = 0;
+                                                                               break;
+
+                                                                       case 'EST':
+                                                                               $timezone = -18000;
+                                                                               break;
+
+                                                                       case 'CST':
+                                                                               $timezone = -21600;
+                                                                               break;
+
+                                                                       case 'MST':
+                                                                               $timezone = -25200;
+                                                                               break;
+
+                                                                       case 'PST':
+                                                                               $timezone = -28800;
+                                                                               break;
+
+                                                                       case 'EDT':
+                                                                               $timezone = -14400;
+                                                                               break;
+
+                                                                       case 'CDT':
+                                                                               $timezone = -18000;
+                                                                               break;
+
+                                                                       case 'MDT':
+                                                                               $timezone = -21600;
+                                                                               break;
+
+                                                                       case 'PDT':
+                                                                               $timezone = -25200;
+                                                                               break;
+                                                               }
+                                                       }
+                                               }
+                                               // Timezone difference from UTC
+                                               else
+                                               {
+                                                       $timezone = 0;
+                                                       $timezone += ($match[24] + ('.' . $match[25])) * 3600;
+                                                       $timezone += ($match[26] + ('.' . $match[27])) * 60;
+                                                       $timezone = (int) round($timezone);
+
+                                                       if ($match[23] == '-')
+                                                       {
+                                                               $timezone = -$timezone;
+                                                       }
+                                               }
+                                       }
+                               }
+                               if ($timezone === false)
+                               {
+                                       $cache[$dt][$rfc822_tz] = mktime($hour, $minute, $second, $month, $day, $year);
+                               }
+                               else
+                               {
+                                       $cache[$dt][$rfc822_tz] = gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
+                               }
+                       }
+                       elseif (($time = strtotime($dt)) > 0)
+                       {
+                               $cache[$dt][$rfc822_tz] = $time;
+                       }
+                       else
+                       {
+                               $cache[$dt][$rfc822_tz] = false;
+                       }
+               }
+               return $cache[$dt][$rfc822_tz];
+       }
+
+       /**
+        * Decode HTML entities
+        *
+        * @static
+        * @access public
+        * @param string $data Input data
+        * @return string Output data
+        */
+       function entities_decode($data)
+       {
+               $decoder = new SimplePie_Decode_HTML_Entities($data);
+               return $decoder->parse();
+       }
+
+       /**
+        * Remove RFC822 comments
+        *
+        * @author Tomas V.V.Cox <cox@idecnet.com>
+        * @author Pierre-Alain Joye <pajoye@php.net>
+        * @author Amir Mohammad Saied <amir@php.net>
+        * @copyright 1997-2006 Pierre-Alain Joye,Tomas V.V.Cox,Amir Mohammad Saied
+        * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
+        * @version CVS: $Id: Validate.php,v 1.104 2006/11/17 16:32:06 amir Exp $
+        * @link http://pear.php.net/package/Validate
+        * @access public
+        * @param string $data Data to strip comments from
+        * @return string Comment stripped string
+        */
+       function uncomment_rfc822($data)
+       {
+               if ((version_compare(PHP_VERSION, '4.4.6', '>=') && version_compare(PHP_VERSION, '5', '<')) || version_compare(PHP_VERSION, '5.2.2', '>='))
+               {
+                       return $data;
+               }
+               else
+               {
+                       return preg_replace('/((?:(?:\\\\"|[^("])*(?:"(?:[^"\\\\\r]|\\\\.)*"\s*)?)*)((?<!\\\\)\((?:(?2)|.)*?(?<!\\\\)\))/', '$1', $data);
+               }
+       }
+
+       function parse_mime($mime)
+       {
+               if (($pos = strpos($mime, ';')) === false)
+               {
+                       return trim($mime);
+               }
+               else
+               {
+                       return trim(substr($mime, 0, $pos));
+               }
+       }
+
+       function htmlspecialchars_decode($string, $quote_style)
+       {
+               if (function_exists('htmlspecialchars_decode'))
+               {
+                       return htmlspecialchars_decode($string, $quote_style);
+               }
+               else
+               {
+                       return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style)));
+               }
+       }
+
+       function atom_03_construct_type($attribs)
+       {
+               if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) == 'base64'))
+               {
+                       $mode = SIMPLEPIE_CONSTRUCT_BASE64;
+               }
+               else
+               {
+                       $mode = SIMPLEPIE_CONSTRUCT_NONE;
+               }
+               if (isset($attribs['']['type']))
+               {
+                       switch (strtolower(trim($attribs['']['type'])))
+                       {
+                               case 'text':
+                               case 'text/plain':
+                                       return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+
+                               case 'html':
+                               case 'text/html':
+                                       return SIMPLEPIE_CONSTRUCT_HTML | $mode;
+
+                               case 'xhtml':
+                               case 'application/xhtml+xml':
+                                       return SIMPLEPIE_CONSTRUCT_XHTML | $mode;
+
+                               default:
+                                       return SIMPLEPIE_CONSTRUCT_NONE | $mode;
+                       }
+               }
+               else
+               {
+                       return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+               }
+       }
+
+       function atom_10_construct_type($attribs)
+       {
+               if (isset($attribs['']['type']))
+               {
+                       switch (strtolower(trim($attribs['']['type'])))
+                       {
+                               case 'text':
+                                       return SIMPLEPIE_CONSTRUCT_TEXT;
+
+                               case 'html':
+                                       return SIMPLEPIE_CONSTRUCT_HTML;
+
+                               case 'xhtml':
+                                       return SIMPLEPIE_CONSTRUCT_XHTML;
+
+                               default:
+                                       return SIMPLEPIE_CONSTRUCT_NONE;
+                       }
+               }
+               return SIMPLEPIE_CONSTRUCT_TEXT;
+       }
+
+       function atom_10_content_construct_type($attribs)
+       {
+               if (isset($attribs['']['type']))
+               {
+                       $type = strtolower(trim($attribs['']['type']));
+                       switch ($type)
+                       {
+                               case 'text':
+                                       return SIMPLEPIE_CONSTRUCT_TEXT;
+
+                               case 'html':
+                                       return SIMPLEPIE_CONSTRUCT_HTML;
+
+                               case 'xhtml':
+                                       return SIMPLEPIE_CONSTRUCT_XHTML;
+                       }
+                       if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) == 'text/')
+                       {
+                               return SIMPLEPIE_CONSTRUCT_NONE;
+                       }
+                       else
+                       {
+                               return SIMPLEPIE_CONSTRUCT_BASE64;
+                       }
+               }
+               else
+               {
+                       return SIMPLEPIE_CONSTRUCT_TEXT;
+               }
+       }
+
+       function is_isegment_nz_nc($string)
+       {
+               return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
+       }
+
+       function space_seperated_tokens($string)
+       {
+               $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
+               $string_length = strlen($string);
+
+               $position = strspn($string, $space_characters);
+               $tokens = array();
+
+               while ($position < $string_length)
+               {
+                       $len = strcspn($string, $space_characters, $position);
+                       $tokens[] = substr($string, $position, $len);
+                       $position += $len;
+                       $position += strspn($string, $space_characters, $position);
+               }
+
+               return $tokens;
+       }
+
+       function array_unique($array)
+       {
+               if (version_compare(PHP_VERSION, '5.2', '>='))
+               {
+                       return array_unique($array);
+               }
+               else
+               {
+                       $array = (array) $array;
+                       $new_array = array();
+                       $new_array_strings = array();
+                       foreach ($array as $key => $value)
+                       {
+                               if (is_object($value))
+                               {
+                                       if (method_exists($value, '__toString'))
+                                       {
+                                               $cmp = $value->__toString();
+                                       }
+                                       else
+                                       {
+                                               trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR);
+                                       }
+                               }
+                               elseif (is_array($value))
+                               {
+                                       $cmp = (string) reset($value);
+                               }
+                               else
+                               {
+                                       $cmp = (string) $value;
+                               }
+                               if (!in_array($cmp, $new_array_strings))
+                               {
+                                       $new_array[$key] = $value;
+                                       $new_array_strings[] = $cmp;
+                               }
+                       }
+                       return $new_array;
+               }
+       }
+
+       /**
+        * Converts a unicode codepoint to a UTF-8 character
+        *
+        * @static
+        * @access public
+        * @param int $codepoint Unicode codepoint
+        * @return string UTF-8 character
+        */
+       function codepoint_to_utf8($codepoint)
+       {
+               static $cache = array();
+               $codepoint = (int) $codepoint;
+               if (isset($cache[$codepoint]))
+               {
+                       return $cache[$codepoint];
+               }
+               elseif ($codepoint < 0)
+               {
+                       return $cache[$codepoint] = false;
+               }
+               else if ($codepoint <= 0x7f)
+               {
+                       return $cache[$codepoint] = chr($codepoint);
+               }
+               else if ($codepoint <= 0x7ff)
+               {
+                       return $cache[$codepoint] = chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
+               }
+               else if ($codepoint <= 0xffff)
+               {
+                       return $cache[$codepoint] = chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+               }
+               else if ($codepoint <= 0x10ffff)
+               {
+                       return $cache[$codepoint] = chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+               }
+               else
+               {
+                       // U+FFFD REPLACEMENT CHARACTER
+                       return $cache[$codepoint] = "\xEF\xBF\xBD";
+               }
+       }
+
+       /**
+        * Re-implementation of PHP 4.2.0's is_a()
+        *
+        * @static
+        * @access public
+        * @param object $object The tested object
+        * @param string $class_name The class name
+        * @return bool Returns true if the object is of this class or has this class as one of its parents, false otherwise
+        */
+        function is_a($object, $class_name)
+        {
+               if (function_exists('is_a'))
+               {
+                       return is_a($object, $class_name);
+               }
+               elseif (!is_object($object))
+               {
+                       return false;
+               }
+               elseif (get_class($object) == strtolower($class_name))
+               {
+                       return true;
+               }
+               else
+               {
+                       return is_subclass_of($object, $class_name);
+               }
+        }
+
+       /**
+        * Re-implementation of PHP 5's stripos()
+        *
+        * Returns the numeric position of the first occurrence of needle in the
+        * haystack string.
+        *
+        * @static
+        * @access string
+        * @param object $haystack
+        * @param string $needle Note that the needle may be a string of one or more
+        *     characters. If needle is not a string, it is converted to an integer
+        *     and applied as the ordinal value of a character.
+        * @param int $offset The optional offset parameter allows you to specify which
+        *     character in haystack to start searching. The position returned is still
+        *     relative to the beginning of haystack.
+        * @return bool If needle is not found, stripos() will return boolean false.
+        */
+        function stripos($haystack, $needle, $offset = 0)
+        {
+               if (function_exists('stripos'))
+               {
+                       return stripos($haystack, $needle, $offset);
+               }
+               else
+               {
+                       if (is_string($needle))
+                       {
+                               $needle = strtolower($needle);
+                       }
+                       elseif (is_int($needle) || is_bool($needle) || is_double($needle))
+                       {
+                               $needle = strtolower(chr($needle));
+                       }
+                       else
+                       {
+                               trigger_error('needle is not a string or an integer', E_USER_WARNING);
+                               return false;
+                       }
+        
+                       return strpos(strtolower($haystack), $needle, $offset);
+               }
+        }
+}
+
+/**
+ * Decode HTML Entities
+ *
+ * This implements HTML5 as of revision 967 (2007-06-28)
+ *
+ * @package SimplePie
+ */
+class SimplePie_Decode_HTML_Entities
+{
+       /**
+        * Data to be parsed
+        *
+        * @access private
+        * @var string
+        */
+       var $data = '';
+
+       /**
+        * Currently consumed bytes
+        *
+        * @access private
+        * @var string
+        */
+       var $consumed = '';
+
+       /**
+        * Position of the current byte being parsed
+        *
+        * @access private
+        * @var int
+        */
+       var $position = 0;
+
+       /**
+        * Create an instance of the class with the input data
+        *
+        * @access public
+        * @param string $data Input data
+        */
+       function SimplePie_Decode_HTML_Entities($data)
+       {
+               $this->data = $data;
+       }
+
+       /**
+        * Parse the input data
+        *
+        * @access public
+        * @return string Output data
+        */
+       function parse()
+       {
+               while (($this->position = strpos($this->data, '&', $this->position)) !== false)
+               {
+                       $this->consume();
+                       $this->entity();
+                       $this->consumed = '';
+               }
+               return $this->data;
+       }
+
+       /**
+        * Consume the next byte
+        *
+        * @access private
+        * @return mixed The next byte, or false, if there is no more data
+        */
+       function consume()
+       {
+               if (isset($this->data[$this->position]))
+               {
+                       $this->consumed .= $this->data[$this->position];
+                       return $this->data[$this->position++];
+               }
+               else
+               {
+                       $this->consumed = false;
+                       return false;
+               }
+       }
+
+       /**
+        * Consume a range of characters
+        *
+        * @access private
+        * @param string $chars Characters to consume
+        * @return mixed A series of characters that match the range, or false
+        */
+       function consume_range($chars)
+       {
+               if ($len = strspn($this->data, $chars, $this->position))
+               {
+                       $data = substr($this->data, $this->position, $len);
+                       $this->consumed .= $data;
+                       $this->position += $len;
+                       return $data;
+               }
+               else
+               {
+                       $this->consumed = false;
+                       return false;
+               }
+       }
+
+       /**
+        * Unconsume one byte
+        *
+        * @access private
+        */
+       function unconsume()
+       {
+               $this->consumed = substr($this->consumed, 0, -1);
+               $this->position--;
+       }
+
+       /**
+        * Decode an entity
+        *
+        * @access private
+        */
+       function entity()
+       {
+               switch ($this->consume())
+               {
+                       case "\x09":
+                       case "\x0A":
+                       case "\x0B":
+                       case "\x0B":
+                       case "\x0C":
+                       case "\x20":
+                       case "\x3C":
+                       case "\x26":
+                       case false:
+                               break;
+
+                       case "\x23":
+                               switch ($this->consume())
+                               {
+                                       case "\x78":
+                                       case "\x58":
+                                               $range = '0123456789ABCDEFabcdef';
+                                               $hex = true;
+                                               break;
+
+                                       default:
+                                               $range = '0123456789';
+                                               $hex = false;
+                                               $this->unconsume();
+                                               break;
+                               }
+
+                               if ($codepoint = $this->consume_range($range))
+                               {
+                                       static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");
+
+                                       if ($hex)
+                                       {
+                                               $codepoint = hexdec($codepoint);
+                                       }
+                                       else
+                                       {
+                                               $codepoint = intval($codepoint);
+                                       }
+
+                                       if (isset($windows_1252_specials[$codepoint]))
+                                       {
+                                               $replacement = $windows_1252_specials[$codepoint];
+                                       }
+                                       else
+                                       {
+                                               $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
+                                       }
+
+                                       if ($this->consume() != ';')
+                                       {
+                                               $this->unconsume();
+                                       }
+
+                                       $consumed_length = strlen($this->consumed);
+                                       $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
+                                       $this->position += strlen($replacement) - $consumed_length;
+                               }
+                               break;
+
+                       default:
+                               static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C");
+
+                               for ($i = 0, $match = null; $i < 9 && $this->consume(); $i++)
+                               {
+                                       $consumed = substr($this->consumed, 1);
+                                       if (isset($entities[$consumed]))
+                                       {
+                                               $match = $consumed;
+                                       }
+                               }
+
+                               if ($match !== null)
+                               {
+                                       $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
+                                       $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
+                               }
+                               break;
+               }
+       }
+}
+
+class SimplePie_Locator
+{
+       var $useragent;
+       var $timeout;
+       var $file;
+       var $local = array();
+       var $elsewhere = array();
+       var $file_class = 'SimplePie_File';
+       var $cached_entities = array();
+       var $http_base;
+       var $base;
+       var $base_location = 0;
+       var $checked_feeds = 0;
+       var $max_checked_feeds = 10;
+
+       function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10)
+       {
+               $this->file =& $file;
+               $this->file_class = $file_class;
+               $this->useragent = $useragent;
+               $this->timeout = $timeout;
+               $this->max_checked_feeds = $max_checked_feeds;
+       }
+
+       function find($type = SIMPLEPIE_LOCATOR_ALL)
+       {
+               if ($this->is_feed($this->file))
+               {
+                       return $this->file;
+               }
+
+               if ($type & ~SIMPLEPIE_LOCATOR_NONE)
+               {
+                       $this->get_base();
+               }
+
+               if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
+               {
+                       return $working;
+               }
+
+               if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links())
+               {
+                       if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
+                       {
+                               return $working;
+                       }
+
+                       if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
+                       {
+                               return $working;
+                       }
+
+                       if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
+                       {
+                               return $working;
+                       }
+
+                       if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
+                       {
+                               return $working;
+                       }
+               }
+               return null;
+       }
+
+       function is_feed(&$file)
+       {
+               $body = SimplePie_Misc::strip_comments($file->body);
+               if (preg_match('/<([^\s:]+:)?(rss|RDF|feed)' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/i', $body))
+               {
+                       return true;
+               }
+               return false;
+       }
+
+       function get_base()
+       {
+               if (isset($this->file->headers['content-location']))
+               {
+                       $this->http_base = SimplePie_Misc::absolutize_url(trim($this->file->headers['content-location']), $this->file->url);
+               }
+               else
+               {
+                       $this->http_base = $this->file->url;
+               }
+               $this->base = $this->http_base;
+               $elements = SimplePie_Misc::get_element('base', $this->file->body);
+               foreach ($elements as $element)
+               {
+                       if ($element['attribs']['href']['data'] !== '')
+                       {
+                               $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base);
+                               $this->base_location = $element['offset'];
+                               break;
+                       }
+               }
+       }
+
+       function autodiscovery()
+       {
+               $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body));
+               $done = array();
+               foreach ($links as $link)
+               {
+                       if ($this->checked_feeds == $this->max_checked_feeds)
+                       {
+                               break;
+                       }
+                       if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data']))
+                       {
+                               $rel = array_unique(SimplePie_Misc::space_seperated_tokens(strtolower($link['attribs']['rel']['data'])));
+
+                               if ($this->base_location < $link['offset'])
+                               {
+                                       $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+                               }
+                               else
+                               {
+                                       $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+                               }
+
+                               if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))))
+                               {
+                                       $this->checked_feeds++;
+                                       $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent);
+                                       if ($this->is_feed($feed))
+                                       {
+                                               return $feed;
+                                       }
+                               }
+                               $done[] = $href;
+                       }
+               }
+               return null;
+       }
+
+       function get_links()
+       {
+               $links = SimplePie_Misc::get_element('a', $this->file->body);
+               foreach ($links as $link)
+               {
+                       if (isset($link['attribs']['href']['data']))
+                       {
+                               $href = trim($link['attribs']['href']['data']);
+                               $parsed = SimplePie_Misc::parse_url($href);
+                               if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
+                               {
+                                       if ($this->base_location < $link['offset'])
+                                       {
+                                               $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+                                       }
+                                       else
+                                       {
+                                               $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+                                       }
+
+                                       $current = SimplePie_Misc::parse_url($this->file->url);
+
+                                       if ($parsed['authority'] === '' || $parsed['authority'] == $current['authority'])
+                                       {
+                                               $this->local[] = $href;
+                                       }
+                                       else
+                                       {
+                                               $this->elsewhere[] = $href;
+                                       }
+                               }
+                       }
+               }
+               $this->local = array_unique($this->local);
+               $this->elsewhere = array_unique($this->elsewhere);
+               if (!empty($this->local) || !empty($this->elsewhere))
+               {
+                       return true;
+               }
+               return null;
+       }
+
+       function extension(&$array)
+       {
+               foreach ($array as $key => $value)
+               {
+                       if ($this->checked_feeds == $this->max_checked_feeds)
+                       {
+                               break;
+                       }
+                       if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
+                       {
+                               $this->checked_feeds++;
+                               $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+                               if ($this->is_feed($feed))
+                               {
+                                       return $feed;
+                               }
+                               else
+                               {
+                                       unset($array[$key]);
+                               }
+                       }
+               }
+               return null;
+       }
+
+       function body(&$array)
+       {
+               foreach ($array as $key => $value)
+               {
+                       if ($this->checked_feeds == $this->max_checked_feeds)
+                       {
+                               break;
+                       }
+                       if (preg_match('/(rss|rdf|atom|xml)/i', $value))
+                       {
+                               $this->checked_feeds++;
+                               $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+                               if ($this->is_feed($feed))
+                               {
+                                       return $feed;
+                               }
+                               else
+                               {
+                                       unset($array[$key]);
+                               }
+                       }
+               }
+               return null;
+       }
+}
+
+class SimplePie_Parser
+{
+       var $xml;
+       var $error_code;
+       var $error_string;
+       var $current_line;
+       var $current_column;
+       var $current_byte;
+       var $separator = ' ';
+       var $feed = false;
+       var $namespace = array('');
+       var $element = array('');
+       var $xml_base = array('');
+       var $xml_base_explicit = array(false);
+       var $xml_lang = array('');
+       var $data = array();
+       var $datas = array(array());
+       var $current_xhtml_construct = -1;
+       var $encoding;
+
+       function pre_process(&$data, $encoding)
+       {
+               // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
+               if (strtoupper($encoding) == 'US-ASCII')
+               {
+                       $this->encoding = 'UTF-8';
+               }
+               else
+               {
+                       $this->encoding = $encoding;
+               }
+
+               // Strip BOM:
+               // UTF-32 Big Endian BOM
+               if (strpos($data, "\x0\x0\xFE\xFF") === 0)
+               {
+                       $data = substr($data, 4);
+               }
+               // UTF-32 Little Endian BOM
+               elseif (strpos($data, "\xFF\xFE\x0\x0") === 0)
+               {
+                       $data = substr($data, 4);
+               }
+               // UTF-16 Big Endian BOM
+               elseif (strpos($data, "\xFE\xFF") === 0)
+               {
+                       $data = substr($data, 2);
+               }
+               // UTF-16 Little Endian BOM
+               elseif (strpos($data, "\xFF\xFE") === 0)
+               {
+                       $data = substr($data, 2);
+               }
+               // UTF-8 BOM
+               elseif (strpos($data, "\xEF\xBB\xBF") === 0)
+               {
+                       $data = substr($data, 3);
+               }
+
+               // Make sure the XML prolog is sane and has the correct encoding
+               $data = preg_replace("/^<\?xml[\x20\x9\xD\xA]+version([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"1.0\"|'1.0'|\"1.1\"|'1.1')([\x20\x9\xD\xA]+encoding([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"[A-Za-z][A-Za-z0-9._\-]*\"|'[A-Za-z][A-Za-z0-9._\-]*'))?([\x20\x9\xD\xA]+standalone([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"(yes|no)\"|'(yes|no)'))?([\x20\x9\xD\xA]+)?\?>/", '', $data);
+               $data = "<?xml version='1.0' encoding='$encoding'?>\n" . $data;
+       }
+
+       function parse(&$data)
+       {
+               $return = true;
+
+               // Create the parser
+               $this->xml = xml_parser_create_ns($this->encoding, $this->separator);
+               xml_parser_set_option($this->xml, XML_OPTION_SKIP_WHITE, 1);
+               xml_parser_set_option($this->xml, XML_OPTION_CASE_FOLDING, 0);
+               xml_set_object($this->xml, $this);
+               xml_set_character_data_handler($this->xml, 'cdata');
+               xml_set_element_handler($this->xml, 'tag_open', 'tag_close');
+
+               // Parse!
+               if (!xml_parse($this->xml, $data, true))
+               {
+                       $this->data = null;
+                       $this->error_code = xml_get_error_code($this->xml);
+                       $this->error_string = xml_error_string($this->error_code);
+                       $return = false;
+               }
+               $this->current_line = xml_get_current_line_number($this->xml);
+               $this->current_column = xml_get_current_column_number($this->xml);
+               $this->current_byte = xml_get_current_byte_index($this->xml);
+               xml_parser_free($this->xml);
+               return $return;
+       }
+
+       function get_error_code()
+       {
+               return $this->error_code;
+       }
+
+       function get_error_string()
+       {
+               return $this->error_string;
+       }
+
+       function get_current_line()
+       {
+               return $this->current_line;
+       }
+
+       function get_current_column()
+       {
+               return $this->current_column;
+       }
+
+       function get_current_byte()
+       {
+               return $this->current_byte;
+       }
+
+       function get_data()
+       {
+               return $this->data;
+       }
+
+       function tag_open($parser, $tag, $attributes)
+       {
+               if ($this->feed === 0)
+               {
+                       return;
+               }
+               elseif ($this->feed == false)
+               {
+                       if (in_array($tag, array(
+                               SIMPLEPIE_NAMESPACE_ATOM_10 . $this->separator . 'feed',
+                               SIMPLEPIE_NAMESPACE_ATOM_03 . $this->separator . 'feed',
+                               'rss',
+                               SIMPLEPIE_NAMESPACE_RDF . $this->separator . 'RDF'
+                       )))
+                       {
+                                       $this->feed = 1;
+                       }
+               }
+               else
+               {
+                       $this->feed++;
+               }
+
+               list($this->namespace[], $this->element[]) = $this->split_ns($tag);
+
+               $attribs = array();
+               foreach ($attributes as $name => $value)
+               {
+                       list($attrib_namespace, $attribute) = $this->split_ns($name);
+                       $attribs[$attrib_namespace][$attribute] = $value;
+               }
+
+               if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base']))
+               {
+                       $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base));
+                       $this->xml_base_explicit[] = true;
+               }
+               else
+               {
+                       $this->xml_base[] = end($this->xml_base);
+                       $this->xml_base_explicit[] = end($this->xml_base_explicit);
+               }
+
+               if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang']))
+               {
+                       $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang'];
+               }
+               else
+               {
+                       $this->xml_lang[] = end($this->xml_lang);
+               }
+
+               if ($this->current_xhtml_construct >= 0)
+               {
+                       $this->current_xhtml_construct++;
+                       if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML)
+                       {
+                               $this->data['data'] .= '<' . end($this->element);
+                               if (isset($attribs['']))
+                               {
+                                       foreach ($attribs[''] as $name => $value)
+                                       {
+                                               $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
+                                       }
+                               }
+                               $this->data['data'] .= '>';
+                       }
+               }
+               else
+               {
+                       $this->datas[] =& $this->data;
+                       $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][];
+                       $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang));
+                       if ((end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] == 'xml')
+                       || (end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] == 'xhtml'))
+                       {
+                               $this->current_xhtml_construct = 0;
+                       }
+               }
+       }
+
+       function cdata($parser, $cdata)
+       {
+               if ($this->current_xhtml_construct >= 0)
+               {
+                       $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
+               }
+               elseif ($this->feed > 1)
+               {
+                       $this->data['data'] .= $cdata;
+               }
+       }
+
+       function tag_close($parser, $tag)
+       {
+               if (!$this->feed)
+               {
+                       return;
+               }
+
+               if ($this->current_xhtml_construct >= 0)
+               {
+                       $this->current_xhtml_construct--;
+                       if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param')))
+                       {
+                               $this->data['data'] .= '</' . end($this->element) . '>';
+                       }
+               }
+               if ($this->current_xhtml_construct == -1)
+               {
+                       $this->data =& $this->datas[$this->feed];
+                       array_pop($this->datas);
+               }
+
+               array_pop($this->element);
+               array_pop($this->namespace);
+               array_pop($this->xml_base);
+               array_pop($this->xml_base_explicit);
+               array_pop($this->xml_lang);
+               $this->feed--;
+       }
+
+       function split_ns($string)
+       {
+               static $cache = array();
+               if (!isset($cache[$string]))
+               {
+                       if ($pos = strpos($string, $this->separator))
+                       {
+                               static $separator_length;
+                               if (!$separator_length)
+                               {
+                                       $separator_length = strlen($this->separator);
+                               }
+                               $cache[$string] = array(substr($string, 0, $pos), substr($string, $pos + $separator_length));
+                       }
+                       else
+                       {
+                               $cache[$string] = array('', $string);
+                       }
+               }
+               return $cache[$string];
+       }
+}
+
+/**
+ * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shortern a string while preserving HTML tags
+ */
+class SimplePie_Sanitize
+{
+       // Private vars
+       var $base;
+
+       // Options
+       var $remove_div = true;
+       var $image_handler = '';
+       var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+       var $encode_instead_of_strip = false;
+       var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+       var $strip_comments = false;
+       var $output_encoding = 'UTF-8';
+       var $enable_cache = true;
+       var $cache_location = './cache';
+       var $cache_name_function = 'md5';
+       var $cache_class = 'SimplePie_Cache';
+       var $file_class = 'SimplePie_File';
+       var $timeout = 10;
+       var $useragent = '';
+       var $force_fsockopen = false;
+
+       var $replace_url_attributes = array(
+               'a' => 'href',
+               'area' => 'href',
+               'blockquote' => 'cite',
+               'del' => 'cite',
+               'form' => 'action',
+               'img' => array('longdesc', 'src'),
+               'input' => 'src',
+               'ins' => 'cite',
+               'q' => 'cite'
+       );
+
+       function remove_div($enable = true)
+       {
+               $this->remove_div = (bool) $enable;
+       }
+
+       function set_image_handler($page = false)
+       {
+               if ($page)
+               {
+                       $this->image_handler = (string) $page;
+               }
+               else
+               {
+                       $this->image_handler = false;
+               }
+       }
+
+       function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache')
+       {
+               if (isset($enable_cache))
+               {
+                       $this->enable_cache = (bool) $enable_cache;
+               }
+
+               if ($cache_location)
+               {
+                       $this->cache_location = (string) $cache_location;
+               }
+
+               if ($cache_name_function)
+               {
+                       $this->cache_name_function = (string) $cache_name_function;
+               }
+
+               if ($cache_class)
+               {
+                       $this->cache_class = (string) $cache_class;
+               }
+       }
+
+       function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false)
+       {
+               if ($file_class)
+               {
+                       $this->file_class = (string) $file_class;
+               }
+
+               if ($timeout)
+               {
+                       $this->timeout = (string) $timeout;
+               }
+
+               if ($useragent)
+               {
+                       $this->useragent = (string) $useragent;
+               }
+
+               if ($force_fsockopen)
+               {
+                       $this->force_fsockopen = (string) $force_fsockopen;
+               }
+       }
+
+       function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
+       {
+               if ($tags)
+               {
+                       if (is_array($tags))
+                       {
+                               $this->strip_htmltags = $tags;
+                       }
+                       else
+                       {
+                               $this->strip_htmltags = explode(',', $tags);
+                       }
+               }
+               else
+               {
+                       $this->strip_htmltags = false;
+               }
+       }
+
+       function encode_instead_of_strip($encode = false)
+       {
+               $this->encode_instead_of_strip = (bool) $encode;
+       }
+
+       function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'))
+       {
+               if ($attribs)
+               {
+                       if (is_array($attribs))
+                       {
+                               $this->strip_attributes = $attribs;
+                       }
+                       else
+                       {
+                               $this->strip_attributes = explode(',', $attribs);
+                       }
+               }
+               else
+               {
+                       $this->strip_attributes = false;
+               }
+       }
+
+       function strip_comments($strip = false)
+       {
+               $this->strip_comments = (bool) $strip;
+       }
+
+       function set_output_encoding($encoding = 'UTF-8')
+       {
+               $this->output_encoding = (string) $encoding;
+       }
+
+       /**
+        * Set element/attribute key/value pairs of HTML attributes
+        * containing URLs that need to be resolved relative to the feed
+        *
+        * @access public
+        * @since 1.0
+        * @param array $element_attribute Element/attribute key/value pairs
+        */
+       function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+       {
+               $this->replace_url_attributes = (array) $element_attribute;
+       }
+
+       function sanitize($data, $type, $base = '')
+       {
+               $data = trim($data);
+               if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI)
+               {
+                       if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML)
+                       {
+                               if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/(\w+)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data))
+                               {
+                                       $type |= SIMPLEPIE_CONSTRUCT_HTML;
+                               }
+                               else
+                               {
+                                       $type |= SIMPLEPIE_CONSTRUCT_TEXT;
+                               }
+                       }
+
+                       if ($type & SIMPLEPIE_CONSTRUCT_BASE64)
+                       {
+                               $data = base64_decode($data);
+                       }
+
+                       if ($type & SIMPLEPIE_CONSTRUCT_XHTML)
+                       {
+                               if ($this->remove_div)
+                               {
+                                       $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data);
+                                       $data = preg_replace('/<\/div>$/', '', $data);
+                               }
+                               else
+                               {
+                                       $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
+                               }
+                       }
+
+                       if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
+                       {
+                               // Strip comments
+                               if ($this->strip_comments)
+                               {
+                                       $data = SimplePie_Misc::strip_comments($data);
+                               }
+
+                               // Strip out HTML tags and attributes that might cause various security problems.
+                               // Based on recommendations by Mark Pilgrim at:
+                               // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
+                               if ($this->strip_htmltags)
+                               {
+                                       foreach ($this->strip_htmltags as $tag)
+                                       {
+                                               $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU';
+                                               while (preg_match($pcre, $data))
+                                               {
+                                                       $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data);
+                                               }
+                                       }
+                               }
+
+                               if ($this->strip_attributes)
+                               {
+                                       foreach ($this->strip_attributes as $attrib)
+                                       {
+                                               $data = preg_replace('/ '. trim($attrib) .'=("|&quot;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\'|&apos;|<|>|\+|{|})*("|&quot;)/i', '', $data);
+                                               $data = preg_replace('/ '. trim($attrib) .'=(\'|&apos;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|"|&quot;|<|>|\+|{|})*(\'|&apos;)/i', '', $data);
+                                               $data = preg_replace('/ '. trim($attrib) .'=(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\+|{|})*/i', '', $data);
+                                       }
+                               }
+
+                               // Replace relative URLs
+                               $this->base = $base;
+                               foreach ($this->replace_url_attributes as $element => $attributes)
+                               {
+                                       $data = $this->replace_urls($data, $element, $attributes);
+                               }
+
+                               // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
+                               if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache)
+                               {
+                                       $images = SimplePie_Misc::get_element('img', $data);
+                                       foreach ($images as $img)
+                                       {
+                                               if (isset($img['attribs']['src']['data']))
+                                               {
+                                                       $image_url = $img['attribs']['src']['data'];
+                                                       $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $image_url), 'spi');
+
+                                                       if ($cache->load())
+                                                       {
+                                                               $img['attribs']['src']['data'] = $this->image_handler . rawurlencode($img['attribs']['src']['data']);
+                                                               $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+                                                       }
+                                                       else
+                                                       {
+                                                               $file =& new $this->file_class($image_url, $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+                                                               $headers = $file->headers;
+
+                                                               if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)))
+                                                               {
+                                                                       if (!$cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+                                                                       {
+                                                                               trigger_error("$cache->name is not writeable", E_USER_WARNING);
+                                                                       }
+                                                                       $img['attribs']['src']['data'] = $this->image_handler . rawurlencode($img['attribs']['src']['data']);
+                                                                       $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data
+                               $data = trim($data);
+                       }
+
+                       if ($type & SIMPLEPIE_CONSTRUCT_IRI)
+                       {
+                               $data = SimplePie_Misc::absolutize_url($data, $base);
+                       }
+
+                       if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI))
+                       {
+                               $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
+                       }
+
+                       if ($this->output_encoding != 'UTF-8')
+                       {
+                               $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding);
+                       }
+               }
+               return $data;
+       }
+
+       function replace_urls($data, $tag, $attributes)
+       {
+               if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags))
+               {
+                       $elements = SimplePie_Misc::get_element($tag, $data);
+                       foreach ($elements as $element)
+                       {
+                               if (is_array($attributes))
+                               {
+                                       foreach ($attributes as $attribute)
+                                       {
+                                               if (isset($element['attribs'][$attribute]['data']))
+                                               {
+                                                       $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base);
+                                                       $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
+                                               }
+                                       }
+                               }
+                               elseif (isset($element['attribs'][$attributes]['data']))
+                               {
+                                       $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base);
+                                       $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
+                               }
+                       }
+               }
+               return $data;
+       }
+
+       function do_strip_htmltags($match)
+       {
+               if ($this->encode_instead_of_strip)
+               {
+                       if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+                       {
+                               $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
+                               $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
+                               return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
+                       }
+                       else
+                       {
+                               return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
+                       }
+               }
+               elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+               {
+                       return $match[4];
+               }
+               else
+               {
+                       return '';
+               }
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/h/splash.php b/h/splash.php
new file mode 100644 (file)
index 0000000..6fd3e27
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+function splash_title($img, $title, $search=false)
+{
+  $alt = basename($img);
+?>
+<div id="splash">
+  <div id="splash-content">
+    <?php if ($search) search_box(); ?>
+    <img class="icon" src="<?php echo $img ?>" alt="<?php echo $alt ?>"/>
+    <h2><?php echo $title ?></h2>
+    <div class="clear"></div>
+  </div>
+</div>
+<?php
+}
+?>
+
+<?php
+function search_box()
+{
+?>
+
+<div class="search">
+<!-- uses this custom google search:
+     http://www.google.com/cse/home?cx=002959308775471924435:dpvgesidqfe -->
+<form action="search.php" id="cse-search-box">
+  <input name="cx" type="hidden" value="002959308775471924435:dpvgesidqfe" />
+  <!-- results go to an iframe -->
+  <input name="cof" type="hidden" value="FORID:10" />
+  <input name="ie" type="hidden" value="UTF-8" />
+  <input name="q" class="input" size="28" type="text" />
+  <input name="sa" class="search-button" type="submit" value="Search" />
+  <input name="siteurl" type="hidden" value="1.open.gmodules.com/gadgets/ifr?container=open&mid=1&v=677f9ad3fca5a95665c4a5615dc689&lang=all&country=ALL&view=home&url=http%3A%2F%2Fwww.google.com%2Fcse%2Fapi%2F002959308775471924435%2Fcse%2Fdpvgesidqfe%2Fgadget&libs=core%3Acore.io%3Arpc#rpctoken=1138051686" />
+</form>
+</div>
+
+<?php
+}
+?>
+
diff --git a/h/xmlfeedlist.js b/h/xmlfeedlist.js
new file mode 100644 (file)
index 0000000..aac2dfb
--- /dev/null
@@ -0,0 +1,41 @@
+function xmlFeedList(out, subtag, gennicks) {
+  var o=document.getElementById(out);
+
+  // grab the list of feeds
+  var ajax=createAjaxObj();
+  if (!ajax)
+    return;
+  ajax.open('GET', 'rss/config/planet.xml', false);  // synchronous
+  ajax.send(null);
+  var xml=ajax.responseXML; // input
+  var c=''; // output
+
+  var feeds=xml.getElementsByTagName('feeds')[0].
+    getElementsByTagName('feed');
+  for (var i=0; i<feeds.length; i++) {
+    var p = feeds[i].getElementsByTagName(subtag)[0];
+    if (p) {
+      var name=feeds[i].getElementsByTagName('name')[0].firstChild;
+      if (name) name=name.nodeValue;
+      var link=p.getElementsByTagName('www')[0].firstChild;
+      if (link) link=link.nodeValue;
+      var rss=p.getElementsByTagName('rss')[0].firstChild;
+      if (rss) rss=rss.nodeValue;
+
+      var nick = null;
+      if (link && gennicks) {
+        var a = link.match(/^[a-z]+:\/\/[^\/]+\/([^\/]+)/);
+        if (a) nick = a[1];
+      }
+
+      c+='<li><a href="'+rss+'">'+
+        '<img border="0" src="images/rssshort.png" /></a>';
+      if (link) c+='<a href="'+link+'">';
+      c+=name;
+      if (link) c+='</a>';
+      if (nick) c+='<br/> ('+nick+')';
+      c+='</li>';
+    }
+  }
+  o.innerHTML=c;
+}
diff --git a/h/xmlnews.js b/h/xmlnews.js
new file mode 100644 (file)
index 0000000..4939ced
--- /dev/null
@@ -0,0 +1,268 @@
+// list of valid feeds
+var feeds = new Array();
+feeds['news'] = './rss/news/.xml';
+feeds['commits'] = './rss/local/.xml.commits';
+feeds['planet'] = './rss/planet/.xml';
+feeds['miniplanet'] = './rss/mini/.xml';
+
+function showError(out, m) {
+  out.innerHTML='<b>Error</b> showing XML news feed!<br />'+m;
+}
+
+function fetch(me, feed) {
+  // the file to load
+  me.url = feeds[feed];
+
+  //me.out.innerHTML='Initializing ticker...';
+
+  // read the xml document
+  me.ajax=createAjaxObj();
+  if (me.ajax) {
+    //me.ajax.onreadystatechange=function(){response(me);};
+    me.ajax.open('GET', me.url, false);  // synchronous
+    me.ajax.send(null);
+    response(me);
+  }
+  else {
+    showError(me.out, 'Unable to create AJAX object');
+  }
+}
+
+function twitter_nametolink(t, url) {
+  return t.replace(/^([^:]+)/, function(a) {
+    return '<a href="'+url+'">'+a+'</a>';
+  });
+}
+
+function striptags(t) {
+  /* remove tags (script tags have already been removed) */
+  return t.replace(/<\/?[a-zA-Z]+( [^>]*)?>/g, '');
+}
+
+function ident_linkize(t) {
+  t = t.replace(/@([a-zA-Z_0-9\/]+)/g, function(a, b) {
+    return '@<a href="http://identi.ca/'+b+'">'+b+'</a>';
+  });
+  t = t.replace(/#([a-zA-Z_0-9\/]+)/g, function(a, b) {
+    return '#<a href="http://identi.ca/tag/'+b+'">'+b+'</a>';
+  });
+  return t;
+}
+
+function twitter_linkize(t) {
+  t = t.replace(/@([a-zA-Z_0-9\/]+)/g, function(a, b) {
+    return '@<a href="http://twitter.com/'+b+'">'+b+'</a>';
+  });
+  t = t.replace(/#([a-zA-Z_0-9\/]+)/g, function(a, b) {
+    return '#<a href="http://twitter.com/search?q=%23'+b+'">'+b+'</a>';
+  });
+  return t;
+}
+
+function linkize(t) {
+  // turn urls into links
+  // - don't let them end with .,:;)]}!
+  // - don't replace links inside a tag attribute
+
+  return t.replace(/(<[a-zA-Z]+( +[a-zA-Z]+=("(\\"|[^"])*"|'(\\'|[^'])*'))* +[a-zA-Z]+=\"(\\"|[^"])*)?([a-z]+:\/\/[A-Z0-9a-z%_#?&$@+=!\*\(\)\[\]{};:\'\"\\\|,.\/-]+[A-Z0-9a-z%_#?&$@+=\*\(\[{\'\"\\\|\/-])/g,
+                   function(all) {
+                     if (all.charAt(0) == '<')
+                       return all;
+                     else
+                       return '<a href="'+all+'">'+all+'</a>';
+                   });
+}
+
+function strip_whitespace(t) {
+  return t.replace(/[\n\r\t ]+/g, ' ');
+}
+
+function ellipsize(t, len) {
+  t = strip_whitespace(t); // size matters
+  var r = '';
+  for (var i = 0; i < len; i++) {
+    var m = t.match(/^(&#[0-9]+;|&(gt|lt|amp|quot|apos);|.)/);
+    if (!m) break;
+    r += m[0];
+    t = t.slice(m[0].length);
+  }
+  return r + (t.length == 0 ? '' : '...');
+}
+
+function response(me) {
+  // are we ready yet ?
+  if (me.ajax.readyState!=4)
+    return;
+  if (me.ajax.status!=200) {
+    showError(me.out, 'Status: '+me.ajax.status+'<br>'+me.url);
+    return;
+  }
+
+  // get the xml document
+  me.xml=me.ajax.responseXML;
+  if (me.xml==null) {
+    showError(me.out, 'No XML response: '+me.ajax.responseText);
+    return;
+  }
+
+  // get the feed
+  var feed=me.xml.getElementsByTagName('feed')[0];
+
+  var items=feed.getElementsByTagName('item');
+  if (items.length==0) {
+    this.showError(me.out, 'No items found.');
+    return;
+  }
+
+  // the output for the div
+  var c='<ul>';
+
+  // add all the items in the feed
+  for (var i=0; i<items.length && i<me.count; i++){
+    var last=(i+1>=items.length||i+1>=me.count);
+    var item=items[i];
+    var n,date,time,title,link,desc,id,name,www,image;
+
+    if (me.options.showname) {
+      n = item.getElementsByTagName("name")[0].firstChild;
+      name = n ? n.nodeValue : '';
+      n = item.getElementsByTagName("feedurl")[0].firstChild;
+      www = n.nodeValue;
+    }
+
+    n = item.getElementsByTagName("image")[0].firstChild;
+    if (n)
+      image = striptags(n.nodeValue);
+    else
+      image = null;
+
+    if (me.options.showdate) {
+      n = item.getElementsByTagName("date")[0].firstChild;
+      var t=new Date();
+      var offset=t.getTimezoneOffset();
+      t.setTime((parseInt(n.nodeValue)-offset*60)*1000);
+      date=t.format('mediumDate');
+      time=t.format('shortTime');
+    }
+
+    n=item.getElementsByTagName("title")[0].firstChild;
+    title=n.nodeValue;
+    n=item.getElementsByTagName("id")[0].firstChild;
+    id=n.nodeValue;
+    if (me.options.titlelinktoid)
+      link = me.options.titlelinktoid+'#'+id;
+    else if (me.options.twitter) {
+      n=item.getElementsByTagName("feedurl")[0].firstChild;
+      link=n.nodeValue;
+    }
+    else {
+      n=item.getElementsByTagName("link")[0].firstChild;
+      link=n.nodeValue;
+    }
+
+    if (me.options.showdescription && !me.options.twitter) {
+      var j, k;
+      k = item.getElementsByTagName("text")[0].childNodes.length;
+      desc = '';
+      // firefox truncates the firstChild at 4096 bytes, so grab from
+      // all children and join it together
+      for (j = 0; j < k; j++) {
+        n = item.getElementsByTagName("text")[0].childNodes[j];
+        desc += n.nodeValue;
+      }
+    }
+
+    // massage the output
+    if (me.options.twitter) {
+      /* twitter mode */
+      title = linkize(title);
+
+      n = item.getElementsByTagName("feedurl")[0].firstChild;
+      if (n.nodeValue.match(/twitter.com/))
+        title = twitter_linkize(title);
+      if (n.nodeValue.match(/identi.ca/))
+        title = ident_linkize(title);
+
+      title = twitter_nametolink(title, link);
+    }
+    else if (me.options.fulldescription) {
+      /* full description */
+      if (me.options.links)
+        desc = linkize(desc);
+    }
+    else if (me.options.showdescription) {
+      /* short description */
+      desc = striptags(desc);
+      desc = ellipsize(desc, 140);
+    }
+
+    c+='<li>';
+    if (me.options.showimage && image)
+      c+='<div class="image"><img src="'+image+'" /></div>';
+    if (me.options.showname && !me.options.shownamebottom) {
+      c+='<div class="name">';
+      if (me.options.shownamelink && www)
+        c+='<a href="'+www+'">';
+      c+=name;
+      if (www)
+        c+='</a>';
+      c+=':</div>';
+    }
+    if (me.options.idname)
+      c+='<a name="'+id+'"></a>';
+    c+='<div class="title">';
+    if (me.options.twitter)
+      c+=title;
+    else
+      c+='<a href="'+link+'">'+title+'</a>';
+    c+='</div>';
+    if (me.options.showdescription)
+      c+='<div class="description">'+desc+'</div>';
+    c+='<div class="footer">';
+    if (me.options.showname && options.shownamebottom) {
+      c+='<div class="name">';
+      if (me.options.shownamelink && www)
+        c+='<a href="'+www+'">';
+      c+=name;
+      if (www)
+        c+='</a>';
+      c+='</div>';
+    }
+    if (me.options.showdate){
+      c+='<div class="datetime">';
+      c+='<div class="date">'+date+'</div>';
+      c+='<div class="time">'+time+'</div>';
+      c+='</div>';
+    }
+    c+='</div>';
+    if (!last && me.options.fulldescription)
+      c+='<hr />'; // separate things in full description mode
+    c+='</li>';
+  }
+  c+='</ul>';
+
+  me.out.innerHTML=c;
+}
+
+function xmlNews(feed, to, count, options)
+{
+  var me = this;
+  me.out=document.getElementById(to); // destination container
+  me.count = count;
+
+  me.options = function(){};
+  me.options.twitter=options.match(/twitter/);
+  me.options.links=options.match(/links/);
+  me.options.showdescription=options.match(/(show|full)description/);
+  me.options.fulldescription=options.match(/fulldescription/);
+  me.options.showimage=options.match(/showimage/);
+  me.options.showdate=options.match(/showdate/);
+  me.options.showname=options.match(/showname/);
+  me.options.shownamebottom=options.match(/shownamebottom/);
+  me.options.shownamelink=options.match(/shownamelink/);
+  me.options.titlelinktoid=options.match(/titlelinktoid=(.[^, ]*)/);
+  if (me.options.titlelinktoid) me.options.titlelinktoid=me.options.titlelinktoid[1];
+  me.options.idname=options.match(/idname/);
+
+  fetch(me, feed);
+}
diff --git a/head.php b/head.php
new file mode 100644 (file)
index 0000000..c080819
--- /dev/null
+++ b/head.php
@@ -0,0 +1,16 @@
+<head>
+  <title>Openbox - <?php echo $title ?></title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
+  <link rel="shortcut icon" href="favicon.ico" /> 
+  <link rel="stylesheet" type="text/css" href="css/site.css" />
+  <script type="text/javascript" src="h/misc.js"></script>
+  <script type="text/javascript" src="h/ajax.js"></script>
+  <script type="text/javascript" src="h/dateformat.js"></script>
+  <script type="text/javascript" src="h/xmlnews.js"></script>
+  <script type="text/javascript" src="h/xmlfeedlist.js"></script>
+  <script type="text/javascript" src="h/geom.js"></script>
+  <?php include_once('h/splash.php'); ?>
+
+  <!--[-if lt IE 7]>
+    <meta http-equiv="imagetoolbar" content="no" />
+  <![endif]-->
diff --git a/helpmenu.php b/helpmenu.php
new file mode 100644 (file)
index 0000000..fb014d6
--- /dev/null
@@ -0,0 +1,40 @@
+<h5>Getting Started</h5>
+<ul>
+  <li><a href="help.php?Start">Start Using Openbox</a></li>
+  <li class="star"><a href="help.php?Tutorials">User Tutorials</a></li>
+  <li><a href="help.php?Autostart">Auto-Start Programs</a></li>
+  <li><a href="help.php?Configuration">Configure Openbox</a></li>
+  <li><a href="help.php?Bindings">Configure Key Bindings</a></li>
+  <li><a href="help.php?Menus">Edit Menus</a></li>
+  <li><a href="help.php?Install#Compile_Openbox">Compile Openbox</a></li>
+</ul>
+<h5>Configuration Details</h5>
+<ul>
+  <li><a href="help.php?Configuration">Basics</a></li>
+  <li><a href="help.php?Bindings">Key/Mouse Bindings</a></li>
+  <li><a href="help.php?Actions">Actions</a></li>
+  <li><a href="help.php?Appsettings">Per-app Settings</a></li>
+  <li><a href="help.php?Config_Examples">Examples</a></li>
+</ul>
+<h5>Themes</h5>
+<ul>
+  <li><a href="help.php?Theme_Spec">Theme Format</a></li>
+  <li><a href="help.php?Theme_Convertbb">Convert Blackbox Themes</a></li>
+</ul>
+<h5>Menus</h5>
+<ul>
+  <li><a href="help.php?Menus">Overview</a></li>
+  <li><a href="help.php?Menus#Edit">Editing Menus</a></li>
+  <li><a href="help.php?PipeMenus">Pipe Menus</a></li>
+</ul>
+<h5>Applications</h5>
+<ul>
+  <li><a href="help.php?ObConf">ObConf</a></li>
+  <li><a href="help.php?Apps">Overview</a></li>
+  <li><a href="help.php?Apps#Panels">Panels/Launchers</a></li>
+  <li><a href="help.php?Apps#Pagers">Pagers</a></li>
+  <li><a href="help.php?Apps#Icons">Desktop Icons</a></li>
+  <li><a href="help.php?Apps#Wallpaper">Desktop Wallpaper</a></li>
+  <li><a href="help.php?Apps#Trays">System Trays</a></li>
+  <li><a href="help.php?Apps#Tools">Tools</a></li>
+</ul>
\ No newline at end of file
diff --git a/home.php b/home.php
new file mode 100644 (file)
index 0000000..313e785
--- /dev/null
+++ b/home.php
@@ -0,0 +1,116 @@
+<?php
+$title="Home";
+$breadcrumb=array();
+?>
+
+<html>
+<?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/home.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<div id="splash">
+<div id="splash-content">
+  <div id="splashimage">
+    <img src="http://david.chalkskeletons.com/OPENBOX/sshot.png" />
+  </div>
+  <div id="splashtext">
+    <h2>A Highly Configurable Window Manager</h2> 
+    <p> 
+    Openbox allows you to change almost every aspect of how you interact with
+    your desktop and invent completely new ways to use and control it. 
+    </p> 
+    <p> 
+    Openbox gives you control without making you do everything.
+    </p> 
+    <p> 
+    Take a look at the <a href="help.php?Start">getting started guide</a>
+    and change how you manage your desktop.
+    </p> 
+
+    <div id="download"> 
+      <a href="download.php"> &nbsp;</a> 
+    </div> 
+  </div>
+  <div class="clear"></div>
+</div>
+</div>
+
+<?php include('content.php') ?>
+
+<div id="col1"> 
+<h5>Getting Started</h5> 
+<dl> 
+<dt><img src="images/icons/openbox_logo.png" alt="start"/></dt> 
+<dd><a href="help.php?Start">Start using Openbox</a><br/>
+Openbox gives you control without making you do everything.</dd> 
+</dl>
+
+<dl> 
+<dt><img src="images/icons/list-add.png" alt="add"/></dt> 
+<dd><a href="help.php?Apps">Add New Functionality</a><br/>Panels, Widgets, Desktops, Pagers, etc.</dd> 
+</dl> 
+<dl> 
+<dt><img src="images/icons/help-browser.png" alt="add"/></dt> 
+<dd><a href="help.php">Documentation</a><br/>Learn how to <a href="help.php?Configuration">configure Openbox</a>, <a href="help.php?Menus">edit your menus</a> and much more.  </dd> 
+</dl> 
+<dl> 
+<dt><img src="images/icons/obconf.png" alt="obconf"/></dt> 
+<dd><a href="help.php?ObConf">ObConf</a><br/>Openbox GTK configuration tool.</dd> 
+</dl> 
+</div> 
+<div id="col2"> 
+<h5>Next Steps &amp; Helping Out</h5> 
+<dl> 
+<dt><img src="images/icons/bug.png" alt="bug"/></dt> 
+<dd><a href="develop.php">Bug Reporting</a><br/>Help out by
+<a href="develop.php">reporting bugs</a> or by
+<a href="develop-git.php">contributing code</a>.</dd> 
+</dl> 
+<dl> 
+<dt><img src="images/icons/translate.png" alt="trans"/></dt> 
+<dd><a href="develop-translate.php">
+  Help Translate Openbox</a><br/>
+  Any improvements to translations are greatly appreciated.</dd> 
+</dl> 
+<dl> 
+<dt><img src="images/icons/menu.png" alt="menu"/></dt> 
+<dd><a href="download-pipemenus.php">
+  Pipe Menus</a><br/>
+  Extend Openbox with pipemenus and contribute your own.</dd> 
+</dl> 
+
+<dl> 
+<dt><img src="images/icons/comm.png" alt="comms"/></dt> 
+<dd><a href="discuss.php">Join the Community</a><br/>Meet other users, and learn about projects built around Openbox.</dd> 
+</dl> 
+</div>
+
+<div id="col3"> 
+<a href="rss/news"><img class="rsslink" src="images/rss.png" title="Subscribe to the feed"/></a>
+<h5>Recent Announcements</h5> 
+<dl>
+
+<div id="news" class="ticker"></div>
+<script type="text/javascript">
+  xmlNews('news', // the feed name
+         'news', // the div name
+         3,     // count
+         'showdescription,titlelinktoid=discuss-news.php');
+</script>
+<div class="tickermore"> 
+  <a href="discuss-news.php">More news...</a> 
+</div> 
+
+</dl>
+</div> <!--col3-->
+
+<?php include('bottom.php') ?>
diff --git a/images/bc_sep.png b/images/bc_sep.png
new file mode 100644 (file)
index 0000000..9ee75f4
Binary files /dev/null and b/images/bc_sep.png differ
diff --git a/images/distro/arch-large.png b/images/distro/arch-large.png
new file mode 100644 (file)
index 0000000..b4e9063
Binary files /dev/null and b/images/distro/arch-large.png differ
diff --git a/images/distro/arch.png b/images/distro/arch.png
new file mode 100644 (file)
index 0000000..f31a21a
Binary files /dev/null and b/images/distro/arch.png differ
diff --git a/images/distro/debian-large.png b/images/distro/debian-large.png
new file mode 100644 (file)
index 0000000..846038f
Binary files /dev/null and b/images/distro/debian-large.png differ
diff --git a/images/distro/debian.png b/images/distro/debian.png
new file mode 100644 (file)
index 0000000..065eae1
Binary files /dev/null and b/images/distro/debian.png differ
diff --git a/images/distro/fedora-large.png b/images/distro/fedora-large.png
new file mode 100644 (file)
index 0000000..13061ba
Binary files /dev/null and b/images/distro/fedora-large.png differ
diff --git a/images/distro/fedora.png b/images/distro/fedora.png
new file mode 100644 (file)
index 0000000..a450e19
Binary files /dev/null and b/images/distro/fedora.png differ
diff --git a/images/distro/foresight-large.png b/images/distro/foresight-large.png
new file mode 100644 (file)
index 0000000..9f1980a
Binary files /dev/null and b/images/distro/foresight-large.png differ
diff --git a/images/distro/foresight.png b/images/distro/foresight.png
new file mode 100644 (file)
index 0000000..72f5924
Binary files /dev/null and b/images/distro/foresight.png differ
diff --git a/images/distro/gentoo-large.png b/images/distro/gentoo-large.png
new file mode 100644 (file)
index 0000000..4737396
Binary files /dev/null and b/images/distro/gentoo-large.png differ
diff --git a/images/distro/gentoo.png b/images/distro/gentoo.png
new file mode 100644 (file)
index 0000000..cf30924
Binary files /dev/null and b/images/distro/gentoo.png differ
diff --git a/images/distro/pclinuxos-large.png b/images/distro/pclinuxos-large.png
new file mode 100644 (file)
index 0000000..964df16
Binary files /dev/null and b/images/distro/pclinuxos-large.png differ
diff --git a/images/distro/pclinuxos.png b/images/distro/pclinuxos.png
new file mode 100644 (file)
index 0000000..052a852
Binary files /dev/null and b/images/distro/pclinuxos.png differ
diff --git a/images/distro/tarball-large.png b/images/distro/tarball-large.png
new file mode 100644 (file)
index 0000000..e7fa97d
Binary files /dev/null and b/images/distro/tarball-large.png differ
diff --git a/images/distro/tarball.png b/images/distro/tarball.png
new file mode 100644 (file)
index 0000000..fcec078
Binary files /dev/null and b/images/distro/tarball.png differ
diff --git a/images/distro/ubuntu-large.png b/images/distro/ubuntu-large.png
new file mode 100644 (file)
index 0000000..6f3d256
Binary files /dev/null and b/images/distro/ubuntu-large.png differ
diff --git a/images/distro/ubuntu.png b/images/distro/ubuntu.png
new file mode 100644 (file)
index 0000000..1243d74
Binary files /dev/null and b/images/distro/ubuntu.png differ
diff --git a/images/facebook.jpg b/images/facebook.jpg
new file mode 100644 (file)
index 0000000..dc20481
Binary files /dev/null and b/images/facebook.jpg differ
diff --git a/images/home/download.png b/images/home/download.png
new file mode 100644 (file)
index 0000000..7b7bba2
Binary files /dev/null and b/images/home/download.png differ
diff --git a/images/home/download2.png b/images/home/download2.png
new file mode 100644 (file)
index 0000000..0afe016
Binary files /dev/null and b/images/home/download2.png differ
diff --git a/images/home/downloadbrite.png b/images/home/downloadbrite.png
new file mode 100644 (file)
index 0000000..40b6ede
Binary files /dev/null and b/images/home/downloadbrite.png differ
diff --git a/images/icons/KDE_logo.png b/images/icons/KDE_logo.png
new file mode 100644 (file)
index 0000000..64fb4e3
Binary files /dev/null and b/images/icons/KDE_logo.png differ
diff --git a/images/icons/XFce_logo.png b/images/icons/XFce_logo.png
new file mode 100644 (file)
index 0000000..5c71a6a
Binary files /dev/null and b/images/icons/XFce_logo.png differ
diff --git a/images/icons/bug.png b/images/icons/bug.png
new file mode 100644 (file)
index 0000000..e26266c
Binary files /dev/null and b/images/icons/bug.png differ
diff --git a/images/icons/code.png b/images/icons/code.png
new file mode 100644 (file)
index 0000000..c13254f
Binary files /dev/null and b/images/icons/code.png differ
diff --git a/images/icons/comm.png b/images/icons/comm.png
new file mode 100644 (file)
index 0000000..3277444
Binary files /dev/null and b/images/icons/comm.png differ
diff --git a/images/icons/facebook.png b/images/icons/facebook.png
new file mode 100644 (file)
index 0000000..6869d52
Binary files /dev/null and b/images/icons/facebook.png differ
diff --git a/images/icons/feature.png b/images/icons/feature.png
new file mode 100644 (file)
index 0000000..48ce77b
Binary files /dev/null and b/images/icons/feature.png differ
diff --git a/images/icons/git.png b/images/icons/git.png
new file mode 100644 (file)
index 0000000..266f54a
Binary files /dev/null and b/images/icons/git.png differ
diff --git a/images/icons/gnome_logo.png b/images/icons/gnome_logo.png
new file mode 100644 (file)
index 0000000..0652bbd
Binary files /dev/null and b/images/icons/gnome_logo.png differ
diff --git a/images/icons/help-browser.png b/images/icons/help-browser.png
new file mode 100644 (file)
index 0000000..c3ed19a
Binary files /dev/null and b/images/icons/help-browser.png differ
diff --git a/images/icons/internet-news-reader.svg b/images/icons/internet-news-reader.svg
new file mode 100644 (file)
index 0000000..b86f419
--- /dev/null
@@ -0,0 +1,408 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="internet-news-reader.svg"
+   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
+   inkscape:version="0.46"
+   sodipodi:version="0.32"
+   id="svg1724"
+   height="48px"
+   width="48px"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       id="perspective66" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient6715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient2951"
+       inkscape:collect="always">
+      <stop
+         id="stop2953"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2955"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2941"
+       inkscape:collect="always">
+      <stop
+         id="stop2943"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2945"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2926">
+      <stop
+         id="stop2928"
+         offset="0.0000000"
+         style="stop-color:#787878;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2930"
+         offset="1.0000000"
+         style="stop-color:#d0d0d0;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2908">
+      <stop
+         id="stop2910"
+         offset="0"
+         style="stop-color:#828282;stop-opacity:1;" />
+      <stop
+         id="stop2912"
+         offset="1"
+         style="stop-color:#828282;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2831">
+      <stop
+         id="stop2833"
+         offset="0.0000000"
+         style="stop-color:#919191;stop-opacity:1.0000000;" />
+      <stop
+         style="stop-color:#e9e9e9;stop-opacity:1.0000000;"
+         offset="0.20232038"
+         id="stop2839" />
+      <stop
+         id="stop2843"
+         offset="0.23641536"
+         style="stop-color:#f3f3f3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2841"
+         offset="0.29892281"
+         style="stop-color:#e6e6e6;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2835"
+         offset="1.0000000"
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="17.640900"
+       x2="17.808550"
+       y1="46.606094"
+       x1="17.827532"
+       gradientTransform="matrix(1.376922,0.000000,0.000000,0.824973,-1.442762,-2.734599)"
+       id="linearGradient2837"
+       xlink:href="#linearGradient2831"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="25.539530"
+       x2="12.728428"
+       y1="38.134369"
+       x1="12.745098"
+       gradientTransform="matrix(1.119541,0.000000,0.000000,0.893223,0.125000,-1.125000)"
+       id="linearGradient2932"
+       xlink:href="#linearGradient2926"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="73.135864"
+       x2="40.419140"
+       y1="13.835308"
+       x1="4.6806560"
+       gradientTransform="matrix(1.310510,0.000000,0.000000,0.763062,0.125000,-1.125000)"
+       id="linearGradient2947"
+       xlink:href="#linearGradient2941"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       r="10.295440"
+       fy="44.613575"
+       fx="11.770608"
+       cy="44.613575"
+       cx="11.770608"
+       gradientTransform="scale(2.033667,0.491723)"
+       id="radialGradient2957"
+       xlink:href="#linearGradient2951"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="30"
+     inkscape:window-x="225"
+     inkscape:window-height="818"
+     inkscape:window-width="929"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showgrid="false"
+     inkscape:current-layer="layer1"
+     inkscape:cy="18.851997"
+     inkscape:cx="22.057648"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="0.16470588"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:showpageshadow="false" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>News</dc:title>
+        <dc:date>2005-03-11</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz/</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>news</rdf:li>
+            <rdf:li>usenet</rdf:li>
+            <rdf:li>new</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1"
+     id="layer1">
+    <g
+       transform="matrix(2.374466e-2,0,0,2.086758e-2,44.68185,33.2786)"
+       id="g6707">
+      <rect
+         style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect6709"
+         width="1339.6335"
+         height="478.35718"
+         x="-1559.2523"
+         y="-150.69685" />
+      <path
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         id="path6711"
+         sodipodi:nodetypes="cccc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path6713"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <path
+       sodipodi:nodetypes="cssssssss"
+       id="path1943"
+       d="M 6.6318643,11.549491 L 2.3792281,31.036252 C 1.6982888,34.156506 3.1866903,36.150182 5.3399238,36.150182 L 42.590860,36.150182 C 44.744093,36.150182 46.246357,33.815110 45.497724,31.090083 L 40.114641,11.495661 C 39.966374,10.955968 39.277978,10.525719 38.715040,10.526706 L 8.0314653,10.580537 C 7.2043318,10.581987 6.7925280,10.813285 6.6318643,11.549491 z "
+       style="fill:url(#linearGradient2837);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#828282;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       id="path2850"
+       d="M 36.854646,13.732143 L 28.535714,13.732143 L 29.311828,18.303571 L 37.696429,18.303571 L 36.854646,13.732143 z "
+       style="fill:#000000;fill-opacity:0.17543860;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2852"
+       d="M 38.714286,21.357143 L 23.714286,21.357143"
+       style="stroke-opacity:0.099415191;stroke-linejoin:miter;stroke-linecap:round;stroke-width:1.0000000px;stroke:#000000;fill-rule:evenodd;fill-opacity:0.75000000;fill:none" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.099415191"
+       d="M 39.214286,23.357143 L 23.714286,23.357143"
+       id="path2854"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2856"
+       d="M 39.839286,25.357143 L 23.714286,25.357143"
+       style="stroke-opacity:0.12280702;stroke-linejoin:miter;stroke-linecap:round;stroke-width:1.0000000px;stroke:#000000;fill-rule:evenodd;fill-opacity:0.75000000;fill:none" />
+    <path
+       style="stroke-opacity:0.15204678;stroke-linejoin:miter;stroke-linecap:round;stroke-width:0.99128145px;stroke:#000000;fill-rule:evenodd;fill-opacity:0.75000000;fill:none"
+       d="M 40.410467,27.357143 L 23.705605,27.357143"
+       id="path2858"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2860"
+       d="M 41.035175,29.357143 L 23.705897,29.357143"
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.99157524px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.15204675" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.99190271px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.15204675"
+       d="M 41.784851,31.357143 L 23.706221,31.357143"
+       id="path2862"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2864"
+       d="M 40.852709,33.357143 L 23.700863,33.357143"
+       style="stroke-opacity:0.11695904;stroke-linejoin:miter;stroke-linecap:round;stroke-width:0.98648584px;stroke:#000000;fill-rule:evenodd;fill-opacity:0.75000000;fill:none" />
+    <g
+       transform="translate(0.500000,-1.125000)"
+       id="g2882">
+      <text
+         xml:space="preserve"
+         style="font-size:6.5877376;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Times New Roman;text-anchor:start;writing-mode:lr-tb"
+         x="11.739901"
+         y="19.331924"
+         id="text2866"
+         sodipodi:linespacing="100%"
+         transform="matrix(1.000000,0.000000,-0.169202,1.000000,0.000000,0.000000)"><tspan
+           sodipodi:role="line"
+           id="tspan2868"
+           x="11.739901"
+           y="19.331924">N</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:6.5877376;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Times New Roman;text-anchor:start;writing-mode:lr-tb"
+         x="15.444986"
+         y="19.331924"
+         id="text2870"
+         sodipodi:linespacing="100%"
+         transform="matrix(1.000000,0.000000,-0.114632,1.000000,0.000000,0.000000)"><tspan
+           sodipodi:role="line"
+           id="tspan2872"
+           x="15.444986"
+           y="19.331924">E</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:6.5877376;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Times New Roman;text-anchor:start;writing-mode:lr-tb"
+         x="16.637789"
+         y="19.331924"
+         id="text2874"
+         sodipodi:linespacing="100%"
+         transform="matrix(1.000000,0.000000,5.603472e-2,1.000000,0.000000,0.000000)"><tspan
+           sodipodi:role="line"
+           id="tspan2876"
+           x="16.637789"
+           y="19.331924">W</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:6.5877376;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Times New Roman;text-anchor:start;writing-mode:lr-tb"
+         x="21.811335"
+         y="19.328707"
+         id="text2878"
+         sodipodi:linespacing="100%"
+         transform="matrix(1.000000,0.000000,0.109619,1.000000,0.000000,0.000000)"><tspan
+           sodipodi:role="line"
+           id="tspan2880"
+           x="21.811335"
+           y="19.328707">S</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="ccsscc"
+       id="path2924"
+       d="M 21.125000,21.375000 L 21.125000,33.375000 L 8.1874999,33.375000 C 7.0555768,33.375000 6.1249999,32.187500 6.6874999,30.500000 C 6.6874999,30.500000 8.6249999,21.375000 8.6249999,21.375000 L 21.125000,21.375000 z "
+       style="fill:url(#linearGradient2932);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9e9e9e;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path2934"
+       d="M 20.187500,31.437500 L 7.6875000,31.437500"
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000000px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.30994150" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.4495406px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.30994150"
+       d="M 20.187500,31.437350 L 7.6875000,31.437350"
+       id="path2937"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2947);stroke-width:0.98188436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+       d="M 7.4330493,12.290153 L 3.4527295,31.055192 C 3.0113565,33.136025 3.1341190,35.141495 5.4303252,35.141495 L 42.123439,35.141495 C 44.357145,35.141495 45.079222,33.295029 44.301442,30.479785 L 39.279677,12.303060 C 39.142367,11.806056 38.821386,11.472031 38.302769,11.472893 L 8.4724575,11.522485 C 7.8354451,11.523544 7.5463405,11.756047 7.4330493,12.290153 z "
+       id="path2939"
+       sodipodi:nodetypes="cssssssss" />
+    <path
+       transform="translate(-0.156250,0.125000)"
+       d="M 6.2187500 31.437500 A 0.96875000 0.96875000 0 1 1  4.2812500,31.437500 A 0.96875000 0.96875000 0 1 1  6.2187500 31.437500 z"
+       sodipodi:ry="0.96875000"
+       sodipodi:rx="0.96875000"
+       sodipodi:cy="31.437500"
+       sodipodi:cx="5.2500000"
+       id="path2963"
+       style="overflow:visible;display:inline;visibility:visible;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-opacity:1.0000000;stroke-dashoffset:0.0000000;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:1.0000000;stroke:none;fill-rule:nonzero;fill-opacity:0.63742691;fill:#ffffff;color:#000000"
+       sodipodi:type="arc" />
+  </g>
+</svg>
diff --git a/images/icons/irc.png b/images/icons/irc.png
new file mode 100644 (file)
index 0000000..d477bc2
Binary files /dev/null and b/images/icons/irc.png differ
diff --git a/images/icons/lastfmlogo.jpg b/images/icons/lastfmlogo.jpg
new file mode 100644 (file)
index 0000000..5738d70
Binary files /dev/null and b/images/icons/lastfmlogo.jpg differ
diff --git a/images/icons/list-add.png b/images/icons/list-add.png
new file mode 100644 (file)
index 0000000..0bbbab3
Binary files /dev/null and b/images/icons/list-add.png differ
diff --git a/images/icons/mail.png b/images/icons/mail.png
new file mode 100644 (file)
index 0000000..a268674
Binary files /dev/null and b/images/icons/mail.png differ
diff --git a/images/icons/menu.png b/images/icons/menu.png
new file mode 100644 (file)
index 0000000..3706d50
Binary files /dev/null and b/images/icons/menu.png differ
diff --git a/images/icons/news.png b/images/icons/news.png
new file mode 100644 (file)
index 0000000..0deb45c
Binary files /dev/null and b/images/icons/news.png differ
diff --git a/images/icons/obconf.png b/images/icons/obconf.png
new file mode 100644 (file)
index 0000000..d56484e
Binary files /dev/null and b/images/icons/obconf.png differ
diff --git a/images/icons/openbox_logo.png b/images/icons/openbox_logo.png
new file mode 100644 (file)
index 0000000..b063cbb
Binary files /dev/null and b/images/icons/openbox_logo.png differ
diff --git a/images/icons/planet.png b/images/icons/planet.png
new file mode 100644 (file)
index 0000000..0ee3f60
Binary files /dev/null and b/images/icons/planet.png differ
diff --git a/images/icons/script.png b/images/icons/script.png
new file mode 100644 (file)
index 0000000..2072f84
Binary files /dev/null and b/images/icons/script.png differ
diff --git a/images/icons/share.png b/images/icons/share.png
new file mode 100644 (file)
index 0000000..926f408
Binary files /dev/null and b/images/icons/share.png differ
diff --git a/images/icons/sshots.png b/images/icons/sshots.png
new file mode 100644 (file)
index 0000000..e6ccfe0
Binary files /dev/null and b/images/icons/sshots.png differ
diff --git a/images/icons/status.png b/images/icons/status.png
new file mode 100644 (file)
index 0000000..1c5b3b7
Binary files /dev/null and b/images/icons/status.png differ
diff --git a/images/icons/themes.png b/images/icons/themes.png
new file mode 100644 (file)
index 0000000..ca833c1
Binary files /dev/null and b/images/icons/themes.png differ
diff --git a/images/icons/translate.png b/images/icons/translate.png
new file mode 100644 (file)
index 0000000..bec8eae
Binary files /dev/null and b/images/icons/translate.png differ
diff --git a/images/icons/www.png b/images/icons/www.png
new file mode 100644 (file)
index 0000000..17619cc
Binary files /dev/null and b/images/icons/www.png differ
diff --git a/images/important.png b/images/important.png
new file mode 100644 (file)
index 0000000..8c0213e
Binary files /dev/null and b/images/important.png differ
diff --git a/images/importantsmall.png b/images/importantsmall.png
new file mode 100644 (file)
index 0000000..58fb725
Binary files /dev/null and b/images/importantsmall.png differ
diff --git a/images/logo_dark.png b/images/logo_dark.png
new file mode 100644 (file)
index 0000000..ffac280
Binary files /dev/null and b/images/logo_dark.png differ
diff --git a/images/logo_shadow.png b/images/logo_shadow.png
new file mode 100644 (file)
index 0000000..cc57f58
Binary files /dev/null and b/images/logo_shadow.png differ
diff --git a/images/logo_white.png b/images/logo_white.png
new file mode 100644 (file)
index 0000000..c0a705e
Binary files /dev/null and b/images/logo_white.png differ
diff --git a/images/ob3-logo.png b/images/ob3-logo.png
new file mode 100644 (file)
index 0000000..da4a290
Binary files /dev/null and b/images/ob3-logo.png differ
diff --git a/images/rss.png b/images/rss.png
new file mode 100644 (file)
index 0000000..10656f5
Binary files /dev/null and b/images/rss.png differ
diff --git a/images/rssshort.png b/images/rssshort.png
new file mode 100644 (file)
index 0000000..482c941
Binary files /dev/null and b/images/rssshort.png differ
diff --git a/images/sites/box-look.png b/images/sites/box-look.png
new file mode 100644 (file)
index 0000000..832de24
Binary files /dev/null and b/images/sites/box-look.png differ
diff --git a/images/sites/customize.org.png b/images/sites/customize.org.png
new file mode 100644 (file)
index 0000000..1c65315
Binary files /dev/null and b/images/sites/customize.org.png differ
diff --git a/images/sites/deviantart.png b/images/sites/deviantart.png
new file mode 100644 (file)
index 0000000..6a70af5
Binary files /dev/null and b/images/sites/deviantart.png differ
diff --git a/images/sites/openbox.org.png b/images/sites/openbox.org.png
new file mode 100644 (file)
index 0000000..80b1c8e
Binary files /dev/null and b/images/sites/openbox.org.png differ
diff --git a/images/splash/changelog.png b/images/splash/changelog.png
new file mode 100644 (file)
index 0000000..979146b
Binary files /dev/null and b/images/splash/changelog.png differ
diff --git a/images/splash/develop.png b/images/splash/develop.png
new file mode 100644 (file)
index 0000000..50891c6
Binary files /dev/null and b/images/splash/develop.png differ
diff --git a/images/splash/discuss.png b/images/splash/discuss.png
new file mode 100644 (file)
index 0000000..6d35dd4
Binary files /dev/null and b/images/splash/discuss.png differ
diff --git a/images/splash/download.png b/images/splash/download.png
new file mode 100644 (file)
index 0000000..1b3fe31
Binary files /dev/null and b/images/splash/download.png differ
diff --git a/images/splash/git.png b/images/splash/git.png
new file mode 100644 (file)
index 0000000..5424c23
Binary files /dev/null and b/images/splash/git.png differ
diff --git a/images/splash/help.png b/images/splash/help.png
new file mode 100644 (file)
index 0000000..c3ed19a
Binary files /dev/null and b/images/splash/help.png differ
diff --git a/images/splash/planet.png b/images/splash/planet.png
new file mode 100644 (file)
index 0000000..befc33c
Binary files /dev/null and b/images/splash/planet.png differ
diff --git a/images/splash/search.png b/images/splash/search.png
new file mode 100644 (file)
index 0000000..f22eaa9
Binary files /dev/null and b/images/splash/search.png differ
diff --git a/images/splash/text2872.png b/images/splash/text2872.png
new file mode 100644 (file)
index 0000000..e2b1213
Binary files /dev/null and b/images/splash/text2872.png differ
diff --git a/images/splash/translate.png b/images/splash/translate.png
new file mode 100644 (file)
index 0000000..9d349f2
Binary files /dev/null and b/images/splash/translate.png differ
diff --git a/images/star.png b/images/star.png
new file mode 100644 (file)
index 0000000..f3ef4b5
Binary files /dev/null and b/images/star.png differ
diff --git a/images/starsmall.png b/images/starsmall.png
new file mode 100644 (file)
index 0000000..9d3086d
Binary files /dev/null and b/images/starsmall.png differ
diff --git a/images/top_gradient.png b/images/top_gradient.png
new file mode 100644 (file)
index 0000000..1de7937
Binary files /dev/null and b/images/top_gradient.png differ
diff --git a/images/web-20-rss-icon.jpg b/images/web-20-rss-icon.jpg
new file mode 100644 (file)
index 0000000..4ba1a9a
Binary files /dev/null and b/images/web-20-rss-icon.jpg differ
diff --git a/images/wiki/locked.png b/images/wiki/locked.png
new file mode 100644 (file)
index 0000000..15329f5
Binary files /dev/null and b/images/wiki/locked.png differ
diff --git a/images/wiki/special.png b/images/wiki/special.png
new file mode 100644 (file)
index 0000000..90d3a17
Binary files /dev/null and b/images/wiki/special.png differ
diff --git a/images/wiki/unlocked.png b/images/wiki/unlocked.png
new file mode 100644 (file)
index 0000000..91b11e2
Binary files /dev/null and b/images/wiki/unlocked.png differ
diff --git a/images/wiki/user.gif b/images/wiki/user.gif
new file mode 100644 (file)
index 0000000..958c6a7
Binary files /dev/null and b/images/wiki/user.gif differ
diff --git a/mediawiki/.htaccess b/mediawiki/.htaccess
new file mode 100644 (file)
index 0000000..fe704c9
--- /dev/null
@@ -0,0 +1,2 @@
+DirectoryIndex index.html
+Options -Indexes
diff --git a/mediawiki/StartProfiler.php b/mediawiki/StartProfiler.php
new file mode 120000 (symlink)
index 0000000..db2e729
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/StartProfiler.php
\ No newline at end of file
diff --git a/mediawiki/Test.php b/mediawiki/Test.php
new file mode 120000 (symlink)
index 0000000..5d0a08d
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/Test.php
\ No newline at end of file
diff --git a/mediawiki/api.php b/mediawiki/api.php
new file mode 120000 (symlink)
index 0000000..a507230
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/api.php
\ No newline at end of file
diff --git a/mediawiki/config b/mediawiki/config
new file mode 120000 (symlink)
index 0000000..58d4065
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/config
\ No newline at end of file
diff --git a/mediawiki/extensions/ConfirmEdit/ConfirmEdit.i18n.php b/mediawiki/extensions/ConfirmEdit/ConfirmEdit.i18n.php
new file mode 100644 (file)
index 0000000..c0e90b7
--- /dev/null
@@ -0,0 +1,1595 @@
+<?php
+/**
+ * Internationalisation file for ConfirmEdit extension.
+ *
+ * @addtogroup Extensions
+*/
+
+$messages = array();
+
+$messages['en'] = array(
+       'captcha-edit' => 'To edit this article, please solve the simple sum below and enter the answer in
+the box ([[Special:Captcha/help|more info]]):',
+       'captcha-addurl' => 'Your edit includes new external links. To help protect against automated
+spam, please solve the simple sum below and enter the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captcha-badlogin' => 'To help protect against automated password cracking, please solve the simple sum
+below and enter the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount' => 'To help protect against automated account creation, please solve the simple sum
+       below and enter the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount-fail' => "Incorrect or missing confirmation code.",
+       'captcha-create' => 'To create the page, please solve the simple sum below and enter
+the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captchahelp-title'          => 'Captcha help',
+       'captchahelp-cookies-needed' => "You will need to have cookies enabled in your browser for this to work.",
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.
+
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.
+
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.
+
+Hit the 'back' button in your browser to return to the page editor.",
+       'captcha-addurl-whitelist' => '
+ #<!-- leave this line exactly as it is --> <pre>
+# Syntax is as follows:
+#   * Everything from a "#" character to the end of the line is a comment
+#   * Every non-blank line is a regex fragment which will only match hosts inside URLs
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Afrikaans (Afrikaans)
+ */
+$messages['af'] = array(
+       'captcha-edit'               => 'U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])',
+       'captcha-addurl'             => 'U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])',
+       'captcha-createaccount'      => "As 'n beskerming teen geoutomatiseerde gemors, tik asseblief die woorde wat in die beeld verskyn in om 'n rekening te skep: <br />([[Special:Captcha/help|Wat is hierdie?]])",
+       'captcha-createaccount-fail' => 'Verkeerde of geen bevestigingkode.',
+       'captcha-create'             => 'U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])',
+       'captchahelp-title'          => 'Captcha-hulp',
+       'captchahelp-text'           => "Webwerwe wat bydraes van die publiek aanvaar (soos hierdie wiki) word soms lastig geval deur kwaaddoeners met programme wat outomaties klomp skakels plak in die werf. Alhoewel hierdie gemors verwyder kan word, is dit lastig. In party gevalle, veral as u webskakels by 'n blad voeg, sal die wiki dalk 'n beeld met verwronge teks vertoon en vra dat u die woorde daarin intik. Omdat hierdie taak moeilik geoutomatiseer word, laat dit meeste regte mense toe om bydraes te maak terwyl dit meeste kwaaddoeners stop. Hierdie kan ongelukkig lastig wees vir mense met beperkte sig, of diegene wat teks- of spraakgebaseerde blaaiers gebruik. Tans is daar nog nie 'n klankalternatief beskikbaar nie. Kontak asseblief die werfadministrateurs vir hulp as hierdie u onverwags belemmer om legitieme bydraes te maak. Gebruik die \"terug\"-knoppie van u blaaier om na die vorige blad terug te keer.",
+);
+
+/** Amharic (አማርኛ)
+ * @author Codex Sinaiticus
+ * @author Siebrand
+ */
+$messages['am'] = array(
+       'captcha-createaccount' => 'ያልተፈለገ የመኪናነት አባልነት ለመከላከል፥ አባል ለመሆን በዚህ ምስል የታዩት እንግሊዝኛ ቃላት ወይም ቁጥር መልስ በትክክል መጻፍ ግዴታ ነው። ([[Special:Captcha/help|ይህ ምንድነው?]]):',
+       'captchahelp-title'     => "የ'ካፕቻ' መግለጫ",
+       'captchahelp-text'      => "አንዳንዴ 'ስፓም' የተባሉት ያልተፈለጉ መልእክቶች የሚላኩ ሰዎች በመኪናነት አማካይነት በብዙ ድረገጽ ላይ የማይገባ ማስታወቂያ በመልጠፍ ላይ እየተገኘ ነው። ይህን የማይገባ መያያዣ ማስወገድ ቢቻለም አስቸጋሪ ናቸው።
+
+ስለዚህ በመጀመርያ አባልነት ሲገቡ ወይም አንዳንዴ የውጭ ድረገጽ አድራሻ ሲጨመር የፕሮግራሙ ሶፍትዌር 'ካፕቻ' የእንግሊዝኛን ቃላት ወይም የቁጥር መልስ እንዲዳግሙ ለፈተና ይጠይቃል። ይህ አደራረግ ለመኪናነት ቀላል ተግባር ሰላማይሆን፥ እውነተኛ ሰው ከሆነ ለመልጠፍ ያስችለዋል ነገር ግን መኪናነት ከሆነ ዕንቅፋት ይሆንበታል።  
+
+ይህ ዘዴ ከመልጠፍ ያለግባብ ቢከለክልዎ እባክዎ መጋቢን ይጠይቁ። 
+
+አሁን ( <= 'back' ) በbrowserዎ ላይ ይጫኑ።",
+);
+
+/** Aragonese (Aragonés)
+ * @author Juanpabl
+ */
+$messages['an'] = array(
+       'captcha-edit'               => 'Ta editar iste articlo, por fabor faiga a fázil suma qu apareixe contino y escriba a soluzión en a caixa ([[Special:Captcha/help|más informazión]]):',
+       'captcha-addurl'             => "A suya edizión encluye binclos esternos. Ta aduyar-nos en a protezión contra o spam automatizato, por fabor, faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):",
+       'captcha-badlogin'           => 'Ta aduyar en a protezión contra a obtenzión automatizata de palabras de paso, por fabor faiga a suma simpla que amanixe contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):',
+       'captcha-createaccount'      => "Ta aduyar-nos en a protezión contra a creyazión automatica de cuentas, por fabor faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):",
+       'captcha-createaccount-fail' => 'No ha escrito o codigo de confirmazión, u iste ye incorreuto.',
+       'captcha-create'             => "Ta creyar a pachina, por fabor faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):",
+       'captchahelp-title'          => 'Aduya sobre o "captcha"',
+       'captchahelp-cookies-needed' => 'Ta que o sistema funzione le cal tener as cookies autibatas en o nabegador.',
+       'captchahelp-text'           => "Os sitios web que azeptan mensaches d'o publico, como iste wiki, son á ormino obcheto d'abusos por spammers que fan serbir ferramientas automatizatas ta encluyir-ie binclos ta asabelos sitios. Anque istos binclos se pueden sacar, son un gran estorbo.
+
+Bellas begadas, espezialment cuan se mire de adibir nuebos binclos á una pachina, o wiki talment le amuestre una imachen con testo en color y distorsionato, y le pregunte cuals son as palabras amostratas. Como ista ye una faina de mal automatizar, premitirá á os usuarios umanos fer as suyas edizions de bez que aturará á muitos spammers y atacants automaticos.
+
+Manimenos, isto puede estar un barrache ta usuarios con bisión limitata u que faigan ser nabegadors basatos en testo u en a boz. Por l'inte no tenemos garra alternatiba de audio. Por fabor, contaute con os almenistradors d'o sistema ta demandar aduya si isto le ye pribando de fer as suyas edizions lechitimas.
+
+Punche o botón 'entazaga' d'o suyo nabegador ta tornar t'o editor de pachinas.",
+       'captcha-addurl-whitelist'   => "  #<!-- leave this line exactly as it is --> <pre>  
+# A sintaxis ye asinas:  
+#  * Tot o que bi ha dende un caráuter \"#\" dica a fin d'a linia ye un comentario
+#  * Cualsiquier linia con testo un troz d'expresión regular (regex) que sólo concordará con os hosts aintro d'URLs
+  #</pre> <!-- leave this line exactly as it is -->",
+);
+
+/** Arabic (العربية)
+ * @author Mido
+ * @author Meno25
+ * @author Alnokta
+ * @author OsamaK
+ */
+$messages['ar'] = array(
+       'captcha-edit'               => 'يحتوي تعديلك هذا على وصلات خارجية. للحماية من السخام الأوتوماتيكي، قم من فضلك بحل المسألة الرياضية البسيطة أدناه وأدخل الحل في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):',
+       'captcha-addurl'             => 'تعديلك يحتوي على وصلات خارجية جديدة. للمساعدة في الحماية من السخام الأوتوماتيكي، من فضلك حل عملية الجمع بالأسفل و أضف الحل في الصندوق  ([[Special:Captcha/help|معلومات إضافية]]):',
+       'captcha-badlogin'           => 'للمساعدة في الحماية ضد سرقة كلمات السر، من فضلك حل عملية الجمع البسيطة بالأسفل وأدخل الحل في الصندوق ([[Special:Captcha/help|معلومات إضافية]]):',
+       'captcha-createaccount'      => 'كحماية ضد العمليات التخريبية، يجب أن تدخل ناتج العملية الحسابية التالية لكي تنشأ حسابا: <br />([[Special:Captcha/help|ما هذا؟]])',
+       'captcha-createaccount-fail' => 'كود غير مطابق أو لم تقم بإدخاله.',
+       'captcha-create'             => 'من فضلك قم بحل المسألة الرياضية التالية لإنشاء هذه الصفحة وأدخل
+الجواب في الصندوق ([[Special:Captcha/help|ما هذا؟]]):',
+       'captchahelp-title'          => 'مساعدة الكابتشا',
+       'captchahelp-cookies-needed' => 'ستحتاج إلى أن تكون الكوكيز مفعلة في متصفحك لكي يعمل هذا',
+       'captchahelp-text'           => "عادة ما يتم في المواقع التي تقبل الردود والرسائل من العامة، كهذا الويكي، تخريب الموقع عن طريق الأشخاص الذين يستعملون آليات معينة لإرسال وصلاتهم لمواقع متعددة بصورة آلية. وعلى الرغم من أن هذا يمكن إزالته ولكنه مزعج للغاية.
+
+في بعض الأحيان، خصوصا عند إضافة وصلات لصفحة، ربما يعرض الويكي صورة ملونة أو مشوشة ويطلب منك إدخال كلمات موجودة بالصورة أو يعرض عليك مسألة رياضية عشوائية ويطلب منك حلها. ولأن هذه المهمة صعبة للغاية لأن يقوم بها برنامج، سيسمح هذا للأشخاص الآدميين بإضافة تحريراتهم بينما ستوقف البرامج التخريبية والهجمات الآلية الأخرى.
+
+للأسف سيكون هذا صعبا بالنسبة لمستخدمي المتصفحات المحدودة أو التي تعتمد على النصوص فقط أو قراءة النصوص. في الوقت الحالي لا يوجد لدينا بديل سمعي. من فضلك راسل مديري الموقع للمساعدة إذا كان هذا الأمر يمنعك من التعديل ووضع وصلات قانونية.
+
+إذا كنت تحرر صفحة معينة: اضغط زر 'العودة' في متصفحك للعودة إلى التحرير.",
+       'captcha-addurl-whitelist'   => ' #<!-- اترك هذا السطر تمامًا كما هو --> <pre> 
+# الصيغة كما تلي: 
+#   * كل شيء من علامة "#" لنهاية السطر تعليق
+#   * كل سطر غير فارغ هو جزء تعبير نمطي والذي سوف يطابق فقط المضيفين داخل العناوين
+ #</pre> <!-- اترك هذا السطر تمامًا كما هو -->',
+);
+
+/** Asturian (Asturianu)
+ * @author SPQRobin
+ * @author Esbardu
+ */
+$messages['ast'] = array(
+       'captcha-edit'               => "Pa editar esti artículu, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-addurl'             => "La to edición inclúi nuevos enllaces esternos. P'aidar a protexer escontra'l spam automatizáu, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-badlogin'           => "P'aidar a protexer escontra'l descifráu automáticu de claves, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-createaccount'      => "P'aidar a protexer escontra la creación automática de cuentes, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-createaccount-fail' => 'Códigu de confirmación incorreutu o ausente.',
+       'captcha-create'             => "Pa crear la páxina, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captchahelp-title'          => 'Aida tocante al captcha',
+       'captchahelp-cookies-needed' => "Has tener les cookies habilitaes nel to navegador pa que'l sistema funcione.",
+       'captchahelp-text'           => "Los sitios web qu'aceuten mensaxes del publicu, como esta wiki, davezu son oxetu d'abusu por spammers qu'usen programes pa incluyir los sos enllaces automáticamente. Si bien estos enllaces spam puen quitase, son una bona molestia.
+
+Dacuando, especialmente cuando amiesta nuevos enllaces web nuna páxina, la wiki pue amosate una imaxe de testu coloreáu o distorsionáu y va pidite qu'escribas les pallabres amosaes. Yá qu'esti ye un llabor difícil d'automatizar, permitirá a les más de les persones reales unviar los sos testos, al empar que detién los más de los spammers y otros atacantes automáticos.
+
+Desafortunadamente esto pue suponer un inconveniente pa los usuarios con visión llimitada o qu'usen navegadores de testu o voz. De momentu nun tenemos disponible una alternativa per audiu. Por favor, contauta colos alministradores del sitiu pa pidir aida si esto t'impide facer ediciones llexítimes.
+
+Calca nel botón 'atrás' del to navegador pa volver a la páxina d'edicion.",
+       'captcha-addurl-whitelist'   => '  #<!-- dexa esta llinia exautamente como ta --> <pre>
+# La sintaxis ye como sigue:
+#  * Too dende\'l carauter "#" hasta la fin de la llinia ye un comentariu
+#  * Toa llinia non vacia ye un fragmentu regex que namái buscará hosts n\'URLs
+  #</pre> <!-- dexa esta llinia exautamente como ta -->',
+);
+
+$messages['bcl'] = array(
+       'captcha-create'              => 'Tangarig maggibo an pahina, paki simbagan an simpleng suma sa ibaba asin ikaag an simbag sa laog kan kahon ([[Special:Captcha/help|more info]]):',
+       'captchahelp-title'           => 'Tabang sa Captcha',
+);
+
+/** Belarusian (Беларуская)
+ * @author Yury Tarasievich
+ */
+$messages['be'] = array(
+       'captcha-create'             => 'Каб стварыць старонку, развяжыце простае ўраўненне, што ніжэй, і ўпішыце адказ у адпаведнае поле ([[Special:Captcha/help|больш падрабязна]]):',
+       'captchahelp-title'          => 'Даведка Капчы',
+       'captchahelp-cookies-needed' => 'Каб гэтая магчымасць працавала, належыць дазволіць у браўзеры апрацоўку квіткоў ("кукі").',
+       'captcha-addurl-whitelist'   => ' #<!-- радок абавязкова пакінуць як ёсць (у т.л., з прагалам у пачатку) --> <pre>  
+# Сінтаксіс наступны:  
+#  * Усё ад знаку "#" да канца радка гэта каментар
+#  * Кожны непусты радок гэта частковы рэгулярны выраз, які параўноўваецца з адрасамі сервераў унутры URL-яў
+  #</pre> <!-- радок абавязкова пакінуць як ёсць (у т.л., з прагалам у пачатку) -->',
+);
+
+/** Bulgarian (Български)
+ * @author DCLXVI
+ * @author Spiritia
+ */
+$messages['bg'] = array(
+       'captcha-edit'               => 'Редактирането на тази статия изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-addurl'             => 'Тази редакция съдържа нови външни препратки. Като защита срещу автоматизиран спам системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-badlogin'           => 'Като защита срещу автоматизирано компрометиране на пароли, системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-createaccount'      => 'Като защита от автоматизирани регистрации, системата изисква при регистриране на потребителска сметка потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-createaccount-fail' => 'Грешен или липсващ код за потвърждение.',
+       'captcha-create'             => 'За създаване на страницата е необходимо да се реши задачата и да се въведе отговорът в кутията ([[Special:Captcha/help|повече информация]]):',
+       'captchahelp-text'           => "Уеб сайтовете, които позволяват свободно да се редактира и добавя ново съдържание (като това уики), често са обект на атаки от страна на спамъри, които използват средства за автоматизирано редактиране за публикуване на препратки към много сайтове. Въпреки че тези препратки могат да бъдат премахнати, те са особено неприятни за потребителите. 
+
+Понякога, особено когато се добавят нови препратки към страниците, е възможно уикито да покаже картинка с текст, който трябва да бъде въведен в посоченото поле. Тъй като това е стъпка, която е трудно да бъде прескочена при автоматизирано редактиране, тя затруднява и спира повечето спамъри и роботи, но допуска истинските потребителите да правят редакции. 
+
+За съжаление тази стъпка може да затрудни незрящи потребители или потребители, които използват текстови или речеви браузъри. За момента системата не разполага с възможност за гласова алтернатива. Обърнете се за помощ към администратор на сайта, ако това изискване на системата ви затруднява да допринасяте легитимно. 
+
+Натиснете бутона 'back' на вашия браузър, за да се върнете към редактора на страници.",
+);
+
+/** Bengali (বাংলা)
+ * @author Bellayet
+ */
+$messages['bn'] = array(
+       'captcha-edit'               => 'এই নিবন্ধটি সম্পাদনা করতে, দয়া করে নিম্নের সহজ অংকটি সমাধান করুন এবং এর ফলাফল বক্সটিতে দিন ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount-fail' => 'ভুল অথবা হারিয়ে যাওয়া নিশ্চিতকরণ সংকেত',
+       'captchahelp-title'          => 'ক্যাপচা সাহায্য',
+       'captchahelp-cookies-needed' => 'এই কাজটি করার জন্য আপনাকে আপনার ব্রাউজারের কুকি সক্রিয় করতে হবে।',
+);
+
+/** Breton (Brezhoneg)
+ * @author Fulup
+ */
+$messages['br'] = array(
+       'captcha-edit'               => "Liammoù diavaez nevez zo bet ouzhpennet ganeoc'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captcha-addurl'             => "Liammoù diavaez nevez zo bet ouzhpennet ganeoc'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captcha-createaccount'      => "A-benn hor skoazellañ d'en em wareziñ diouzh ar c'hrouiñ kontoù emgefre, skrivit ar gerioù a zeu war wel er stern-mañ evit enrollañ ho kont : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captcha-createaccount-fail' => "Mankout a ra ar c'hod kadarnaat pe fall eo.",
+       'captcha-create'             => "Liammoù diavaez nevez zo bet ouzhpennet ganeoc'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captchahelp-title'          => 'Skoazell Capcha',
+       'captchahelp-text'           => "Alies e vez taget al lec'hiennoù a zegemer kemennadennoù a-berzh an holl, evel ar wiki-mañ, gant ar spamerien a implij ostilhoù emgefre evit postañ o liammoù war lec'hiennoù a bep seurt. Diverket e c'hallont bezañ, gwir eo, kazus-mat ez int memes tra. A-wechoù, dreist-holl pa vez ouzhpennet liammoù Web nevez war ur bajenn, e c'hallo ar wiki-mañ diskouez deoc'h ur skeudenn warni un tamm testenn liv pe a-dreuz. Goulennet e vo diganeoc'h skrivañ ar gerioù deuet war wel. Un trevell start da emgefrekaat eo hemañ. Gant se e c'hallo an implijerien wirion postañ ar pezh a fel ldezho tra ma vo lakaet un harz d'an darn vrasañ eus ar spamerien pe d'an dagerien robotek all. Koulskoude e c'hallo an implijerien berr o gweled pe ar re a implij merdeerioù diazezet war ar skrid pe war ar vouezh bezañ strafuilhet gant se. N'omp ket evit kinnig un diskoulm dre glevet evit c'hoazh. Kit e darempred gant merourien al lec'hienn m'hoc'h eus diaesterioù evit kemer perzh abalamour d'an teknik-se. Pouezit war bouton 'kent' ho merdeer evit distreiñ d'ar bajenn gemmañ.",
+);
+
+/** Bosnian (Bosanski)
+ */
+$messages['bs'] = array(
+       'captcha-edit'               => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captcha-addurl'             => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captcha-createaccount'      => 'Kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje se nalaze na slici da biste registrovali nalog:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captcha-createaccount-fail' => 'Netačan unos ili nedostatak šifre za potvrđivanje.',
+       'captcha-create'             => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captchahelp-text'           => "Vebsajtovi koji podržavaju slanje sadržaja iz javnosti, kao što je ovaj viki, često zloupotrebljavaju vandali koji koriste automatizovane alate da šalju svoje poveznice ka mnogim sajtovima.  Iako se ove neželjene poveznice mogu ukloniti, one ipak zadaju veliku muku.
+
+Ponekad, pogotovo kad se dodaju nove internet poveznice na stranicu, viki softver Vam može pokazati sliku obojenog i izvrnutog teksta i tražiti da ukucate traženu riječ.  Pošto je teško automatizovati ovakav zadatak, on omogućuje svim pravim ljudima da vrše svoje izmjene, ali će zato spriječiti vandale i ostale robotske napadače.
+
+Nažalost, ovo može da bude nepovoljno za korisnike sa ograničenim vidom i za one koji koriste brauzere bazirane na tekstu ili govoru.  U ovom trenutku, audio alternativa nije dostupna.  Molimo Vas da kontaktirate administratore sajta radi pomoći ako Vas ovo neočekivano ometa u pravljenju dobrih izmjena.
+
+Kliknite 'nazad' ('back') dugme vašeg brauzera da se vratite na polje za unos teksta.",
+);
+
+/** Catalan (Català)
+ * @author SMP
+ * @author Toniher
+ */
+$messages['ca'] = array(
+       'captcha-edit'               => 'Per a poder editar aquest article cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre ([[Special:Captcha/help|més informació]]):',
+       'captcha-addurl'             => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',
+       'captcha-badlogin'           => "Per a ajudar en la protecció contra l'obtenció automatitzada de contrasenyes haureu de resoldre la suma que apareix a continuació ([[Special:Captcha/help|més informació]]):",
+       'captcha-createaccount'      => "Com a protecció contra la creació automàtica de comptes d'usuari necessitem que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):",
+       'captcha-createaccount-fail' => 'Manca el codi de confirmació, o bé és incorrecte.',
+       'captcha-create'             => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',
+       'captchahelp-title'          => 'Ajuda amb el sistema captcha',
+       'captchahelp-cookies-needed' => "Heu d'activar les galetes al vostre navegador per a que funcioni.",
+       'captchahelp-text'           => "Els webs que accepten la publicació de missatges per part del seu públic, com aquesta wiki, són sovint víctimes de spam per part de robots automàtics que hi posen enllaços cap als seus webs. Aquests enllaços poden anar essent esborrats, però són un important destorb.
+
+Quan creeu nous comptes d'usuari o voleu afegir enllaços a una pàgina se us pot demanar que respongueu una pregunta fàcil, una suma o que digueu quina paraula apareix en una imatge distorsionada. Aquestes tasques són molt difícils de fer per a un programa automàtic i per tant permet que la majoria d'usuaris humans puguin introduir la informació que creguin i alhora atura la majoria d'atacants robots.
+
+Malauradament, aquest sistema pot suposar un inconvenient per a usuaris amb problemes de visió o que utilitzin navegadors de text simple o de veu. Actualment no disposem de cap alternativa auditiva disponible. Contacteu els administradors del web si aquests sistema us impedeix de fer edicions legítimes.
+
+Necessitareu tenir les galetes activades en el vostre navegador per a que funcioni.
+
+Cliqueu el botó de retrocedir del vostre navegador per a tornar al formulari.",
+       'captcha-addurl-whitelist'   => "
+  #<!-- deixeu aquesta línia tal com està --> <pre>  
+# La sintaxi és la següent:  
+#  * Totes les línies que comencen amb un # son considerades comentaris
+#  * Tota línia no buida és un fragment d'expressió regular (regexp) que enllaçarà amb els hosts de les URL
+  #</pre> <!-- deixeu aquesta línia tal com està -->",
+);
+
+$messages['cdo'] = array(
+       'captcha-edit' => 'Nṳ̄ gă-tiĕng lāu sĭng gì nguôi-buô lièng-giék. Ôi lāu ê̤ṳ-huòng ô tiàng-sê̤ṳ cê̤ṳ-dông huák-buó bóng-só̤ séng-sék (\'\'spam\'\'), kī-dâe̤ng nṳ̄ gié-sáung â-dā̤ gāng-dăng gì gă-huák, gái ciŏng dák-áng siā diē gáh-gáh diē-sié ([[Special:Captcha/help|gáing sâ̤ séng-sék]]):',
+       'captchahelp-title'          => 'Captcha bŏng-cô',
+       'captchahelp-text'           => "Chiông wiki dēng kăi-huóng gì uōng-câng sèu-sèu ké̤ṳk bóng-só̤ séng-sék huák-buó-nè̤ng (\'\'spammer\'\') páh-chā: ĭ-gáuk-nè̤ng kĕk cê̤ṳ-dông-huá gì gă-sĭ táik bóng-só̤ guōng-gó̤ lièng gáu ĭ gì uōng-câng. Chŭi-iòng cī piĕ bóng-só̤ séng-sék â̤ dù lâi gì, dáng-sê iâ cêng-go̤ tō̤-iéng.
+
+Ô sèng-hâiu, dĕk-biék sê găk nṳ̄ gă-tiĕng sĭng gì nguôi-buô lièng-giék gáu wiki gì sèng-hâiu, wiki â̤ hiēng-sê sáik-ké gáuk-iông hĕ̤k-ciā sê hìng-câung ô gāi-biéng gì ùng-cê dù-chiông, giéu nṳ̄ páh diē nṳ̄ sū káng giéng gì cê hĕ̤k sṳ̀ (hô̤ lō̤ \"captcha\"). Ĭng-ôi gĭ-ké-nè̤ng mâ̤ chiàng ciā êng-ô, gó-chṳ̄ cêu â̤ huòng-cī duâi-buô-hông iù gĭ-ké-nè̤ng huák-buó bóng-só̤ séng-sék (bók-guó, cĭng nè̤ng huák-buó  bóng-só̤ séng-sék, ciā huŏng-huák huòng mâ̤ lì).
+
+Cĭng mì-hâng, dó̤i hī piĕ mĕ̤k-ciŭ mâ̤ hō̤, hĕ̤k-ciā sê sāi-ê̤ṳng gĭ-ṳ̀ ùng-buōng (\'\'text-based\'\') hĕ̤k gĭ-ṳ̀ siăng-ĭng (\'\'speech-based\'\') gì báuk-lāng-ké (\'\'browser\'\') gì ê̤ṳng-hô lì gōng, cūng-kuāng cĭng mâ̤ lê-biêng. Cī òng, nàng-gă gó mò̤ 1 cṳ̄ng gá hō̤ gì huŏng-huák. Nâ sê gōng, cuòi īng-hiōng nṳ̄ ciáng-siòng piĕng-cĭk, chiāng nṳ̄ lièng-hiê guāng-lī-uòng.
+
+Ôi lāu captcha gì ciáng-siòng gĕ̤ng-cáuk, nṳ̄ diŏh páh kŭi báuk-lāng-ké gì cookie.
+
+Buóh diōng kó̤ piĕng-cĭk hiĕk-miêng, áik \"diōng kó̤ sèng 1 hiĕk\" (\'\'back\'\').",
+);
+
+/** Czech (Česky)
+ * @author Li-sung
+ */
+$messages['cs'] = array(
+       'captcha-edit'               => 'Abyste mohli editovat tuto stránku, musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captcha-addurl'             => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captcha-badlogin'           => 'V rámci ochrany před automatickým pokusům uhodnout heslo musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]]):',
+       'captcha-createaccount'      => 'V rámci ochrany před automatickým vytvářením účtů musíte pro provedení registrace vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captcha-createaccount-fail' => 'Chybějící či neplatný potvrzovací kód.',
+       'captcha-create'             => 'Abyste mohli založit stránku musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captchahelp-title'          => 'Nápověda ke captcha',
+       'captchahelp-cookies-needed' => 'Musíte mít zapnuty cookies ve svém prohlížeči.',
+       'captchahelp-text'           => 'Webové stránky, do kterých mohou přispívat jejich návštěvníci (jako například tato wiki), jsou často terčem spammerů, kteří pomocí automatických nástrojů vkládají své odkazy na velké množství stránek. Přestože lze tento spam odstranit, představuje nepříjemné obtěžování.
+
+Někdy, zvláště při přidávání nových webových odkazů, vám může wiki ukázat obrázek barevného či pokrouceného textu a požádat vás o opsání zobrazených znaků. Jelikož takovou úlohu lze jen těžko automatizovat, skuteční lidé mohou dále přispívat, zatímco většinu spammerů a jiných robotických útočníků to zastaví.
+
+Bohužel to však může představovat nepříjemný problém pro uživatele se zrakovým postižením či uživatele používající textové prohlížeče či hlasové čtečky. V současné době nemáme alternativní zvukovou verzi. Kontaktujte laskavě správce serveru, pokud vám to brání v užitečných příspěvcích a potřebujete pomoc.
+
+Pro návrat na předchozí stránku stiskněte ve svém prohlížeči tlačítko „zpět“.',
+);
+
+/** Welsh (Cymraeg)
+ * @author Lloffiwr
+ */
+$messages['cy'] = array(
+       'captcha-edit'               => "Er mwyn gallu golygu'r dudalen, gwnewch y swm isod a gosodwch y canlyniad yn y blwch ([[Special:Captcha/help|rhagor o wybodaeth]]):",
+       'captcha-addurl'             => 'Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])',
+       'captcha-createaccount'      => "Teipiwch y geiriau sy'n ymddangos yn y ddelwedd isod os gwelwch yn dda. Mae'r nodwedd hon yn rhwystro rhaglenni sbam rhag creu cyfrifon i'w hunain. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",
+       'captcha-createaccount-fail' => "Côd cadarnhau ar goll neu'n anghywir.",
+       'captcha-create'             => "Er mwyn gallu creu'r dudalen, gwnewch y swm isod a gosodwch y canlyniad yn y blwch ([[Special:Captcha/help|rhagor o wybodaeth]]):",
+       'captchahelp-title'          => 'Cymorth "captcha"',
+       'captchahelp-text'           => "Yn anffodus, mae safleoedd gwe fel Wicipedia, sy'n caniatau i'r cyhoedd ysgrifennu iddi, yn darged beunyddiol i sbamwyr sy'n defnyddio rhaglenni arbennig i bostio eu cysylltiadau. Gellir dileu'r dolenni o'r dudalen, ond mae hyn yn drafferth mawr. O dro i dro, fe fydd y safle hon yn dangos delwedd o destun, ac fe fydd yn rhaid i chi deipio'r geiriau a ddangosir. Mae hyn yn dasg anodd iawn i ragenni cyfrifiadurol, felly dylai golygwyr go iawn gyflawni'r dasg yn di-drafferth, yn wahanol i'r rhaglenni sbam. Mae hyn yn amlwg yn creu trafferthion i'r sawl sydd yn defnyddio porwyr testun neu sydd yn colli eu golwg. Ar hyn o bryd nid oes fersiwn sain ar gael. Cysylltwch â gweinyddwyr y safle os ydi'r nodwedd hon yn eich rhwystro rhag ychwanegu golygiadau dilys. Gwasgwch botwm 'nôl' eich porwr er mwyn dychwelyd.",
+);
+
+/** Danish (Dansk)
+ * @author Wegge
+ * @author Morten LJ
+ */
+$messages['da'] = array(
+       'captcha-edit'               => 'For at redigere denne side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-addurl'             => 'Din redigering tilføjer nye eksterne henvisninger til artiklen. Som beskyttelse mod automatiseret spam, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-badlogin'           => 'For at beskytte mod automatiserede gæt på kodeord, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-createaccount'      => 'For at beskytte mod automatisk oprettelse af brugernavne, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-createaccount-fail' => 'Forkert eller manglende kodeord.',
+       'captcha-create'             => 'For at oprette en ny side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captchahelp-title'          => 'Captcha-hjælp',
+       'captchahelp-cookies-needed' => 'Din browser skal understøtte cookies, før dette kan gennemføres.',
+       'captchahelp-text'           => "Websites der accepterer indhold fra offentligheden, bliver ofte udsat for angreb fra spammere. Disse angreb sker med automatiske værktøjer, der anbringer de samme links på et stort antal websites på kort tid. Selvom disse links kan fjernes, er de en vedligeholdelsesmæssig byrde.
+
+I visse tilfælde, specielt når der tilføjes nye links til denne wiki, vil softwaren vise dig et billede af et stykke forvredet og sløret tekst. Du skal indtaste det ord, der vises, før du kan gennemføre handlingen. Formålet er at skelne mellem mennesker og automatiserede værktøjer, da de sidste har meget svært ved at genkende ordene.
+
+Desværre kan dette medføre problemer for svagtseende brugere, og brugere der bruger software der oplæser indholdet af siden. For øjeblikket findes der ikke et lydbaseret alternativ. Kontakt venligst en administrator med henblik på at få hjælp, hvis dette forhindrer tilføjelsen af godartet materiale.
+
+Tryk på 'tilbage'-knappen i din browser for at returnere til redigeringssiden.",
+       'captcha-addurl-whitelist'   => '
+ #<!-- Undlad at rette denne linie --> <pre>
+# Vejledning:
+#   * Alt fra et "#"-tegn til slutningen af en linie er en kommentar
+#   * Alle ikke-blanke linier benyttes som regulært udtryk, der anvendes på hostnavne i URLer
+ #</pre> <!-- Undlad at rette denne linie -->',
+);
+
+$messages['de'] = array(
+       'captcha-edit'               => "Zur Bearbeitung der Seite löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captcha-addurl'             => "Deine Bearbeitung enthält neue externe Links. Zum Schutz vor automatisiertem Spamming löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein. Klicke dann erneut auf „Seite speichern“ [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captcha-badlogin'            => 'Zum Schutz vor einer Kompromittierung deines Benutzerkontos löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]]:',
+       'captcha-createaccount'      => "Zum Schutz vor automatisierter Anlage von Benutzerkonten löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captcha-createaccount-fail' => "Falscher oder fehlender Bestätigungscode.",
+       'captcha-create'             => "Zur Erstellung der Seite löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captchahelp-title'          => 'Captcha-Hilfe',
+       'captchahelp-cookies-needed' => "'''Wichtiger Hinweis:''' Es müssen Cookies im Browser erlaubt sein.",
+       'captchahelp-text'           => "Internetangebote, die für Beiträge von praktisch jedem offen sind — so wie das {{SITENAME}}-Wiki — werden oft von Spammern missbraucht, die ihre Links automatisch auf vielen Webseiten platzieren. Diese Spam-Links können wieder entfernt werden, sie sind aber ein erhebliches Ärgernis. In manchen Fällen, insbesondere beim Hinzufügen von neuen Weblinks zu einer Seite, kann es vorkommen, dass dieses Wiki ein Bild mit einem farbigen und verzerrten Text anzeigt und dazu auffordert, die angezeigten Wörter einzutippen. Da eine solche Aufgabe nur schwer automatisch erledigt werden kann, werden dadurch die meisten Spammer, die mit automatischen Werkzeugen arbeiten, gestoppt, wogegen menschliche Benutzer ihren Beitrag absenden können. Leider kann dies zu Schwierigkeiten für Personen führen, die über eine eingeschränkte Sehfähigkeit verfügen oder text- oder sprachbasierte Browser verwenden. Eine Lösung ist die reguläre Anmeldung als Benutzer. Der „Zurück“-Knopf des Browsers führt zurück in das Bearbeitungsfenster.",
+       'captcha-addurl-whitelist' => '
+ #<!-- leave this line exactly as it is --> <pre>
+#  Syntax:
+#   * Alles von einem #-Zeichen bis zum Ende der Zeile ist ein Kommentar
+#   * Jeder nicht-leere Zeile ist ein Regex-Fragment, das gegenüber den Hostnamen einer URL geprüft wird
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['el'] = array(
+       'captcha-badlogin'            => 'Για να βοηθήσετε στην προστασία ενάντια στον "σπασμένο" κωδικό πρόσβασης, παρακαλώ λύστε αυτή την απλή πράξη και εισάγετε το αποτέλεσμα της στο παρακάτω κενό ([[Special:Captcha/help|περισσότερες πληροφορίες]]):',
+       'captcha-createaccount'       => 'Για να βοηθήσετε στην προστασία ενάντια στην αυτοματοποιημένη δημιουργία λογαριασμού, παρακαλώ λύστε την απλή πράξη
+και εισάγετε την λύση της στο παρακάτω κενό
+([[Special:Captcha/help|περισσότερες πληροφορίες]]):',
+       'captchahelp-text'            => 'Οι ιστοσελίδες που δέχονται τις επεξεργασίες από το κοινό, όπως αυτό το wiki, δεν χρησιμοποιούνται συχνά σωστά από τους spammers που χρησιμοποιούν τα αυτοματοποιημένα εργαλεία για να αποστείλουν τις συνδέσεις τους με πολλές σελίδες. Αυτές οι spam συνδέσεις  μπορούν να αφαιρεθούν, επειδή είναι σημαντικά ενοχλητικές.
+
+Μερικές φορές, ειδικά κατά την προσθήκη νέων συνδέσμων σε μια σελίδα, το wiki μπορεί να σας παρουσιάσει μια εικόνα με ένα χρωματισμένο ή διαστρεβλωμένο κείμενο και να σας ζητήσει να πληκτρολογήσετε τις λέξεις που παρουσιάζονται. Δεδομένου ότι αυτό είναι ένας στόχος που είναι δύσκολο να αυτοματοποιηθεί, θα επιτρέψει στους περισσότερους χρήστες να κάνουν τις επεξεργασίες τους, σταματώντας τους spammers και άλλους ρομποτικά επιτιθέμενους.
+
+Δυστυχώς αυτό μπορεί να ενοχλήσει τους χρήστες περιορίζοντας το όραμα τους ή αυτούς που βασίζονται στο κείμενο ή στην ομιλία που βασίζεται στις μηχανές αναζήτησης. Προς το παρόν δεν έχουμε μια διαθέσιμη εναλλακτική λύση. Παρακαλώ ελάτε σε επαφή με τους διαχειριστές των σελίδων για βοήθεια, εάν αυτό σας αποτρέπει απροσδόκητα από την παραγωγή των νόμιμων επεξεργασιών.
+
+Πατήστε το κουμπί \'πίσω\' στη μηχανή αναζήτησης σας για να επιστρέψετε στο συντάκτη σελίδων.',
+);
+
+$messages['es'] = array(
+       'captcha-edit'                => 'Para editar este artículo, por favor resuelve la sencilla suma que aparece abajo e introduce la solución en la caja ([[Special:Captcha/help|más información]]):',
+       'captcha-addurl'              => 'Tu edición incluye nuevos enlaces externos. Para ayudar a proteger contra el spam automatizado, por favor resuelve la sencilla suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):',
+       'captcha-createaccount'       => 'Para ayudar a protegernos de la creación automática de cuentas, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):',
+       'captcha-createaccount-fail'  => 'Falta el código de confirmación, o éste es incorrecto.',
+       'captcha-create'              => 'Para crear la página, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):',
+       'captchahelp-title'           => 'Ayuda sobre el captcha',
+       'captchahelp-cookies-needed'  => 'Debe tener las cookies activadas en el navegador para que el sistema funcione.',
+       'captchahelp-text'            => 'Los sitios web que aceptan mensajes del público, como esta wiki, son a menudo objeto de abusos  por spammers que utilizan programas para incluir automáticamente sus enlaces. Si bien estos enlaces pueden quitarse, son una gran molestia.
+
+En ocasiones, especialmente cuando añada nuevos enlaces a una página, la wiki le mostrará una imagen de texto coloreado o distorsionado y le pedirá que escriba las palabras que muestra. Dado que esta es una tarea difícil de automatizar, permite a la mayoría de las personas enviar sus textos, a la vez que detiene a la mayoría de los spammers y otros atacantes automáticos.',
+);
+
+/** Estonian (Eesti)
+ */
+$messages['et'] = array(
+       'captcha-edit'               => 'Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captcha-addurl'             => 'Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captcha-createaccount'      => 'Kaitsena spämmi vastu peate konto registreerimiseks lahtrisse kirjutama järgneva tehte tulemuse.<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captcha-createaccount-fail' => 'Puuduv või valesti sisestatud kinnituskood.',
+       'captcha-create'             => 'Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captchahelp-title'          => 'Mis on Captcha?',
+       'captchahelp-text'           => 'Internetisaite, mis lubavad külastajatel sisu muuta (nagu ka see Viki), kasutavad sageli spämmerid ära, postitades reklaamlinke - spämmi. Kuigi neid linke saab alati ära võtta, on nad ikkagi üpris tülikad. Omale kasutajakontot registreerides või mõnele lehele uusi internetiaadresse postitades näidatakse teile moonutatud tekstiga pilti ning palutakse teil sisestada seal näidatud sõnad. Kuna selliselt pildilt on arvutil raske teksti välja lugeda, on see efektiivseks kaitseks spämmirobotite vastu, samas lubades tavainimestel oma muudatusi rahus teha. Kahjuks võib see tekitada ebamugavusi nägemisraskustega inimestele või neile, kes kasutavad kõnesüntesaatorit või tekstipõhist brauserit. Hetkel pole meil helipõhist alternatiivi. Kui teil tekib ootamatult raskusi oma muudatuste tegemisel, siis kirjutage sellest [[Vikipeedia:Üldine arutelu|üldise arutelu]] lehele. Konto registreerimise lehele või lehe redigeerimisele tagasi jõudmiseks vajutage oma brauseri tagasi-nuppu.',
+);
+
+/** Basque (Euskara)
+ */
+$messages['eu'] = array(
+       'captcha-edit'               => 'Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captcha-addurl'             => 'Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captcha-createaccount'      => 'Spam-a saihesteko, mesedez, irudian agertzen den hizki edo zenbaki kodea, beheko laukian idatzi zure kontua sortzeko:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captcha-createaccount-fail' => 'Baieztatze kode ezegokia.',
+       'captcha-create'             => 'Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captchahelp-title'          => 'Captcha laguntza',
+       'captchahelp-text'           => "Publikoki aldaketak egiteko aukerak dituzten webguneetan, wiki honetan bezalaxe, spam testuak gehitzen dira sarritan tresna automatikoak erabiliz. Lotura horiek ezabatu egin daitezkeen arren, traba dira. Batzutan, eta bereziki webgune berri bateko loturak gehitzen dituzunean, hitz batzuk dituen irudi bat agertuko zaizu, eta bertan ageri den testua idazteko eskatuko zaizu. Lan hori automatizatzeko zaila da, eta pertsonei ezer kostatzen ez zaigunez, spam testuak saihesteko lagungarria da. Zoritxarrez, ikusmen mugatua edo testu bidezko nabigatzaileak erabiltzen dituzten erabiltzeek arazoak izan ditzakete. Horrelako zerbait gertatzen bazaizu, mesedez, jarri administratzaileekin harremanetan. Zure nabigatzaileko 'atzera' lotura erabili aldaketen orrialdera itzultzeko.",
+);
+
+# فارسی (Huji)
+$messages['fa'] = array(
+       'captcha-edit'               => 'برای ویرایش این مقاله، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-addurl'             => 'ویرایش شما شامل پیوندهای تازه‌ای به بیرون است. برای کمک به جلوگیری از ارسال خودکار هرزنامه‌ها، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-badlogin'           => 'برای کمک به جلوگیری از سرقت خودکار کلمه عبور، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-createaccount'      => 'برای جلوگیری از ایجاد خودکار حساب کاربری، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-createaccount-fail' => 'کلمه تایید نادرست یا گم‌شده:',
+       'captcha-create'             => 'برای ایجاد صفحه لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captchahelp-title'          => 'راهنمای Captcha',
+       'captchahelp-cookies-needed' => 'برای کار کردن آن، شما باید کوکی‌های مرورگرتان را فعال کنید.',
+       'captchahelp-text'           => 'وبگاه‌هایی که امکان تغییر توسط همگان در آن‌ها وجود دارد، مانند این ویکی، گاه و بیگاه توسط هرزنگارهایی که توسط ابزارهای خودکار پیوند خود را در چندین وبگاه درج می‌کنند مورد سوء استفاده قرار می‌گیرند.
+
+در پاره‌ای از موارد، به ویژه زمانی که یک پیوند اینترنتی جدید به صفحه اضافه می‌شود، ویکی ممکن است یک تصویر از حروف رنگی یا معوج به شما نشان بدهد و از شما بخواهد که کلمه‌ای که در آن می‌بینید را وارد کنید. به خاطر این که انجام این کار به شکل خودکار دشوار است، این عمل به اکثر انسان‌های اجازه می‌دهد که به ارسال مطالب بپردازند در حالی که بیشتر ربات‌های حمله‌کننده و هرزنگارها را متوقف می‌کند.
+
+متاسفانه این روش ممکن است کاربرانی را که بینایی محدودی دارند یا از مرورگرهای متنی یا کلامی استفاده می‌کنند دچار محدودیت‌هایی بکند. در حال حاضر هیچ جایگزین صوتی برای این روش موجود نیست. چنان‌چه این مساله شما را دچار محدودیتی دور از انتظار در ارسال نوشته‌های مجاز می‌کند، با مدیران وبگاه تماس بگیرید.
+
+دکمه «قبل» در مرورگرتان را بزنید تا به صفحهٔ ویرایش بازگردید.',
+       'captcha-addurl-whitelist'   => '  #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>
+# قواعد به این شکل است:
+#  * همه‌چیز از «#» تا آخر سطر یک توضیح در نظر گرفته می‌شود.
+#  * هر سطری که خالی نباشد یک قطعه در نظر گرفته می‌شود که فقط با نام میزبان اینترنتی سنجیده می‌شود.
+  #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->',
+
+);
+
+/** Finnish (Suomi)
+ * @author Nike
+ * @author Crt
+ */
+$messages['fi'] = array(
+       'captcha-edit'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-addurl'             => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-badlogin'           => 'Salasananmurtajasovellusten takia, ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-createaccount'      => 'Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-createaccount-fail' => 'Väärä tai puuttuva varmistuskoodi.',
+       'captcha-create'             => 'Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captchahelp-title'          => 'Captcha-ohje',
+       'captchahelp-cookies-needed' => 'Tämä toiminto vaatii evästeiden hyväksymistä.',
+       'captchahelp-text'           => 'Verkkosivut, jotka sallivat ulkopuolisten lisätä sisältöä, joutuvat usein spam-hyökkäysten kohteeksi. Spam-hyökkäyksessä spammerit käyttävät työkaluja, jotka automaattisesti lisäävät linkkejä monille sivuille. Vaikka nämä linkit voidaan poistaa, aiheutuu niistä silti merkittävä haitta.
+
+Joskus, erityisesti kun lisäät uusia linkkejä, saatat nähdä kuvan, jossa on värillistä ja vääristynyttä tekstiä, ja sinua pyydetään kirjoittamaan sen sisältämät sanat. Koska tätä tehtävää on vaikea automatisoida, se sallii melkein kaikkien oikeiden ihmisten tehdä muutoksensa, mutta estää automaattiset lisäykset.
+
+Valitettavasti tämä saattaa estää käyttäjiä, joilla on rajoittunut näkökyky tai käyttäjiä, jotka käyttävät teksti- tai puhepohjaisia selaimia. Ota yhteyttä sivuston ylläpitäjään, jos et pysty tekemään kunnollisia muutoksia.
+
+Varmistus ei toimi, jos evästeet eivät ole käytössä.
+
+Voit palata muokkaustilaan selaimen paluutoiminnolla.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>  
+# Syntaksi on seuraava:  
+#  * Kaikki #-merkistä eteenpäin on kommenttia
+#  * Jokainen ei-tyhjä rivi on säännöllisen lausekkeen osa, joka suoritetaan vain linkeissä esiintyville verkkonimille.
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['fo'] = array(
+       'captcha-createaccount'       => 'Sum ein vernd ímóti sjálvvirknum spam, er neyðugt hjá tær at skriva inn tey orð, sum koma fyri á myndini fyri at stovna eina kontu: <br />([[Special:Captcha/help|Hvat er hetta?]])',
+       'captchahelp-title'           => 'Captcha hjálp',
+);
+
+/** French (Français)
+ * @author Meithal
+ * @author Sherbrooke
+ * @author Grondin
+ */
+$messages['fr'] = array(
+       'captcha-edit'               => "Pour modifier cette page, vous être prié de résoudre l'opération ci-dessous et d'en inscrire le résultat dans le champ ([[Special:Captcha/help|Plus d'infos]]) :",
+       'captcha-addurl'             => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le pourriel automatique, veuillez entrer le résultat de l’opération ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',
+       'captcha-badlogin'           => "Afin de lutter contre le piratage automatisé de mots de passe par des bots, vous être prié de résoudre l'opération ci-dessous et d'y inscrire le résultat dans le champ [[Special:Captcha/help|plus d'infos]]) :",
+       'captcha-createaccount'      => 'Comme protection contre les créations de compte abusives, veuillez entrer le résultat de l’opération dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :',
+       'captcha-createaccount-fail' => 'Code de confirmation erroné ou manquant.',
+       'captcha-create'             => "Pour modifier la page, vous être prié de résoudre l'opération ci-dessous et d'en inscrire le résultat dans le champ ([[Special:Captcha/help|Plus d'infos]]) :",
+       'captchahelp-title'          => 'Aide sur les captcha',
+       'captchahelp-cookies-needed' => 'Il faut activer les cookies dans votre navigateur Web pour que cela fonctionne.',
+       'captchahelp-text'           => "Les sites Web acceptant des contributions du public, comme ce wiki, sont souvent utilisés par des spammeurs qui utilisent des outils automatiques pour placer de nombreux liens vers leurs sites. Même si ces liens de « spam » peuvent être enlevés, ils n'en représentent pas moins une nuisance.
+
+Parfois, en particulier lors de l’ajout de nouveaux liens externes à une page, le wiki peut vous montrer une image représentant un texte brouillé et vous demander de taper les mots indiqués. Cette tâche est difficile à automatiser, et permet aux humains de faire leurs contributions tout en stoppant la plupart des spammeurs.
+
+Cette solution peut malheureusement gêner les utilisateurs malvoyants ou ceux utilisant un navigateur en texte seul. Nous ne disposons pas d’alternative audio pour l’instant. Veuillez contacter un [[Special:Listusers/sysop|administrateur]] du site si vous ne parvenez pas à faire vos contributions.
+
+Cliquez sur le bouton « Précédent » de votre navigateur pour revenir sur la page d’édition.",
+       'captcha-addurl-whitelist'   => " #<!-- laissez cette ligne exactement telle quelle --> <pre> 
+# La syntaxe est la suivante : 
+#   * Tout caractère suivant « # » jusqu'à la fin de la ligne sera interprêté comme un commentaire
+#   * Toute ligne non vide est un code regex qui sera utilisé uniquement à l'intérieur des liens hypertextes.
+ #</pre> <!-- laissez cette ligne exactement telle quelle -->",
+);
+
+/** Franco-Provençal (Arpetan)
+ * @author ChrisPtDe
+ */
+$messages['frp'] = array(
+       'captcha-edit'               => 'Por modifiar ceta pâge, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-addurl'             => 'Voutra modificacion encllut de novéls lims de defôr. Coment protèccion contre lo spame ôtomatico, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-badlogin'           => 'Coment protèccion contre lo piratâjo ôtomatisâ de mots de pâssa per des bots, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-createaccount'      => 'Coment protèccion contre les crèacions de compto abusives, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-createaccount-fail' => 'Code de confirmacion fôx ou manquent.',
+       'captcha-create'             => 'Por crèar ceta pâge, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captchahelp-title'          => 'Éde sur los captcha',
+       'captchahelp-cookies-needed' => "Fôt activar los tèmouens (''cookies'') dens voutron navigator por que cen fonccione.",
+       'captchahelp-text'           => 'Los setos Malyâjo accèptent des contribucions du publico, coment ceti vouiqui, sont sovent utilisâs per des spamors qu’utilisont des outils ôtomaticos por placiér tot plen de lims vers lors setos. Quand ben que celos lims de « spame » porriant étre enlevâs, reprèsentont una nuésence.
+
+Des côps, en particuliér pendent l’aponsa de novéls lims de defôr a una pâge, lo vouiqui pôt vos montrar una émâge reprèsentent un tèxte colorâ ou ben tordu et vos demandar de buchiér los mots montrâs. Cél ovrâjo est dificilo a ôtomatisar, et pèrmèt ux homos de fâre lors contribucions tot en arrètent la plepârt des spamors.
+
+Mâlherosament ceta solucion pôt gênar los utilisators mâl-veyents ou utilisent un navigator en tèxte solèt. Nos disposens pas d’altèrnativa ôdiô por lo moment. Volyéd vos veriér vers un [[Special:Listusers/sysop|administrator]] du seto se vos arrevâd pas a fâre voutres contribucions.
+
+Clicâd sur lo boton « Prècèdent » de voutron navigator por tornar a la pâge d’èdicion.',
+       'captcha-addurl-whitelist'   => '  #<!-- lèssiéd ceta legne justo d’ense --> <pre>
+# La sintaxa est la siuventa :
+#  * Tot caractèro siuvent « # » tant qu’a la fin de la legne serat entèrprètâ coment un comentèro.
+#  * Tota legne pas voueda est un bocon de RegEx que serat utilisâ ren qu’u dedens des lims hipèrtèxte.
+  #</pre> <!-- lèssiéd ceta legne justo d’ense -->',
+);
+
+/** Irish (Gaeilge)
+ * @author Alison
+ * @author SPQRobin
+ */
+$messages['ga'] = array(
+       'captcha-edit'               => 'Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Special:Captcha/help|Céard é seo?]])',
+       'captcha-addurl'             => 'Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])',
+       'captcha-createaccount'      => 'Mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur chun cuntas a chlárú: <br />([[Speisialta:Captcha/help|Céard é seo?]])',
+       'captcha-createaccount-fail' => 'Ní raibh an cód deimhnithe ceart sa bhosca, nó ní raibh aon chód ann ar chor ar bith.',
+       'captcha-create'             => 'Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Special:Captcha/help|Céard é seo?]])',
+       'captchahelp-title'          => 'Cabhair maidir le Captcha',
+);
+
+/** Galician (Galego)
+ * @author Alma
+ * @author Xosé
+ */
+$messages['gl'] = array(
+       'captcha-edit'               => 'Para editar este artigo, resolta a suma simple que aparece embaixo e introduza a resposta na caixa ([[Special:Captcha/help|máis información]]):',
+       'captcha-addurl'             => 'A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de ligazóns publicitarias necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])',
+       'captcha-badlogin'           => 'Como protección para que non descubran o contrasinal por medios automáticos, resolva a suma simple de embaixo e introduza a resposta na caixa ([[Special:Captcha/help|máis información]])',
+       'captcha-createaccount'      => "Como protección fronte a sistemas de creación automática de contas de usuario usados polos ''spammers'', ten que teclear as palabras que aparecen na imaxe para rexistrar unha conta:<br /> ([[Special:Captcha/help|Qué é isto?]])",
+       'captcha-createaccount-fail' => 'Falta o código de confirmación ou é incorrecto.',
+       'captcha-create'             => 'Para crear a páxina, resolva a suma simple que aparece embaixo e introduza a resposta na caixa  ([[Special:Captcha/help|Qué é isto?]])',
+       'captchahelp-title'          => 'Axuda acerca do Captcha',
+       'captchahelp-cookies-needed' => 'Vostede necesita ter as cookies habilitadas no seu navegador para que funcione.',
+       'captchahelp-text'           => "'''CAPTCHA''' (acrónimo de \"'''C'''ompletely '''A'''utomated '''P'''ublic '''T'''uring test to tell '''C'''omputers and '''H'''umans '''A'''part\") é un test de autentificación do tipo desafío-resposta usado nos contornos informáticos para distinguir usuarios humanos de máquinas. Os sitios web que aceptan publicar as contribucións dos usuarios coma este wiki sofren, con frecuencia, o abuso por parte de ''spammers'' que usan ferramentas que automatizan a inclusión de lixo en forma de ligazóns publicitarias nunha chea de páxinas en pouco tempo. Mentres ditas ligazóns non son eliminadas supoñen unha molestia e unha perda de tempo. En ocasións, en particular cando engada algún novo vínculo externo, o wiki pode mostrar unha imaxe dun texto coloreado e distorsionado e pedirlle que teclee as palabras mostradas. Como esta tarefa é difícil de automatizar, permite distinguir entre persoas e robots e dificulta os ataques automatizados dos ''spammers''. Por desgraza, pódelles causar problemas a aqueles usuarios con dificultades de visión ou aos que utilicen navegadores de texto ou navegadores baseados en sistemas de voz. Polo de agora non dispoñemos dunha alternativa de audio. Por favor, contacte cun [[Special:Listusers/sysop|administrador]] do wiki para solicitar axuda se o sistema lle impide rexistrarse para facer contribucións lexítimas. Prema no botón \"atrás\" ou equivalente do seu navegador para volver á páxina na que estaba.",
+       'captcha-addurl-whitelist'   => ' #<!-- deixe esta liña exactamente como está --> <pre>
+# A sintaxe é a seguinte:
+#   * Todo o que vai desde o carácter "#" até o final da liña é un comentario  
+#   * Cada liña que non estea en branco é un fragmento de expresión regular que só coincidirá con hosts dentro de URLs
+ #</pre> <!-- deixe esta liña exactamente como está -->',
+);
+
+/** Gujarati (ગુજરાતી)
+ * @author Dsvyas
+ */
+$messages['gu'] = array(
+       'captcha-edit'               => 'આ લેખમાં ફેરફાર કરવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો ([[Special:Captcha/help|more info]]):',
+       'captcha-addurl'             => 'તમે કરેલા ફેરફારોમાં નવી બાહ્ય કડીઓ સામેલ છે. સ્વચાલિત સ્પેમ/સ્પામ(spam) થી બચવવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો
+([[Special:Captcha/help|more info]]):',
+       'captcha-badlogin'           => 'આપોઆપ થતી ગુપ્તસંજ્ઞાની ચોરી (password cracking)થી બચાવવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount'      => 'આપોઆપ નવા ખાતા ખુલતા રોકવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો',
+       'captcha-createaccount-fail' => 'ખોટી અથવા ખૂટતી પુષ્ટિ સંજ્ઞા',
+       'captcha-create'             => 'નવું પાનું બનાવવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો  ([[Special:Captcha/help|more info]]):',
+       'captchahelp-title'          => 'કેપ્ટ્ચા/કેપ્ચા (Captcha) મદદ',
+       'captchahelp-cookies-needed' => 'આ વ્યવસ્થિત રીતે જોઇ શકાય તે માટે તમારા બ્રાઉઝરમાં કુકીઝ એનેબલ કરેલી હોવી જોઇશે.',
+       'captchahelp-text'           => "આપણી વિકિ જેવી વૅબ સાઇટો કે જે લોકોને યોગદાન કરવાની પરવાનગી આપે છે, તેમેનો સ્પામરો દ્વારા દુરૂપયોગ થતો આવ્યો છે. આવા સ્પામરો તેમની કડીઓ એક સાથે અનેક વૅબ સાઇટો પર મુકવા માટે સ્વચાલિત સાધનો (Tools) વાપરે છે. આવી કડીઓ ખરેખર એક દૂષણ છે અને તેને દૂર કરવાના ઉપાય કરવા જોઇએ.
+
+ક્યારેક, ખાસ કરીને જ્યારે તમે તમારા લેખમાં બાહ્ય કડી ઉમેરતા હોવ ત્યારે, વિકિ તમને એક રંગીન કે તુટેલા-ફુટેલા અક્ષરો કે શબ્દોનું ચિત્ર બતાવે અને તેમા વંચાતા શબ્દો બાજુનાં ખાનામાં લખવા માટે પુછે એવું બને. આનું કારણ એ છે કે આ એક એવી પદ્ધતિ છે જે સ્વચાલિત રીતે કરવી લગભગ અશક્ય છે, અને ફક્ત વ્યક્તિગત રીતે જ થઇ
+શકે છે, જે સ્પામરો અને અન્ય ઘુસણખોરો ના હુમલાને ખાળે છે.
+
+કમભાગ્યે આ પદ્ધતિ, એવા લોકોને તકલિફ આપે તેમ છે જેઓની દૃષ્ટિ નબળી છે અથવાતો જેઓ વાચા આધારીત કે સાદા બ્રાઉઝરનો ઉપયોગ કરે છે. હાલમા અમારી પાસે આવા ચિત્રોની વાચા આધારિત વ્યવસ્થા નથી. જો આ કારણે આપ કોઇ લેખમાં પ્રદાન ન કરી શકતા હોવ તો વધુ સહાય માટે કૃપા કરી પ્રબંધકનો સંપર્ક સાધો.
+
+લેખમા ફેરફાર કરવાના પાના ઉપર પાછા ફરવા માટી આપના બ્રાઉઝરના 'બેક' બટન ઉપર ક્લિક કરો.",
+       'captcha-addurl-whitelist'   => '#<!-- આ લીટીને જેમ છે તેમ જ રહેવા દો --> <pre>  
+# સીન્ટેક્સ (Syntax) આ પ્રમાણે છે :  
+#  * "#" સંજ્ઞાથી શરૂ કરીને લીટીના અંત સુધીનું વર્ણન એક ટીપ્પણી છે
+#  * ખાલી ન હોય તેવી દરેક લીટી રેજેક્સનો ભાગ છે, જે ફક્ત URLsમાંના હોસ્ટ સાથે જ મેળ ખાશે
+  #</pre> <!-- આ લીટીને જેમ છે તેમ જ રહેવા દો -->',
+);
+
+$messages['he'] = array(
+       'captcha-edit'               => 'כדי לערוך את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-addurl'             => 'עריכתכם כוללת קישורים חיצוניים חדשים. כהגנה מפני ספאם אוטומטי, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-badlogin'            => 'כהגנה מפני פריצת סיסמאות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-createaccount'      => 'כהגנה מפני יצירת חשבונות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-createaccount-fail' => 'לא הקלדתם קוד אישור, או שהוא שגוי.',
+       'captcha-create'             => 'כדי ליצור את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captchahelp-cookies-needed' => "עליכם להפעיל את תכונת העוגיות (Cookies) בדפדפן שלכם כדי שזה יעבוד.",
+       'captchahelp-title'          => 'עזרה במערכת הגנת הספאם',
+       'captchahelp-text'           => "פעמים רבות מנצלים ספאמרים אתרים שמקבלים תוכן מהציבור, כמו הוויקי הזה, כדי לפרסם את הקישורים שלהם לאתרים רבים באינטרנט, באמצעות כלים אוטומטיים. אמנם ניתן להסיר את קישורי הספאם הללו, אך זהו מטרד משמעותי.
+
+לעיתים, בעיקר כשאתם מכניסים קישורי אינטרנט חדשים לתוך עמוד, הוויקי עשוי להראות תמונה של טקסט צבעוני או מעוקם ויבקש מכם להקליד את המילים המוצגות. כיוון שזו משימה שקשה לבצעה בצורה אוטומטית, הדבר יאפשר לבני־אדם אמיתיים לשלוח את הדפים, אך יעצור את רוב הספאמרים והמתקיפים הרובוטיים.
+
+לרוע המזל, הדבר עשוי לגרום לאי נוחות למשתמשים עם דפדפן בגרסה מוגבלת, או שמשתמשים בדפדפנים מבוססי טקסט או דיבור. כרגע, אין לנו חלופה קולית זמינה. אנא צרו קשר עם מנהלי האתר לעזרה אם המערכת מונעת מכם באופן בלתי צפוי לבצע עריכות לגיטימיות.
+
+אנא לחצו על הכפתור 'Back' בדפדפן שלכם כדי לחזור לדף העריכה.",
+       'captcha-addurl-whitelist' => '
+ #<!-- יש להשאיר שורה זו בדיוק כפי שהיא כתובה --> <pre>
+# זהו תחביר ההודעה:
+#   * כל דבר בשורה שנכתב לאחר סימן "#" הוא הערה
+#   * כל שורה לא ריקה היא ביטוי רגולרי שיתאים לאתרים בכתובות URL
+ #</pre> <!-- יש להשאיר שורה זו בדיוק כפי שהיא כתובה -->',
+);
+
+/** Croatian (Hrvatski)
+ * @author SpeedyGonsales
+ */
+$messages['hr'] = array(
+       'captcha-edit'               => 'Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])',
+       'captcha-addurl'             => 'Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])',
+       'captcha-badlogin'           => 'Da se spriječi automatizirano pogađanje lozinki,
+molimo zbrojite donje brojeve i upišite rezultat ([[Special:Captcha/help|pomoć]]):',
+       'captcha-createaccount'      => 'Kao zaštitu od automatskog spama, pri otvaranju računa trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć]])',
+       'captcha-createaccount-fail' => 'Potvrdni kod je nepotpun ili netočan.',
+       'captcha-create'             => 'Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])',
+       'captchahelp-title'          => 'Antispam pomoć',
+       'captchahelp-cookies-needed' => "Trebate imati uključene kolačiće (''cookies'') u vašem web pregledniku za ovu funkciju.",
+       'captchahelp-text'           => 'Web poslužitelje koji rade na temelju javnih doprinosa, poput wiki, često zloupotrebljavaju spameri. Oni koriste automatske alate pomoću kojih generiraju poveznice od vlastitog interesa. Iako se te poveznice najčešće uklanjaju, mogu predstavljati neugodnost pri radu. Ponekad se dogodi da wiki prikaže sliku čudnog tekstualnog sadržaja uz koju morate unijeti prikazana slova. Budući da je takvu radnju teško automatizirati, većina se napadača obeshrabri, a pravi suradnici bez većih smetnji nastavljaju pridonositi. Ukoliko ste suradnik koji koristi tekstualni klijent te vas česte ovakve provjere ometaju pri dodavanju važećih sadržaja, molimo da se obratite [[Special:Listusers/sysop|administratorima]].',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre> 
+# Rabi se slijedeća sintaksa: 
+#   * Sve od "#" znaka do kraja linije je komentar
+#   * Svaki neprazni redak je regularni izraz (regex) koji odgovara poslužitelju unutar URL-a
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Upper Sorbian (Hornjoserbsce)
+ * @author Michawiki
+ */
+$messages['hsb'] = array(
+       'captcha-edit'               => 'Zo by stronu wobdźěłał, rozrisaj prošu slědowacy ličenski nadawk a zapodaj wuslědk do kašćika ([[Special:Captcha/help|Dalše informacije]]):',
+       'captcha-addurl'             => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',
+       'captcha-badlogin'           => 'Zo by so awtomatiskemu zadobywanju do hesłow zadźěwało, dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. [[{{ns:special}}:Captcha/help|(Prašenja abo problemy?)]]',
+       'captcha-createaccount'      => 'Jako škitna naprawa přećiwo awtomatiskemu wutworjenju wužiwarskich kontow dyrbiš slědowacy nadawk wuličeć. [[{{ns:special}}:Captcha/help|(Prašenja abo problemy?)]]',
+       'captcha-createaccount-fail' => 'Wopačny abo pobrachowacy wuslědk.',
+       'captcha-create'             => 'Zo by stronu wutworił, rozrisaj prošu slědowacy ličenski nadawk a zapodaj wuslědk do kašćika ([[Special:Captcha/help|Dalše informacije]]):',
+       'captchahelp-title'          => 'Pomoc z captcha',
+       'captchahelp-cookies-needed' => 'Dyrbiš placki (cookies) w swojim wobhladowaku zmóžnić.',
+       'captchahelp-text'           => 'Sydła kaž {{SITENAME}}, kotrež móža so swobodnje wot kóždeho wobdźěłować su často z woporom spamarjow, kotřiž swoje wotkazy awtomatisce we wjele sydłach broja. Tute spam-wotkazy móža so zaso wotstronjeć, wubudźa pak njesnadne mjerzanje. W někotrych padach, wosebje při přidawanju nowych eksternych wotkazow, móže so stać, zo pokazuje tutón wiki wobraz z pisanym abo skomolenym tekstom abo kaza jednory ličenski nadawk wuličeć, kotrehož wuslědk dyrbi so potom do zapodawanskeho kašćika zapisować. Dokelž hodźi so tajki nadawk jenož ćežko z awtomatiskimi srědkami spamarjow spjelnić, móža so tajcy wotdźeržować, druzy wužiwarjo pak móža swoje změny składować. Bohužel móže to k wobćežnosćam za tutych wužiwarjow dowjesć, kotrychž kmanosć widźenja je wobmjezowana abo kotřiž dźěłaja z wobhladowakami kiž su na tekstowe abo rěčne wudawanje wusměrjene. Móžne rozrisanje tutoho problema je přizjewjenje jako wužiwar. Tłóčatko „Wróćo” swojeho wobhladowaka dowjedźe tebje zaso do wobdźěłowanskeho pola.',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre>
+# Syntaks je slědowaca:
+# * Wšo wot znamješka "#" hač do kónca linky je komentar
+# * Kóžda popisana linka je fragment regex (regularneho wuraza) kotryž so z mjenom hosta wěsteje URL přirunuje
+
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Hungarian (Magyar)
+ * @author Bdanee
+ */
+$messages['hu'] = array(
+       'captcha-edit'               => 'A lap szerkesztéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét. ([[Special:Captcha/help|segítség]])',
+       'captcha-addurl'             => 'Szerkesztésed új külső linket tartalmaz. A reklámokat elhelyező robotok kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi matematikai művelet eredményét. ([[Special:Captcha/help|segítség]])',
+       'captcha-badlogin'           => 'Az automatikus jelszófeltörés kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét ([[Special:Captcha/help|segítség]]):',
+       'captcha-createaccount'      => 'A felhasználói fiókok automatizált létrehozásának kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét. ([[Special:Captcha/help|segítség]])',
+       'captcha-createaccount-fail' => 'Hibás vagy hiányzó ellenőrző kód.',
+       'captcha-create'             => 'Az oldal elkészítéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét. ([[Special:Captcha/help|segítség]])',
+       'captchahelp-title'          => 'Captcha segítség',
+       'captchahelp-cookies-needed' => 'Engedélyezned kell a böngésződben a sütiket.',
+       'captchahelp-text'           => 'Az olyan weboldalakat, amelyekre bárki írhat, gyakran támadják meg spammerek olyan eszközök felhasználásával, amelyek képesek automatikusan, emberi felügyelet nélkül elhelyezni egy linket sok különböző oldalon. Az ilyen linkek kézi eltávolítása rengeteg energiát emésztene fel, ezért néha, különösen ha egy külső linket teszel egy cikkbe, a wiki egy valamilyen módon eltorzított szöveget (captcha-t) jelenít meg, és arra kér, hogy gépeld be azt. Mivel ezt automatikusan nagyon nehéz megtenni, a valódi szerkesztők így könnyen megkülönböztethetőek a spammerek robotjaitól.
+
+Sajnos ez komoly kényelmetlenséget jelenthet azoknak a felhasználóknak, akik gyengén látnak, vagy szöveges vagy hang-alapú böngészőt használnak. Jelenleg nem tudunk hang-alapú alternatívával szolgálni; ha a captcha megakadályoz abban, hogy szerkeszd a wiki, vedd fel a kapcsolatot az adminisztrátorokkal. Ahhoz, hogy a capctha-t meg tudd oldani, engedélyezned kell a sütiket a böngésződben.
+
+Ha a captcha megoldása helyett inkább visszatérnél a szöveg szerkesztéséhez, használd a böngésződ „vissza” gombját.',
+       'captcha-addurl-whitelist'   => '
+  #<!-- ezt a sort hagyd pontosan így --> <pre>  
+# A szintaktika a következő:  
+#  * Minden „#” karakterrel kezdődő sor megjegyzés
+#  * Minden nem üres sor egy reguláris kifejezés darabja, amely csak az URL-ekben található kiszolgálókra keres
+  #</pre> <!-- ezt a sort hagyd pontosan így -->',
+);
+
+/** Indonesian (Bahasa Indonesia)
+ * @author Borgx
+ */
+$messages['id'] = array(
+       'captcha-edit'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />
+([[Special:Captcha/help|info lengkap]])",
+       'captcha-addurl'             => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />
+([[Special:Captcha/help|info lengkap]])",
+       'captcha-badlogin'           => 'Untuk membantu perlindungan terhadap perengkahan kunci sandi otomatis, tolong masukkan kata atau hasil perhitungan sederhana berikut dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):',
+       'captcha-createaccount'      => 'Sebagai perlindungan melawan spam, Anda diharuskan untuk mengetikkan kata atau hasil perhitungan di bawah ini di kotak yang tersedia untuk dapat mendaftarkan pengguna baru:<br />
+([[Special:Captcha/help|info lengkap]])',
+       'captcha-createaccount-fail' => 'Kode konfirmasi salah atau belum diisi.',
+       'captcha-create'             => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />
+([[Special:Captcha/help|info lengkap]])",
+       'captchahelp-title'          => 'Mengenai Captcha',
+       'captchahelp-cookies-needed' => 'Anda perlu mengaktifkan cookie pada penjelajah web Anda untuk menggunakan fitur ini.',
+       'captchahelp-text'           => "Situs-situs web yang menerima masukan data dari publik, seperti {{ns:project}} ini, kerapkali disalahgunakan oleh pengguna-pengguna yang tidak bertanggungjawab untuk mengirimkan spam dengan menggunakan program-program otomatis. Walaupun spam-spam tersebut dapat dibuang, tetapi tetap saja menimbulkan gangguan berarti.
+
+Ketika menambahkan pranala web baru ke suatu halaman, {{ns:project}} akan menampilkan sebuah gambar tulisan yang terdistorsi atau suatu perhitungan sederhana dan meminta Anda untuk mengetikkan kata atau hasil dimaksud. Karena ini merupakan suatu pekerjaan yang sulit diotomatisasi, pembatasan ini akan mengizinkan hampir semua manusia untuk melakukannya, tapi di sisi lain akan menghentikan kebanyakan aksi spam dan penyerangan yang dilakukan oleh bot otomatis.
+
+Sayangnya, hal ini dapat menimbulkan kesulitan bagi pengguna dengan keterbatasan penglihatan atau pengguna yang menggunakan penjelajah basis teks atau suara. Saat ini, kami tidak memiliki suatu alternatif suara untuk hal ini. Silakan minta bantuan dari pengurus situs jika hal ini menghambat Anda untuk mengirimkan suntingan yang layak.
+
+Tekan tombol 'back' di penjelajah web Anda untuk kembali ke halaman penyuntingan.",
+);
+
+/** Icelandic (Íslenska)
+ * @author S.Örvarr.S
+ */
+$messages['is'] = array(
+       'captcha-edit'               => 'Til að breyta þessari grein, gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í
+kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-addurl'             => 'Breyting þín felur í sér viðbætta ytri tengla. Til að hjálpa okkur að verjast sjálfvirku
+auglýsingarusli gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-badlogin'           => 'Til að hjálpa okkur að verjast sjálfvirku leyniorðaárásum, gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í
+kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-createaccount'      => 'Til að hjálpa okkur að verjast sjálfvirkri gerð aðganga gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-createaccount-fail' => 'Staðfestingarkóðinn var rangur eða ekki til staðar.',
+       'captcha-create'             => 'Til að búa síðuna til, gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captchahelp-title'          => 'Captcha-hjálp',
+       'captchahelp-cookies-needed' => 'Þú verður að leyfa vefkökur til þess að þetta virki.',
+       'captchahelp-text'           => 'Vefsíður sem að leyfa framlög frá frá almenningi, líkt og þessi wiki-vefur, eru oft misnotaðar af svokölluðum „spömmurum“ sem nota sjálfvirk tól til þess að setja inn tengla á aðrar vefsíður. Aðrir notendur geta fjarlægt þessa tengla en töluverð truflun er af þeim.
+
+Stundum þegar þú breytir síðum, sérstaklega ef breytingin felur í sér nýja tengla á aðra vefi, getur gerst að þú sért beðin(n) um að skrifa inn orð sem birtast á lituðum eða óskýrum myndum. Fyrir flesta notendur af holdi og blóði er þetta lítið mál en sjálfvirk tól ráða ekki við þetta.
+
+Því miður kann þetta að valda notendum óþægindum sem hafa skerta sjón eða notast við talmálsvafra. Enn sem komið er eru ekki til aðrir valkostir fyrir þau tilvik. Ef þetta kemur í veg fyrir lögmætar breytingar af þinni hálfu getur þú leitað aðstoðar hjá stjórnendum vefsins.
+
+Notaðu „back“-hnapp vafrans til að halda áfram.',
+);
+
+/** Italian (Italiano)
+ * @author BrokenArrow
+ */
+$messages['it'] = array(
+       'captcha-edit'               => 'Per modificare la pagina è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella
+([[Special:Captcha/help|maggiori informazioni]]):',
+       'captcha-addurl'             => "La modifica richiesta aggiunge dei nuovi collegamenti esterni alla pagina; come misura precauzionale contro l'inserimento automatico di spam, è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella ([[Special:Captcha/help|maggiori informazioni]]):",
+       'captcha-badlogin'           => 'Come misura precauzionale contro i tentativi di forzatura automatica della password, è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella ([[Special:Captcha/help|maggiori informazioni]]):',
+       'captcha-createaccount'      => 'Come misura precauzionale contro i tentativi di creazione automatica degli account, per registrarsi è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella ([[Special:Captcha/help|maggiori informazioni]]):',
+       'captcha-createaccount-fail' => 'Codice di verifica errato o mancante.',
+       'captcha-create'             => 'Per creare la pagina è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella:<br />
+([[Special:Captcha/help|maggiori informazioni]]):',
+       'captchahelp-title'          => "Cos'è il captcha?",
+       'captchahelp-cookies-needed' => 'È necessario abilitare i cookie sul proprio browser per proseguire',
+       'captchahelp-text'           => "Capita spesso che i siti Web che accettano messaggi pubblici, come questo wiki, siano presi di mira da spammer che usano strumenti automatici per inserire collegamenti pubblicitari verso un gran numero di siti. Per quanto i collegamenti indesiderati si possano rimuovere, si tratta comunque di una seccatura non indifferente.
+
+In alcuni casi, ad esempio quando si tenta di aggiungere nuovi collegamenti Web in una pagina, il software wiki può mostrare una immagine con un breve testo colorato e/o distorto chiedendo di riscriverlo in un'apposita finestrella. Poiché si tratta di un'azione difficile da replicare da parte di un computer, questo meccanismo consente a (quasi tutti) gli utenti reali di completare l'inserimento desiderato, impedendo l'accesso alla maggior parte degli spammer e degli altri attacchi automatizzati.
+
+Sfortunatamente, queste misure di sicurezza possono mettere in difficoltà gli utenti con problemi visivi o coloro che utilizzano browser testuali o basati sulla sintesi vocale. Purtroppo al momento non è disponibile un meccanismo alternativo basato su messaggi audio; se queste procedure impediscono l'inserimento informazioni che si ritengono legittime, si prega di contattare gli amministratori del sito e chiedere loro assistenza.
+
+Fare clic sul pulsante 'back' del browser per tornare alla pagina di modifica.",
+       'captcha-addurl-whitelist'   => '  #<!-- non modificare in alcun modo questa riga --> <pre>  
+# La sintassi è la seguente:  
+#  * Tutto ciò che segue un carattere "#" è un commento, fino al termine della riga
+#  * Tutte le righe non vuote sono frammenti di espressioni regolari che si applicano al solo nome dell\'host nelle URL
+  #</pre> <!-- non modificare in alcun modo questa riga -->',
+);
+
+$messages['ja'] = array(
+       'captcha-edit'                => 'このページを編集するには下記に現れる数式の答えを入力してください。<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-addurl'              => 'あなたの編集には新たに外部リンクが追加されています。スパム防止のため、下記の数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-badlogin'            => '自動化スクリプトによるパスワードクラック攻撃を防止するため、下記に現れる数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-createaccount'       => 'スパム防止のため、アカウントを登録するには、下記に現れる数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-createaccount-fail'  => '確認コードの入力がないか、間違っています。',
+       'captcha-create'              => 'あなたの編集は新たに外部リンクが追加されています。スパム防止のため、下記に現れる数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captchahelp-title'           => 'Captcha ヘルプ',
+       'captchahelp-cookies-needed'  => 'ブラウザのクッキー機能を有効にする必要があります。',
+       'captchahelp-text'            => '当Wikiのような、投稿が公開されているウェブサイトは、多くのサイトに自分たちへのリンクを自動投稿するツールを用いるスパマーにより荒らされます。これらのスパムは除去できるものの、その作業大変うっとうしいものです。
+
+時々、特に新しいリンクをページに追加したとき、Wikiは色の付いた、もしくは、ゆがめられた文字を提示し、その入力をお願いすることがあります。この作業は自動化が難しいため、本当の人間の投稿を可能にしつつ、多くのスパマーやロボットの攻撃を防ぐことが出来ます。
+
+しかし、残念なことに、テキストベースやスピーチベースのブラウザを使っている、視覚障害者に不便をおかけする場合があります。現時点では、音声版の代替物がありません。正当な投稿をするにあたって、これが障害となっている場合、サイト管理者に連絡し、協力を求めてください。
+
+編集ページに戻るには、ブラウザの戻るボタンを押してください。',
+);
+
+$messages['kk-arab'] = array(
+       'captcha-edit' => 'بۇل بەتتٸ ٶڭدەۋ ٷشٸن, تٶمەندەگٸ قوسىندىلاۋدى شەشٸڭٸز دە, نٵتيجەسٸن
+اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-addurl' => 'تٷزەتۋٸڭٸزدە جاڭا سىرتقى سٸلتەمەلەر بار ەكەن. ٶزدٸكتٸك «سپام» جاسالۋىنان قورعانۋ ٷشٸن,
+تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى شەشٸڭٸز دە, نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-badlogin' => 'قۇپييا سٶزدٸ ٶزدٸكتٸك قيراتۋدان قورعانۋ ٷشٸن,
+تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى شەشٸڭٸز دە, نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-createaccount' => 'جاڭا تٸركەلگٸ ٶزدٸكتٸك جاسالۋىنان قورعانۋ ٷشٸن, تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى
+شەشٸڭٸز دە, نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-createaccount-fail' => "كۋٵلاندىرۋ كودى دۇرىس ەمەس نەمەسە جوق.",
+       'captcha-create' => 'جاڭا بەتتٸ باستاۋ ٷشٸن, تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى شەشٸڭٸز دە,
+نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captchahelp-title'          => 'CAPTCHA انىقتاماسى',
+       'captchahelp-cookies-needed' => "بۇل جۇمىس ٸستەۋ ٷشٸن, شولعىشىڭىزدا  «cookies»  دەگەندٸ ەندٸرٸڭٸز.",
+       'captchahelp-text'           => "ٶزدٸكتٸك قۇرالدارى بار «سپاممەرلەر», بارشادان جٸبەرٸلگەن حاباردى قابىلدايتىن, بۇل ۋيكي سيياقتى, ۆەب-توراپتارعا سٸلتەمەلەرٸمەن جيٸ جاۋدىرادى. وسىنداي «سپام» سٸلتەمەلەرٸن الاستاۋ بولعاندا دا, بۇل مٵندٸ ىزا كەلتٸرەدٸ.
+
+كەيدە, ٵسٸرەسە بەتكە جاڭا ۆەب سٸلتەمەسٸن قوسقاندا, ۋيكي ٶڭٸ ٶزگەرگەن نە قيسايعان مٵتٸندٸ كٶرسەتٸپ جٵنە سول سٶزدەردٸ ەنگٸزۋ سۇراۋى مٷمكٸن. بۇل تاپسىرىس ٶزدٸك تٷردە اتقارۋ ٶتە قيىن, سوندىقتان بۇل يماندى ادام كٶپشٸلٸگٸنە كەدەرگٸ بولمايدى, بٸراق «سپاممەرلەردٸ» جٵنە بۇزاقى بوتپەن باسقا شابۋىل جاساعانداردى توقتاتادى.
+
+ٶكٸنٸشكە وراي, بۇل كٶرۋٸ تٶمەندەگەن, نەمەسە مٵتٸن نە داۋىس نەگٸزٸندەگٸ شولعىشتى قولداناتىن پايدالانۋشىعا ىڭعايسىزدىق كەلتٸرۋگە مٷمكٸن. وسى قازٸر بٸزدە دىبىستى بالاما جوق. ەگەر بۇل ادال جازۋىڭىزعا كەدەرگٸلەسە, توراپ باقىلاۋشىلارىنا قاتىناسىڭىز.
+
+بۇل جۇمىستى ٸستەۋ ٷشٸن شولعىشىڭىزدا «cookies» دەگەندٸ ەندٸرۋ قاجەت.
+
+بەت ٶڭدەۋٸنە قايتۋ بارۋ ٷشٸن «ارتقا» دەگەن تٷيمەسٸن باسىڭىز."
+);
+
+$messages['kk-cyrl'] = array(
+       'captcha-edit' => 'Бұл бетті өңдеу үшін, төмендегі қосындылауды шешіңіз де, нәтижесін
+аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-addurl' => 'Түзетуіңізде жаңа сыртқы сілтемелер бар екен. Өздіктік «спам» жасалуынан қорғану үшін,
+төмендегі қарапайым қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-badlogin' => 'Құпия сөзді өздіктік қиратудан қорғану үшін,
+төмендегі қарапайым қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-createaccount' => 'Жаңа тіркелгі өздіктік жасалуынан қорғану үшін, төмендегі қарапайым қосындылауды
+шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-createaccount-fail' => "Куәландыру коды дұрыс емес немесе жоқ.",
+       'captcha-create' => 'Жаңа бетті бастау үшін, төмендегі қарапайым қосындылауды шешіңіз де,
+нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captchahelp-title'          => 'CAPTCHA анықтамасы',
+       'captchahelp-cookies-needed' => "Бұл жұмыс істеу үшін, шолғышыңызда  «cookies»  дегенді ендіріңіз.",
+       'captchahelp-text'           => "Өздіктік құралдары бар «спаммерлер», баршадан жіберілген хабарды қабылдайтын, бұл уики сияқты, веб-тораптарға сілтемелерімен жиі жаудырады. Осындай «спам» сілтемелерін аластау болғанда да, бұл мәнді ыза келтіреді.
+
+Кейде, әсіресе бетке жаңа веб сілтемесін қосқанда, уики өңі өзгерген не қисайған мәтінді көрсетіп және сол сөздерді енгізу сұрауы мүмкін. Бұл тапсырыс өздік түрде атқару өте қиын, сондықтан бұл иманды адам көпшілігіне кедергі болмайды, бірақ «спаммерлерді» және бұзақы ботпен басқа шабуыл жасағандарды тоқтатады.
+
+Өкінішке орай, бұл көруі төмендеген, немесе мәтін не дауыс негізіндегі шолғышты қолданатын пайдаланушыға ыңғайсыздық келтіруге мүмкін. Осы қазір бізде дыбысты балама жоқ. Егер бұл адал жазуыңызға кедергілесе, торап бақылаушыларына қатынасыңыз.
+
+Бұл жұмысты істеу үшін шолғышыңызда «cookies» дегенді ендіру қажет.
+
+Бет өңдеуіне қайту бару үшін «Артқа» деген түймесін басыңыз."
+);
+
+$messages['kk-latn'] = array(
+       'captcha-edit' => 'Bul betti öñdew üşin, tömendegi qosındılawdı şeşiñiz de, nätïjesin
+awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-addurl' => 'Tüzetwiñizde jaña sırtqı siltemeler bar eken. Özdiktik «spam» jasalwınan qorğanw üşin,
+tömendegi qarapaýım qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-badlogin' => 'Qupïya sözdi özdiktik qïratwdan qorğanw üşin,
+tömendegi qarapaýım qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-createaccount' => 'Jaña tirkelgi özdiktik jasalwınan qorğanw üşin, tömendegi qarapaýım qosındılawdı
+şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-createaccount-fail' => "Kwälandırw kodı durıs emes nemese joq.",
+       'captcha-create' => 'Jaña betti bastaw üşin, tömendegi qarapaýım qosındılawdı şeşiñiz de,
+nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captchahelp-title'          => 'CAPTCHA anıqtaması',
+       'captchahelp-cookies-needed' => "Bul jumıs istew üşin, şolğışıñızda  «cookies»  degendi endiriñiz.",
+       'captchahelp-text'           => "Özdiktik quraldarı bar «spammerler», barşadan jiberilgen xabardı qabıldaýtın, bul wïkï sïyaqtı, veb-toraptarğa siltemelerimen jïi jawdıradı. Osındaý «spam» siltemelerin alastaw bolğanda da, bul mändi ıza keltiredi.
+
+Keýde, äsirese betke jaña veb siltemesin qosqanda, wïkï öñi özgergen ne qïsaýğan mätindi körsetip jäne sol sözderdi engizw surawı mümkin. Bul tapsırıs özdik türde atqarw öte qïın, sondıqtan bul ïmandı adam köpşiligine kedergi bolmaýdı, biraq «spammerlerdi» jäne buzaqı botpen basqa şabwıl jasağandardı toqtatadı.
+
+Ökinişke oraý, bul körwi tömendegen, nemese mätin ne dawıs negizindegi şolğıştı qoldanatın paýdalanwşığa ıñğaýsızdıq keltirwge mümkin. Osı qazir bizde dıbıstı balama joq. Eger bul adal jazwıñızğa kedergilese, torap baqılawşılarına qatınasıñız.
+
+Bul jumıstı istew üşin şolğışıñızda «cookies» degendi endirw qajet.
+
+Bet öñdewine qaýtw barw üşin «Artqa» degen tüýmesin basıñız."
+);
+
+/** Korean (한국어)
+ * @author Klutzy
+ */
+$messages['ko'] = array(
+       'captcha-edit'               => '글을 편집하기 위해서는, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captcha-addurl'             => '편집 내용에 다른 웹 사이트 링크가 포함되어 있습니다. 자동 스팸을 막기 위해, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captcha-badlogin'           => '계정 암호 해킹을 막기 위해, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captcha-createaccount'      => '자동 가입을 막기 위해, 아래 문제의 답을 적어야만 가입이 가능합니다([[Special:Captcha/help|관련 도움말]]):',
+       'captcha-createaccount-fail' => '입력값이 잘못되었거나 없습니다.',
+       'captcha-create'             => '문서를 만들기 위해서는, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captchahelp-title'          => 'Captcha 도움말',
+       'captchahelp-cookies-needed' => '정상적으로 작동하려면 웹 브라우저의 쿠키 사용이 활성화되어있어야 합니다.',
+       'captchahelp-text'           => "이곳의 위키와 같이 사용자들의 공개적인 참여가 가능한 웹 사이트에서는, 자동 프로그램이 스팸을 뿌리는 경우가 있습니다. 물론 이러한 스팸은 제거할 수는 있지만 귀찮은 작업이 늘어납니다.
+
+이러한 스팸을 방지하기 위해서, 이곳 위키의 문서에 웹 사이트 주소를 추가하거나 하는 등의 행동을 할 경우에는, 비틀린 글자가 들어있는 그림을 보여주고 그 그림의 글자를 입력해 달라고 하는 경우가 있습니다. 이 글자 입력 작업은 자동 프로그램을 만들기가 힘들기 때문에, 스팸을 효과적으로 막으면서 일반 사용자를 막지 않을 수 있습니다.
+
+웹 브라우저에서 그림을 완벽하게 표시할 수 없거나, 또는 그림이 나오지 않는 텍스트 방식이나 음성 합성 방식 웹 브라우저를 사용하는 경우에는 이러한 입력이 불가능합니다. 아짂가지는 이런 경우에 대한 대안책이 없습니다. 이 경우 사이트 관리자에게 도움을 요청해주세요.
+
+이전의 편집창으로 돌아가려면 웹 브라우저의 '뒤로' 버튼을 눌러 주세요.",
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# 문법은 다음과 같습니다:
+#  * "#"로 시작하는 줄은 주석입니다.
+#  * 빈 줄이 아닌 줄은 정규식으로, URL의 호스트만을 검사합니다.
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['la'] = array(
+       'captcha-edit'                => 'Ad hanc paginam recensendum, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-addurl'              => 'Emendatione tua insunt nexus externi; ut spam automaticum vitemus, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-badlogin'             => 'Ut vitemus ne tesserae frangantur, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-createaccount'       => 'Ut creationem rationum automaticam vitemus, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-createaccount-fail'  => 'Codex affirmationis aut non scriptus est aut male.',
+       'captcha-create'              => 'Ad paginam creandum, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captchahelp-title'           => 'Captcha auxilium',
+);
+
+/** Luxembourgish (Lëtzebuergesch)
+ * @author Robby
+ * @author Siebrand
+ */
+$messages['lb'] = array(
+       'captcha-edit'               => "Fir dës Säit ze änneren, léist w.e.g. déi folgend Rechenaufgab a gitt d'Resultat an d'Këscht ënnendrënner an ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captcha-addurl'             => 'An ärer Ännerung sinn nei extern Linken. Fir eis virun automatiséiertem Spamming ze schütze froe mir iech fir déi folgend einfach  Rechenaufgab ze léisen an d\'Resultat an d\'Feld ënnen anzedroën. Klickt duerno w.e.g. nach eng Kéier op "Säit ofspäicheren" [[Special:Captcha/help|méi Informatiounen]].',
+       'captcha-badlogin'           => "Fir eis géint automatescht Hacke vu Passwierder ze schützen, léist w.e.g. déi einfach Additioun hei ënnendrënner an tippt d'Äntwert an d'Këscht ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captcha-createaccount'      => "Fir eis géint d'autamescht Uleeë vu Benotzerkonten ze schützen, léist w.e.g. déi einfach Additioun hei ënnendrënner an tippt d'Äntwert an d'Këscht ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captcha-createaccount-fail' => 'Falschen oder keen Konfirmatiouns-Code.',
+       'captcha-create'             => "Fir eng Nei Säit unzleeën, léist w.e.g. déi einfach Additioun hei ënnendrënner an tippt d'Äntwert an d'Këscht ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captchahelp-title'          => 'Captcha-Hëllef',
+       'captchahelp-cookies-needed' => 'Dir musst Cookieën an ärem Browser erlaben fir dat dëst fonktionéiert.',
+       'captchahelp-text'           => "Websiten, déi jidferengem et erlaben Ännerunge virzehuelen, sou wéi op dëser wiki, ginn dacks vu sougenannte Spammer mëssbraucht, déi automatiséiert hir Linkën op vill Internetsitë setzen. Esou Spam-Linkë kënne wuel geläscht ginn, mee si sinn trotzdem e grousst Iergernëss.
+
+Heiandsdo, besonnesch wann nei Internet-Linkën op eng Säit derbäigesat ginn, weist dës Wiki iech e Bild mat farwegëm oder verzerrtëm Text a freet iech fir déi gewise Wierder anzetipppen. Well dëst eng Aufgab ass déi schwéier ze automatiséieren ass, erlaabt dëst dat Mënschen hir Ännerunge kënnen agi wärend déi meescht Spammer an aner Roboter-Attacken kënnen ofgewiert ginn.
+
+Leider kann dëst zu Schwierigkeete féiere fir Persounen déi net esou gutt gesinn oder déi text-baséiert oder sprooch-baséiert Browser benotzen. Zu dësem Zäitpunkt hu mir leider keng audio-Alternativ zu eiser Verfügung. Eng Léisung ass d'Umeldung als Benotzer oder kontaktéiert een Administrateur fir Hëllef wann dëst iech onerwarter Wäis vu legitimen Editen ofhält.
+
+Dréckt op den 'Zréck' Knäppchen vun ärem Browser fir an d'Beaarbectungsfënster zréckzekommen.",
+       'captcha-addurl-whitelist'   => '   #<!-- leave this line exactly as it is --> <pre>
+#  Syntax:
+#  * Alles mat engem #-Zeechen u bis zum Enn vun däer Zeil ass eng Bemierkung
+#  * All Zeil déi net eidel ass, ass ee Regex-Fragment, dat nëmme mat Hosten bannent URLë fonktionéiert
+   #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['lo'] = array(
+       'captcha-edit'               => 'ການດັດແກ້ ຂອງ ທ່ານ ມີລິ້ງູຄ໌ພາຍນອກ. ເພື່ອ ເປັນການຊ່ອຍປ້ອງກັນ ສະແປມອັດຕະໂນມັດ, ກະລຸນາແກ້ເລກບວກ ງ່າຍໆຂ້າງລຸ່ມນີ້ ແລ້ວ ພິມຄຳຕອບໃສ່ໃນ ກັບ ([[Special:Captcha/help|more info]]):',
+       'captcha-addurl'             => 'ການດັດແກ້ຂອງທ່ານ ມີ ການກາງລິ້ງຄ໌ຫາພາຍນອກ. ເພື່ອເປັນການຊ່ອຍປ້ອງກັນ ສະແປມອັດຕະໂນມັດ ກະລຸນາ ແກ້ເລກບວກງ່າຍໆຂ້າງລຸ່ມນີ້ ແລ້ວ ພິມຜົນບວກ ໃສ່ ກັບ ([[Special:Captcha/help|ຂໍ້ມູນເພີ່ມເຕີມ]]):',
+       'captcha-createaccount'      => 'ເພື່ອປ້ອງກັນ ການສ້າງບັນຊີແບບອັດຕະໂນມັດ, ກະລຸນາ ແກ້ເລກບວກງ່າຍໆ ຂ້າງລຸ່ມ ແລ້ວ ພິມຄຳຕອບໃສ່ ກັບ ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount-fail' => "ບໍ່ຖືກ ຫຼື ບໍ່ມີລະຫັດຢືນຢັນ.",
+       'captcha-create'             => 'ກະລຸນາ ແກ້ເລກບວກງ່າຍໆລຸ່ມນີ້ ແລະ ພິມຜົນບວກໃສ່ໃນກັບ ເພື່ອ ສ້າງໜ້ານີ້ ([[Special:Captcha/help|ຂໍ້ມູນເພີ່ມເຕີມ]]):',
+);
+
+/** Lithuanian (Lietuvių)
+ * @author Matasg
+ * @author Garas
+ */
+$messages['lt'] = array(
+       'captcha-edit'               => 'Kad redaguotumėte šį straipsnį, prašome apskaičiuokite šią paprastą sumą ir įveskite atsakymą į laukelį ([[Special:Captcha/help|daugiau informacijos]]):',
+       'captcha-createaccount-fail' => 'Blogas arba nerastas patvirtinimo kodas.',
+);
+
+/** Latvian (Latviešu)
+ */
+$messages['lv'] = array(
+       'captcha-edit'               => 'Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captcha-addurl'             => 'Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captcha-createaccount'      => 'Lai pasargātos no automātiskas mēstuļošanas, Tev reģistrējoties ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captcha-createaccount-fail' => 'Nepareizs apstiprinājuma kods vai arī tas nav ievadīts.',
+       'captcha-create'             => 'Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captchahelp-text'           => "Interneta lapas, kurās iespējams pievienot tekstu, kā šajā wiki, bieži cieš no mēstuļotājiem, kuri izmanto automatizētus līdzekļus, lai pievienotu savus saites daudzās jo daudzās interneta lapās. Kaut arī šīs saites var viegli dzēst, tomēr tās ir nozīmīgs traucēklis. Reizēm, jo īpaši pievienojot jaunas interneta saites, wiki programmatūra var parādīt Tev attēlu, kurā ir krāsains vai sagrozīts teksts. Šis teksts ir jāpārraksta un to ir ļoti grūti izdarīt automātiski, tā apgrūtinot lielāko daļu mēstuļotāju, savukārt gandrīz visi parastie lietotāji to var izdarīt bez grūtībām. Diemžēl tas var apgrūtināt lietotājus, kuriem ir redzes traucējumi vai kuri izmanto teksta pārlūkus vai dzirdes pārlūkus. Šobrīd nav pieejama audio alternatīva, bet sazinies ar wiki administratoriem, ja tas liedz Tev veikt labi domātus papildinājumus. Spied pārlūka pogu \"Atpakaļ\" (''Back''), lai atgrieztos iepriekšējā lapā.",
+);
+
+$messages['nan'] = array(
+       'captcha-createaccount'      => "Ūi beh ī-hông lâng iōng ke-si chū-tōng chù-chheh koh tah kóng-kò, chhiáⁿ lí kā chhut-hiān tī ang-á lāi-bīn ê jī phah 1 piàn (thang chèng-bêng lí m̄ sī ki-khì-lâng): <br />
+([[Special:Captcha/help|Che sī siáⁿ-hòe?]])",
+       'captcha-createaccount-fail' => "Khak-jīn-bé chhò-gō· iah-sī làu-kau.",
+);
+$messages['nds'] = array(
+       'captcha-edit'                => 'In dien Text steiht en nee Lenk na buten dat Wiki. Dat hier keen automaatsch instellten Spam rinkummt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount'       => 'Dat hier nich Brukers automaatsch anleggt warrt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount-fail'  => 'Kood to’n Bestätigen is verkehrt oder fehlt.',
+       'captchahelp-title'           => 'Help to Captchas',
+       'captcha-addurl-whitelist'    => ' #<!-- leave this line exactly as it is --> <pre>
+# Op disse Siet staht de Websteden, bi de en Bruker,
+# de nich anmellt is un en ne’en Lenk in de Siet infögen deit,
+# keen Captcha utfüllen mutt.
+#
+# Syntax is disse:
+#   * Allens vun en „#“-Teken bet na’t Enn vun de Reeg is en Kommentar
+#   * All de annern Regen, de nich leddig sünd, warrt as regulären Utdruck bekeken,
+#     de för Delen vun de Domään steiht.
+
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Low German (Plattdüütsch)
+ * @author Slomox
+ * @author Siebrand
+ */
+$messages['nds'] = array(
+       'captcha-edit'               => 'In dien Text steiht en nee Lenk na buten dat Wiki. Dat hier keen automaatsch instellten Spam rinkummt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount'      => 'Dat hier nich Brukers automaatsch anleggt warrt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount-fail' => 'Kood to’n Bestätigen is verkehrt oder fehlt.',
+       'captchahelp-title'          => 'Help to Captchas',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Op disse Siet staht de Websteden, bi de en Bruker,
+# de nich anmellt is un en ne’en Lenk in de Siet infögen deit,
+# keen Captcha utfüllen mutt.
+#
+# Syntax is disse:
+#  * Allens vun en „#“-Teken bet na’t Enn vun de Reeg is en Kommentar
+#  * All de annern Regen, de nich leddig sünd, warrt as regulären Utdruck bekeken,
+#    de för Delen vun de Domään steiht.
+
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Dutch (Nederlands)
+ * @author Siebrand
+ * @author SPQRobin
+ */
+$messages['nl'] = array(
+       'captcha-edit'               => 'U wilt deze pagina bewerken. Voer alstublieft het antwoord op de onderstaande eenvoudige som in het invoervenster in ([[Special:Captcha/help|meer informatie]]):',
+       'captcha-addurl'             => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam alstublieft het antwoord op de onderstaande eenvoudige som in in het invoerveld ([[Special:Captcha/help|meer informatie]]):",
+       'captcha-badlogin'           => 'Los alstublieft de onderstaande eenvoudige som op en voer het antwoord in het invoervenster in ter bescherming tegen het automatisch kraken van wachtwoorden ([[Special:Captcha/help|meer informatie]]):',
+       'captcha-createaccount'      => 'Voer ter bescherming tegen geautomatiseerde spam het antwoord op de onderstaande eenvoudige som in het invoervenster in ([[Special:Captcha/help|meer informatie]]):',
+       'captcha-createaccount-fail' => 'De bevestigingscode ontbreekt of is onjuist.',
+       'captcha-create'             => 'U wilt een nieuwe pagina aanmaken. Voer alstublieft het antwoord op de onderstaande eenvoudige som in het invoervenster in ([[Special:Captcha/help|meer informatie]]):',
+       'captchahelp-title'          => 'Captcha-hulp',
+       'captchahelp-cookies-needed' => 'U dient in uw browser cookies ingeschakeld te hebben om dit te laten werken.',
+       'captchahelp-text'           => "Websites die vrij te bewerken zijn, zoals deze wiki, worden vaak misbruikt door spammers die er met hun programma's automatisch links op zetten naar vele websites. Hoewel deze externe links weer verwijderd kunnen worden, leveren ze wel veel hinder en administratief werk op.
+
+Soms, en in het bijzonder bij het toevoegen van externe links op pagina's, toont de wiki u een afbeelding met gekleurde of vervormde tekst en wordt u gevraagd de getoonde tekst in te voeren. Omdat dit proces lastig te automatiseren is, zijn vrijwel alleen mensen in staat dit proces succesvol te doorlopen en worden hiermee spammers en andere geautomatiseerde aanvallen geweerd.
+
+Helaas levert deze bevestiging voor gebruikers met een visuele handicap of een tekst- of spraakgebaseerde browser problemen op. Op het moment is er geen alternatief met geluid beschikbaar. Vraag alstublieft assistentie van de sitebeheerders als dit proces u verhindert een nuttige bijdrage te leveren.
+
+Klik op de knop 'terug' in uw browser om terug te gaan naar het tekstbewerkingsscherm.",
+       'captcha-addurl-whitelist'   => ' #<!-- laat deze regel zoals hij is --> <pre> 
+# De syntaxis is als volgt: 
+#   * Alle tekst vanaf het karakter "#" tot het einde van de regels wordt gezien als opmerking
+#   * Iedere niet-lege regel is een fragment van een reguliere uitdrukking die alleen van toepassing is op hosts binnen URL\'s
+ #</pre> <!-- laat deze regel zoals hij is -->',
+);
+
+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+ * @author Eirik
+ */
+$messages['nn'] = array(
+       'captcha-edit'               => 'For å endre denne sida, ver venleg og løys det enkle reknestykket nedanfor og skriv svaret i ruta ([[Special:Captcha/help|Kva er dette?]]):',
+       'captcha-addurl'             => 'Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])',
+       'captcha-badlogin'           => 'For å sikra oss mot automatisk passordtjuveri, ver venleg og skriv inn svaret på det enkle reknestykket i boksen nedanfor ([[Special:Captcha/help|meir informasjon]]):',
+       'captcha-createaccount'      => 'For å verne Wikipedia mot reklame (spam) må du skrive inn orda i biletet for å registrere ein konto. <br />([[Special:Captcha/help|Kva er dette?]])',
+       'captcha-createaccount-fail' => 'Feil eller manglande godkjenningskode.',
+       'captcha-create'             => 'For å opprette denne sida, ver venleg og løys det enkle reknestykket nedanfor og skriv svaret i ruta ([[Special:Captcha/help|Kva er dette?]]):',
+       'captchahelp-title'          => 'Captcha-hjelp',
+       'captchahelp-cookies-needed' => 'Du må ha informasjonskapslar aktivert i nettlesaren din for at dette skal verke.',
+       'captchahelp-text'           => 'Internettsider som kan verte endra av alle, som denne wikien, vert ofte misbrukte av reklameinnleggjarar (spammarar) som nyttar bottar til å poste mange lenkjer om gongen. Sjølv om slike reklamelenkjer kan verte fjerna er dei til stor irritasjon. 
+
+Nokre gonger, særleg viss du vil leggje til nye internettlenker til ei side, kan wikien vise deg eit bilete av ein farga eller ujamn tekst og be deg skrive inn orda som vert viste. Sidan det er vanskeleg å automatisere denne oppgåva, vil funksjonen sleppe dei fleste verkelege menneska gjennom, men stoppe reklamerobotar.
+
+Diverre finst det i augeblikket ikkje noko lydalternativ for brukarar med nedsett syn som brukar tekst- eller talebaserte nettlesarar. Ver venleg å kontakte administratorane viss denne funksjonen hindrar deg i å gjere skikkelege endringar. Trykk på «attende»-knappen for å kome tilbake til endringssida.',
+       'captcha-addurl-whitelist'   => '  #<!-- la denne lina vere akkurat som ho er --> <pre>  
+# Syntaksen er slik:  
+#  * Alt frå teiknet «#» til enden av lina er ein kommentar
+#  * Alle liner som ikkje er tomme er fragment av regulære uttrykk som sjekkar vertar i URL-ar
+  #</pre> <!-- la denne lina vere akkurat som ho er -->',
+);
+
+/** Norwegian (‪Norsk (bokmål)‬)
+ * @author Jon Harald Søby
+ * @author Siebrand
+ */
+$messages['no'] = array(
+       'captcha-edit'               => 'For å redigere denne artikkelen, vennligst skriv inn summen nedenfor i boksen ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-addurl'             => 'Din redigering inneholder nye eksterne lenker. For å hjelpe oss å beskytte oss mot automatisk spam, vennligst skriv inn summen av dette enkle regnestykket i boksen nedenfor ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-badlogin'           => 'For å hjelpe oss med å beskytte oss mot automatisk passordtyveri, vennligst løs det enkle regnestykket nedenfor og skriv inn svaret i bosken ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-createaccount'      => 'For å hjelpe oss med å beskytte oss mot automatisk kontoopprettelse, vennligst skriv inn summen av det enkle regnestykket i boksen nedenfor ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-createaccount-fail' => 'Ukorrekt eller manglende bekreftelseskode.',
+       'captcha-create'             => 'For å opprette siden, vennligst skriv inn summen av det enkle regnestyket i boksen nedenfor ([[Special:Captcha/help|mer informasjon]]):',
+       'captchahelp-title'          => 'Captcha-hjelp',
+       'captchahelp-cookies-needed' => 'Du må slå på informasjonskapsler for at dette skal fungere.',
+       'captchahelp-text'           => 'Internettsider som kan redigeres av alle, som denne wikien, blir ofte misbrukt av spammere som bruker roboter for å poste massive antall lenker. Selv om slike spamlenker kan fjernes er de til betydelig irritasjon.
+
+Noen ganger, særlig hvis du vil legge til nye internettlenker til en side, kan wikien vise deg et bilde av en farvet eller ujevn tekst og be deg skrive inn ordene som vises. Siden det er vanskelig å automatisere denne oppgaven, vil funksjonen slippe de fleste virkelige mennesker igjennom, men stoppe spammere.
+
+Dessverre finnes det i øyeblikket ikke noe audioalternativ for brukere med begrenset syn som som bruker tekst- eller talebaserte nettlesere. Vennlig kontakt administratorene hvis denne funksjonen forhindrer deg i å foreta legitime endringer.
+
+Trykk på «tilbake»-knappen for å komme tilbake til redigeringssiden.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Syntaksen er som følger:
+#  * Alle linjer som begynner med «#» er kommentarer
+#  * Alle linjer som ikke er blanke er fragmenter av regulære uttrykk som sjekker verter i URL-er
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Occitan (Occitan)
+ * @author Cedric31
+ */
+$messages['oc'] = array(
+       'captcha-edit'               => "Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : ([[Special:Captcha/help|Qu'es aquò?]])",
+       'captcha-addurl'             => "Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu'es aquò?]])",
+       'captcha-badlogin'           => "Per ensajar de contornar las temptativas de cracatge de senhals automatizadas per de robòts, recopiatz lo tèxt çaijós dins la boita de tèxt plaçada al dejos d'aqueste. ([[Special:Captcha/help|Mai d’entre-senhas]])",
+       'captcha-createaccount'      => 'Coma proteccion contra las creacions de compte abusivas, entratz lo resultat de l’addicion dins la boita çaijós:<br />
+([[Special:Captcha/help|mai d’informacions]])',
+       'captcha-createaccount-fail' => 'Còde de confirmacion mancant o erronèu.',
+       'captcha-create'             => "Per modificar la pagina, vos cal de resòldre l'operacion çaijós e n'inscriure lo resultat dins lo camp ([[Special:Captcha/help|Mai d'infòs]]) :",
+       'captchahelp-title'          => 'Ajuda suls Captcha',
+       'captchahelp-cookies-needed' => "Devètz aver los cookies activats dins vòstre navegaire per qu'aquò foncione.",
+       'captchahelp-text'           => "Los sites webs que permeton al mai grand nombre de participar, coma aqueste wiki, son sovent atacats per de spammers qu'utilizan d'espleches automatizas per mandar lor ligams sus de fòrça sites sulcòp. Son fòrt aisits de suprimir mas avèm francament de causas mai risolièras de far. De còps quand ajustatz de ligams novèls vèrs lo web, lo wiki pòt vos mostrar un imatge amb un tèxt coloriat o torçut e vos demandar de lo picar. Es una tasca relativament complicada d'automatizar, çò que permet de diferenciar un uman real d'un logicial automatic malvolent. Malaürosament, aqueste sistèma es pas adaptat a d'utilizaires mal-vesents o utilizant de navigaires textuals o audiò. Actualament, prepausem pas d'alternativas adaptadas. Se avètz besonh d'ajuda esitetz pas a contactar los administrators del sit. Clicatz sul boton 'precedent' de vòstre navegaire per tornar a l'editor.",
+       'captcha-addurl-whitelist'   => '#<!-- daissatz aquesta linha exactament tala coma es --> <pre> # La sintaxi es la seguenta: # * Tot caractèr seguissent "#" fins a la fin de la linha serà interpretat coma un comentari # * Tota linha non voida es un còde regex que serà utilizat unicament a l\'interior dels ligams hypertext. #</pre> <!-- daissatz aquesta linha exactament tala coma es -->',
+);
+
+/** Polish (Polski)
+ * @author Sp5uhe
+ * @author Derbeth
+ */
+$messages['pl'] = array(
+       'captcha-edit'               => 'Edytowanie tej strony jest możliwe dopiero po rozwiązaniu poniższego prostego działanie matematycznego i wpisaniu wyniku do pola obok ([[Special:Captcha/help|wyjaśnienie]]):',
+       'captcha-addurl'             => 'Dodałeś nowe linki zewnętrzne. Ze względu na ochronę przed zautomatyzowanym spamem musisz wykonać proste działanie matematyczne i wpisać wynik w pole obok ([[Special:Captcha/help|więcej informacji]]):',
+       'captcha-badlogin'           => 'Ze względu na zabezpieczenie przed automatycznym łamaniem haseł prosimy o rozwiązanie tego prostego zadania i wpisanie odwiedzi w pole obok ([[Special:Captcha/help|więcej informacji]])',
+       'captcha-createaccount'      => 'Ze względu na ochronę przed automatycznym [[wikipedia:pl:spam|spamem]], aby się zarejestrować musisz wpisać w pole poniżej wynik prostego działania matematycznego ([[Special:Captcha/help|wyjaśnienie]]):',
+       'captcha-createaccount-fail' => 'Niepoprawny kod lub brak kodu potwierdzajacego.',
+       'captcha-create'             => 'Aby utworzyć stronę wykonaj proste działanie i wpisz wynik w pole tekstowe ([[Special:Captcha/help|więcej informacji]]):',
+       'captchahelp-title'          => 'Pomoc dla ochrony antyspamowej',
+       'captchahelp-cookies-needed' => 'Musisz mieć włączone w przeglądarce ciasteczka (cookies), aby ta opcja działała.',
+       'captchahelp-text'           => 'Strony internetowe akceptujące edycje dokonywane przez każdego, jak to wiki, są często atakowane przez [[wikipedia:pl:spam|spammerów]], którzy używają automatycznych narzędzi, by dodawać linki do swoich stron. Chociaż te linki mogą być usunięte, jest to uciążliwe. 
+
+Czasami, zwłaszcza przy dodawaniu nowych linków do strony albo przy rejestracji, wiki może pokazać obrazek z kolorowym lub zniekształconym tekstem i poprosić Cię o przepisanie zamieszczonego na nim wyrazu. Może pojawić się też prośba o wpisanie wyniku prostego działania matematycznego. Ponieważ są to zadania trudne do zautomatyzowania, to zabezpieczenie pozwoli większości ludzi dokonywać edycji, powstrzymując jednocześnie większość spammerów i inne automatyczne ataki. 
+
+Niestety, może być to niewygodne dla użytkowników z wadą wzroku lub używających przeglądarek tekstowych lub głosowych. Obecnie nie mamy alternatywnego rozwiązania audio. Skontaktuj się z administratorami strony by uzyskać pomoc, jeśli nie możesz z tego powodu dokonywać prawidłowych edycji. Zwróć uwagę na to, że musisz mieć włączone ciasteczka (cookies).
+
+Wciśnij przycisk "wstecz" w swojej przeglądarce by powrócić do edycji strony.',
+       'captcha-addurl-whitelist'   => ' #<!-- nie modyfikuj tej linii --> <pre> 
+# Składnia jest następująca: 
+#   * Linie zaczynające się od znaku "#" są komentarzami
+#   * Każda linia, która nie jest pusta, jest wyrażeniem regularnym, które ma pasować do adresu serwera (fragmentu URL)
+ #</pre> <!-- nie modyfikuj tej linii -->',
+);
+
+/** Piemontèis (Piemontèis)
+ * @author Bèrto 'd Sèra
+ * @author Siebrand
+ */
+$messages['pms'] = array(
+       'captcha-edit'               => "Për fe-ie dle modìfiche ansima a st'artìcol-sì, për piasì ch'a fasa ël total ambelessì sota 
+e ch'a buta l'arzulta ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-addurl'             => "Soa modìfica a la gionta dj'anliure esterne. Për giutene a vardesse da la reclam aotomatisà, për piasì ch'a fasa ël total ambelessì sota e ch'a buta l'arzultà ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-badlogin'           => "Për giutene a vardesse da 'nt ij programa ch'a fan ciav fàosse n'aotomàtich, për piasì ch'a fasa ël total ambelessì sota e ch'a buta l'arzultà ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-createaccount'      => "Për giutene a vardesse da ij programa ch'a deurbo dij cont n'aotomàtich, për piasì ch'a fasa ël total ambelessì sota 
+e ch'a buta l'arzultà ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-createaccount-fail' => "Ël còdes ëd verìfica ò ch'a manca d'autut ò ch'a l'é pa bon.",
+       'captcha-create'             => "Për creé d'amblé sta pàgina-sì, për piasì ch'a fasa ël total ambelessì sota e ch'a buta l'arzultà 
+ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captchahelp-title'          => 'Còs é-lo mai ës captcha?',
+       'captchahelp-cookies-needed' => "Për podej dovré sossì a l'ha da manca che sò navigator (browser) a pija ij cookies.",
+       'captchahelp-text'           => "Soèns a-i riva che ij sit dla Ragnà che la gent a peul dovré për ëscrive chèich-còs, coma sta wiki-sì, a resto ambërlifà ëd reclam da màchine che a carìo soa ròba dadsà e dadlà n'aotomàtich. Për tant che sta reclam un a peula peuj gavela, a resta sempe un gran fastudi.
+
+Dle vire, dzortut quand un a caria dj'anliure esterne neuve ansime a na pàgina, la wiki a peul ësmon-je na figurin-a con dël test colora ò pura tut ëstòrt e ciameje d'arbate lòn ch'a-i é scrit andrinta. Da già ch'a l'é grama scrive un programa ch'a lo fasa, a ven che la pì gran part dla gent a-i la fa a scrive, ma la ói part dle màchine a-i la fa pa.
+
+Për maleur sossì a peul fastudié j'uetnt ch'a ës-ciàiro nen tant bin, col ch'a dòvro dij navigator mach a test ò pura dij navigator vocaj. Për adess i l'oma nen n'altërnativa disponibila ch'a fasa lese ël test a vos. Për piasì, ch'a contata j'aministrator dël sit se sossì a dovèissa mai nen lasseje carié dël test ch'a sia legitim (visadì, nen dla reclam).
+
+Ch'a-i bata ansima al boton 'andré' ant sò navigator për torné andré a l'editor dla pàgina.",
+       'captcha-addurl-whitelist'   => "  #<!-- leave this line exactly as it is --> <pre>
+# La sintassi a l'é costa:
+#  * tut lòn ch'a-i ven dapress a un caràter \"#\" (fin-a a la fin dla riga) a l'é mach ëd coment
+#  * minca riga nen veujda a l'é un frament d'espression regolar ch'as dòvra për identifiché j'adrësse dle màchine servente ant j'anliure
+  #</pre> <!-- leave this line exactly as it is -->",
+);
+
+/** Pashto (پښتو)
+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
+ */
+$messages['ps'] = array(
+       'captcha-create'             => 'ددې لپاره چې نوی ليکنه ترسره کړی، لطفاً د همدغه ساده شمېرو ځواب په ورکړ شوي چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):',
+       'captchahelp-cookies-needed' => 'ددې کړنې د ترسره کېدلو لپاره تاسو ته پکار ده چې د خپل کتنمل (browser) کوکيز (cookies) چارن کړی.',
+);
+
+$messages['pt'] = array(
+       'captcha-edit'                => 'Para editar esta página será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captcha-addurl'              => 'Sua edição inclui novas ligações externas; como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captcha-badlogin'             => 'Como prevenção contra formas automatizadas de pesquisa e descoberta de senhas, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captcha-createaccount'       => 'Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem para que possa se cadastrar:<br />
+([[Special:Captcha/help|O que é isto?]])',
+       'captcha-createaccount-fail'  => 'Código incorreto ou não preenchido.',
+       'captcha-create'              => 'Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captchahelp-title'           => 'Ajuda com o Captcha',
+       'captchahelp-cookies-needed'  => 'Você precisará ter cookies habilitados em seu navegador para que possa funcionar',
+       'captchahelp-text'            => 'Sítios abertos a inserções públicas, como é o caso deste wiki, são vulneráveis a spammers que utilizem ferramentas automatizadas para inserir seus links em diversos locais. Remover tais links posteriormente poderá ser um significativo incômodo.
+
+Algumas vezes, especialmente ao adicionar novos links externos em uma página, o sistema exibirá uma imagem com um texto colorido ou distorcido e pedirá que você digite as palavras exibidas. Uma vez que essa é uma tarefa um tanto difícil de ser automatizada, ela possibilita que vários humanos façam as suas inserções ao mesmo tempo que inibe as que forem feitas por spammers e mecanismos automatizados.
+
+Infelizmente, isso pode ser dificultoso a utilizadores com limitações visuais ou que naveguem através de  mecanismos baseados em texto ou baseados em voz. No momento não há uma alternativa em áudio. Por gentileza, contacte os administradores do sítio em casos que seja necessária a assistência de alguém para que você possa fazer as suas inserções legítimas.
+
+Pressione o botão \'voltar\' de seu navegador para retornar à página de edição.',
+);
+
+
+/** Romanian (Română)
+ * @author KlaudiuMihaila
+ */
+$messages['ro'] = array(
+       'captcha-edit'               => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-addurl'             => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-badlogin'           => 'Ca măsură de protecţie împotriva spargerii de parole, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-createaccount'      => 'Pentru a evita crearea automată de conturi, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-createaccount-fail' => 'Cod de confirmare incorect sau lipsă.',
+       'captcha-create'             => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captchahelp-title'          => 'Despre „Captcha”',
+       'captchahelp-cookies-needed' => 'Trebuie ca browserul dumneavoastră să accepte cookie-uri pentru ca aceasta să funcţioneze.',
+       'captchahelp-text'           => 'Siturile Web care acceptă postări din partea publicului, precum acest wiki, sunt de obicei abuzate de persoane care folosesc unelte automate pentru a introduce legături către multe situri. Deşi aceste legături de spam pot fi scoase, acest lucru reprezintă o muncă inconvenientă.
+
+Uneori, mai ales la adăugarea de legături web noi într-o pagină, situl wiki vă poate arăta o imagine cu un text colorat sau distorsionat şi ruga să introduceţi cuvintele arătate. Deoarece aceasta este o sarcină greu de automatizat, va permite majorităţii persoanelor reale să posteze şi va opri majoritatea atacatorilor.
+
+Din nefericire, această metodă îi poate deranja pe utilizatorii cu vedere limitată sau care folosesc browsere bazate pe text sau sunet. În acest moment nu avem o alternativă audio disponibilă. Vă rugăm, contactaţi administratorii sitului pentru asistenţă dacă metoda vă opreşte de la a face postări legitime.
+
+Va fi nevoie ca browserul folosit să suporte module cookie.',
+);
+
+/** Russian (Русский)
+ * @author Kalan
+ * @author .:Ajvol:.
+ * @author Siebrand
+ */
+$messages['ru'] = array(
+       'captcha-edit'               => 'Чтобы отредактировать страницу, решите простой пример и введите ответ в текстовое поле ([[{{ns:special}}:Captcha/help|что это?]]):',
+       'captcha-addurl'             => 'Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />
+([[{{ns:special}}:Captcha/help|Что это такое?]])',
+       'captcha-badlogin'           => 'В целях защиты от автоматического взлома пароля, пожалуйста, выполните следующее простое арифметическое действие и введите ответ в текстовое поле ниже ([[Special:Captcha/help|подробнее]]):',
+       'captcha-createaccount'      => 'В качестве меры против автоматического спама, вы должны ввести буквы, изображённые на картинке, чтобы зарегистрироваться в системе:<br />
+([[{{ns:special}}:Captcha/help|Что это такое?]])',
+       'captcha-createaccount-fail' => 'Код подтверждения отсутствует или неверен.',
+       'captcha-create'             => 'Чтобы создать страницу, решите простой пример и введите ответ в текстовое поле ([[{{ns:special}}:Captcha/help|что это?]]):',
+       'captchahelp-title'          => 'Справка о CAPTCHA',
+       'captchahelp-cookies-needed' => 'Вам нужно включить куки в браузере, чтобы эта функция заработала.',
+       'captchahelp-text'           => 'Вебсайты позволяющие добавлять и изменять своё содержимое, в том числе вики, часто становятся целью спамеров, использующих программы для автоматического добавления ссылок. Хотя такие ссылки могут быть удалены, они являются существенной помехой.
+
+Иногда, например при добавлении на страницу новой веб-ссылки, вики может показать вам картинку с цветным или искажённым текстом и предложить ввести текст, который вы видите. Так как подобная задача трудноавтоматизируема, это даёт возможность большинству людей разместить свои изменения, в то время как большинство спамерских и вандальных программ не могут это сделать.
+
+К сожалению, подобная защита может причинить неудобства людям с ограничениями по зрению или тем, кто использует читающие браузеры. В настоящее время у нас нет звуковой альтернативы данной проверке. Пожалуйста, обратитесь за помощью к администраторам, если подобная проверка мешает вам добросовестно работать с сайтом.
+
+Нажмите кнопку «Назад» в ваше браузере, чтобы вернуться к редактированию.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Описание синтаксиса:
+#  * Всё, начиная с символа "#" и до конца строки считается комментарием
+#  * Каждая непустая строка считается фрагментом регулярного выражения соответствующего имени узла в URL
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Yakut (Саха тыла)
+ * @author HalanTul
+ */
+$messages['sah'] = array(
+       'captcha-edit'               => 'Сирэйи уларытыаххын баҕардаххына, манна баар примеры суоттаа уонна эппиэтин аналлаах сиргэ суруй ([[{{ns:special}}:Captcha/help|сиһилии]]):',
+       'captcha-addurl'             => 'Тас саайка ыйынньык туруорбуккун; спаамтан көмүскэнэр соруктаах суолу толор - манна баар буукубалары хатылаа: <br />
+([[{{ns:special}}:Captcha/help|Сиһилии]])',
+       'captcha-badlogin'           => 'Киирии тылы аптамаат алдьаппатын туһугар оҥоһуллубут харыстыыр дьайыыны толор, манна баар примеры суоттаа уонна эппиэтин анал сиргэ суруй ([[Special:Captcha/help|сиһилии]]):',
+       'captcha-createaccount'      => 'Бэлиэтэнэргэр аптамаатынан алдьатыыттан харыстыыр соруктаах дьайыыны оҥор, манна баар буукубалары анал сиргэ киллэр:<br />
+([[{{ns:special}}:Captcha/help|Сиһилии]])',
+       'captcha-createaccount-fail' => 'Бигэргэтии куода суох эбэтэр атын.',
+       'captcha-create'             => 'Сирэйи оҥорорго бу примеры суоттаа ([[{{ns:special}}:Captcha/help|сиһилии]]):',
+       'captchahelp-title'          => 'Captcha көмөтө',
+       'captchahelp-cookies-needed' => 'Бу дьайыы үлэлиирин курдук браузергар куукины холбоо.',
+);
+
+/** Scots (Scots)
+ * @author OchAyeTheNoo
+ */
+$messages['sco'] = array(
+       'captcha-edit' => 'Tae edit this airticle, please dae the eisy sum ablo an put the answer in the box ([[Special:Captcha/help|mair info]])',
+);
+
+/** Slovak (Slovenčina)
+ * @author Helix84
+ * @author Robbot
+ */
+$messages['sk'] = array(
+       'captcha-edit'               => 'Aby ste mohli upravovať tento článok, vyriešte prosím tento jednoduchý súčet a napíšte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',
+       'captcha-addurl'             => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',
+       'captcha-badlogin'           => 'Ako ochranu proti automatizovanému lámaniu hesiel, prosím vyriešte nasledujúci súčet a zadajte ho do poľa pre odpoveď ([[Special:Captcha/help|viac informácií]]):',
+       'captcha-createaccount'      => 'Kvôli ochrane proti automatizovanému spamu je potrebné napísať slová zobrazené na tomto obrázku, až potom bude vytvorený nový účet:
+<br />([[Special:Captcha/help|Čo je toto?]])',
+       'captcha-createaccount-fail' => 'Nesprávny alebo chýbajúci potvrdzovací kód.',
+       'captcha-create'             => 'Aby ste mohli vytvoriť túto stránku, vyriešte prosím tento jednoduchý súčet a napíšte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',
+       'captchahelp-title'          => 'Pomocník ku captcha',
+       'captchahelp-cookies-needed' => 'Aby toto fungovalo, budete si musieť v prehliadači zapnúť koláčiky (cookies).',
+       'captchahelp-text'           => 'Webstránky prijímajúce príspevky od verejnosti ako táto wiki sú často cieľom zneužitia spammermi, ktorí používajú automatizované nástroje na to, aby svoje odkazy umiestnili na množstvo stránok. Hoci je možné tieto odkazy odstrániť, zbytočne to zaťažuje používateľov.
+
+Niekedy, obzvlášť keď pridávate webové odkazy k článkom, wiki vám môže zobraziť obrázok so zafarbeným alebo pokriveným textom a požiadať Vás o prepísanie zobrazených slov. Keďže takúto úlohu je ťažké zautomatizovať a umožní skutočným ľuďom poslať svoje príspevky, zastaví to väčšinu spammerov a iných robotických útočníkov.
+
+Naneštastie, môže to byť prekážkou pre používateľov so zrakovým postihnutím alebo tých, ktorí používajú textové alebo hovoriace prehliadače. Momentálne nemáme dostupnú audio zvukovú alternatívu. Kontaktujte prosím správcov stránok, ak vám to neočakávane komplikuje umiestňovanie oprávnených príspevkov.
+
+Stlačením tlačidla „späť“ vo vašom prehliadači sa vrátite do editora stránky.',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre> 
+# Syntax je nasledovná: 
+#   * Všetko od znaku „#“ do konca riadka je komentár
+#   * Každý neprázdny riadok je fragment regulárneho výrazu, ktorého zhody budú iba stroje v rámci URL
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Slovenian (Slovenščina)
+ */
+$messages['sl'] = array(
+       'captcha-edit'               => 'Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])',
+       'captcha-addurl'             => 'Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])',
+       'captcha-createaccount'      => 'Za registracijo je zaradi zaščite pred neželenimi reklamnimi sporočili treba vpisati prikazane besede: <br />([[{{ns:special}}:Captcha|Kaj je to?]])',
+       'captcha-createaccount-fail' => 'Nepravilna ali manjkajoča potrditvena koda.',
+       'captcha-create'             => 'Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])',
+       'captchahelp-title'          => 'Pomoč za captcha',
+       'captchahelp-text'           => "Spletne strani, ki omogočajo objavljanje širši javnosti, kot na primer ta wiki, pogosto zlorabljajo spamerji, ki za objavo svojih povezav na mnogih straneh uporabljajo avtomatizirana orodja. Čeprav se te neželene povezave da odstraniti, so precejšnja nadloga.
+
+Včasih, zlasti pri dodajanju novih spletnih povezav na stran, vam bo morda wiki prikazal sliko obarvanega ali popačenega besedila in zahteval vpis prikazanih besed. Ker je to opravilo težko avtomatizirati, bo s tem večini ljudi objavljanje dovoljeno, spamerji in druge robotski napadalci pa bodo ustavljeni.
+
+Žal lahko to povzroči nevšečnosti uporabnikom s slabim vidom in tistim, ki uporabljajo besedilne ali govorne brskalnike. Glasovna možnost trenutno še ni na razpolago. Če vam to nepričakovano preprečuje legitimno objavo, se, prosimo, obrnite na administratorje spletišča.
+
+Za vrnitev v urejevalnik izberite gumb 'nazaj' vašega brskalnika.",
+);
+
+/** Albanian (Shqip)
+ */
+$messages['sq'] = array(
+       'captcha-edit'               => 'Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])',
+       'captcha-addurl'             => 'Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])',
+       'captcha-createaccount'      => 'Për mbrojtje kundër regjistrimeve automatike duhet të zgjidhni ekuacionin e mëposhtëm para se të hapni llogarinë:<br />([[Special:Captcha|Çfarë është kjo?]])',
+       'captcha-createaccount-fail' => 'Mesazhi që duhej shtypur mungon ose nuk është shtypur siç duhet.',
+       'captcha-create'             => 'Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])',
+       'captchahelp-title'          => 'Ndihmë rreth sistemit "Captcha"',
+       'captchahelp-text'           => 'Faqet e rrjetit që pranojnë shkrime nga publiku, siç është edhe kjo wiki, shpesh abuzohen nga njerëz që duan të përfitojnë duke reklamuar ose promovuar lidhjet e tyre. Këto lloj abuzimesh mund të hiqen kollaj por janë një bezdi dhe shpenzim kohe i papranueshëm.
+
+Ndonjëherë, sidomos kur po hapni një llogari të re apo kur po shtoni lidhje të reja nëpërmjet redaktimit tuaj, sistemi mund t\'ju shfaqi një figurë që përmban fjalë me gërma ose numra të shtrembruara ose me ngjyra të ndryshme të cilat ju duhet të shtypni para se të mund të kryeni veprimin në fjalë. Kjo bëhet pasi është shumë e vështirë për një robot ose mjet automatik të kryejë të njëjtën punë. Kështu mund të dallohet nëse jeni me të vërtetë një njeri apo një robot. Ky lloj sistemi s\'mund të ndalojë tërë abuzimet por ndalon një pjesë të mirë të tyre, sidomos ato që janë automatike dhe të shumta në numër.
+
+Fatkeqësisht ky lloj sistemi mund të bezdisi përdoruesit me pamje të kufizuar ose ata që përdorin mjete teksti ose shfletues leximi me zë. Tani për tani nuk kemi mundësi për të ofruar një sistem me zë në vend të figurave. Ju lutem lidhuni me administruesit nëse ky sistem po ju ndalon të jepni kontribute të vlefshme.
+
+Shtypni butonin "prapa" ("back") të shfletuesit tuaj për tu kthyer tek faqja e mëparshme.',
+);
+
+/** Seeltersk (Seeltersk)
+ * @author Pyt
+ */
+$messages['stq'] = array(
+       'captcha-edit'               => 'Tou Beoarbaidenge fon ju Siede löös ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captcha-addurl'             => 'Dien Beoarbaidenge änthaalt näie externe Ferbiendengen. Toun Schuts foar automatisierde Spammenge löös ju ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien. Klik dan fonnäien ap „Siede spiekerje“ [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captcha-badlogin'           => 'Toun Schuts foar ne Kompromittierenge fon dien Benutserkonto löös ju ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]]:',
+       'captcha-createaccount'      => 'Toun Schuts foar automatisierden Anloage fon Benutserkonten löös ju ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captcha-createaccount-fail' => 'Falske of failjende Bestäätigengscode.',
+       'captcha-create'             => 'Uum disse Siede tou moakjen, löös juu ätterfoulgjende Reekenapgoawe ap un dräch dät Resultoat in dät Fäild hier unner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captchahelp-title'          => 'Captcha-Hälpe',
+       'captchahelp-cookies-needed' => "'''Wichtige Waiwiesenge:''' Der mouten Cookies in dän Browser ferlööwed weese.",
+       'captchahelp-text'           => 'Internetboode, do der foar Biedraage fon praktisk älkuneen eepen sunt - so as dät {{SITENAME}}-Wiki — wäide oafte fon Spammere misbruukt, do hiere Ferbiendengen automatisk ap fuul Websieden platzierje. Disse Spam-Ferbiendengen konnen wier wächhoald wäide, man jo sunt n groot Ferträit.
+
+In fuul Falle, besunners bie dät Bietouföigjen fon näie Webferbiendengen tou ne Siede, kon dät foarkuume, dät dit Wiki ne Bielde mäd n faawigen un fertroalden Text anwiest un deertou apfoardert, do anwiesde Woude ientoutippen. Deer sun Apgoawe man stuur automatisk ouhonneld wäide kon, wäide deertruch do maaste Spammere, do der mäd automatiske Reewen oarbaidje, stopped, wierjuun moanskelke Benutsere hieren Biedraach seende konnen.
+
+Spietelk genouch kon dät tou Meelasje foar Persoone fiere, do der minner goud sjo konnen of text- of sproakbasierde Browsere ferweende. Ne Löösenge is ju reguläre Anmäldenge as Benutser. Die „Tourääch“-Knoop fon dän Browser fiert tourääch in dät Beoarbaidengsfinster.',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre>
+#  Syntax:
+#   * Alles fon n #-Teeken bit tou dän Eend fon ju Riege is n Kommentoar
+#   * Älke nit-loose Riege is n Regex-Fragment, dät juunuur den Hostnoome fon ne URL wröiged wäd
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['su'] = array(
+       'captcha-edit'                => 'Pikeun ngédit artikel ieu, mangga eusian itungan di handap ieu ([[Special:Captcha/help|émbaran lengkep]]):',
+       'captcha-addurl'              => 'Éditan anjeun ngawengku tumbu kaluar anyar. Pikeun nyegah spam, mangga eusian itungan di handap ieu [[Special:Captcha/help|émbaran lengkep]]):',
+       'captcha-createaccount'       => 'Pikeun nyegah dijieunna rekening sacara otomatis, mangga eusian itungan di handap ieu ([[Special:Captcha/help|émbaran lengkep]]):',
+       'captcha-createaccount-fail'  => 'Sandi konfirmasina salah atawa can dieusian.',
+       'captcha-create'              => 'Pikeun nyieun kacana, mangga eusian itungan di handap ieu ([[Special:Captcha/help|émbaran lengkep]]):',
+       'captchahelp-title'           => 'Pitulung Captcha',
+       'captchahelp-text'            => 'Ramatloka nu nampa tulisan ti masarakat umum kawas ieu wiki mindeng diganggu ku spammer nu maké pakakas otomatis pikeun midangkeun tumbu-tumbuna ka loba loka. Najan tumbu spam ieu bisa dihapus, ari loba-loba teuing mah matak nyapékeun.
+
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that\'s hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.
+
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.
+
+You will need to have cookies enabled in your browser for this to work.
+
+Hit the \'back\' button in your browser to return to the page editor.',
+);
+
+$messages['sv'] = array(
+       'captcha-edit' => 'För att redigera den här sidan måste du först skriva svaret på följande
+räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-addurl' => 'Din ändring lägger till nya externa länkar i texten. För att skydda wikin mot
+automatisk spam måste du skriva svaret på följande räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-badlogin' => 'För att skydda mot wikin mot automatiserad lösenordsknäckning måste du skriva
+svaret på följande räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-createaccount' => 'För att skydda wikin mot automatiskt skapade användarkonton måste du
+skriva svaret på följande räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-createaccount-fail' => "Bekräftelsekoden är felaktig eller saknas.",
+       'captcha-create' => 'För att skapa den här sidan måste du skriva svaret på följande räkneuppgift
+i rutan ([[Special:Captcha/help|mer information]]):',
+       'captchahelp-title'          => 'Captchahjälp',
+       'captchahelp-cookies-needed' => "Du måste ha cookies aktiverade i din webbläsare för att det här ska fungera.",
+       'captchahelp-text'           => "Webbplatser som tillåter inlägg från allmänheten, som den här wikin gör, kan
+missbrukas av spammare. De använder ofta automatiserade verktyg för att lägga till länkar på många webbsajter. Även om
+dessa spamlänkar kan tas bort så är de till stort besvär.
+
+Ibland, speciellt då du lägger till nya externa länkar på en sida, visar wikin en bild på en färgad eller förvriden text
+och ber dig skriva texten som visas. Den uppgiften är svår att automatisera, men oftast lätt för en människa att utföra.
+På så sätt stoppas spammare och andra robotattacker, medan riktiga mäniskor kan göra sina redigeringar.
+
+Tyvärr kan det här orsaka problem för användare med nedsatt syn eller som använder text- eller talbaserade webbläsare.
+För tillfället finns inga ljudbaserade alternativ tillgängliga. Om det här hindrar dig från att göra legitima ändringar
+kan du be någon av administratörerna om hjälp.
+
+Tryck på bakåtknappen i din webbläsare för att gå tillbaks till sidredigeringsläget.",
+       'captcha-addurl-whitelist' => '
+ #<!-- leave this line exactly as it is --> <pre>
+# Syntaxen är följande:
+#   * Allting från ett "#" till slutet av en rad är en kommentar
+#   * Varje icketom rad är ett reguljärt uttryck som matchar domänen i en URL
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Telugu (తెలుగు)
+ * @author Mpradeep
+ */
+$messages['te'] = array(
+       'captcha-edit'               => 'ఈ వ్యాసాన్ని దిద్దుబాటు చేయడానికి కింది ఇచ్చిన సమీకరణం విలువను పక్కనున్న పెట్టెలో టైపు చెయ్యాలి ([[ప్రత్యేక:Captcha/help|ఏమిటిది?]]):',
+       'captcha-addurl'             => 'మీ దిద్దుబాటులో కొత్త బయటి లింకులు ఉన్నాయి. ఆటోమేటెడ్ స్పాము నుండి రక్షించేందుకు గాను, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captcha-badlogin'           => 'పాసువోర్డును బాట్ల ద్వారా తెలుసుకోకుండా ఉండేందుకు, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captcha-createaccount'      => 'బాట్ల ద్వారా ఖాతాలను సృష్టించకుండా నిరోధించటానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captcha-createaccount-fail' => 'దృవీకరించుకోవడానికి విలువ ఇవ్వలేదు లేదా దానిని తప్పుగా ఇచ్చారు.',
+       'captcha-create'             => 'కొత్తపేజీని సృష్టించడానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captchahelp-title'          => 'ఆమకవేప సహాయం',
+       'captchahelp-cookies-needed' => 'ఇది పని చెయ్యాలంటే మీ బ్రౌజరులో కూకీలు సశక్తమై ఉండాలి.',
+       'captchahelp-text'           => "''ఆమకవేప'' అంటే '''ఆ'''టోమాటిక్ గా '''మ'''నుష్యులను, '''కం'''ప్యూటర్లను '''వే'''రుచేసే '''ప'''రీక్ష అని అర్థం.
+
+ప్రజలనుండి రచనలను స్వీకరించే ఈ వికీ వంటి వెబ్‌సైట్లు, ఆటోమాటిక్ ప్రోగ్రాములతో తమ స్వంత లింకులను చేర్చే స్పాముష్కరుల దాడులకు గురవడం తరచూ జరుగుతూ ఉంటుంది. ఆ లింకులను తీసేయడం పెద్ద విషయం కాకపోయినప్పటికీ, అవి తలనెప్పి అనేది మాత్రం నిజం.
+
+కొన్నిసార్లు, ముఖ్యంగా ఏదైనా పేజీ నుండి బయటకు లింకులు ఇచ్చేటపుడు, వంకర్లు తిరిగిపోయి ఉన్న పదాల బొమ్మను చూపించి ఆ పదాన్ని టైపు చెయ్యమని వికీ మిమ్మల్ని అడగవచ్చు. దీన్ని ఆటోమాటిక్ టూల్సుతో చెయ్యడం చాలా కష్టం కాబట్టి, స్పాము జిత్తులు చెల్లవు; మనుష్యులు మాత్రం మామూలుగానే చెయ్యగలరు. 
+
+దురదృష్టవశాత్తూ, చూపు సరిగా లేనివారికి, టెక్స్టు బ్రౌజర్లు మాత్రమే వాడేవారికి ఇది అసౌకర్యం కలిగిస్తుంది. ప్రస్తుతానికి శబ్దం వినిపించే వెసులుబాటు మాకు లేదు. మీరు రచనలు చెయ్యకుండా ఇది అడ్డుపడుతుంటే, సహాయం కోసం సైటు నిర్వాహకుణ్ణి సంప్రదించండి.
+
+మీ బ్రౌజర్లోని బ్యాక్(back) మీటను నొక్కి ఇంతకు ముందరి పేజీకి వెళ్ళండి.",
+       'captcha-addurl-whitelist'   => '  #<!-- ఈ వాఖ్యాన్ని మొత్తం ఉన్నదున్నట్లు ఇలాగే వదిలేయండి --> <pre>
+# ఇక్కడ రాయాల్సిన విధానం ఇదీ:
+#  * "#" అనే అక్ధరం తరువా నుండి ఆ వాఖ్యం చివరివరకూ ఒక కామెంటు
+#  * ఖాళీగా లేని ప్రతీ లైను ఒక regex భాగము, ఇవి పేజీలో ఉన్న URLల్ల యొక్క హోష్టుతో మాత్రమే సరిచూడబడుతుంది
+  #</pre> <!-- ఈ వాఖ్యాన్ని మొత్తం ఉన్నదున్నట్లు ఇలాగే వదిలేయండి -->',
+);
+
+/** Turkish (Türkçe)
+ * @author SPQRobin
+ */
+$messages['tr'] = array(
+       'captcha-createaccount'      => 'Otomatik spama karşı bir koruma olarak, hesabınızı kaydetmek için bu resimde gözüken kelimeleri tuşlamanız gerekmektedir ([[Special:Captcha/help|Bu nedir?]]):',
+       'captcha-createaccount-fail' => 'Hatalı ya da eksik onay kodu.',
+       'captchahelp-text'           => "{{SITENAME}} gibi dışarıdan katılıma izin veren internet siteleri, pek çok siteye bağlantılar yaratan otomatik araçlarını çalıştıran ''spam''cilerin saldırılarına sıklıkla maruz kalırlar. Bu spam nitelikli bağlantılar silinebilir, fakat bu temizlik önemli bir sıkıntı yaratacaktır.
+
+Bazen, özellikle bir başka internet sitesine bağ eklerken, bozulmuş ve renklendirilmiş harflerden oluşan bir resim gösterilebilir ve sizden bu harfleri kutucuğa girmenizi istenir. Bu, otomatizasyonu oldukça zor bir iş olduğu için, gerçek insanlar bu işlemi yerine getirebilirken, spam yapmaya yarayan araçlar bunu yapmakta zorlanacaklardır.
+
+Ne var ki bu durum, görme sorunları yaşayan kişiler ve salt yazı-tabanlı veya salt ses tabanlı internet tarayıcı programları kullanan kimseler için rahatsızlık yaratmaktadır. Ne yazık ki, şu an için sesli bir alternatifimiz bulunmamaktadır. Şayet bu sizin yeni hesap açmanızı engelliyorsa, yardım için site yöneticilerinden yardım isteyiniz.
+
+Sayfa düzenleyiciye dönmek için tarayıcınızın 'geri' tuşuna basınız.",
+);
+
+$messages['uk'] = array(
+       'captchahelp-text'           => "Вікіпедія застосовує техніку розрізнення людей від комп'ютерів, яка використовує розпізнавання образів, для захисту від  комп'ютерних  шкідливих програм, які автоматично реєструються  (найчастіше спамлять у статтях).
+
+Для реєстрації у Вікіпедії та іноді й при редагуванні статей користувачеві потрібно ввести вказану контрольну послідовність символів, і яку вони, будучи людьми, а не комп'ютерними програмами, можуть легко розпізнати.
+
+You will need to have cookies enabled in your browser for this to work.
+
+Hit the 'back' button in your browser to return to the page editor.",
+       'captcha-createaccount-fail' => 'Невірний або відсутній код підтвердження.',
+);
+
+/** Vietnamese (Tiếng Việt)
+ * @author Vinhtantran
+ * @author Minh Nguyen
+ */
+$messages['vi'] = array(
+       'captcha-edit'               => 'Để sửa đổi bài viết này, xin hãy giải phép cộng đơn giản dưới đây và gõ câu trả lời
+vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-addurl'             => 'Sửa đổi của bạn có chứa các liên kết ra bên ngoài. Để giúp tránh spam tự động, xin hãy giải phép toán đơn giản ở dưới và gõ kết quả vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-badlogin'           => 'Để giúp tránh hành động bẻ mật khẩu tự động, xin hãy giải phép cộng
+đơn giản ở dưới và gõ kết quả vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-createaccount'      => 'Để giúp tránh việc tạo tài khoản tự động, xin hãy giải phép cộng
+đơn giản ở dưới và gõ kết quả vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-createaccount-fail' => 'Thiếu mã xác nhận hoặc mã xác nhận sai.',
+       'captcha-create'             => 'Để tạo mới trang, xin hãy giải phép cộng đơn giản ở dưới và gõ
+câu trả lời vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captchahelp-title'          => 'Trợ giúp Captcha',
+       'captchahelp-cookies-needed' => 'Bạn sẽ cần phải bật cookie trong trình duyệt của bạn để chức năng này hoạt động',
+       'captchahelp-text'           => '
+Những website cho phép bất kỳ ai cũng có thể gửi thông tin như wiki thường bị các tay spam lạm dụng dùng công cụ tự động gửi các liên kết của họ tới rất nhiều website khác. Tuy chúng ta có thể xóa các liên kết này khỏi trang, chúng vẫn gây nhiều phiền toái.
+
+Đôi khi, nhất là khi bạn bổ sung liên kết mới vào trang, wiki có thể hiển thị một hình có chữ dạng màu mè và méo mó rồi yêu cầu bạn gõ lại các chữ trong hình này. Do các phần mềm tự động khó đọc những hình này, nên mọi người bình thường có thể tiếp tục gửi thông tin, đồng thời chặn được các spam và robot phá hoại.
+
+Tuy vậy, tính năng này có thể bất tiện đối với những độc giả có thị giác yếu hay đang sử dụng trình duyệt bằng văn bản thuần hay trình duyệt bằng tiếng nói. Hiện tại chúng tôi chưa có chức năng phát âm thay thế. Xin hãy liên lạc với người quản trị trang web để được trợ giúp nếu điều này vô tình ngăn cản bạn đóng góp những bài viết tốt.
+
+Nhấn chuột vào nút “Back” của trình duyệt để trở lại trang soạn thảo.',
+       'captcha-addurl-whitelist'   => '  #<!-- xin để dòng này đừng thay đổi --> <pre>
+# Cú pháp như sau:
+#   * Mọi thứ bắt đầu bằng ký tự “#” là lời chú thích
+#   * Mọi hàng không trắng là một đoạn biểu thức chính quy (regex) sẽ chỉ được so trùng với tên máy chủ trong URL
+  #</pre> <!-- xin để dòng này đừng thay đổi -->',
+);
+
+/** Volapük (Volapük)
+ * @author Smeira
+ * @author Malafaya
+ */
+$messages['vo'] = array(
+       'captcha-edit'               => 'Ad redakön yegedi at, dunolös, begö! saedami dono e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-addurl'             => 'Redakam olik keninükon yümis plödik nulik. Ad jelön siti ta peneds itjäfidik, dunolös, begö! saedami sököl, e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-badlogin'           => 'Ad jelön siti ta daget itjäfidik letavödas, dunolös, begö! saedami sököl e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-createaccount'      => 'Ad jelön siti ta kalijafam itjäfidik, dunolös, begö! saedami sököl e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-createaccount-fail' => 'Kot fümükama paneveräton u paseleton.',
+       'captcha-create'             => 'Ad jafön padi, dunolös saedami balugik dono e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captchahelp-title'          => 'Yuf ela Captcha',
+       'captchahelp-cookies-needed' => 'Nedol mögükön „kekilis“ bevüresodanaföme olik ad dunön atosi.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Süntag binon sökölos:
+#  * Valikos de malat: „#“ jü fin liena binon küpet
+#  * Lien no vägik alik binon brekot: „regex“, kel poleigodon te ko vöds ninü els URLs
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Walloon (Walon)
+ */
+$messages['wa'] = array(
+       'captcha-edit'               => "Dins vos candjmints i gn a des novelès hårdêyes (URL); po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captcha-addurl'             => "Dins vos candjmints i gn a des novelès hårdêyes (URL); po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captcha-createaccount'      => "Po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin po-z ahiver vosse conte, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captcha-createaccount-fail' => "Li côde d' acertinaedje est incorek ou mancant.",
+       'captcha-create'             => "Dins vos candjmints i gn a des novelès hårdêyes (URL); po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captchahelp-title'          => "Aidance passete d' acertinaedje",
+       'captchahelp-text'           => "Les waibes k' acceptèt des messaedjes do publik, come ci wiki chal, sont sovint eployîs pa des må-fjhants spameus, po pleur mete, avou des usteyes otomatikes, des loyéns di rclame viè les sites da zels.
+Bén seur, on pout todi les disfacer al mwin, mins c' est on soyant ovraedje.
+
+Adon, pa côps, copurade cwand vos radjoutez des hårdêyes a ene pådje, ou å moumint d' ahiver on novea conte sol wiki, on eployrè ene passete d' acertinaedje, dj' ô bén k' on vos mostere ene imådje avou on tecse kitoirdou eyet vs dimander di taper les mots so l' imådje. Come li ricnoxhance di ç' tecse la est målåjheye a fé otomaticmint pa on robot, çoula permete di leyî les vraiyès djins fé leus candjmints tot arestant l' plupårt des spameus et des sfwaitès atakes pa robot.
+
+Målureuzmint çoula apoite eto des målåjhminces po les cis k' ont des problinmes po vey, ou k' eployèt des betchteus e môde tecse ou båzés sol vwès. Pol moumint, nos n' avans nén ene alternative odio. S' i vs plait contactez les manaedjeus do site po d' l' aidance si çoula vos espaitche di fé vos candjmints ledjitimes.
+
+Clitchîz sol boton «En erî» di vosse betchteu waibe po rivni al pådje di dvant.",
+);
+
+/** Cantonese (粵語)
+ */
+$messages['yue'] = array(
+       'captcha-edit'               => '要編輯呢一篇文,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-addurl'             => '你編輯嘅內容裏面有新嘅URL連結;為咗避免受到自動垃圾程式的侵擾,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-badlogin'           => '為咗防止程式自動破解密碼,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount'      => '為咗防止程式自動註冊,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount-fail' => '驗證碼錯誤或者唔見咗。',
+       'captcha-create'             => '要開呢一版,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captchahelp-title'          => 'Captcha 幫助',
+       'captchahelp-cookies-needed' => '你需要開咗響瀏覽器度嘅cookies先至可以用呢樣嘢。',
+       'captchahelp-text'           => '就好似呢個wiki咁,對公眾開放編輯嘅網站係會經常受到垃圾連結騷擾。嗰啲人利用自動化垃圾程序將佢哋嘅連結張貼到好多網站。雖然呢啲連結可以被清除,但係呢啲嘢確實令人十分之討厭。
+
+有時,特別係當響一頁添加新嘅網頁連結嗰陣,呢個網站會畀你睇一幅有顏色的或者有變形文字嘅圖像,跟住要你輸入所顯示嘅文字。因為咁係難以自動完成嘅一項任務,它將允許人保存佢哋嘅編輯,同時亦阻止大多數發送垃圾郵件者同其它機械人嘅攻擊。
+
+令人遺憾嘅係,咁會令到視力唔好嘅人,或者利用基於文本或者基於聲音嘅瀏覽器用戶感到不便。而目前我哋仲未能夠提供音頻嘅選擇。如果咁樣咁啱阻止到你進行正常嘅編輯,請同管理員聯繫以獲得幫助。
+
+撳一下響瀏覽器度嘅「後退」掣返去你之前所編輯緊嘅頁面。',
+       'captcha-addurl-whitelist'   => '
+ #<!-- leave this line exactly as it is --> <pre>
+# 語法好似下面噉:
+#   * 所有由 "#" 字元之後嘅嘢到行尾係註解
+#   * 所有非空白行係一個regex部份,只係會同裏面嘅URL主機相符
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Simplified Chinese (‪中文(简体)‬)
+ */
+$messages['zh-hans'] = array(
+       'captcha-edit'               => '要编辑这篇文章,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-addurl'             => '你编辑的内容中含有一个新的URL连结;为了免受自动垃圾程式的侵扰,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-badlogin'           => '为了防止程式自动破解密码,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-createaccount'      => '为了防止程式自动注册,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-createaccount-fail' => '验证码错误或丢失。',
+       'captcha-create'             => '要创建页面,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captchahelp-title'          => 'Captcha 说明',
+       'captchahelp-cookies-needed' => '您需要开启浏览器上的cookies方可使用这个工具。',
+       'captchahelp-text'           => '像本站一样,对公众开放编辑的网站经常被垃圾连结骚扰。那些人使用自动化垃圾程序将他们的连结张贴到很多网站。虽然这些连结可以被清除,但是这些东西确实令人十分讨厌。
+
+有时,特别是当给一个页面添加新的网页连结时,本站会让你看一幅有颜色的或者有变形文字的图像,并且要你输入所显示的文字。因为这是难以自动完成的一项任务,它将允许人保存他们的编辑,同时阻止大多数发送垃圾邮件者和其他机器人的攻击。
+
+令人遗憾是,这会使得视力不好的人,或者使用基於文本或者基於声音的浏览器的用户感到不便。而目前我们还没有提供的音频的选择。如果这正好阻止你进行正常的编辑,请和管理员联系获得帮助。
+
+点击浏览器中的「後退」按钮返回你所编辑的页面。',
+       'captcha-addurl-whitelist'   => '
+ #<!-- leave this line exactly as it is --> <pre>
+# 语法像下面这样:
+#   * 所有由 "#" 字元之後嘅字元至行尾是注解
+#   * 所有非空白行是一个regex部份,只是跟在里面的URL主机相符
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Traditional Chinese (‪中文(繁體)‬)
+ */
+$messages['zh-hant'] = array(
+       'captcha-edit'               => '要編輯這篇文章,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-addurl'             => '你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-badlogin'           => '為了防止程式自動破解密碼,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount'      => '為了防止程式自動註冊,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount-fail' => '驗證碼錯誤或丟失。',
+       'captcha-create'             => '要創建頁面,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captchahelp-title'          => 'Captcha 說明',
+       'captchahelp-cookies-needed' => '您需要開啟瀏覽器上的cookies方可使用這個工具。',
+       'captchahelp-text'           => '像本站一樣,對公眾開放編輯的網站經常被垃圾連結騷擾。那些人使用自動化垃圾程序將他們的連結張貼到很多網站。雖然這些連結可以被清除,但是這些東西確實令人十分討厭。
+
+有時,特別是當給一個頁面添加新的網頁連結時,本站會讓你看一幅有顏色的或者有變形文字的圖像,並且要你輸入所顯示的文字。因為這是難以自動完成的一項任務,它將允許人保存他們的編輯,同時阻止大多數發送垃圾郵件者和其他機器人的攻擊。
+
+令人遺憾是,這會使得視力不好的人,或者使用基於文本或者基於聲音的瀏覽器的用戶感到不便。而目前我們還沒有提供的音頻的選擇。如果這正好阻止你進行正常的編輯,請和管理員聯繫獲得幫助。
+
+點擊瀏覽器中的「後退」按鈕返回你所編輯的頁面。',
+       'captcha-addurl-whitelist'   => '
+ #<!-- leave this line exactly as it is --> <pre>
+# 語法像下面這樣:
+#   * 所有由 "#" 字元之後嘅字元至行尾是註解
+#   * 所有非空白行是一個regex部份,只是跟在裏面的URL主機相符
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['de-formal'] = $messages['de'];
+$messages['kk'] = $messages['kk-cyrl'];
+$messages['kk-cn'] = $messages['kk-arab'];
+$messages['kk-kz'] = $messages['kk-cyrl'];
+$messages['kk-tr'] = $messages['kk-latn'];
+$messages['pt-br'] = $messages['pt'];
+$messages['zh'] = $messages['zh-hans'];
+$messages['zh-cn'] = $messages['zh-hans'];
+$messages['zh-hk'] = $messages['zh-hant'];
+$messages['zh-min-nan'] = $messages['nan'];
+$messages['zh-sg'] = $messages['zh-hans'];
+$messages['zh-tw'] = $messages['zh-hant'];
+$messages['zh-yue'] = $messages['yue'];
diff --git a/mediawiki/extensions/ConfirmEdit/ConfirmEdit.php b/mediawiki/extensions/ConfirmEdit/ConfirmEdit.php
new file mode 100644 (file)
index 0000000..7224f95
--- /dev/null
@@ -0,0 +1,209 @@
+<?php
+
+/**
+ * Experimental captcha plugin framework.
+ * Not intended as a real production captcha system; derived classes
+ * can extend the base to produce their fancy images in place of the
+ * text-based test output here.
+ *
+ * Copyright (C) 2005-2007 Brion Vibber <brion@wikimedia.org>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup Extensions
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+       exit;
+}
+
+global $wgExtensionFunctions, $wgGroupPermissions;
+
+$wgExtensionFunctions[] = 'confirmEditSetup';
+$wgExtensionCredits['other'][] = array(
+       'name' => 'ConfirmEdit',
+       'author' => 'Brion Vibber',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:ConfirmEdit',
+       'description' => 'Simple captcha implementation',
+);
+
+/**
+ * The 'skipcaptcha' permission key can be given out to
+ * let known-good users perform triggering actions without
+ * having to go through the captcha.
+ *
+ * By default, sysops and registered bot accounts will be
+ * able to skip, while others have to go through it.
+ */
+$wgGroupPermissions['*'            ]['skipcaptcha'] = false;
+$wgGroupPermissions['user'         ]['skipcaptcha'] = false;
+$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
+$wgGroupPermissions['bot'          ]['skipcaptcha'] = true; // registered bots
+$wgGroupPermissions['sysop'        ]['skipcaptcha'] = false;
+
+/**
+ * List of IP ranges to allow to skip the captcha, similar to the group setting:
+ * "$wgGroupPermission[...]['skipcaptcha'] = true"
+ *
+ * Specific IP addresses or CIDR-style ranges may be used,
+ * for instance:
+ * $wgCaptchaWhitelistIP = array('192.168.1.0/24', '10.1.0.0/16');
+ */
+$wgCaptchaWhitelistIP = false;
+
+global $wgCaptcha, $wgCaptchaClass, $wgCaptchaTriggers;
+$wgCaptcha = null;
+$wgCaptchaClass = 'SimpleCaptcha';
+
+/**
+ * Actions which can trigger a captcha
+ *
+ * If the 'edit' trigger is on, *every* edit will trigger the captcha.
+ * This may be useful for protecting against vandalbot attacks.
+ *
+ * If using the default 'addurl' trigger, the captcha will trigger on
+ * edits that include URLs that aren't in the current version of the page.
+ * This should catch automated linkspammers without annoying people when
+ * they make more typical edits.
+ *
+ * The captcha code should not use $wgCaptchaTriggers, but CaptchaTriggers()
+ * which also takes into account per namespace triggering.
+ */
+$wgCaptchaTriggers = array();
+$wgCaptchaTriggers['edit']          = true; // Would check on every edit
+$wgCaptchaTriggers['create']           = false; // Check on page creation.
+$wgCaptchaTriggers['addurl']        = true;  // Check on edits that add URLs
+$wgCaptchaTriggers['createaccount'] = true;  // Special:Userlogin&type=signup
+$wgCaptchaTriggers['badlogin']      = true;  // Special:Userlogin after failure
+
+/**
+ * You may wish to apply special rules for captcha triggering on some namespaces.
+ * $wgCaptchaTriggersOnNamespace[<namespace id>][<trigger>] forces an always on / 
+ * always off configuration with that trigger for the given namespace.
+ * Leave unset to use the global options ($wgCaptchaTriggers).
+ *
+ * Shall not be used with 'createaccount' (it is not checked).
+ */
+$wgCaptchaTriggersOnNamespace = array();
+
+#Example:
+#$wgCaptchaTriggersOnNamespace[NS_TALK]['create'] = false; //Allow creation of talk pages without captchas.
+#$wgCaptchaTriggersOnNamespace[NS_PROJECT]['edit'] = true; //Show captcha whenever editing Project pages.
+
+/**
+ * Indicate how to store per-session data required to match up the
+ * internal captcha data with the editor.
+ *
+ * 'CaptchaSessionStore' uses PHP's session storage, which is cookie-based
+ * and may fail for anons with cookies disabled.
+ *
+ * 'CaptchaCacheStore' uses $wgMemc, which avoids the cookie dependency
+ * but may be fragile depending on cache configuration.
+ */
+global $wgCaptchaStorageClass;
+$wgCaptchaStorageClass = 'CaptchaSessionStore';
+
+/**
+ * Number of seconds a captcha session should last in the data cache
+ * before expiring when managing through CaptchaCacheStore class.
+ *
+ * Default is a half hour.
+ */
+global $wgCaptchaSessionExpiration;
+$wgCaptchaSessionExpiration = 30 * 60;
+
+/**
+ * Number of seconds after a bad login that a captcha will be shown to
+ * that client on the login form to slow down password-guessing bots.
+ *
+ * Has no effect if 'badlogin' is disabled in $wgCaptchaTriggers or
+ * if there is not a caching engine enabled.
+ *
+ * Default is five minutes.
+ */
+global $wgCaptchaBadLoginExpiration;
+$wgCaptchaBadLoginExpiration = 5 * 60;
+
+/**
+ * Allow users who have confirmed their e-mail addresses to post
+ * URL links without being harassed by the captcha.
+ */
+global $ceAllowConfirmedEmail;
+$ceAllowConfirmedEmail = false;
+
+/**
+ * Regex to whitelist URLs to known-good sites...
+ * For instance:
+ * $wgCaptchaWhitelist = '#^https?://([a-z0-9-]+\\.)?(wikimedia|wikipedia)\.org/#i';
+ * Local admins can define a whitelist under [[MediaWiki:captcha-addurl-whitelist]]
+ */
+$wgCaptchaWhitelist = false;
+
+/**
+ * Additional regexes to check for. Use full regexes; can match things
+ * other than URLs such as junk edits.
+ *
+ * If the new version matches one and the old version doesn't,
+ * toss up the captcha screen.
+ *
+ * @fixme Add a message for local admins to add items as well.
+ */
+$wgCaptchaRegexes = array();
+
+/** Register special page */
+global $wgSpecialPages;
+$wgSpecialPages['Captcha'] = array( /*class*/'CaptchaSpecialPage', /*name*/'Captcha' );
+
+$wgConfirmEditIP = dirname( __FILE__ );
+$wgExtensionMessagesFiles['ConfirmEdit'] = "$wgConfirmEditIP/ConfirmEdit.i18n.php";
+
+if ( defined( 'MW_SUPPORTS_EDITFILTERMERGED' ) ) {
+       $wgHooks['EditFilterMerged'][] = 'ConfirmEditHooks::confirmEditMerged';
+} else {
+       $wgHooks['EditFilter'][] = 'ConfirmEditHooks::confirmEdit';
+}
+$wgHooks['UserCreateForm'][] = 'ConfirmEditHooks::injectUserCreate';
+$wgHooks['AbortNewAccount'][] = 'ConfirmEditHooks::confirmUserCreate';
+$wgHooks['LoginAuthenticateAudit'][] = 'ConfirmEditHooks::triggerUserLogin';
+$wgHooks['UserLoginForm'][] = 'ConfirmEditHooks::injectUserLogin';
+$wgHooks['AbortLogin'][] = 'ConfirmEditHooks::confirmUserLogin';
+
+$wgAutoloadClasses['ConfirmEditHooks'] 
+       = $wgAutoloadClasses['SimpleCaptcha'] 
+       = $wgAutoloadClasses['CaptchaSessionStore']
+       = $wgAutoloadClasses['CaptchaCacheStore']
+       = $wgAutoloadClasses['CaptchaSpecialPage']
+       = "$wgConfirmEditIP/ConfirmEdit_body.php";
+
+/**
+ * Set up $wgWhitelistRead
+ */
+function confirmEditSetup() {
+       global $wgGroupPermissions, $wgCaptchaTriggers;
+       if( !$wgGroupPermissions['*']['read'] && $wgCaptchaTriggers['badlogin'] ) {
+               // We need to ensure that the captcha interface is accessible
+               // so that unauthenticated users can actually get in after a
+               // mistaken password typing.
+               global $wgWhitelistRead;
+               $image = Title::makeTitle( NS_SPECIAL, 'Captcha/image' );
+               $help = Title::makeTitle( NS_SPECIAL, 'Captcha/help' );
+               $wgWhitelistRead[] = $image->getPrefixedText();
+               $wgWhitelistRead[] = $help->getPrefixedText();
+       }
+}
+
+
diff --git a/mediawiki/extensions/ConfirmEdit/ConfirmEdit_body.php b/mediawiki/extensions/ConfirmEdit/ConfirmEdit_body.php
new file mode 100644 (file)
index 0000000..1755183
--- /dev/null
@@ -0,0 +1,670 @@
+<?php
+
+class ConfirmEditHooks {
+       static function getInstance() {
+               global $wgCaptcha, $wgCaptchaClass, $wgExtensionMessagesFiles;
+               static $done = false;
+               if ( !$done ) {
+                       $done = true;
+                       wfLoadExtensionMessages( 'ConfirmEdit' );
+                       if ( isset( $wgExtensionMessagesFiles[$wgCaptchaClass] ) ) {
+                               wfLoadExtensionMessages( $wgCaptchaClass );
+                       }
+                       $wgCaptcha = new $wgCaptchaClass;
+               }
+               return $wgCaptcha;
+       }
+
+       static function confirmEdit( &$editPage, $newtext, $section ) {
+               return self::getInstance()->confirmEdit( $editPage, $newtext, $section );
+       }
+
+       static function confirmEditMerged( &$editPage, $newtext ) {
+               return self::getInstance()->confirmEditMerged( $editPage, $newtext );
+       }
+
+       static function injectUserCreate( &$template ) {
+               return self::getInstance()->injectUserCreate( $template );
+       }
+
+       static function confirmUserCreate( $u, &$message ) {
+               return self::getInstance()->confirmUserCreate( $u, $message );
+       }
+
+       static function triggerUserLogin( $user, $password, $retval ) {
+               return self::getInstance()->triggerUserLogin( $user, $password, $retval );
+       }
+
+       static function injectUserLogin( &$template ) {
+               return self::getInstance()->injectUserLogin( $template );
+       }
+
+       static function confirmUserLogin( $u, $pass, &$retval ) {
+               return self::getInstance()->confirmUserLogin( $u, $pass, $retval );
+       }
+}
+
+class CaptchaSpecialPage extends UnlistedSpecialPage {
+       function execute( $par ) {
+               $this->setHeaders();
+               $instance = ConfirmEditHooks::getInstance();
+               switch( $par ) {
+               case "image":
+                       return $instance->showImage();
+               case "help":
+               default:
+                       return $instance->showHelp();
+               }
+       }
+}
+
+
+class SimpleCaptcha {
+       function SimpleCaptcha() {
+               global $wgCaptchaStorageClass;
+               $this->storage = new $wgCaptchaStorageClass;
+       }
+       
+       /**
+        * Insert a captcha prompt into the edit form.
+        * This sample implementation generates a simple arithmetic operation;
+        * it would be easy to defeat by machine.
+        *
+        * Override this!
+        *
+        * @return string HTML
+        */
+       function getForm() {
+               $a = mt_rand(0, 100);
+               $b = mt_rand(0, 10);
+               $op = mt_rand(0, 1) ? '+' : '-';
+
+               $test = "$a $op $b";
+               $answer = ($op == '+') ? ($a + $b) : ($a - $b);
+
+               $index = $this->storeCaptcha( array( 'answer' => $answer ) );
+
+               return "<p><label for=\"wpCaptchaWord\">$test</label> = " .
+                       wfElement( 'input', array(
+                               'name' => 'wpCaptchaWord',
+                               'id'   => 'wpCaptchaWord',
+                               'tabindex' => 1 ) ) . // tab in before the edit textarea
+                       "</p>\n" .
+                       wfElement( 'input', array(
+                               'type'  => 'hidden',
+                               'name'  => 'wpCaptchaId',
+                               'id'    => 'wpCaptchaId',
+                               'value' => $index ) );
+       }
+
+       /**
+        * Insert the captcha prompt into an edit form.
+        * @param OutputPage $out
+        */
+       function editCallback( &$out ) {
+               $out->addWikiText( $this->getMessage( $this->action ) );
+               $out->addHTML( $this->getForm() );
+       }
+
+       /**
+        * Show a message asking the user to enter a captcha on edit
+        * The result will be treated as wiki text
+        *
+        * @param $action Action being performed
+        * @return string
+        */
+       function getMessage( $action ) {
+               $name = 'captcha-' . $action;
+               $text = wfMsg( $name );
+               # Obtain a more tailored message, if possible, otherwise, fall back to
+               # the default for edits
+               return wfEmptyMsg( $name, $text ) ? wfMsg( 'captcha-edit' ) : $text;
+       }
+
+       /**
+        * Inject whazawhoo
+        * @fixme if multiple thingies insert a header, could break
+        * @param SimpleTemplate $template
+        * @return bool true to keep running callbacks
+        */
+       function injectUserCreate( &$template ) {
+               global $wgCaptchaTriggers, $wgOut;
+               if( $wgCaptchaTriggers['createaccount'] ) {
+                       $template->set( 'header',
+                               "<div class='captcha'>" .
+                               $wgOut->parse( $this->getMessage( 'createaccount' ) ) .
+                               $this->getForm() .
+                               "</div>\n" );
+               }
+               return true;
+       }
+
+       /**
+        * Inject a captcha into the user login form after a failed
+        * password attempt as a speedbump for mass attacks.
+        * @fixme if multiple thingies insert a header, could break
+        * @param SimpleTemplate $template
+        * @return bool true to keep running callbacks
+        */
+       function injectUserLogin( &$template ) {
+               if( $this->isBadLoginTriggered() ) {
+                       global $wgOut;
+                       $template->set( 'header',
+                               "<div class='captcha'>" .
+                               $wgOut->parse( $this->getMessage( 'badlogin' ) ) .
+                               $this->getForm() .
+                               "</div>\n" );
+               }
+               return true;
+       }
+       
+       /**
+        * When a bad login attempt is made, increment an expiring counter
+        * in the memcache cloud. Later checks for this may trigger a
+        * captcha display to prevent too many hits from the same place.
+        * @param User $user
+        * @param string $password
+        * @param int $retval authentication return value
+        * @return bool true to keep running callbacks
+        */
+       function triggerUserLogin( $user, $password, $retval ) {
+               global $wgCaptchaTriggers, $wgCaptchaBadLoginExpiration, $wgMemc;
+               if( $retval == LoginForm::WRONG_PASS && $wgCaptchaTriggers['badlogin'] ) {
+                       $key = $this->badLoginKey();
+                       $count = $wgMemc->get( $key );
+                       if( !$count ) {
+                               $wgMemc->add( $key, 0, $wgCaptchaBadLoginExpiration );
+                       }
+                       $count = $wgMemc->incr( $key );
+               }
+               return true;
+       }
+       
+       /**
+        * Check if a bad login has already been registered for this
+        * IP address. If so, require a captcha.
+        * @return bool
+        * @access private
+        */
+       function isBadLoginTriggered() {
+               global $wgMemc;
+               return intval( $wgMemc->get( $this->badLoginKey() ) ) > 0;
+       }
+       
+       /**
+        * Internal cache key for badlogin checks.
+        * @return string
+        * @access private
+        */
+       function badLoginKey() {
+               return wfMemcKey( 'captcha', 'badlogin', 'ip', wfGetIP() );
+       }
+       
+       /**
+        * Check if the submitted form matches the captcha session data provided
+        * by the plugin when the form was generated.
+        *
+        * Override this!
+        *
+        * @param string $answer
+        * @param array $info
+        * @return bool
+        */
+       function keyMatch( $answer, $info ) {
+               return $answer == $info['answer'];
+       }
+
+       // ----------------------------------
+
+       /**
+        * @param EditPage $editPage
+        * @param string $action (edit/create/addurl...)
+        * @return bool true if action triggers captcha on editPage's namespace
+        */
+       function captchaTriggers( &$editPage, $action) {
+               global $wgCaptchaTriggers, $wgCaptchaTriggersOnNamespace;       
+               //Special config for this NS?
+               if (isset( $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action] ) )
+                       return $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action];
+
+               return ( !empty( $wgCaptchaTriggers[$action] ) ); //Default
+       }
+
+
+       /**
+        * @param EditPage $editPage
+        * @param string $newtext
+        * @param string $section
+        * @return bool true if the captcha should run
+        */
+       function shouldCheck( &$editPage, $newtext, $section, $merged = false ) {
+               $this->trigger = '';
+               $title = $editPage->mArticle->getTitle();
+
+               global $wgUser;
+               if( $wgUser->isAllowed( 'skipcaptcha' ) ) {
+                       wfDebug( "ConfirmEdit: user group allows skipping captcha\n" );
+                       return false;
+               }
+               global $wgCaptchaWhitelistIP;
+               if( !empty( $wgCaptchaWhitelistIP ) ) {
+                       $ip = wfGetIp();
+                       foreach ( $wgCaptchaWhitelistIP as $range ) {
+                               if ( IP::isInRange( $ip, $range ) ) {
+                                       return false;
+                               }
+                       }
+               }
+
+
+               global $wgEmailAuthentication, $ceAllowConfirmedEmail;
+               if( $wgEmailAuthentication && $ceAllowConfirmedEmail &&
+                       $wgUser->isEmailConfirmed() ) {
+                       wfDebug( "ConfirmEdit: user has confirmed mail, skipping captcha\n" );
+                       return false;
+               }
+
+               if( $this->captchaTriggers( $editPage, 'edit' ) ) {
+                       // Check on all edits
+                       global $wgUser;
+                       $this->trigger = sprintf( "edit trigger by '%s' at [[%s]]",
+                               $wgUser->getName(),
+                               $title->getPrefixedText() );
+                       $this->action = 'edit';
+                       wfDebug( "ConfirmEdit: checking all edits...\n" );
+                       return true;
+               }
+
+               if( $this->captchaTriggers( $editPage, 'create' )  && !$editPage->mTitle->exists() ) {
+                       //Check if creating a page
+                       global $wgUser;
+                       $this->trigger = sprintf( "Create trigger by '%s' at [[%s]]",
+                               $wgUser->getName(),
+                               $title->getPrefixedText() );
+                       $this->action = 'create';
+                       wfDebug( "ConfirmEdit: checking on page creation...\n" );
+                       return true;
+               }
+
+               if( $this->captchaTriggers( $editPage, 'addurl' ) ) {
+                       // Only check edits that add URLs
+                       if ( $merged ) {
+                               // Get links from the database
+                               $oldLinks = $this->getLinksFromTracker( $title );
+                               // Share a parse operation with Article::doEdit()
+                               $editInfo = $editPage->mArticle->prepareTextForEdit( $newtext );
+                               $newLinks = array_keys( $editInfo->output->getExternalLinks() );
+                       } else {
+                               // Get link changes in the slowest way known to man
+                               $oldtext = $this->loadText( $editPage, $section );
+                               $oldLinks = $this->findLinks( $oldtext );
+                               $newLinks = $this->findLinks( $newtext );
+                       }
+
+                       $unknownLinks = array_filter( $newLinks, array( &$this, 'filterLink' ) );
+                       $addedLinks = array_diff( $unknownLinks, $oldLinks );
+                       $numLinks = count( $addedLinks );
+
+                       if( $numLinks > 0 ) {
+                               global $wgUser;
+                               $this->trigger = sprintf( "%dx url trigger by '%s' at [[%s]]: %s",
+                                       $numLinks,
+                                       $wgUser->getName(),
+                                       $title->getPrefixedText(),
+                                       implode( ", ", $addedLinks ) );
+                               $this->action = 'addurl';
+                               return true;
+                       }
+               }
+
+               global $wgCaptchaRegexes;
+               if( !empty( $wgCaptchaRegexes ) ) {
+                       // Custom regex checks
+                       $oldtext = $this->loadText( $editPage, $section );
+
+                       foreach( $wgCaptchaRegexes as $regex ) {
+                               $newMatches = array();
+                               if( preg_match_all( $regex, $newtext, $newMatches ) ) {
+                                       $oldMatches = array();
+                                       preg_match_all( $regex, $oldtext, $oldMatches );
+
+                                       $addedMatches = array_diff( $newMatches[0], $oldMatches[0] );
+
+                                       $numHits = count( $addedMatches );
+                                       if( $numHits > 0 ) {
+                                               global $wgUser;
+                                               $this->trigger = sprintf( "%dx %s at [[%s]]: %s",
+                                                       $numHits,
+                                                       $regex,
+                                                       $wgUser->getName(),
+                                                       $title->getPrefixedText(),
+                                                       implode( ", ", $addedMatches ) );
+                                               $this->action = 'edit';
+                                               return true;
+                                       }
+                               }
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+        * Filter callback function for URL whitelisting
+        * @param string url to check
+        * @return bool true if unknown, false if whitelisted
+        * @access private
+        */
+       function filterLink( $url ) {
+               global $wgCaptchaWhitelist;
+               $source = wfMsgForContent( 'captcha-addurl-whitelist' );
+
+               $whitelist = wfEmptyMsg( 'captcha-addurl-whitelist', $source ) 
+                       ? false
+                       : $this->buildRegexes( explode( "\n", $source ) );
+
+               $cwl = $wgCaptchaWhitelist !== false ? preg_match( $wgCaptchaWhitelist, $url ) : false;
+               $wl  = $whitelist          !== false ? preg_match( $whitelist, $url )          : false;
+
+               return !( $cwl || $wl );
+       }
+
+       /**
+        * Build regex from whitelist
+        * @param string lines from [[MediaWiki:Captcha-addurl-whitelist]]
+        * @return string Regex or bool false if whitelist is empty
+        * @access private
+        */
+       function buildRegexes( $lines ) {
+               # Code duplicated from the SpamBlacklist extension (r19197)
+
+               # Strip comments and whitespace, then remove blanks
+               $lines = array_filter( array_map( 'trim', preg_replace( '/#.*$/', '', $lines ) ) );
+
+               # No lines, don't make a regex which will match everything
+               if ( count( $lines ) == 0 ) {
+                       wfDebug( "No lines\n" );
+                       return false;
+               } else {
+                       # Make regex
+                       # It's faster using the S modifier even though it will usually only be run once
+                       //$regex = 'http://+[a-z0-9_\-.]*(' . implode( '|', $lines ) . ')';
+                       //return '/' . str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $regex) ) . '/Si';
+                       $regexes = '';
+                       $regexStart = '/http:\/\/+[a-z0-9_\-.]*(';
+                       $regexEnd = ')/Si';
+                       $regexMax = 4096;
+                       $build = false;
+                       foreach( $lines as $line ) {
+                               // FIXME: not very robust size check, but should work. :)
+                               if( $build === false ) {
+                                       $build = $line;
+                               } elseif( strlen( $build ) + strlen( $line ) > $regexMax ) {
+                                       $regexes .= $regexStart .
+                                               str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $build) ) .
+                                               $regexEnd;
+                                       $build = $line;
+                               } else {
+                                       $build .= '|' . $line;
+                               }
+                       }
+                       if( $build !== false ) {
+                               $regexes .= $regexStart .
+                                       str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $build) ) .
+                                       $regexEnd;
+                       }
+                       return $regexes;
+               }
+       }
+
+       /**
+        * Load external links from the externallinks table
+        */
+       function getLinksFromTracker( $title ) {
+               $dbr =& wfGetDB( DB_SLAVE );
+               $id = $title->getArticleId(); // should be zero queries
+               $res = $dbr->select( 'externallinks', array( 'el_to' ), 
+                       array( 'el_from' => $id ), __METHOD__ );
+               $links = array();
+               while ( $row = $dbr->fetchObject( $res ) ) {
+                       $links[] = $row->el_to;
+               }
+               return $links;
+       }               
+
+       /**
+        * The main callback run on edit attempts.
+        * @param EditPage $editPage
+        * @param string $newtext
+        * @param string $section
+        * @param bool true to continue saving, false to abort and show a captcha form
+        */
+       function confirmEdit( &$editPage, $newtext, $section, $merged = false ) {
+               if( $this->shouldCheck( $editPage, $newtext, $section, $merged ) ) {
+                       if( $this->passCaptcha() ) {
+                               return true;
+                       } else {
+                               $editPage->showEditForm( array( &$this, 'editCallback' ) );
+                               return false;
+                       }
+               } else {
+                       wfDebug( "ConfirmEdit: no need to show captcha.\n" );
+                       return true;
+               }
+       }
+
+       /**
+        * A more efficient edit filter callback based on the text after section merging
+        * @param EditPage $editPage
+        * @param string $newtext
+        */
+       function confirmEditMerged( &$editPage, $newtext ) {
+               return $this->confirmEdit( $editPage, $newtext, false, true );
+       }
+
+       /**
+        * Hook for user creation form submissions.
+        * @param User $u
+        * @param string $message
+        * @return bool true to continue, false to abort user creation
+        */
+       function confirmUserCreate( $u, &$message ) {
+               global $wgCaptchaTriggers;
+               if( $wgCaptchaTriggers['createaccount'] ) {
+                       $this->trigger = "new account '" . $u->getName() . "'";
+                       if( !$this->passCaptcha() ) {
+                               $message = wfMsg( 'captcha-createaccount-fail' );
+                               return false;
+                       }
+               }
+               return true;
+       }
+       
+       /**
+        * Hook for user login form submissions.
+        * @param User $u
+        * @param string $message
+        * @return bool true to continue, false to abort user creation
+        */
+       function confirmUserLogin( $u, $pass, &$retval ) {
+               if( $this->isBadLoginTriggered() ) {
+                       $this->trigger = "post-badlogin login '" . $u->getName() . "'";
+                       if( !$this->passCaptcha() ) {
+                               $message = wfMsg( 'captcha-badlogin-fail' );
+                               // Emulate a bad-password return to confuse the shit out of attackers
+                               $retval = LoginForm::WRONG_PASS;
+                               return false;
+                       }
+               }
+               return true;
+       }
+
+       /**
+        * Given a required captcha run, test form input for correct
+        * input on the open session.
+        * @return bool if passed, false if failed or new session
+        */
+       function passCaptcha() {
+               $info = $this->retrieveCaptcha();
+               if( $info ) {
+                       global $wgRequest;
+                       if( $this->keyMatch( $wgRequest->getVal('wpCaptchaWord'), $info ) ) {
+                               $this->log( "passed" );
+                               $this->clearCaptcha( $info );
+                               return true;
+                       } else {
+                               $this->clearCaptcha( $info );
+                               $this->log( "bad form input" );
+                               return false;
+                       }
+               } else {
+                       $this->log( "new captcha session" );
+                       return false;
+               }
+       }
+
+       /**
+        * Log the status and any triggering info for debugging or statistics
+        * @param string $message
+        */
+       function log( $message ) {
+               wfDebugLog( 'captcha', 'ConfirmEdit: ' . $message . '; ' .  $this->trigger );
+       }
+
+       /**
+        * Generate a captcha session ID and save the info in PHP's session storage.
+        * (Requires the user to have cookies enabled to get through the captcha.)
+        *
+        * A random ID is used so legit users can make edits in multiple tabs or
+        * windows without being unnecessarily hobbled by a serial order requirement.
+        * Pass the returned id value into the edit form as wpCaptchaId.
+        *
+        * @param array $info data to store
+        * @return string captcha ID key
+        */
+       function storeCaptcha( $info ) {
+               if( !isset( $info['index'] ) ) {
+                       // Assign random index if we're not udpating
+                       $info['index'] = strval( mt_rand() );
+               }
+               $this->storage->store( $info['index'], $info );
+               return $info['index'];
+       }
+
+       /**
+        * Fetch this session's captcha info.
+        * @return mixed array of info, or false if missing
+        */
+       function retrieveCaptcha() {
+               global $wgRequest;
+               $index = $wgRequest->getVal( 'wpCaptchaId' );
+               return $this->storage->retrieve( $index );
+       }
+
+       /**
+        * Clear out existing captcha info from the session, to ensure
+        * it can't be reused.
+        */
+       function clearCaptcha( $info ) {
+               $this->storage->clear( $info['index'] );
+       }
+
+       /**
+        * Retrieve the current version of the page or section being edited...
+        * @param EditPage $editPage
+        * @param string $section
+        * @return string
+        * @access private
+        */
+       function loadText( $editPage, $section ) {
+               $rev = Revision::newFromTitle( $editPage->mTitle );
+               if( is_null( $rev ) ) {
+                       return "";
+               } else {
+                       $text = $rev->getText();
+                       if( $section != '' ) {
+                               return Article::getSection( $text, $section );
+                       } else {
+                               return $text;
+                       }
+               }
+       }
+
+       /**
+        * Extract a list of all recognized HTTP links in the text.
+        * @param string $text
+        * @return array of strings
+        */
+       function findLinks( $text ) {
+               global $wgParser, $wgTitle, $wgUser;
+
+               $options = new ParserOptions();
+               $text = $wgParser->preSaveTransform( $text, $wgTitle, $wgUser, $options );
+               $out = $wgParser->parse( $text, $wgTitle, $options );
+
+               return array_keys( $out->getExternalLinks() );
+       }
+
+       /**
+        * Show a page explaining what this wacky thing is.
+        */
+       function showHelp() {
+               global $wgOut, $ceAllowConfirmedEmail;
+               $wgOut->setPageTitle( wfMsg( 'captchahelp-title' ) );
+               $wgOut->addWikiText( wfMsg( 'captchahelp-text' ) );
+               if ( $this->storage->cookiesNeeded() ) {
+                       $wgOut->addWikiText( wfMsg( 'captchahelp-cookies-needed' ) );
+               }
+       }
+
+}
+
+class CaptchaSessionStore {
+       function store( $index, $info ) {
+               $_SESSION['captcha' . $info['index']] = $info;
+       }
+       
+       function retrieve( $index ) {
+               if( isset( $_SESSION['captcha' . $index] ) ) {
+                       return $_SESSION['captcha' . $index];
+               } else {
+                       return false;
+               }
+       }
+       
+       function clear( $index ) {
+               unset( $_SESSION['captcha' . $index] );
+       }
+
+       function cookiesNeeded() {
+               return true;
+       }
+}
+
+class CaptchaCacheStore {
+       function store( $index, $info ) {
+               global $wgMemc, $wgCaptchaSessionExpiration;
+               $wgMemc->set( wfMemcKey( 'captcha', $index ), $info,
+                       $wgCaptchaSessionExpiration );
+       }
+
+       function retrieve( $index ) {
+               global $wgMemc;
+               $info = $wgMemc->get( wfMemcKey( 'captcha', $index ) );
+               if( $info ) {
+                       return $info;
+               } else {
+                       return false;
+               }
+       }
+       
+       function clear( $index ) {
+               global $wgMemc;
+               $wgMemc->delete( wfMemcKey( 'captcha', $index ) );
+       }
+
+       function cookiesNeeded() {
+               return false;
+       }
+}
+
diff --git a/mediawiki/extensions/ExtensionClass.php b/mediawiki/extensions/ExtensionClass.php
new file mode 100644 (file)
index 0000000..4af794d
--- /dev/null
@@ -0,0 +1,482 @@
+<?php
+/*
+ * ExtensionClass.php
+ * 
+ * MediaWiki extension
+ * @author: Jean-Lou Dupont (http://www.bluecortex.com)
+ *
+ * Purpose:  Provides a toolkit for easier Mediawiki
+ *           extension development.
+ *
+ * FEATURES:
+ * - 'singleton' implementation suited for extensions that require single instance
+ * - 'magic word' helper functionality
+ * - limited pollution of global namespace
+ *
+ * Tested Compatibility: MW 1.8.2 (PHP5), 1.9.3, 1.10
+ *
+ * History:
+ * v1.0                Initial availability
+ * v1.01    Small enhancement in processArgList
+ * v1.02    Corrected minor bug
+ * v1.1     Added function 'checkPageEditRestriction'
+ * v1.2     Added 'getArticle' function
+ * ----     Moved to SVN management
+ * v1.3     Added wgExtensionCredits updating upon Special:Version viewing
+ * v1.4     Fixed broken singleton functionality
+ * v1.5                Added automatic registration of hook functions based
+ *          on the definition of an handler in the derived class
+ *          (e.g. if handler 'hArticleSave' exists, then the appropriate
+ *           'ArticleSave' hook is registered)
+ * v1.51    Fixed '$passingStyle' bug (thanks to Joshua C. Lerner)
+ * v1.6     Added 'updateCreditsDescription' helper method.
+ * v1.7                Added 'depth' parameter support: more than 1 class depth can be created.
+ *          Added 'setupTags' method (support for parser tags)
+ *          Enhancement to 'getParam' method
+ *          Added 'formatParams' method
+ * v1.8     Added 'initFirst' parameter
+ * v1.9     Added support for including 'head' scripts and stylesheeets
+ *          in a manner compatible with parser caching functionality.
+ *          (Original idea from [user:Jimbojw]
+ * v1.91    Added check for screening script duplicates in 'addHeadScript'
+ * v1.92    Added optional removal of parameters not listed in template.
+ *
+ */
+$wgExtensionCredits['other'][] = array( 
+       'name'    => 'ExtensionClass',
+       'version' => 'v1.92 $LastChangedRevision: 174 $',
+       'author'  => 'Jean-Lou Dupont', 
+       'url'     => 'http://www.bluecortex.com',
+);
+class ExtensionClass
+{
+       static $gObj; // singleton instance
+// List up-to-date with MW 1.10 SVN 21828
+static $hookList = array(
+'ArticlePageDataBefore', 
+'ArticlePageDataAfter', 
+'ArticleAfterFetchContent',
+'ArticleViewRedirect', 
+'ArticleViewHeader',
+'ArticlePurge',
+'ArticleSave', 
+'ArticleInsertComplete',
+'ArticleSaveComplete',
+'MarkPatrolled', 
+'MarkPatrolledComplete', 
+'WatchArticle', 
+'WatchArticleComplete',
+'UnwatchArticle', 
+'UnwatchArticleComplete', 
+'ArticleProtect', 
+'ArticleProtectComplete',
+'ArticleDelete', 
+'ArticleDeleteComplete', 
+'ArticleEditUpdatesDeleteFromRecentchanges',
+'ArticleEditUpdateNewTalk',
+'DisplayOldSubtitle',
+'IsFileCacheable',
+'CategoryPageView',
+'FetchChangesList',
+'DiffViewHeader',
+'AlternateEdit', 
+'EditFormPreloadText', 
+'EditPage::attemptSave', 
+'EditFilter', 
+'EditPage::showEditForm:initial',
+'EditPage::showEditForm:fields',
+'SiteNoticeBefore',
+'SiteNoticeAfter',
+'FileUpload',
+'BadImage', 
+'MagicWordMagicWords', 
+'MagicWordwgVariableIDs',
+'MathAfterTexvc',
+'MessagesPreLoad',
+'LoadAllMessages',
+'OutputPageParserOutput',
+'OutputPageBeforeHTML',
+'AjaxAddScript', 
+'PageHistoryBeforeList',
+'PageHistoryLineEnding',
+'ParserClearState', 
+'ParserBeforeStrip',
+'ParserAfterStrip',
+'ParserBeforeTidy',
+'ParserAfterTidy',
+'ParserBeforeStrip',
+'ParserAfterStrip', 
+'ParserBeforeStrip',
+'ParserAfterStrip', 
+'ParserBeforeInternalParse',
+'InternalParseBeforeLinks', 
+'ParserGetVariableValueVarCache',
+'ParserGetVariableValueTs', 
+'ParserGetVariableValueSwitch',
+'IsTrustedProxy',
+'wgQueryPages', 
+'RawPageViewBeforeOutput', 
+'RecentChange_save',
+'SearchUpdate', 
+'AuthPluginSetup', 
+'LogPageValidTypes',
+'LogPageLogName', 
+'LogPageLogHeader', 
+'LogPageActionText',
+'SkinTemplateTabs', 
+'BeforePageDisplay', 
+'SkinTemplateOutputPageBeforeExec', 
+'PersonalUrls', 
+'SkinTemplatePreventOtherActiveTabs',
+'SkinTemplateTabs', 
+'SkinTemplateBuildContentActionUrlsAfterSpecialPage',
+'SkinTemplateContentActions', 
+'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink',
+'SkinTemplateSetupPageCss',
+'BlockIp', 
+'BlockIpComplete', 
+'BookInformation', 
+'SpecialContributionsBeforeMainOutput',
+'EmailUser', 
+'EmailUserComplete',
+'SpecialMovepageAfterMove',
+'SpecialMovepageAfterMove',
+'SpecialPage_initList',
+'SpecialPageExecuteBeforeHeader',
+'SpecialPageExecuteBeforePage',
+'SpecialPageExecuteAfterPage',
+'PreferencesUserInformationPanel',
+'SpecialSearchNogomatch',
+'ArticleUndelete',
+'UndeleteShowRevision',
+'UploadForm:BeforeProcessing',
+'UploadVerification',
+'UploadComplete',
+'UploadForm:initial',
+'AddNewAccount',
+'AbortNewAccount',
+'UserLoginComplete',
+'UserCreateForm',
+'UserLoginForm',
+'UserLogout',
+'UserLogoutComplete',
+'UserRights',
+/*'SpecialVersionExtensionTypes',*/ // reserved special treatment
+'UnwatchArticle',
+'AutoAuthenticate', 
+'GetFullURL',
+'GetLocalURL',
+'GetInternalURL',
+'userCan',
+'TitleMoveComplete',
+'isValidPassword',
+'UserToggles',
+'GetBlockedStatus',
+'PingLimiter',
+'UserRetrieveNewTalks',
+'UserClearNewTalkNotification',
+'PageRenderingHash',
+'EmailConfirmed',
+'ArticleFromTitle',
+'CustomEditor',
+'UnknownAction',
+/*'LanguageGetMagic', */ // reserved a special treatment in this class 
+'LangugeGetSpecialPageAliases',
+'MonoBookTemplateToolboxEnd',
+'SkinTemplateSetupPageCss',
+'SkinTemplatePreventOtherActiveTabs'
+);
+       var $className;
+       
+       var $paramPassingStyle;
+       var $ext_mgwords;       
+       
+       // Parameter passing style.
+       const mw_style = 1;
+       const tk_style = 2;
+       
+       public static function &singleton( $mwlist=null ,$globalObjName=null, 
+                                                                               $passingStyle = self::mw_style, $depth = 1,
+                                                                               $initFirst = false )
+       {
+               // Let's first extract the callee's classname
+               $trace = debug_backtrace();
+               $cname = $trace[$depth]['class'];
+               // If no globalObjName was given, create a unique one.
+               if ($globalObjName === null)
+                       $globalObjName = substr(create_function('',''), 1 );
+               
+               // Since there can only be one extension with a given child class name,
+               // Let's store the $globalObjName in a static array.
+               if (!isset(self::$gObj[$cname]) )
+                       self::$gObj[$cname] = $globalObjName; 
+                               
+               if ( !isset( $GLOBALS[self::$gObj[$cname]] ) )
+                       $GLOBALS[self::$gObj[$cname]] = new $cname( $mwlist, $passingStyle, $depth, $initFirst );
+                       
+               return $GLOBALS[self::$gObj[$cname]];
+       }
+       public function ExtensionClass( $mgwords=null, $passingStyle = self::mw_style, 
+                                                                       $depth = 1, $initFirst = false )
+       /*
+        *  $mgwords: array of 'magic words' to subscribe to *if* required.
+        */
+       {
+               global $wgHooks;
+                       
+               if ($passingStyle == null) $passingStyle = self::mw_style; // prevention...
+               $this->paramPassingStyle = $passingStyle;
+               
+               // Let's first extract the callee's classname
+               $trace = debug_backtrace();
+               $this->className= $cname = $trace[$depth]['class'];
+               // And let's retrieve the global object's name
+               $n = self::$gObj[$cname];
+               
+               global $wgExtensionFunctions;
+               
+               // v1.8 feature
+               $initFnc = create_function('',"global $".$n."; $".$n."->setup();");
+               if ($initFirst)
+                        array_unshift( $wgExtensionFunctions, $initFnc );
+               else $wgExtensionFunctions[] = $initFnc;
+               
+               $this->ext_mgwords = $mgwords;          
+               if (is_array($this->ext_mgwords) )
+                       $wgHooks['LanguageGetMagic'][] = array($this, 'getMagic');
+               // v1.3 feature
+               if ( in_array( 'hUpdateExtensionCredits', get_class_methods($this->className) ) )
+                       $wgHooks['SpecialVersionExtensionTypes'][] = array( &$this, 'hUpdateExtensionCredits' );                                
+               // v1.5 feature
+               foreach (self::$hookList as $index => $hookName)
+                       if ( in_array( 'h'.$hookName, get_class_methods($this->className) ) )
+                               $wgHooks[$hookName][] = array( &$this, 'h'.$hookName );
+       }
+       public function getParamPassingStyle() { return $this->passingStyle; }
+       public function setup()
+       {
+               if (is_array($this->ext_mgwords))
+                       $this->setupMagic();
+       }
+       // ================== MAGIC WORD HELPER FUNCTIONS ===========================
+       public function getMagic( &$magicwords, $langCode )
+       {
+               foreach($this->ext_mgwords as $index => $key)
+                       $magicwords [$key] = array( 0, $key );
+               return true;
+       }
+       public function setupMagic( )
+       {
+               global $wgParser;
+               foreach($this->ext_mgwords as $index => $key)
+                       $wgParser->setFunctionHook( "$key", array( $this, "mg_$key" ) );
+       }
+       public function setupTags( $tagList )
+       {
+               global $wgParser;
+               foreach($tagList as $index => $key)
+                       $wgParser->setHook( "$key", array( $this, "tag_$key" ) );
+       }
+       // ================== GENERAL PURPOSE HELPER FUNCTIONS ===========================
+       public function processArgList( $list, $getridoffirstparam=false )
+       /*
+        * The resulting list contains:
+        * - The parameters extracted by 'key=value' whereby (key => value) entries in the list
+        * - The parameters extracted by 'index' whereby ( index = > value) entries in the list
+        */
+       {
+               if ($getridoffirstparam)   
+                       array_shift( $list );
+                       
+               // the parser sometimes includes a boggie
+               // null parameter. get rid of it.
+               if (count($list) >0 )
+                       if (empty( $list[count($list)-1] ))
+                               unset( $list[count($list)-1] );
+               
+               $result = array();
+               foreach ($list as $index => $el )
+               {
+                       $t = explode("=", $el);
+                       if (!isset($t[1])) 
+                               continue;
+                       $result[ "{$t[0]}" ] = $t[1];
+                       unset( $list[$index] );
+               }
+               if (empty($result)) 
+                       return $list;
+               return array_merge( $result, $list );   
+       }
+       public function getParam( &$alist, $key, $index, $default )
+       /*
+        *  Gets a parameter by 'key' if present
+        *  or fallback on getting the value by 'index' and
+        *  ultimately fallback on default if both previous attempts fail.
+        */
+       {
+               if (array_key_exists($key, $alist) )
+                       return $alist[$key];
+               elseif (array_key_exists($index, $alist) && $index!==null )
+                       return $alist[$index];
+               else
+                       return $default;
+       }
+       public function initParams( &$alist, &$templateElements, $removeNotInTemplate = true )
+       {
+                       #var_dump( $alist );
+               // v1.92 feature.
+               if ($removeNotInTemplate)
+                       foreach( $templateElements as $index => &$el )
+                               if ( !isset($alist[ $el['key'] ]) )
+                                       unset( $alist[$el['key']] );
+               
+               foreach( $templateElements as $index => &$el )
+                       $alist[$el['key']] = $this->getParam( $alist, $el['key'], $el['index'], $el['default'] );
+       }
+       public function formatParams( &$alist , &$template )
+       // look at yuiPanel extension for usage example.
+       // $alist = { 'key' => 'value' ... }
+       {
+               foreach ( $alist as $key => $value )
+                       // format the entry.
+                       $this->formatParam( $key, $value, $template );
+       }
+       private function formatParam( &$key, &$value, &$template )
+       {
+               $format = $this->getFormat( $key, $template );
+               if ($format !==null )
+               {
+                       switch ($format)
+                       {
+                               case 'bool':   $value = (bool) $value; break; 
+                               case 'int':    $value = (int) $value; break;
+                               default:
+                               case 'string': $value = (string) $value; break;                                 
+                       }                       
+               }
+       }
+       public function getFormat( &$key, &$template )
+       {
+               $format = null;
+               foreach( $template as $index => &$el )
+                       if ( $el['key'] == $key )
+                               $format  = $el['format'];
+                       
+               return $format;
+       }
+       public function checkPageEditRestriction( &$title )
+       // v1.1 feature
+       // where $title is a Mediawiki Title class object instance
+       {
+               $proceed = false;
+  
+               $state = $title->getRestrictions('edit');
+               foreach ($state as $index => $group )
+                       if ( $group == 'sysop' )
+                               $proceed = true;
+               return $proceed;                
+       } 
+       public function getArticle( $article_title )
+       {
+               $title = Title::newFromText( $article_title );
+                 
+               // Can't load page if title is invalid.
+               if ($title == null)     return null;
+               $article = new Article($title);
+               return $article;        
+       }
+       
+       function isSysop( $user = null ) // v1.5 feature
+       {
+               if ($user == null)
+               {
+                       global $wgUser;
+                       $user = $wgUser;
+               }       
+               return in_array( 'sysop', $user->getGroups() );
+       }
+       
+       function updateCreditsDescription( &$text ) // v1.6 feature.
+       {
+               global $wgExtensionCredits;
+       
+               foreach ( $wgExtensionCredits[self::thisType] as $index => &$el )
+                       if ($el['name']==self::thisName)
+                               $el['description'].=$text;      
+       }
+/*  Add scripts & stylesheets functionality.
+This process must be done in two phases:
+phase 1- encode information related to the required
+         scripts & stylesheets in a 'meta form' in
+                the parser cache text.
+phase 2- when the page is rendered, extract the meta information
+         and include the information appropriately in the 'head' of the page.            
+************************************************************************************/
+       static $scriptList;
+       static $scriptsAdded;
+       static $scriptsListed;
+       function addHeadScript( $st )
+       {
+               if ( !isset($st) ) return;
+               
+               if ( !isset(self::$scriptList) )
+                       self::$scriptList[] = $st;
+               elseif  (!in_array($st, self::$scriptList)) 
+                       self::$scriptList[] = $st;
+                        
+               self::$scriptsAdded = false;
+               self::$scriptsListed = false;
+       }
+       
+       function hParserAfterTidy( &$parser, &$text )
+       // set the meta information in the parsed 'wikitext'.
+       {
+               if (self::$scriptsListed) return true;
+               self::$scriptsListed = true;
+               if (!empty(self::$scriptList))
+                       foreach(self::$scriptList as $sc)
+                               $text .= '<!-- META_KEYWORDS '.base64_encode($sc).' -->'; 
+               return true;
+       }       
+       function hOutputPageBeforeHTML( &$op, &$text )
+       // This function sifts through 'meta tags' embedded in html comments
+       // and picks out scripts & stylesheet references that need to be put
+       // in the page's HEAD.
+       {
+               // some hooks get called more than once...
+               // In this case, since ExtensionClass provides a 
+               // base class for numerous extensions, then it is very
+               // likely this method will be called more than once;
+               // so, we want to make sure we include the head scripts just once.
+               if (self::$scriptsAdded) return true;
+               self::$scriptsAdded = true;
+               
+               if (preg_match_all(
+               '/<!-- META_KEYWORDS ([0-9a-zA-Z\\+\\/]+=*) -->/m', 
+               $text, 
+               $matches)===false) return true;
+                       
+       $data = $matches[1];
+           foreach ($data AS $item) 
+               {
+               $content = @base64_decode($item);
+               if ($content) $op->addScript( $content );
+           }
+           return true;
+       }
+} // end class definition.
+?>
\ No newline at end of file
diff --git a/mediawiki/extensions/README b/mediawiki/extensions/README
new file mode 100644 (file)
index 0000000..85f4943
--- /dev/null
@@ -0,0 +1,14 @@
+Extensions (such as the hieroglyphic module WikiHiero) are distributed
+separately. Drop them into this extensions directory and enable as
+per the extension's directions.
+
+If you are a developer, you want to fetch the extension tree in another
+directory and make a symbolic link:
+
+ mediawiki/extensions$ ln -s ../../extensions-trunk/FooBarExt
+
+The extensions are available through svn at:
+    http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/
+
+You can find documentation and additional extensions on MediaWiki website:
+    http://www.mediawiki.org/wiki/Category:Extensions
diff --git a/mediawiki/extensions/SimpleFeed.php b/mediawiki/extensions/SimpleFeed.php
new file mode 100644 (file)
index 0000000..fc99f77
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+/* 
+* SimpleFeed MediaWiki extension
+* 
+* Copyright (C) 2007 Jonny Lamb
+* http://jonnylamb.com/
+* 
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or 
+* (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* http://www.gnu.org/copyleft/gpl.html
+*/
+
+// Check to make sure we're actually in MediaWiki.
+if (!defined('MEDIAWIKI'))
+{
+       echo 'This file is part of MediaWiki. It is not a valid entry point.';
+       exit(1);
+}
+
+// Path to simplepie.inc (including leading slash).
+$simplepie_path = 'extensions/';
+
+if ( ! @include($simplepie_path.'simplepie.inc') )
+{
+       define('SIMPLEPIE_NOT_FOUND', true);
+}
+
+$wgExtensionFunctions[] = 'wfSimpleFeed';
+$wgExtensionCredits['parserhook'][] = array(
+       'name' => 'SimpleFeed',
+       'description' => 'Uses SimplePie to output RSS/atom feeds',
+       'author' => 'Jonny Lamb',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:SimpleFeed'
+);
+
+function wfSimpleFeed()
+{
+       global $wgParser;
+       $wgParser->setHook('feed', 'parseFeed');
+}
+
+function parseFeed($input, $args, &$parser)
+{
+       // Disable page caching.
+       $parser->disableCache();
+       
+       // Check to see whether SimplePie was actually included.
+       if (defined('SIMPLEPIE_NOT_FOUND'))
+       {
+               return '<strong>Error</strong>: <tt>simplepie.inc</tt> was not found in the path. Please edit the path (beginning of extensions/SimpleFeed.php) or add <tt>simplefeed.inc</tt> to the current path.';
+       }
+       
+       // Must have a feed URL and a template to go by outputting items.
+       if (!isset($args['url']) or !isset($input))
+       {
+               return 0;
+       }
+
+       $feed = new SimplePie();
+       $feed->feed_url($args['url']);
+
+       // Get the feed information!
+       $feed->init();
+
+       $feed->handle_content_type();
+
+       // Either use default date format (j F Y), or the $date(string) argument.
+       // The date argument should conform to PHP's date function, nicely documented
+       // at http://php.net/date.
+       $date = (isset($args['date'])) ? $args['date'] : 'j F Y';
+
+       $output = '';
+
+       // Use the $entries(int) argument to determine how many entries to show.
+       // Defaults to 5, and 0 is unlimited.
+       if (isset($args['entries']))
+       {
+               $max = ($args['entries'] == 0) ? $feed->get_item_quantity() : $feed->get_item_quantity($args['entries']);
+       }
+       else
+       {
+               $max = $feed->get_item_quantity(5);
+       }
+       
+       // Loop through each item.
+       for ($i = 0; $i < $max; $i++)
+       {
+               $item = $feed->get_item($i);
+
+               $itemwikitext = $input;
+
+               // {PERMALINK} -> Link to the URL of the post.
+               $itemwikitext = str_replace('{PERMALINK}', $item->get_permalink(), $itemwikitext);
+
+               // {DATE} -> The posting date of the post, formatted in the aforementioned way.
+               $itemwikitext = str_replace('{DATE}', $item->get_date($date), $itemwikitext);
+
+               // {DESCRIPTION} -> The actual post (or post description if there's a tear).
+               $itemwikitext = str_replace('{DESCRIPTION}', $item->get_description(), $itemwikitext);
+
+               // If $type="planet" is used, the author is got from the post title.
+               // e.g. title = "Joe Bloggs: I love Mediawiki"
+               // This will make: {AUTHOR} -> "Joe Bloggs"
+               //                 {TITLE} -> "I love Mediawiki"
+               // If this is not set however, the title and author are received the usual way.
+               if ($args['type'] == 'planet')
+               {
+                       $title = preg_replace('/(.*): (.*)/sU', '\\2', $item->get_title());
+                       preg_match('/(.+?): (.+)/sU', $item->get_title(), $matches);
+                       $author = $matches[1];
+               }
+               else
+               {
+                       $title = $item->get_title();
+                       // Often the author is hard to recieve. Maybe it's not a very important
+                       // thing to output into RSS...?
+                       $itemauthor = $item->get_author();
+                       $author = ($itemauthor != null) ? $itemauthor->get_name() : '';
+               }
+
+               // {TITLE} -> Title of the post.
+               $itemwikitext = str_replace('{TITLE}', $title, $itemwikitext);
+
+               // {AUTHOR} -> Author of the post.
+               $itemwikitext = str_replace('{AUTHOR}', $author, $itemwikitext);
+
+               // Add to the overall output the post just done.
+               $output .= $itemwikitext;
+       }
+
+       // Parse the text into HTML between the <feed>[...]</feed> tags, with arguments replaced.
+       $parserObject = $parser->parse($output, $parser->mTitle, $parser->mOptions, false, false);
+       
+       // Output formatted text.
+       return $parserObject->getText();
+}
+
+?>
diff --git a/mediawiki/extensions/addHtml.php b/mediawiki/extensions/addHtml.php
new file mode 100644 (file)
index 0000000..f9b6a05
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/*
+ * addHTML.php
+ * 
+ * MediaWiki extension
+ * @author: Jean-Lou Dupont (http://www.bluecortex.com)
+ *
+ * Purpose:  Inserts <html> section(s) in the output page.
+ *
+ * Features:
+ * *********
+ * - Security: only page protected on edit with 'sysop' restriction
+ *             can use this extension.
+ *
+ * <addhtml id=xyz /> : meant to be used in conjunction
+ *                      with some PHP code using the 'addHtml' method
+ *                      of this class. The 'tag' is used to position 
+ *                      the HTML code in the page.
+ *                      An extension which can execute PHP code, such
+ *                      as 'Runphp page' can be used to prepare the
+ *                      HTML code and inserts through the 'addHtml'
+ *                      method.
+ *
+ * <addhtml [id=xyz] > html code </addhtml>
+ *
+ * DEPENDANCY:  ExtensionClass >= v1.1
+ * 
+ * Tested Compatibility:  MW 1.8.2, 1.9.3
+ *
+ * History:
+ * - v1.0
+ * - v1.1 : changed hook method for better parser cache integration.
+ */
+$wgExtensionCredits['other'][] = array( 
+       'name'    => 'addHTML Extension', 
+       'version' => '1.1',
+       'author'  => 'Jean-Lou Dupont', 
+       'url'     => 'http://www.bluecortex.com',
+);
+addHTMLclass::singleton();
+class addHTMLclass extends ExtensionClass
+{
+       const tag = 'addhtml';
+       
+       var $hlist;
+       var $hookInPlace;
+       public static function &singleton( ) // required by ExtensionClass
+       { return parent::singleton( ); }
+       
+       function addHTMLclass()
+       {
+               parent::__construct(); // required by ExtensionClass
+               $this->hookInPlace = false;
+       }
+       public function setup()
+       {
+               global $wgParser;
+               $wgParser->setHook( self::tag, array( $this, 'hAddHtmlTag' ) );
+       }
+       public function hAddHtmlTag( $input, $argv, &$parser )
+       {
+               // check page protection status
+               if (!$this->checkPageEditRestriction( $parser->mTitle ))
+                       return "unauthorized usage of <b>addHtml</b> extension.";
+               
+               $id = 0;
+               if ( isset($argv['id']) )               
+                       $id = $argv['id'];
+               
+               // just place the hook when we really need it.          
+               if (!$this->hookInPlace)
+               {
+                       global $wgHooks;        
+                       $wgHooks['ParserAfterTidy'][]= array($this, 'feedHtml');
+                       $this->hookInPlace = true;
+               }                       
+               $input = trim( $input );
+               if ( !empty( $input ) )
+                       $this->hlist[ $id ] = $input; 
+               
+               // let's put an easy marker that we can 'safely' find once we need to render the HTML
+               $marker = "<".self::tag." id={$id} />";
+               return $marker;
+       }
+       public function feedHtml( $parser, &$text )
+       {
+               // Some substitution to do?
+               if (empty($this->hlist)) return;
+               foreach($this->hlist as $index => $html)
+               {
+                       $marker = "<".self::tag." id={$index} />";
+                       $text = str_ireplace($marker, $html, $text);
+               }
+               return true; // continue hook chain.
+       }
+       public function addHtml( $id, $html ) { $this->hlist[ $id ] = $html; }
+       
+} // END CLASS DEFINITION
+?>
\ No newline at end of file
diff --git a/mediawiki/extensions/firestats-mediawiki.php b/mediawiki/extensions/firestats-mediawiki.php
new file mode 100644 (file)
index 0000000..9c46614
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+// Edit this line to match your FireStats directory.
+define('FS_PATH','/webspace/projects/openbox/firestats');
+
+// This is the site ID of your MediaWiki site inside FireStats sites table.
+// You need to add a MediaWiki site in the Sites tab in FireStats and then change the
+// value here to match the ID.
+// this will allow FireStats to show the statistics of your MediaWiki site seperated from your other sites.
+//
+// Note: This is optional, the default value will also work.
+define('FS_SITE_ID',0);
+
+
+
+require_once(FS_PATH.'/php/db-hit.php');
+$wgHooks['LogPageLogHeader'][] = 'fs_mediawiki_hit';
+
+function fs_mediawiki_hit($wiki_object)
+{
+       if (isset($_REQUEST['gen']) || isset($_REQUEST['ctype'])) 
+       {
+               return;
+       }
+       fs_add_site_hit(FS_SITE_ID);
+}
+
+?>
diff --git a/mediawiki/extensions/recaptcha/AUTHORS b/mediawiki/extensions/recaptcha/AUTHORS
new file mode 100644 (file)
index 0000000..8f93111
--- /dev/null
@@ -0,0 +1,6 @@
+Mike Crawford <mike.crawford@gmail.com>
+     Research Programmer, Carnegie Mellon University
+Ben Maurer <http://bmaurer.blogspot.com/>
+     Chief Software Architect, reCAPTCHA
+Brion Vibber <brion@pobox.com>
+     Author of ConfirmEdit, which this extension is built on.
diff --git a/mediawiki/extensions/recaptcha/ConfirmEdit.i18n.php b/mediawiki/extensions/recaptcha/ConfirmEdit.i18n.php
new file mode 100644 (file)
index 0000000..033b56e
--- /dev/null
@@ -0,0 +1,669 @@
+<?php\r
+/**\r
+ * Internationalisation file for ConfirmEdit extension.\r
+ *\r
+ * @addtogroup Extensions\r
+*/\r
+\r
+$wgConfirmEditMessages = array();\r
+\r
+$wgConfirmEditMessages['en'] = array(\r
+       'captcha-edit' => 'To edit this article, please solve the simple sum below and enter the answer in \r
+the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-addurl' => 'Your edit includes new external links. To help protect against automated\r
+spam, please solve the simple sum below and enter the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-badpass' => 'To help protect against automated password cracking, please solve the simple sum\r
+below and enter the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-createaccount' => 'To help protect against automated account creation, please solve the simple sum\r
+       below and enter the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-createaccount-fail' => "Incorrect or missing confirmation code.",\r
+       'captcha-create' => 'To create the page, please solve the simple sum below and enter \r
+the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-cookies-needed' => "You will need to have cookies enabled in your browser for this to work.",\r
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.\r
+\r
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.\r
+\r
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+);\r
+\r
+$wgConfirmEditMessages['af'] = array(\r
+       'captcha-edit'               => "U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])",\r
+       'captcha-addurl'               => "U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])",\r
+       'captcha-create'               => "U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])",\r
+       'captchahelp-title'          => 'Captcha-hulp',\r
+       'captchahelp-text'           => "Webwerwe wat bydraes van die publiek aanvaar (soos hierdie wiki) word soms lastig geval deur kwaaddoeners met programme wat outomaties klomp skakels plak in die werf. Alhoewel hierdie gemors verwyder kan word, is dit lastig. In party gevalle, veral as u webskakels by 'n blad voeg, sal die wiki dalk 'n beeld met verwronge teks vertoon en vra dat u die woorde daarin intik. Omdat hierdie taak moeilik geoutomatiseer word, laat dit meeste regte mense toe om bydraes te maak terwyl dit meeste kwaaddoeners stop. Hierdie kan ongelukkig lastig wees vir mense met beperkte sig, of diegene wat teks- of spraakgebaseerde blaaiers gebruik. Tans is daar nog nie 'n klankalternatief beskikbaar nie. Kontak asseblief die werfadministrateurs vir hulp as hierdie u onverwags belemmer om legitieme bydraes te maak. Gebruik die \"terug\"-knoppie van u blaaier om na die vorige blad terug te keer.",\r
+       'captcha-createaccount'      => "As 'n beskerming teen geoutomatiseerde gemors, tik asseblief die woorde wat in die beeld verskyn in om 'n rekening te skep: <br />([[Special:Captcha/help|Wat is hierdie?]])",\r
+       'captcha-createaccount-fail' => "Verkeerde of geen bevestigingkode.",\r
+);\r
+$wgConfirmEditMessages['ar'] = array(\r
+       'captcha-edit'                => 'يحتوي تعديلك هذا على وصلات خارجية. للحماية من السخام الأوتوماتيكي، قم من فضلك بحل المسألة الرياضية البسيطة أدناه وأدخل الحل في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):',\r
+       'captcha-createaccount'       => 'كحماية ضد العمليات التخريبية، يجب أن تدخل ناتج العملية الحسابية التالية لكي تنشأ حسابا: <br />([[Special:Captcha/help|ما هذا؟]])',\r
+       'captcha-createaccount-fail'  => 'كود غير مطابق أو لم تقم بإدخاله.',\r
+       'captcha-create'              => 'من فضلك قم بحل المسألة الرياضية التالية لإنشاء هذه الصفحة وأدخل\r
+الجواب في الصندوق ([[Special:Captcha/help|ما هذا؟]]):',\r
+       'captchahelp-title'           => 'مساعدة الكابتشا',\r
+       'captchahelp-text'            => 'عادة ما يتم في المواقع التي تقبل الردود والرسائل من العامة، كهذا الويكي، تخريب الموقع عن طريق الأشخاص الذين يستعملون آليات معينة لإرسال وصلاتهم لمواقع متعددة بصورة آلية. وعلى الرغم من أن هذا يمكن إزالته ولكنه مزعج للغاية.\r
+\r
+في بعض الأحيان، خصوصا عند إضافة وصلات لصفحة، ربما يعرض الويكي صورة ملونة أو مشوشة ويطلب منك إدخال كلمات موجودة بالصورة أو يعرض عليك مسألة رياضية عشوائية ويطلب منك حلها. ولأن هذه المهمة صعبة للغاية لأن يقوم بها برنامج، سيسمح هذا للأشخاص الآدميين بإضافة تحريراتهم بينما ستوقف البرامج التخريبية والهجمات الآلية الأخرى.\r
+\r
+للأسف سيكون هذا صعبا بالنسبة لمستخدمي المتصفحات المحدودة أو التي تعتمد على النصوص فقط أو قراءة النصوص. في الوقت الحالي لا يوجد لدينا بديل سمعي. من فضلك راسل مديري الموقع للمساعدة إذا كان هذا الأمر يمنعك من التعديل ووضع وصلات قانونية.\r
+\r
+إذا كنت تحرر صفحة معينة: اضغط زر \'العودة\' في متصفحك للعودة إلى التحرير.',\r
+);\r
+$wgConfirmEditMessages['br'] = array(\r
+       'captcha-edit'                => 'Liammoù diavaez nevez zo bet ouzhpennet ganeoc\'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc\'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-addurl'                => 'Liammoù diavaez nevez zo bet ouzhpennet ganeoc\'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc\'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-create'                => 'Liammoù diavaez nevez zo bet ouzhpennet ganeoc\'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc\'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-createaccount'       => 'A-benn hor skoazellañ d\'en em wareziñ diouzh ar c\'hrouiñ kontoù emgefre, skrivit ar gerioù a zeu war wel er stern-mañ evit enrollañ ho kont : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-createaccount-fail'  => 'Mankout a ra ar c\'hod kadarnaat pe fall eo.',\r
+       'captchahelp-title'           => 'Skoazell Capcha',\r
+       'captchahelp-text'            => 'Alies e vez taget al lec\'hiennoù a zegemer kemennadennoù a-berzh an holl, evel ar wiki-mañ, gant ar spamerien a implij ostilhoù emgefre evit postañ o liammoù war lec\'hiennoù a bep seurt. Diverket e c\'hallont bezañ, gwir eo, kazus-mat ez int memes tra. A-wechoù, dreist-holl pa vez ouzhpennet liammoù Web nevez war ur bajenn, e c\'hallo ar wiki-mañ diskouez deoc\'h ur skeudenn warni un tamm testenn liv pe a-dreuz. Goulennet e vo diganeoc\'h skrivañ ar gerioù deuet war wel. Un trevell start da emgefrekaat eo hemañ. Gant se e c\'hallo an implijerien wirion postañ ar pezh a fel ldezho tra ma vo lakaet un harz d\'an darn vrasañ eus ar spamerien pe d\'an dagerien robotek all. Koulskoude e c\'hallo an implijerien berr o gweled pe ar re a implij merdeerioù diazezet war ar skrid pe war ar vouezh bezañ strafuilhet gant se. N\'omp ket evit kinnig un diskoulm dre glevet evit c\'hoazh. Kit e darempred gant merourien al lec\'hienn m\'hoc\'h eus diaesterioù evit kemer perzh abalamour d\'an teknik-se. Pouezit war bouton \'kent\' ho merdeer evit distreiñ d\'ar bajenn gemmañ.',\r
+);\r
+$wgConfirmEditMessages['bs'] = array(\r
+       'captcha-edit'  => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captcha-addurl'  => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captcha-create'  => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captchahelp-text' => 'Vebsajtovi koji podržavaju slanje sadržaja iz javnosti, kao što je ovaj viki, često zloupotrebljavaju vandali koji koriste automatizovane alate da šalju svoje poveznice ka mnogim sajtovima.  Iako se ove neželjene poveznice mogu ukloniti, one ipak zadaju veliku muku.\r
+\r
+Ponekad, pogotovo kad se dodaju nove internet poveznice na stranicu, viki softver Vam može pokazati sliku obojenog i izvrnutog teksta i tražiti da ukucate traženu riječ.  Pošto je teško automatizovati ovakav zadatak, on omogućuje svim pravim ljudima da vrše svoje izmjene, ali će zato spriječiti vandale i ostale robotske napadače.\r
+\r
+Nažalost, ovo može da bude nepovoljno za korisnike sa ograničenim vidom i za one koji koriste brauzere bazirane na tekstu ili govoru.  U ovom trenutku, audio alternativa nije dostupna.  Molimo Vas da kontaktirate administratore sajta radi pomoći ako Vas ovo neočekivano ometa u pravljenju dobrih izmjena.\r
+\r
+Kliknite \'nazad\' (\'back\') dugme vašeg brauzera da se vratite na polje za unos teksta.',\r
+       'captcha-createaccount' => 'Kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje se nalaze na slici da biste registrovali nalog:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captcha-createaccount-fail' => 'Netačan unos ili nedostatak šifre za potvrđivanje.',\r
+);\r
+$wgConfirmEditMessages['ca'] = array(\r
+       'captcha-edit'                => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-addurl'                => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-create'                => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-createaccount'       => 'Com a protecció contra la creació automàtica de comptes d\'usuari necessitem que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-createaccount-fail'  => 'Manca el codi de confirmació, o bé és incorrecte.',\r
+       'captchahelp-title'           => 'Ajuda amb el sistema captcha',\r
+       'captchahelp-text'            => 'Els webs que accepten la publicació de missatges per part del seu públic, com aquesta wiki, són sovint víctimes de spam per part de robots automàtics que hi posen enllaços cap als seus webs. Aquests enllaços poden anar essent esborrats, però són un important destorb.\r
+\r
+Quan creeu nous comptes d\'usuari o voleu afegir enllaços a una pàgina se us pot demanar que respongueu una pregunta fàcil, una suma o que digueu quina paraula apareix en una imatge distorsionada. Aquestes tasques són molt difícils de fer per a un programa automàtic i per tant permet que la majoria d\'usuaris humans puguin introduir la informació que creguin i alhora atura la majoria d\'atacants robots.\r
+\r
+Malauradament, aquest sistema pot suposar un inconvenient per a usuaris amb problemes de visió o que utilitzin navegadors de text simple o de veu. Actualment no disposem de cap alternativa auditiva disponible. Contacteu els administradors del web si aquests sistema us impedeix de fer edicions legítimes.\r
+\r
+Necessitareu tenir les galetes activades en el vostre navegador per a que funcioni.\r
+\r
+Cliqueu el botó de retrocedir del vostre navegador per a tornar al formulari.',\r
+);\r
+$wgConfirmEditMessages['cs'] = array(\r
+       'captcha-edit'               => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captcha-addurl'               => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captcha-create'               => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captchahelp-title'          => 'Nápověda ke captcha',\r
+       'captchahelp-text'           => "Webové stránky, do kterých mohou přispívat jejich návštěvníci (jako například tato wiki), jsou často terčem spammerů, kteří pomocí automatických nástrojů vkládají své odkazy na velké množství stránek. Přestože lze tento spam odstranit, představuje nepříjemné obtěžování.\r
+\r
+Někdy, zvláště při přidávání nových webových odkazů, vám může wiki ukázat obrázek barevného či pokrouceného textu a požádat vás o opsání zobrazených znaků. Jelikož takovou úlohu lze jen těžko automatizovat, skuteční lidé mohou dále přispívat, zatímco většina spammerů a jiných robotických útočníků to zastaví.\r
+\r
+Bohužel to však může představovat nepříjemný problém pro uživatele se zrakovým postižením či uživatele používající textové prohlížeče či hlasové čtečky. V současné době nemáme alternativní zvukovou verzi. Kontaktujte laskavě správce serveru, pokud vám to brání v užitečných příspěvcích a potřebujete pomoc.\r
+\r
+Pro návrat na předchozí stránku stiskněte ve svém prohlížeči tlačítko „zpět“.",\r
+       'captcha-createaccount'      => 'V rámci ochrany před automatickým spamováním musíte pro provedení registrace opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captcha-createaccount-fail' => 'Chybějící či neplatný potvrzovací kód.',\r
+);\r
+$wgConfirmEditMessages['cy'] = array(\r
+       'captcha-edit'               => "Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captcha-addurl'               => "Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captcha-create'               => "Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captchahelp-title'          => 'Cymorth "captcha"',\r
+       'captchahelp-text'           => "Yn anffodus, mae safleoedd gwe fel Wicipedia, sy'n caniatau i'r cyhoedd ysgrifennu iddi, yn darged beunyddiol i sbamwyr sy'n defnyddio rhaglenni arbennig i bostio eu cysylltiadau. Gellir dileu'r dolenni o'r dudalen, ond mae hyn yn drafferth mawr. O dro i dro, fe fydd y safle hon yn dangos delwedd o destun, ac fe fydd yn rhaid i chi deipio'r geiriau a ddangosir. Mae hyn yn dasg anodd iawn i ragenni cyfrifiadurol, felly dylai golygwyr go iawn gyflawni'r dasg yn di-drafferth, yn wahanol i'r rhaglenni sbam. Mae hyn yn amlwg yn creu trafferthion i'r sawl sydd yn defnyddio porwyr testun neu sydd yn colli eu golwg. Ar hyn o bryd nid oes fersiwn sain ar gael. Cysylltwch â gweinyddwyr y safle os ydi'r nodwedd hon yn eich rhwystro rhag ychwanegu golygiadau dilys. Gwasgwch botwm 'nôl' eich porwr er mwyn dychwelyd.",\r
+       'captcha-createaccount'      => "Teipiwch y geiriau sy'n ymddangos yn y ddelwedd isod os gwelwch yn dda. Mae'r nodwedd hon yn rhwystro rhaglenni sbam rhag creu cyfrifon i'w hunain. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captcha-createaccount-fail' => "Côd cadarnhau ar goll neu'n anghywir.",\r
+);\r
+$wgConfirmEditMessages['de'] = array(\r
+       'captcha-edit'               => "Zur Bearbeitung der Seite ist es nötig, dass Sie die nachfolgende Rechenaufgabe lösen und das Ergebnis eintragen [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captcha-addurl'             => "Ihre Bearbeitung enthält neue externe Links. Zum Schutz vor automatisiertem Spamming ist es nötig, dass Sie die nachfolgende Rechenaufgabe lösen und das Ergebnis eintragen. Klicken Sie dann erneut auf „Seite speichern“ [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captcha-badpass'            => 'Zum Schutz vor einer Kompromittierung Ihres Benutzerkontos Sie die Summe der nachfolgende Zahlen in das darunter erscheinende Feld ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]]:',\r
+       'captcha-createaccount'      => "Zum Schutz vor automatisierter Anlage von Benutzerkonten müssen Sie einmalig die nebenstehende Rechenaufgabe lösen [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captcha-createaccount-fail' => "Falscher oder fehlender Bestätigungscode.",\r
+       'captcha-create'             => "Zur Erstellung der Seite ist es nötig, dass Sie die nachfolgende Rechenaufgabe lösen und das Ergebnis eintragen [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captchahelp-title'          => 'Captcha-Hilfe',\r
+       'captchahelp-cookies-needed' => "'''Wichtiger Hinweis:''' Es müssen Cookies im Browser erlaubt sein.",\r
+       'captchahelp-text'           => "Internetangebote, die für Beiträge von praktisch jedem offen sind — so wie das {{SITENAME}}-Wiki — werden oft von Spammern missbraucht, die ihre Links automatisch auf vielen Webseiten platzieren. Diese Spam-Links können wieder entfernt werden, sie sind aber ein erhebliches Ärgernis. In manchen Fällen, insbesondere beim Hinzufügen von neuen Weblinks zu einer Seite, kann es vorkommen, dass dieses Wiki ein Bild mit einem farbigen und verzerrten Text anzeigt und dazu auffordert, die angezeigten Wörter einzutippen. Da eine solche Aufgabe nur schwer automatisch erledigt werden kann, werden dadurch die meisten Spammer, die mit automatischen Werkzeugen arbeiten, gestoppt, wogegen menschliche Benutzer ihren Beitrag absenden können. Leider kann dies zu Schwierigkeiten für Personen führen, die über eine eingeschränkte Sehfähigkeit verfügen oder text- oder sprachbasierte Browser verwenden. Eine Lösung ist die reguläre Anmeldung als Benutzer. Der „Zurück“-Knopf des Browsers führt zurück in das Bearbeitungsfenster.",\r
+);\r
+\r
+$wgConfirmEditMessages['es'] = array(\r
+       'captcha-edit'                   => "La edición incluye nuevos enlaces. Como protección contra spam automatizado, es necesario que resuelva la suma e indique la solución en la casilla ([[Special:Captcha/help|más info]]):",\r
+       'captchahelp-title'          => 'Información sobre el captcha',\r
+       'captchahelp-cookies-needed' => "Debe tener las cookies activadas en el navegador para que el sistema funcione.",\r
+       'captchahelp-text'           => "Los webs que aceptan mensajes del público, como esta wiki, son abusados a menudo por spammers que utilizan programas para incluir automáticamente sus enlaces. Si bien estos enlaces pueden retirarse, son una gran molestia.\n\nEn ocasiones, especialmente cuando añada nuevos enlaces a una página, la wiki le mostrará una imagen de texto coloreado o distorsionado y le pedirá que escriba las palabras que muestra. Dado que esta es una tarea difícil de automatizar, permite a la mayoría de las personas enviar sus textos, a la vez que detiene spammers y otros atacantes automáticos.\n\nDesgraciadamente, esto puede ser un inconveniente para usuarios con visibilidad limitada o que usen navegadores de texto / de voz. No tenemos por el momento una alternativa sonora disponible. Por favor, solicite asistencia de los administradores si esto le impide realizar ediciones legítimas. Presione el botón atrás de su navegador para volver a la edición.",\r
+       'captcha-createaccount'      => "Como protección contra creaciones automatizadas de cuentas, es necesario que resuelva la suma y de la solución en la casilla ([[Special:Captcha/help|más info]]):",\r
+       'captcha-createaccount-fail' => "C&oacute;digo de confirmación incorrecto.",\r
+);\r
+\r
+$wgConfirmEditMessages['et'] = array(\r
+       'captcha-edit'               => "Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captcha-addurl'               => "Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captcha-create'               => "Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captchahelp-title'          => 'Mis on Captcha?',\r
+       'captchahelp-text'           => "Internetisaite, mis lubavad külastajatel sisu muuta (nagu ka see Viki), kasutavad sageli spämmerid ära, postitades reklaamlinke - spämmi. Kuigi neid linke saab alati ära võtta, on nad ikkagi üpris tülikad. Omale kasutajakontot registreerides või mõnele lehele uusi internetiaadresse postitades näidatakse teile moonutatud tekstiga pilti ning palutakse teil sisestada seal näidatud sõnad. Kuna selliselt pildilt on arvutil raske teksti välja lugeda, on see efektiivseks kaitseks spämmirobotite vastu, samas lubades tavainimestel oma muudatusi rahus teha. Kahjuks võib see tekitada ebamugavusi nägemisraskustega inimestele või neile, kes kasutavad kõnesüntesaatorit või tekstipõhist brauserit. Hetkel pole meil helipõhist alternatiivi. Kui teil tekib ootamatult raskusi oma muudatuste tegemisel, siis kirjutage sellest [[Vikipeedia:Üldine arutelu|üldise arutelu]] lehele. Konto registreerimise lehele või lehe redigeerimisele tagasi jõudmiseks vajutage oma brauseri tagasi-nuppu.",\r
+       'captcha-createaccount'      => "Kaitsena spämmi vastu peate konto registreerimiseks lahtrisse kirjutama järgneva tehte tulemuse.<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captcha-createaccount-fail' => "Puuduv või valesti sisestatud kinnituskood.",\r
+);\r
+$wgConfirmEditMessages['eu'] = array(\r
+       'captcha-edit'               => "Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captcha-addurl'               => "Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captcha-create'               => "Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captchahelp-title'          => 'Captcha laguntza',\r
+       'captchahelp-text'           => "Publikoki aldaketak egiteko aukerak dituzten webguneetan, wiki honetan bezalaxe, spam testuak gehitzen dira sarritan tresna automatikoak erabiliz. Lotura horiek ezabatu egin daitezkeen arren, traba dira. Batzutan, eta bereziki webgune berri bateko loturak gehitzen dituzunean, hitz batzuk dituen irudi bat agertuko zaizu, eta bertan ageri den testua idazteko eskatuko zaizu. Lan hori automatizatzeko zaila da, eta pertsonei ezer kostatzen ez zaigunez, spam testuak saihesteko lagungarria da. Zoritxarrez, ikusmen mugatua edo testu bidezko nabigatzaileak erabiltzen dituzten erabiltzeek arazoak izan ditzakete. Horrelako zerbait gertatzen bazaizu, mesedez, jarri administratzaileekin harremanetan. Zure nabigatzaileko 'atzera' lotura erabili aldaketen orrialdera itzultzeko.",\r
+       'captcha-createaccount'      => "Spam-a saihesteko, mesedez, irudian agertzen den hizki edo zenbaki kodea, beheko laukian idatzi zure kontua sortzeko:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captcha-createaccount-fail' => "Baieztatze kode ezegokia.",\r
+);\r
+\r
+$wgConfirmEditMessages['fi'] = array(\r
+       'captcha-edit'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-addurl'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-create'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-createaccount'      => 'Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-createaccount-fail' => 'Väärä tai puuttuva varmistuskoodi.',\r
+       'captchahelp-title'          => 'Captcha-ohje',\r
+       'captchahelp-text'           => "Verkkosivut, jotka sallivat ulkopuolisten lisätä sisältöä, joutuvat usein spam-hyökkäysten kohteeksi. Spam-hyökkäyksessä spammerit käyttävät työkaluja, jotka automaattisesti lisäävät linkkejä monille sivuille. Vaikka nämä linkit voidaan poistaa, aiheutuu niistä silti merkittävä haitta.\r
+\r
+Joskus, erityisesti kun lisäät uusia linkkejä, saatat nähdä kuvan, jossa on värillistä ja vääristynyttä tekstiä, ja sinua pyydetään kirjoittamaan sen sisältämät sanat. Koska tätä tehtävää on vaikea automatisoida, se sallii melkein kaikkien oikeiden ihmisten tehdä muutoksensa, mutta estää automaattiset lisäykset.\r
+\r
+Valitettavasti tämä saattaa estää käyttäjiä, joilla on rajoittunut näkökyky tai käyttäjiä, jotka käyttävät teksti- tai puhepohjaisia selaimia. Ota yhteyttä sivuston ylläpitäjään, jos et pysty tekemään kunnollisia muutoksia.\r
+\r
+Varmistus ei toimi, jos evästeet eivät ole käytössä.\r
+\r
+Voit palata muokkaustilaan selaimen paluutoiminnolla.",\r
+);\r
+$wgConfirmEditMessages['fr'] = array(\r
+       'captcha-edit' => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le spam automatique,\r
+       veuillez entrer le résultat de l’addition ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-addurl' => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le spam automatique,\r
+       veuillez entrer le résultat de l’addition ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-create' => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le spam automatique,\r
+       veuillez entrer le résultat de l’addition ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-createaccount' => 'Comme protection contre les créations de compte abusives, veuillez entrer le résultat de\r
+       l’addition dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-createaccount-fail' => "Code de confirmation erroné ou manquant.",\r
+       'captchahelp-title'          => 'Aide sur les captcha',\r
+       'captchahelp-cookies-needed' => "Vous devez avoir les cookies activés dans votre navigateur pour que cela fonctionne.",\r
+       'captchahelp-text'           => "Les site Web acceptant des contributions du public, comme ce wiki, sont souvent utilisés par des spammeurs qui utilisent des outils automatiques pour placer de nombreux liens vers leurs sites. Même si ces liens de « spam » peuvent être enlevés, ils représentent une nuisance.\r
+\r
+Parfois, en particulier lors de l’ajout de nouveaux liens externes à une page, le wiki peut vous montrer une image représentant un texte coloré ou tordu et vous demander de taper les mots montrés. Cette tâche est difficile à automatiser, et permet aux humains de faire leurs contributions tout en stoppant la plupart des spammeurs.\r
+\r
+Malheureusement, cette solution peut gêner les utilisateurs malvoyants ou utilisant un navigateur en texte seul. Nous ne disposons pas d’alternative audio pour l'instant. Veuillez contacter un administrateur du site si vous n’arrivez pas à faire vos contributions.\r
+\r
+Cliquez sur le bouton « Précédent » de votre navigateur pour revenir à la page d’édition.",\r
+);\r
+$wgConfirmEditMessages['ga'] = array(\r
+       'captcha-edit'               => "Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captcha-addurl'               => "Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captcha-create'               => "Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.\r
+\r
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.\r
+\r
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+       'captcha-createaccount'      => "Mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur chun cuntas a chlárú: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captcha-createaccount-fail' => "Ní raibh an cód deimhnithe ceart sa bhosca, nó ní raibh aon chód ann ar chor ar bith.",\r
+);\r
+$wgConfirmEditMessages['gl'] = array(\r
+       'captcha-edit'               => "A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de enlaces publicitarios necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captcha-addurl'               => "A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de enlaces publicitarios necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captcha-create'               => "A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de enlaces publicitarios necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captchahelp-title'          => 'Captcha axuda',\r
+       'captchahelp-text'           => "'''CAPTCHA''' (acrónimo de \"'''C'''ompletely '''A'''utomated '''P'''ublic '''T'''uring test to tell '''C'''omputers and '''H'''umans '''A'''part\") é un test de autentificación do tipo desafío-resposta usado nos contornos informáticos para distinguir usuarios humanos de máquinas. Os sitios web que aceptan publicar as contribucións dos usuarios coma este wiki sofren, con frecuencia, o abuso por parte de ''spammers'' que usan ferramentas que automatizan a inclusión de lixo en forma de enlaces publicitarios nunha chea páxinas en pouco tempo. Mentres ditas ligazóns non son eliminadas supoñen unha molestia e unha perda de tempo. En ocasións, en particular cando engada algún novo vínculo externo, o wiki pode mostrar unha imaxe dun texto coloreado e distorsionado e pedíralle que teclee as palabras mostradas. Como esta tarefa é difícil de automatizar permite distinguir entre persoas e robots, e dificulta os ataques automatizados dos ''spammers''. Por desgraza pode causar problemas a aqueles usuarios con dificultades de visión, ou os que utilicen navegadores de texto ou navegadores baseados en sistemas de voz. Polo de agora non dispoñemos dunha alternativa de audio. Por favor contacte cun [[Special:Listusers/sysop|administrador]] do wiki para solicitar axuda se o sistema lle impide rexistrase para facer contribucións lexítimas. Prema no botón 'atrás' ou equivalente do seu navegador para volver á páxina na que estaba.",\r
+       'captcha-createaccount'      => "Como protección fronte a sistemas de creación automática de contas de usuario usados polos ''spamers'', ten que teclear as palabras que aparecen na imaxe para rexistrar unha conta:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captcha-createaccount-fail' => "Falta o código de confirmación ou é incorrecto.",\r
+);\r
+$wgConfirmEditMessages['he'] = array(\r
+       'captcha-edit'               => 'כדי לערוך את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-addurl'             => 'עריכתכם כוללת קישורים חיצוניים חדשים. כהגנה מפני ספאם אוטומטי, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-badpass'            => 'כהגנה מפני פריצת סיסמאות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-createaccount'      => 'כהגנה מפני יצירת חשבונות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-createaccount-fail' => 'לא הקלדתם קוד אישור, או שהוא שגוי.',\r
+       'captcha-create'             => 'כדי ליצור את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captchahelp-cookies-needed' => "עליכם להפעיל את תכונת העוגיות (Cookies) בדפדפן שלכם כדי שזה יעבוד.",\r
+       'captchahelp-title'          => 'עזרה במערכת הגנת הספאם',\r
+       'captchahelp-text'           => "פעמים רבות מנצלים ספאמרים אתרים שמקבלים תוכן מהציבור, כמו הוויקי הזה, כדי לפרסם את הקישורים שלהם לאתרים רבים באינטרנט, באמצעות כלים אוטומטיים. אמנם ניתן להסיר את קישורי הספאם הללו, אך זהו מטרד משמעותי.\r
+\r
+לעיתים, בעיקר כשאתם מכניסים קישורי אינטרנט חדשים לתוך עמוד, הוויקי עשוי להראות תמונה של טקסט צבעוני או מעוקם ויבקש מכם להקליד את המילים המוצגות. כיוון שזו משימה שקשה לבצעה בצורה אוטומטית, הדבר יאפשר לבני־אדם אמיתיים לשלוח את הדפים, אך יעצור את רוב הספאמרים והמתקיפים הרובוטיים.\r
+\r
+לרוע המזל, הדבר עשוי לגרום לאי נוחות למשתמשים עם דפדפן בגרסה מוגבלת, או שמשתמשים בדפדפנים מבוססי טקסט או דיבור. כרגע, אין לנו חלופה קולית זמינה. אנא צרו קשר עם מנהלי האתר לעזרה אם המערכת מונעת מכם באופן בלתי צפוי לבצע עריכות לגיטימיות.\r
+\r
+אנא לחצו על הכפתור 'Back' בדפדפן שלכם כדי לחזור לדף העריכה.",\r
+);\r
+$wgConfirmEditMessages['hr'] = array(\r
+       'captcha-edit'               => "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])",\r
+       'captcha-addurl'               => "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])",\r
+       'captcha-create'               => "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])",\r
+       'captchahelp-title'          => 'Antispam pomoć',\r
+       'captchahelp-text'           => "Web poslužitelje koji rade na temelju javnih doprinosa, poput wiki, često zloupotrebljavaju spameri. Oni koriste automatske alate pomoću kojih generiraju poveznice od vlastitog interesa. Iako se te poveznice najčešće uklanjaju, mogu predstavljati neugodnost pri radu. Ponekad se dogodi da wiki prikaže sliku čudnog tekstualnog sadržaja uz koju morate unijeti prikazana slova. Budući da je takvu radnju teško automatizirati, većina se napadača obeshrabri, a pravi suradnici bez većih smetnji nastavljaju pridonositi. Ukoliko ste suradnik koji koristi tekstualni klijent te vas česte ovakve provjere ometaju pri dodavanju važećih sadržaja, molimo da se obratite [[Special:Listusers/sysop|administratorima]].",\r
+       'captcha-createaccount'      => "Kao zaštitu od automatskog spama, pri otvaranju računa trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć]])",\r
+       'captcha-createaccount-fail' => "Potvrdni kod je nepotpun ili netočan.",\r
+);\r
+$wgConfirmEditMessages['hsb'] = array(\r
+       'captcha-edit'                => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',\r
+       'captcha-addurl'                => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',\r
+       'captcha-create'                => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',\r
+       'captcha-createaccount'       => 'Jako škitna naprawa přećiwo awtomatiskemu wutworjenju wužiwarskich kontow dyrbiš slědowacy nadawk wuličeć. [[{{ns:special}}:Captcha/help|(Prašenja abo problemy?)]]',\r
+       'captcha-createaccount-fail'  => 'Wopačny abo pobrachowacy wuslědk.',\r
+       'captchahelp-title'           => 'Pomoc z captcha',\r
+       'captchahelp-text'            => 'Sydła kaž {{SITENAME}}, kotrež móža so swobodnje wot kóždeho wobdźěłować su často z woporom spamarjow, kotřiž swoje wotkazy awtomatisce we wjele sydłach broja. Tute spam-wotkazy móža so zaso wotstronjeć, wubudźa pak njesnadne mjerzanje. W někotrych padach, wosebje při přidawanju nowych eksternych wotkazow, móže so stać, zo pokazuje tutón wiki wobraz z pisanym abo skomolenym tekstom abo kaza jednory ličenski nadawk wuličeć, kotrehož wuslědk dyrbi so potom do zapodawanskeho kašćika zapisować. Dokelž hodźi so tajki nadawk jenož ćežko z awtomatiskimi srědkami spamarjow spjelnić, móža so tajcy wotdźeržować, druzy wužiwarjo pak móža swoje změny składować. Bohužel móže to k wobćežnosćam za tutych wužiwarjow dowjesć, kotrychž kmanosć widźenja je wobmjezowana abo kotřiž dźěłaja z wobhladowakami kiž su na tekstowe abo rěčne wudawanje wusměrjene. Móžne rozrisanje tutoho problema je přizjewjenje jako wužiwar. Tłóčatko „Wróćo” swojeho wobhladowaka dowjedźe tebje zaso do wobdźěłowanskeho pola.',\r
+);\r
+$wgConfirmEditMessages['id'] = array(\r
+       'captcha-edit'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captcha-addurl'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captcha-create'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captchahelp-title'          => 'Mengenai Captcha',\r
+       'captchahelp-cookies-needed' => "Anda perlu mengaktifkan cookie pada penjelajah web Anda untuk menggunakan fitur ini.",\r
+       'captchahelp-text'           => "Situs-situs web yang menerima masukan data dari publik, seperti {{ns:project}} ini, kerapkali disalahgunakan oleh pengguna-pengguna yang tidak bertanggungjawab untuk mengirimkan spam dengan menggunakan program-program otomatis. Walaupun spam-spam tersebut dapat dibuang, tetapi tetap saja menimbulkan gangguan berarti.\r
+\r
+Ketika menambahkan pranala web baru ke suatu halaman, {{ns:project}} akan menampilkan sebuah gambar tulisan yang terdistorsi atau suatu perhitungan sederhana dan meminta Anda untuk mengetikkan kata atau hasil dimaksud. Karena ini merupakan suatu pekerjaan yang sulit diotomatisasi, pembatasan ini akan mengizinkan hampir semua manusia untuk melakukannya, tapi di sisi lain akan menghentikan kebanyakan aksi spam dan penyerangan yang dilakukan oleh bot otomatis.\r
+\r
+Sayangnya, hal ini dapat menimbulkan kesulitan bagi pengguna dengan keterbatasan penglihatan atau pengguna yang menggunakan penjelajah basis teks atau suara. Saat ini, kami tidak memiliki suatu alternatif suara untuk hal ini. Silakan minta bantuan dari pengurus situs jika hal ini menghambat Anda untuk mengirimkan suntingan yang layak.\r
+\r
+Tekan tombol 'back' di penjelajah web Anda untuk kembali ke halaman penyuntingan.",\r
+       'captcha-createaccount'      => "Sebagai perlindungan melawan spam, Anda diharuskan untuk mengetikkan kata atau hasil perhitungan di bawah ini di kotak yang tersedia untuk dapat mendaftarkan pengguna baru:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captcha-createaccount-fail' => "Kode konfirmasi salah atau belum diisi.",\r
+);\r
+$wgConfirmEditMessages['is'] = array(\r
+       'captcha-edit'               => "Breyting þín fól í sér nýja tengla á aðrar vefsíður. Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captcha-addurl'               => "Breyting þín fól í sér nýja tengla á aðrar vefsíður. Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captcha-create'               => "Breyting þín fól í sér nýja tengla á aðrar vefsíður. Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captchahelp-title'          => 'Captcha-hjálp',\r
+       'captchahelp-text'           => "Vefsíður sem að leyfa framlög frá frá almenningi, líkt og þessi wiki-vefur, eru oft misnotaðar af svokölluðum „spömmurum“ sem nota sjálfvirk tól til þess að setja inn tengla á aðrar vefsíður. Aðrir notendur geta fjarlægt þessa tengla en töluverð truflun er af þeim.\r
+\r
+Stundum þegar þú breytir síðum, sérstaklega ef breytingin felur í sér nýja tengla á aðra vefi, getur gerst að þú sért beðin(n) um að skrifa inn orð sem birtast á lituðum eða óskýrum myndum. Fyrir flesta notendur af holdi og blóði er þetta lítið mál en sjálfvirk tól ráða ekki við þetta.\r
+\r
+Því miður kann þetta að valda notendum óþægindum sem hafa skerta sjón eða notast við talmálsvafra. Enn sem komið er eru ekki til aðrir valkostir fyrir þau tilvik. Ef þetta kemur í veg fyrir lögmætar breytingar af þinni hálfu getur þú leitað aðstoðar hjá stjórnendum vefsins.\r
+\r
+Notaðu „back“-hnapp vafrans til að halda áfram.",\r
+       'captcha-createaccount'      => "Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd áður en þú skráir notandanafn: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captcha-createaccount-fail' => "Staðfestingarkóðinn var rangur eða ekki til staðar.",\r
+);\r
+$wgConfirmEditMessages['it'] = array(\r
+       'captcha-edit'               => "La modifica richiesta aggiunge dei nuovi collegamenti (URL) alla pagina; come misura precauzionale contro l'inserimento automatico di spam, per confermarla è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Special:Captcha/help|Cosa vuol dire?]])",\r
+       'captcha-addurl'               => "La modifica richiesta aggiunge dei nuovi collegamenti (URL) alla pagina; come misura precauzionale contro l'inserimento automatico di spam, per confermarla è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Special:Captcha/help|Cosa vuol dire?]])",\r
+       'captcha-create'               => "La modifica richiesta aggiunge dei nuovi collegamenti (URL) alla pagina; come misura precauzionale contro l'inserimento automatico di spam, per confermarla è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Special:Captcha/help|Cosa vuol dire?]])",\r
+       'captchahelp-title'          => "Cos'è il captcha?",\r
+       'captchahelp-text'           => "Capita spesso che i siti Web che accettano messaggi pubblici, come questo wiki, siano presi di mira da spammer che usano strumenti automatici per inserire collegamenti pubblicitari verso un gran numero di siti. Per quanto i collegamenti indesiderati si possano rimuovere, si tratta comunque di una seccatura non indifferente.\r
+\r
+In alcuni casi, ad esempio quando si tenta di aggiungere nuovi collegamenti Web in una pagina, il software wiki può mostrare una immagine con un breve testo colorato e/o distorto chiedendo di riscriverlo in un'apposita finestrella. Poiché si tratta di un'azione difficile da replicare da parte di un computer, questo meccanismo consente a (quasi tutti) gli utenti reali di completare l'inserimento desiderato, impedendo l'accesso alla maggior parte degli spammer e degli altri attacchi automatizzati.\r
+\r
+Sfortunatamente, queste misure di sicurezza possono mettere in difficoltà gli utenti con problemi visivi o coloro che utilizzano browser testuali o basati sulla sintesi vocale. Purtroppo al momento non è disponibile un meccanismo alternativo basato su messaggi audio; se queste procedure impediscono l'inserimento informazioni che si ritengono legittime, si prega di contattare gli amministratori del sito e chiedere loro assistenza.\r
+\r
+Fare clic sul pulsante 'back' del browser per tornare alla pagina di modifica.",\r
+       'captcha-createaccount'      => "Come misura di sicurezza nei confronti dei messaggi di spam automatici, per registrarsi è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Speciale:Captcha/help|Cosa vuol dire?]])",\r
+       'captcha-createaccount-fail' => "Codice di verifica errato o mancante.",\r
+);\r
+\r
+$wgConfirmEditMessages['ja'] = array(\r
+       'captcha-edit'                => 'このページを編集するには下記に現れる数式の答えを入力してください。<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captcha-addurl'              => 'あなたの編集には新たに外部リンクが追加されています。スパム防止のため、下記の数式の答えを入力してください<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captcha-createaccount'       => 'スパム防止のため、アカウントを登録するには、下記に現れる数式の答えを入力してください<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captcha-createaccount-fail'  => '確認コードの入力がないか、間違っています。',\r
+       'captcha-create'              => 'あなたの編集は新たに外部リンクが追加されています。スパム防止のため、下記に現れる数式の答えを入力してください<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captchahelp-title'           => 'Captcha ヘルプ',\r
+       'captchahelp-text'            => '当Wikiのような、投稿が公開されているウェブサイトは、多くのサイトに自分たちへのリンクを自動投稿するツールを用いるスパマーにより荒らされます。これらのスパムは除去できるものの、その作業大変うっとうしいものです。\r
+\r
+時々、特に新しいリンクをページに追加したとき、Wikiは色の付いた、もしくは、ゆがめられた文字を提示し、その入力をお願いすることがあります。この作業は自動化が難しいため、本当の人間の投稿を可能にしつつ、多くのスパマーやロボットの攻撃を防ぐことが出来ます。\r
+\r
+しかし、残念なことに、テキストベースやスピーチベースのブラウザを使っている、視覚障害者に不便をおかけする場合があります。現時点では、音声版の代替物がありません。正当な投稿をするにあたって、これが障害となっている場合、サイト管理者に連絡し、協力を求めてください。\r
+\r
+編集ページに戻るには、ブラウザの戻るボタンを押してください。',\r
+);\r
+\r
+$wgConfirmEditMessages['kk-kz'] = array(\r
+       'captcha-edit'              => "Бұл бетті өңдеу үшін, \r
+төмендегі қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-addurl'              => "Түзетуіңізде жаңа сыртқы сілтемелер бар екен. Өздік түрде «спам» жасалуынан қорғану үшін,\r
+төмендегі қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-create'              => "Жаңа бетті бастау үшін,\r
+төмендегі қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-createaccount'      => "Жаңа тіркелгі өздік түрде жасалуынан қорғану үшін, төмендегі қосындылауды \r
+шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-createaccount-fail' => "Куәландыру коды дұрыс емес немесе жоқ.",\r
+       'captchahelp-cookies-needed' => "Бұл жұмысты істеу үшін, шолғышыңызда  «cookies»  дегенді ендіріңіз.",\r
+       'captchahelp-title'          => 'CAPTCHA анықтамасы',\r
+       'captchahelp-text'           => "Өздік құралдары бар «спаммерлер», баршадан жіберілген хабарды қабылдайтын, бұл уики сияқты, веб-тораптарға сілтемелерімен жиі жаудырады. Осындай «спам» сілтемелерін аластау болғанда да, бұл мәнді ыза келтіреді.\r
+\r
+Кейде, әсіресе бетке жаңа веб сілтемесін қосқанда, уики өңі өзгерген не қисайған мәтінді көрсетіп және сол сөздерді енгізу сұрауы мүмкін. Бұл тапсырыс өздік түрде атқару өте қиын, сондықтан бұл иманды адам көпшілігіне кедергі болмайды, бірақ «спаммерлерді» және бұзақы ботпен басқа шабуыл жасағандарды тоқтатады.\r
+\r
+Өкінішке орай, бұл көруі төмендеген, немесе мәтін не дауыс негізіндегі шолғышты қолданатын пайдаланушыға ыңғайсыздық келтіруге мүмкін. Осы қазір бізде дыбысты балама жоқ. Егер бұл адал жазуыңызға кедергілесе, торап бақылаушыларына қатынасыңыз.\r
+\r
+Бұл жұмысты істеу үшін шолғышыңызда «cookies» дегенді ендіру қажет.\r
+\r
+Бет өңдеуіне қайту бару үшін «Артқа» деген түймесін басыңыз.",\r
+);\r
+$wgConfirmEditMessages['kk-tr'] = array(\r
+       'captcha-edit'              => "Bul betti öñdew üşin, \r
+tömendegi qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-addurl'              => "Tüzetwiñizde jaña sırtqı siltemeler bar eken. Özdik türde «spam» jasalwınan qorğanw üşin,\r
+tömendegi qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-create'              => "Jaña betti bastaw üşin,\r
+tömendegi qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-createaccount'      => "Jaña tirkelgi özdik türde jasalwınan qorğanw üşin, tömendegi qosındılawdı \r
+şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-createaccount-fail' => "Kwälandırw kodı durıs emes nemese joq.",\r
+       'captchahelp-cookies-needed' => "Bul jumıstı istew üşin, şolğışıñızda  «cookies»  degendi endiriñiz.",\r
+       'captchahelp-title'          => 'CAPTCHA anıqtaması',\r
+       'captchahelp-text'           => "Özdik quraldarı bar «spammerler», barşadan jiberilgen xabardı qabıldaýtın, bul wïkï sïyaqtı, veb-toraptarğa siltemelerimen jïi jawdıradı. Osındaý «spam» siltemelerin alastaw bolğanda da, bul mändi ıza keltiredi.\r
+\r
+Keýde, äsirese betke jaña veb siltemesin qosqanda, wïkï öñi özgergen ne qïsaýğan mätindi körsetip jäne sol sözderdi engizw surawı mümkin. Bul tapsırıs özdik türde atqarw öte qïın, sondıqtan bul ïmandı adam köpşiligine kedergi bolmaýdı, biraq «spammerlerdi» jäne buzaqı botpen basqa şabwıl jasağandardı toqtatadı.\r
+\r
+Ökinişke oraý, bul körwi tömendegen, nemese mätin ne dawıs negizindegi şolğıştı qoldanatın paýdalanwşığa ıñğaýsızdıq keltirwge mümkin. Osı qazir bizde dıbıstı balama joq. Eger bul adal jazwıñızğa kedergilese, torap baqılawşılarına qatınasıñız.\r
+\r
+Bul jumıstı istew üşin şolğışıñızda «cookies» degendi endirw qajet.\r
+\r
+Bet öñdewine qaýtw barw üşin «Artqa» degen tüýmesin basıñız.",\r
+);\r
+$wgConfirmEditMessages['kk-cn'] = array(\r
+       'captcha-edit'              => "بۇل بەتتٴى ٴوڭدەۋ ٴۇشٴىن, \r
+تٴومەندەگٴى قوسىندىلاۋدى شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-addurl'              => "تٴۇزەتۋٴىڭٴىزدە جاڭا سىرتقى سٴىلتەمەلەر بار ەكەن. ٴوزدٴىك تٴۇردە «سپام» جاسالۋىنان قورعانۋ ٴۇشٴىن,\r
+تٴومەندەگٴى قوسىندىلاۋدى شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-create'              => "جاڭا بەتتٴى باستاۋ ٴۇشٴىن,\r
+تٴومەندەگٴى قوسىندىلاۋدى شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-createaccount'      => "جاڭا تٴىركەلگٴى ٴوزدٴىك تٴۇردە جاسالۋىنان قورعانۋ ٴۇشٴىن, تٴومەندەگٴى قوسىندىلاۋدى \r
+شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-createaccount-fail' => "كۋٴالاندىرۋ كودى دۇرىس ەمەس نەمەسە جوق.",\r
+       'captchahelp-cookies-needed' => "بۇل جۇمىستى ٴىستەۋ ٴۇشٴىن, شولعىشىڭىزدا  «cookies»  دەگەندٴى ەندٴىرٴىڭٴىز.",\r
+       'captchahelp-title'          => 'CAPTCHA انىقتاماسى',\r
+       'captchahelp-text'           => "ٴوزدٴىك قۇرالدارى بار «سپاممەرلەر», بارشادان جٴىبەرٴىلگەن حاباردى قابىلدايتىن, بۇل ۋيكي سيياقتى, ۆەب-توراپتارعا سٴىلتەمەلەرٴىمەن جيٴى جاۋدىرادى. وسىنداي «سپام» سٴىلتەمەلەرٴىن الاستاۋ بولعاندا دا, بۇل مٴاندٴى ىزا كەلتٴىرەدٴى.\r
+\r
+كەيدە, ٴاسٴىرەسە بەتكە جاڭا ۆەب سٴىلتەمەسٴىن قوسقاندا, ۋيكي ٴوڭٴى ٴوزگەرگەن نە قيسايعان مٴاتٴىندٴى كٴورسەتٴىپ جٴانە سول سٴوزدەردٴى ەنگٴىزۋ سۇراۋى مٴۇمكٴىن. بۇل تاپسىرىس ٴوزدٴىك تٴۇردە اتقارۋ ٴوتە قيىن, سوندىقتان بۇل يماندى ادام كٴوپشٴىلٴىگٴىنە كەدەرگٴى بولمايدى, بٴىراق «سپاممەرلەردٴى» جٴانە بۇزاقى بوتپەن باسقا شابۋىل جاساعانداردى توقتاتادى.\r
+\r
+ٴوكٴىنٴىشكە وراي, بۇل كٴورۋٴى تٴومەندەگەن, نەمەسە مٴاتٴىن نە داۋىس نەگٴىزٴىندەگٴى شولعىشتى قولداناتىن پايدالانۋشىعا ىڭعايسىزدىق كەلتٴىرۋگە مٴۇمكٴىن. وسى قازٴىر بٴىزدە دىبىستى بالاما جوق. ەگەر بۇل ادال جازۋىڭىزعا كەدەرگٴىلەسە, توراپ باقىلاۋشىلارىنا قاتىناسىڭىز.\r
+\r
+بۇل جۇمىستى ٴىستەۋ ٴۇشٴىن شولعىشىڭىزدا «cookies» دەگەندٴى ەندٴىرۋ قاجەت.\r
+\r
+بەت ٴوڭدەۋٴىنە قايتۋ بارۋ ٴۇشٴىن «ارتقا» دەگەن تٴۇيمەسٴىن باسىڭىز.",\r
+);\r
+$wgConfirmEditMessages['kk'] = $wgConfirmEditMessages['kk-kz'];\r
+$wgConfirmEditMessages['la'] = array(\r
+       'captcha-edit'               => "Emendatione tua insunt nexus URL; ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captcha-addurl'               => "Emendatione tua insunt nexus URL; ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captcha-create'               => "Emendatione tua insunt nexus URL; ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captchahelp-title'          => 'Captcha auxilium',\r
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.\r
+\r
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.\r
+\r
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+       'captcha-createaccount'      => "Ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur, priusquam rationem possis creare. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captcha-createaccount-fail' => "Codex affirmationis aut non scriptus est aut male.",\r
+);\r
+$wgConfirmEditMessages['lv'] = array(\r
+       'captcha-edit'               => "Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captcha-addurl'               => "Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captcha-create'               => "Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Interneta lapas, kurās iespējams pievienot tekstu, kā šajā wiki, bieži cieš no mēstuļotājiem, kuri izmanto automatizētus līdzekļus, lai pievienotu savus saites daudzās jo daudzās interneta lapās. Kaut arī šīs saites var viegli dzēst, tomēr tās ir nozīmīgs traucēklis. Reizēm, jo īpaši pievienojot jaunas interneta saites, wiki programmatūra var parādīt Tev attēlu, kurā ir krāsains vai sagrozīts teksts. Šis teksts ir jāpārraksta un to ir ļoti grūti izdarīt automātiski, tā apgrūtinot lielāko daļu mēstuļotāju, savukārt gandrīz visi parastie lietotāji to var izdarīt bez grūtībām. Diemžēl tas var apgrūtināt lietotājus, kuriem ir redzes traucējumi vai kuri izmanto teksta pārlūkus vai dzirdes pārlūkus. Šobrīd nav pieejama audio alternatīva, bet sazinies ar wiki administratoriem, ja tas liedz Tev veikt labi domātus papildinājumus. Spied pārlūka pogu \"Atpakaļ\" (''Back''), lai atgrieztos iepriekšējā lapā.",\r
+       'captcha-createaccount'      => "Lai pasargātos no automātiskas mēstuļošanas, Tev reģistrējoties ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captcha-createaccount-fail' => "Nepareizs apstiprinājuma kods vai arī tas nav ievadīts.",\r
+);\r
+$wgConfirmEditMessages['nl'] = array(\r
+       'captcha-edit'               => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captcha-addurl'               => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captcha-create'               => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Websites die vrij te bewerken zijn, zoals deze wiki, worden vaak misbruikt door spammers die er met hun programma's automatisch links op zetten naar vele websites. Hoewel deze externe links weer verwijderd kunnen worden, leveren ze wel veel hinder en administratief werk op.\r
+\r
+Soms, en in het bijzonder bij het toevoegen van externe links op pagina's, toont de wiki u een afbeelding met gekleurde of vervormde tekst en wordt u gevraagd de getoonde tekst in te voeren. Omdat dit proces lastig te automatiseren is, zijn vrijwel alleen mensen in staat dit proces succesvol te doorlopen en worden hiermee spammers en andere geautomatiseerde aanvallen geweerd.\r
+\r
+Helaas levert deze bevestiging voor gebruikers met een visuele handicap of een tekst- of spraakgebaseerde browser problemen op. Op het moment is er geen alternatief met geluid beschikbaar. Vraag alstublieft assistentie van de sitebeheerders als dit proces u verhindert een nuttige bijdrage te leveren.\r
+\r
+Klik op de knop 'terug' in uw browser om terug te gaan naar het tekstbewerkingsscherm.",\r
+       'captcha-createaccount'      => "Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn om uw gebruiker aan te maken:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captcha-createaccount-fail' => "Onjuiste bevestigingscode of niet ingevuld.",\r
+);\r
+$wgConfirmEditMessages['no'] = array(\r
+       'captcha-edit'               => "Din redigering inkluderer nye lenker; som en beskyttelse mot automatisert spam er du nødt til skrive inn ordene i dette bildet:\r
+<br />([[Special:Captcha/help|Hva er dette?]])",\r
+       'captcha-addurl'               => "Din redigering inkluderer nye lenker; som en beskyttelse mot automatisert spam er du nødt til skrive inn ordene i dette bildet:\r
+<br />([[Special:Captcha/help|Hva er dette?]])",\r
+       'captcha-create'               => "Din redigering inkluderer nye lenker; som en beskyttelse mot automatisert spam er du nødt til skrive inn ordene i dette bildet:\r
+<br />([[Special:Captcha/help|Hva er dette?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Internettsider som kan redigeres av alle, som denne wikien, blir ofte misbrukt av spammere som bruker roboter for å poste massive antall lenker. Selv om slike spamlenker kan fjernes er de til betydelig irritasjon.\r
+\r
+Noen ganger, særlig hvis du vil legge til nye internettlenker til en side, kan wikien vise deg et bilde av en farvet eller ujevn tekst og be deg skrive inn ordene som vises. Siden det er vanskelig å automatisere denne oppgaven, vil funksjonen slippe de fleste virkelige mennesker igjennom, men stoppe spammere.\r
+\r
+Dessverre finnes det i øyeblikket ikke noe audioalternativ for brukere med begrenset syn som som bruker tekst- eller talebaserte nettlesere. Vennlig kontakt administratorene hvis denne funksjonen forhindrer deg i å foreta legitime endringer.\r
+\r
+Trykk på «tilbake»-knappen for å komme tilbake til redigeringssiden.",\r
+       'captcha-createaccount'      => "For å beskytte Wikipedia mot spam må du skrive inn ordene i bildet for å registrere en konto.\r
+<br />([[Special:Captcha/help|Hva er dette?]])\r
+",\r
+       'captcha-createaccount-fail' => "Feil eller manglende bekreftelseskode.",\r
+);\r
+$wgConfirmEditMessages['nn'] = array(\r
+       'captcha-edit'               => "Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captcha-addurl'               => "Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captcha-create'               => "Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Internettsider som kan bli endra av alle, som denne wikien, blir ofte misbruka av reklameinnleggjarar (spammarar) som nyttar robotar til å poste store tal lenkjer. Sjølv om slike reklamelenkjer kan bli fjerna er dei til betydelig irritasjon. Nokon gonger, særleg viss du vil leggje til nye internettlenker til ei side, kan wikien vise deg eit bilete av ein farga eller ujamn tekst og be deg skrive inn orda som blir visa. Sidan det er vanskeleg å automatisere denne oppgåva, vil funksjonen slippe dei fleste verkelege menneska gjennom, men stoppe reklamerobotar. Diverre finst det i augeblikket ikkje noko lydalternativ for brukarar med nedsett syn som brukar tekst- eller talebaserte nettlesarar. Ver venleg å kontakte administratorane viss denne funksjonen hindrar deg i å foreta legitime endringar. Trykk på «tilbake»-knappen for å komma tilbake til redigeringssida.",\r
+       'captcha-createaccount'      => "For å verne Wikipedia mot reklame (spam) må du skrive inn orda i biletet for å registrere ein konto. <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captcha-createaccount-fail' => "Feil eller manglande godkjenningskode.",\r
+);\r
+$wgConfirmEditMessages['oc'] = array(\r
+       'captcha-edit'                => 'Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu\'es aquò?]])',\r
+       'captcha-addurl'                => 'Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu\'es aquò?]])',\r
+       'captcha-create'                => 'Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu\'es aquò?]])',\r
+       'captcha-createaccount'       => 'Coma proteccion contra las creacions de compte abusivas, entratz lo resultat de l’addicion dins la boita çai jos:<br />\r
+([[Special:Captcha/help|mai d’informacions]])',\r
+       'captcha-createaccount-fail'  => 'Còde de confirmacion mancant o erronèu.',\r
+       'captchahelp-title'           => 'Ajuda suls Captcha',\r
+       'captchahelp-text'            => 'Los sites webs que permeton al mai grand nombre de participar, coma aqueste wiki, son sovent atacats per de spammers qu\'utilizan d\'espleches automatizas per mandar lor ligams sus de fòrça sites sulcòp. Son fòrt aisits de suprimir mas avèm francament de causas mai risolièras de far. De còps quand ajustatz de ligams novèls vèrs lo web, lo wiki pòt vos mostrar un imatge amb un tèxt coloriat o torçut e vos demandar de lo picar. Es una tasca relativament complicada d\'automatizar, çò que permet de diferenciar un uman real d\'un logicial automatic malvolent. Malaürosament, aqueste sistèma es pas adaptat a d\'utilizaires mal-vesents o utilizant de navigaires textuals o audiò. Actualament, prepausem pas d\'alternativas adaptadas. Se avètz besonh d\'ajuda esitetz pas a contactar los administrators del sit. Clicatz sul boton \'precedent\' de vòstre navegaire per tornar a l\'editor.',\r
+);\r
+$wgConfirmEditMessages['pt'] = array(\r
+       'captcha-edit'               => "Para editar esta página será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])",\r
+       'captcha-addurl'             => "Sua edição inclui novas ligações externas; como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])",\r
+       'captcha-badpass'            => 'Como prevenção contra formas automatizadas de pesquisa e descoberta de senhas, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]]',\r
+       'captcha-create'             => "Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])",\r
+       'captchahelp-title'          => 'Ajuda com o Captcha',\r
+       'captchahelp-cookies-needed' => "Você precisará ter cookies habilitados em seu navegador para que possa funcionar",\r
+       'captchahelp-text'           => "Sítios abertos a inserções públicas, como é o caso deste wiki, são vulneráveis a spammers que utilizem ferramentas automatizadas para inserir seus links em diversos locais. Remover tais links posteriormente poderá ser um significativo incômodo.\r
+\r
+Algumas vezes, especialmente ao adicionar novos links externos em uma página, o sistema exibirá uma imagem com um texto colorido ou distorcido e pedirá que você digite as palavras exibidas. Uma vez que essa é uma tarefa um tanto difícil de ser automatizada, ela possibilita que vários humanos façam as suas inserções ao mesmo tempo que inibe as que forem feitas por spammers e mecanismos automatizados.\r
+\r
+Infelizmente, isso pode ser dificultoso a utilizadores com limitações visuais ou que naveguem através de  mecanismos baseados em texto ou baseados em voz. No momento não há uma alternativa em áudio. Por gentileza, contacte os administradores do sítio em casos que seja necessária a assistência de alguém para que você possa fazer as suas inserções legítimas.\r
+\r
+Pressione o botão 'voltar' de seu navegador para retornar à página de edição.",\r
+       'captcha-createaccount'      => "Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem para que possa se cadastrar:<br />\r
+([[Special:Captcha/help|O que é isto?]])",\r
+       'captcha-createaccount-fail' => "Código incorreto ou não preenchido.",\r
+);\r
+$wgConfirmEditMessages['pt-br'] = $wgConfirmEditMessages['pt'];\r
+$wgConfirmEditMessages['ro'] = array(\r
+       'captcha-edit'                => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-addurl'                => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-create'                => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-createaccount'       => 'Pentru a evita crearea automată de conturi, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-createaccount-fail'  => 'Cod de confirmare incorect sau lipsă.',\r
+       'captchahelp-title'           => 'Despre „Captcha”',\r
+       'captchahelp-text'            => 'Siturile Web care acceptă postări din partea publicului, precum acest wiki, sunt de obicei abuzate de persoane care folosesc unelte automate pentru a introduce legături către multe situri. Deşi aceste legături de spam pot fi scoase, acest lucru reprezintă o muncă inconvenientă.\r
+\r
+Uneori, mai ales la adăugarea de legături web noi într-o pagină, situl wiki vă poate arăta o imagine cu un text colorat sau distorsionat şi ruga să introduceţi cuvintele arătate. Deoarece aceasta este o sarcină greu de automatizat, va permite majorităţii persoanelor reale să posteze şi va opri majoritatea atacatorilor.\r
+\r
+Din nefericire, această metodă îi poate deranja pe utilizatorii cu vedere limitată sau care folosesc browsere bazate pe text sau sunet. În acest moment nu avem o alternativă audio disponibilă. Vă rugăm, contactaţi administratorii sitului pentru asistenţă dacă metoda vă opreşte de la a face postări legitime.\r
+\r
+Va fi nevoie ca browserul folosit să suporte module cookie.',\r
+);\r
+$wgConfirmEditMessages['ru'] = array(\r
+       'captcha-edit'               => "Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captcha-addurl'               => "Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captcha-create'               => "Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captchahelp-title'          => 'Справка о CAPTCHA',\r
+       'captchahelp-text'           => "Вебсайты позволяющие добавлять и изменять своё содержимое, в том числе вики, часто становятся целью спамеров, использующих программы для автоматического добавления ссылок. Хотя такие ссылки могут быть удалены, они являются существенной помехой.\r
+\r
+Иногда, например при добавлении на страницу новой веб-ссылки, вики может показать вам картинку с цветным или искажённым текстом и предложить ввести текст, который вы видите. Так как подобная задача трудноавтоматизируема, это даёт возможность большинству людей разместить свои изменения, в то время как большинство спамерских и вандальных программ не могут это сделать.\r
+\r
+К сожалению, подобная защита может причинить неудобства людям с ограничениями по зрению или тем, кто использует читающие браузеры. В настоящее время у нас нет звуковой альтернативы данной проверке. Пожалуйста, обратитесь за помощью к администраторам, если подобная проверка мешает вам добросовестно работать с сайтом.\r
+\r
+Нажмите кнопку «Назад» в ваше браузере, чтобы вернуться к редактированию.",\r
+       'captcha-createaccount'      => "В качестве меры против автоматического спама, вы должны ввести буквы, изображённые на картинке, чтобы зарегистрироваться в системе:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captcha-createaccount-fail' => "Код подтверждения отсутствует или неверен.",\r
+);\r
+$wgConfirmEditMessages['sk'] = array(\r
+       'captcha-edit'                => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',\r
+       'captcha-addurl'                => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',\r
+       'captcha-create'                => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',\r
+       'captcha-createaccount'       => 'Kvôli ochrane proti automatizovanému spamu je potrebné napísať slová zobrazené na tomto obrázku, až potom bude vytvorený nový účet:\r
+<br />([[Special:Captcha/help|Čo je toto?]])',\r
+       'captcha-createaccount-fail'  => 'Nesprávny alebo chýbajúci potvrdzovací kód.',\r
+       'captchahelp-title'           => 'Pomocník ku captcha',\r
+       'captchahelp-text'            => 'Webstránky prijímajúce príspevky od verejnosti ako táto wiki sú často cieľom zneužitia spammemi, ktorí používajú automatizované nástroje na to, aby svoje odkazy umiestnili na množstvo stránok. Hoci je možné tieto odkazy odstrániť, zbytočne to zaťažuje používateľov.\r
+\r
+Niekedy, obzvlášť keď pridávate webové odkazy k článkom, wiki Vám môže zobraziť obrázok so zafarbeným alebo pokriveným textom a požiadať Vás o prepísanie zobrazených slov. Keďže takúto úlohu je ťažké zautomatizovať a umožní skutočným ľuďom poslať svoje príspevky, zastaví to väčšinu spammerov a iných robotických útočníkov.\r
+\r
+Naneštastie, môže to byť prekážkou pre používateľov so zrakovým postihnutím alebo tých, ktorí používajú textové alebo hovoriace prehliadače. Momentálne nemáme dostupnú audio zvukovú alternatívu. Kontaktujte prosím administratorov stránok, ak Vám to neočakávane komplikuje umiestňovanie oprávnených príspevkov.\r
+\r
+Stlačením tlačidla "späť" vo Vašom prehliadači sa vrátite do editora stránky.',\r
+);\r
+$wgConfirmEditMessages['sl'] = array(\r
+       'captcha-edit'               => "Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])",\r
+       'captcha-addurl'               => "Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])",\r
+       'captcha-create'               => "Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])",\r
+       'captchahelp-title'          => 'Pomoč za captcha',\r
+       'captchahelp-text'           => "Spletne strani, ki omogočajo objavljanje širši javnosti, kot na primer ta wiki, pogosto zlorabljajo spamerji, ki za objavo svojih povezav na mnogih straneh uporabljajo avtomatizirana orodja. Čeprav se te neželene povezave da odstraniti, so precejšnja nadloga.\r
+\r
+Včasih, zlasti pri dodajanju novih spletnih povezav na stran, vam bo morda wiki prikazal sliko obarvanega ali popačenega besedila in zahteval vpis prikazanih besed. Ker je to opravilo težko avtomatizirati, bo s tem večini ljudi objavljanje dovoljeno, spamerji in druge robotski napadalci pa bodo ustavljeni.\r
+\r
+Žal lahko to povzroči nevšečnosti uporabnikom s slabim vidom in tistim, ki uporabljajo besedilne ali govorne brskalnike. Glasovna možnost trenutno še ni na razpolago. Če vam to nepričakovano preprečuje legitimno objavo, se, prosimo, obrnite na administratorje spletišča.\r
+\r
+Za vrnitev v urejevalnik izberite gumb 'nazaj' vašega brskalnika.",\r
+       'captcha-createaccount'      => "Za registracijo je zaradi zaščite pred neželenimi reklamnimi sporočili treba vpisati prikazane besede: <br />([[{{ns:special}}:Captcha|Kaj je to?]])",\r
+       'captcha-createaccount-fail' => "Nepravilna ali manjkajoča potrditvena koda.",\r
+);\r
+$wgConfirmEditMessages['sq'] = array(\r
+       'captcha-edit'               => "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captcha-addurl'               => "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captcha-create'               => "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Faqet e rrjetit që pranojnë shkrime nga publiku, siç është edhe kjo wiki, shpesh abuzohen nga njerëz që duan të përfitojnë duke reklamuar ose promovuar lidhjet e tyre. Këto lloj abuzimesh mund të hiqen kollaj por janë një bezdi dhe shpenzim kohe i papranueshëm.\r
+\r
+Ndonjëherë, sidomos kur po hapni një llogari të re apo kur po shtoni lidhje të reja nëpërmjet redaktimit tuaj, sistemi mund t'ju shfaqi një figurë që përmban fjalë me gërma ose numra të shtrembruara ose me ngjyra të ndryshme të cilat ju duhet të shtypni para se të mund të kryeni veprimin në fjalë. Kjo bëhet pasi është shumë e vështirë për një robot ose mjet automatik të kryejë të njëjtën punë. Kështu mund të dallohet nëse jeni me të vërtetë një njeri apo një robot. Ky lloj sistemi s'mund të ndalojë tërë abuzimet por ndalon një pjesë të mirë të tyre, sidomos ato që janë automatike dhe të shumta në numër.\r
+\r
+Fatkeqësisht ky lloj sistemi mund të bezdisi përdoruesit me pamje të kufizuar ose ata që përdorin mjete teksti ose shfletues leximi me zë. Tani për tani nuk kemi mundësi për të ofruar një sistem me zë në vend të figurave. Ju lutem lidhuni me administruesit nëse ky sistem po ju ndalon të jepni kontribute të vlefshme.\r
+\r
+Shtypni butonin \"prapa\" (\"back\") të shfletuesit tuaj për tu kthyer tek faqja e mëparshme.",\r
+       'captcha-createaccount'      => "Për mbrojtje kundër regjistrimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme para se të hapni llogarinë:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captcha-createaccount-fail' => "Mesazhi që duhej shtypur mungon ose nuk është shtypur siç duhet.",\r
+);\r
+$wgConfirmEditMessages['uk'] = array(\r
+       'captchahelp-text'           => "Вікіпедія застосовує техніку розрізнення людей від комп'ютерів, яка використовує розпізнавання образів, для захисту від  комп'ютерних  шкідливих програм, які автоматично реєструються  (найчастіше спамлять у статтях).\r
+\r
+Для реєстрації у Вікіпедії та іноді й при редагуванні статей користувачеві потрібно ввести вказану контрольну послідовність символів, і яку вони, будучи людьми, а не комп'ютерними програмами, можуть легко розпізнати.\r
+\r
+You will need to have cookies enabled in your browser for this to work.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+       'captcha-createaccount-fail' => 'Невірний або відсутній код підтвердження.',\r
+);\r
+$wgConfirmEditMessages['wa'] = array(\r
+       'captcha-edit'  => 'Dins vos candjmints i gn a des novelès hårdêyes (URL); po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captcha-addurl'  => 'Dins vos candjmints i gn a des novelès hårdêyes (URL); po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captcha-create'  => 'Dins vos candjmints i gn a des novelès hårdêyes (URL); po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captchahelp-title' => 'Aidance passete d\' acertinaedje',\r
+       'captchahelp-text' => 'Les waibes k\' acceptèt des messaedjes do publik, come ci wiki chal, sont sovint eployîs pa des må-fjhants spameus, po pleur mete, avou des usteyes otomatikes, des loyéns di rclame viè les sites da zels.\r
+Bén seur, on pout todi les disfacer al mwin, mins c\' est on soyant ovraedje.\r
+\r
+Adon, pa côps, copurade cwand vos radjoutez des hårdêyes a ene pådje, ou å moumint d\' ahiver on novea conte sol wiki, on eployrè ene passete d\' acertinaedje, dj\' ô bén k\' on vos mostere ene imådje avou on tecse kitoirdou eyet vs dimander di taper les mots so l\' imådje. Come li ricnoxhance di ç\' tecse la est målåjheye a fé otomaticmint pa on robot, çoula permete di leyî les vraiyès djins fé leus candjmints tot arestant l\' plupårt des spameus et des sfwaitès atakes pa robot.\r
+\r
+Målureuzmint çoula apoite eto des målåjhminces po les cis k\' ont des problinmes po vey, ou k\' eployèt des betchteus e môde tecse ou båzés sol vwès. Pol moumint, nos n\' avans nén ene alternative odio. S\' i vs plait contactez les manaedjeus do site po d\' l\' aidance si çoula vos espaitche di fé vos candjmints ledjitimes.\r
+\r
+Clitchîz sol boton «En erî» di vosse betchteu waibe po rivni al pådje di dvant.',\r
+       'captcha-createaccount' => 'Po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin po-z ahiver vosse conte, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captcha-createaccount-fail' => 'Li côde d\' acertinaedje est incorek ou mancant.',\r
+);\r
+$wgConfirmEditMessages['zh-cn'] = array(\r
+       'captcha-edit'               => "你编辑的内容中含有一个新的URL链接;为了免受自动垃圾程序的侵扰,你需要输入显示在下面图片中的文字:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captcha-addurl'               => "你编辑的内容中含有一个新的URL链接;为了免受自动垃圾程序的侵扰,你需要输入显示在下面图片中的文字:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captcha-create'               => "你编辑的内容中含有一个新的URL链接;为了免受自动垃圾程序的侵扰,你需要输入显示在下面图片中的文字:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captchahelp-title'          => 'Captcha 帮助',\r
+       'captchahelp-text'           => "象本站一样,对公众开放编辑的站点经常被垃圾链接骚扰。那些人使用自动化垃圾程序将他们的链接张贴到很多站点。虽然这些链接可以被清除,但是这些东西确实令人十分讨厌。\r
+\r
+有时,特别是当给一个页面添加新的网页链接时,本站会让你看一幅有颜色的或者有变形文字的图像,并且要你输入所显示的文字。因为这是难以自动完成的一项任务,它将允许人保存他们的编辑,同时阻止大多数发送垃圾邮件者和其他机器人的攻击。\r
+\r
+令人遗憾是,这会使得视力不好的人,或者使用基于文本或者基于声音的浏览器的用户感到不便。而目前我们还没有提供的音频的选择。如果这正好阻止你进行正常的编辑,请和管理员联系获得帮助。\r
+\r
+单击你浏览器中的“后退”按钮返回你所编辑的页面。",\r
+       'captcha-createaccount'      => "为了防止程序自动注册,你需要输入以下图片中显示的文字才能注册帐户:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captcha-createaccount-fail' => "验证码错误或丢失。",\r
+);\r
+$wgConfirmEditMessages['zh-tw'] = array(\r
+       'captcha-edit'               => "你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,你需要輸入顯示在下面圖片中的文字:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captcha-addurl'               => "你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,你需要輸入顯示在下面圖片中的文字:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captcha-create'               => "你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,你需要輸入顯示在下面圖片中的文字:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captchahelp-title'          => 'Captcha 說明',\r
+       'captchahelp-text'           => "像本站一樣,對公眾開放編輯的網站經常被垃圾連結騷擾。那些人使用自動化垃圾程序將他們的連結張貼到很多網站。雖然這些連結可以被清除,但是這些東西確實令人十分討厭。\r
+\r
+有時,特別是當給一個頁面添加新的網頁連結時,本站會讓你看一幅有顏色的或者有變形文字的圖像,並且要你輸入所顯示的文字。因為這是難以自動完成的一項任務,它將允許人保存他們的編輯,同時阻止大多數發送垃圾郵件者和其他機器人的攻擊。\r
+\r
+令人遺憾是,這會使得視力不好的人,或者使用基於文本或者基於聲音的瀏覽器的用戶感到不便。而目前我們還沒有提供的音頻的選擇。如果這正好阻止你進行正常的編輯,請和管理員聯繫獲得幫助。\r
+\r
+點擊瀏覽器中的「後退」按鈕返回你所編輯的頁面。",\r
+       'captcha-createaccount'      => "為了防止程式自動註冊,你需要輸入以下圖片中顯示的文字才能註冊帳戶:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captcha-createaccount-fail' => "驗證碼錯誤或丟失。",\r
+);\r
+$wgConfirmEditMessages['zh-yue'] = array(\r
+       'captcha-edit'               => "你編輯的內容中含有新的URL連結;為咗避免受到自動垃圾程式的侵擾,你需要輸入顯示喺下面圖片度嘅文字:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captcha-addurl'               => "你編輯的內容中含有新的URL連結;為咗避免受到自動垃圾程式的侵擾,你需要輸入顯示喺下面圖片度嘅文字:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captcha-create'               => "你編輯的內容中含有新的URL連結;為咗避免受到自動垃圾程式的侵擾,你需要輸入顯示喺下面圖片度嘅文字:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captchahelp-title'          => 'Captcha 幫助',\r
+       'captchahelp-text'           => "就好似呢個wiki咁,對公眾開放編輯嘅網站係會經常受到垃圾連結騷擾。嗰啲人利用自動化垃圾程序將佢哋嘅連結張貼到好多網站。雖然呢啲連結可以被清除,但係呢啲嘢確實令人十分之討厭。\r
+\r
+有時,特別係當響一頁添加新嘅網頁連結嗰陣,呢個網站會畀你睇一幅有顏色的或者有變形文字嘅圖像,跟住要你輸入所顯示嘅文字。因為咁係難以自動完成嘅一項任務,它將允許人保存佢哋嘅編輯,同時亦阻止大多數發送垃圾郵件者同其它機械人嘅攻擊。\r
+\r
+令人遺憾嘅係,咁會令到視力唔好嘅人,或者利用基於文本或者基於聲音嘅瀏覽器用戶感到不便。而目前我哋仲未能夠提供音頻嘅選擇。如果咁樣咁啱阻止到你進行正常嘅編輯,請同管理員聯繫以獲得幫助。\r
+\r
+撳一下響瀏覽器度嘅「後退」掣返去你之前所編輯緊嘅頁面。",\r
+       'captcha-createaccount'      => "為咗防止程式自動註冊,你需要輸入以下圖片中顯示的文字先至能夠註冊得到個戶口:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captcha-createaccount-fail' => "驗證碼錯誤或者唔見咗。",\r
+);\r
+$wgConfirmEditMessages['zh-hk'] = $wgConfirmEditMessages['zh-tw'];\r
+$wgConfirmEditMessages['zh-sg'] = $wgConfirmEditMessages['zh-cn'];\r
+?>\r
diff --git a/mediawiki/extensions/recaptcha/ConfirmEdit.php b/mediawiki/extensions/recaptcha/ConfirmEdit.php
new file mode 100644 (file)
index 0000000..389e006
--- /dev/null
@@ -0,0 +1,708 @@
+<?php\r
+\r
+/**\r
+ * Experimental captcha plugin framework.\r
+ * Not intended as a real production captcha system; derived classes\r
+ * can extend the base to produce their fancy images in place of the\r
+ * text-based test output here.\r
+ *\r
+ * Copyright (C) 2005, 2006 Brion Vibber <brion@pobox.com>\r
+ * http://www.mediawiki.org/\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along\r
+ * with this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+ * http://www.gnu.org/copyleft/gpl.html\r
+ *\r
+ * @addtogroup Extensions\r
+ */\r
+\r
+if ( defined( 'MEDIAWIKI' ) ) {\r
+\r
+global $wgExtensionFunctions, $wgGroupPermissions;\r
+\r
+$wgExtensionFunctions[] = 'ceSetup';\r
+$wgExtensionCredits['other'][] = array(\r
+       'name' => 'ConfirmEdit',\r
+       'author' => 'Brion Vibber',\r
+       'url' => 'http://www.mediawiki.org/wiki/Extension:ConfirmEdit',\r
+       'description' => 'Simple captcha implementation',\r
+);\r
+\r
+# Internationalisation file\r
+require_once( 'ConfirmEdit.i18n.php' );\r
+\r
+/**\r
+ * The 'skipcaptcha' permission key can be given out to\r
+ * let known-good users perform triggering actions without\r
+ * having to go through the captcha.\r
+ *\r
+ * By default, sysops and registered bot accounts will be\r
+ * able to skip, while others have to go through it.\r
+ */\r
+$wgGroupPermissions['*'            ]['skipcaptcha'] = false;\r
+$wgGroupPermissions['user'         ]['skipcaptcha'] = false;\r
+$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;\r
+$wgGroupPermissions['bot'          ]['skipcaptcha'] = true; // registered bots\r
+$wgGroupPermissions['sysop'        ]['skipcaptcha'] = true;\r
+\r
+global $wgCaptcha, $wgCaptchaClass, $wgCaptchaTriggers;\r
+$wgCaptcha = null;\r
+$wgCaptchaClass = 'SimpleCaptcha';\r
+\r
+/**\r
+ * Actions which can trigger a captcha\r
+ *\r
+ * If the 'edit' trigger is on, *every* edit will trigger the captcha.\r
+ * This may be useful for protecting against vandalbot attacks.\r
+ *\r
+ * If using the default 'addurl' trigger, the captcha will trigger on\r
+ * edits that include URLs that aren't in the current version of the page.\r
+ * This should catch automated linkspammers without annoying people when\r
+ * they make more typical edits.\r
+ *\r
+ * The captcha code should not use $wgCaptchaTriggers, but CaptchaTriggers()\r
+ * which also takes into account per namespace triggering.\r
+ */\r
+$wgCaptchaTriggers = array();\r
+$wgCaptchaTriggers['edit']          = false; // Would check on every edit\r
+$wgCaptchaTriggers['create']           = false; // Check on page creation.\r
+$wgCaptchaTriggers['addurl']        = true;  // Check on edits that add URLs\r
+$wgCaptchaTriggers['createaccount'] = true;  // Special:Userlogin&type=signup\r
+$wgCaptchaTriggers['badlogin']      = true;  // Special:Userlogin after failure\r
+\r
+/**\r
+ * You may wish to apply special rules for captcha triggering on some namespaces.\r
+ * $wgCaptchaTriggersOnNamespace[<namespace id>][<trigger>] forces an always on / \r
+ * always off configuration with that trigger for the given namespace.\r
+ * Leave unset to use the global options ($wgCaptchaTriggers).\r
+ *\r
+ * Shall not be used with 'createaccount' (it is not checked).\r
+ */\r
+$wgCaptchaTriggersOnNamespace = array();\r
+\r
+#Example:\r
+#$wgCaptchaTriggersOnNamespace[NS_TALK]['create'] = false; //Allow creation of talk pages without captchas.\r
+#$wgCaptchaTriggersOnNamespace[NS_PROJECT]['edit'] = true; //Show captcha whenever editing Project pages.\r
+\r
+/**\r
+ * Indicate how to store per-session data required to match up the\r
+ * internal captcha data with the editor.\r
+ *\r
+ * 'CaptchaSessionStore' uses PHP's session storage, which is cookie-based\r
+ * and may fail for anons with cookies disabled.\r
+ *\r
+ * 'CaptchaCacheStore' uses $wgMemc, which avoids the cookie dependency\r
+ * but may be fragile depending on cache configuration.\r
+ */\r
+global $wgCaptchaStorageClass;\r
+$wgCaptchaStorageClass = 'CaptchaSessionStore';\r
+\r
+/**\r
+ * Number of seconds a captcha session should last in the data cache\r
+ * before expiring when managing through CaptchaCacheStore class.\r
+ *\r
+ * Default is a half hour.\r
+ */\r
+global $wgCaptchaSessionExpiration;\r
+$wgCaptchaSessionExpiration = 30 * 60;\r
+\r
+/**\r
+ * Number of seconds after a bad login that a captcha will be shown to\r
+ * that client on the login form to slow down password-guessing bots.\r
+ *\r
+ * Has no effect if 'badlogin' is disabled in $wgCaptchaTriggers or\r
+ * if there is not a caching engine enabled.\r
+ *\r
+ * Default is five minutes.\r
+ */\r
+global $wgCaptchaBadLoginExpiration;\r
+$wgCaptchaBadLoginExpiration = 5 * 60;\r
+\r
+/**\r
+ * Allow users who have confirmed their e-mail addresses to post\r
+ * URL links without being harassed by the captcha.\r
+ */\r
+global $ceAllowConfirmedEmail;\r
+$ceAllowConfirmedEmail = false;\r
+\r
+/**\r
+ * Regex to whitelist URLs to known-good sites...\r
+ * For instance:\r
+ * $wgCaptchaWhitelist = '#^https?://([a-z0-9-]+\\.)?(wikimedia|wikipedia)\.org/#i';\r
+ * @fixme Use the 'spam-whitelist' thingy instead?\r
+ */\r
+$wgCaptchaWhitelist = false;\r
+\r
+/**\r
+ * Additional regexes to check for. Use full regexes; can match things\r
+ * other than URLs such as junk edits.\r
+ *\r
+ * If the new version matches one and the old version doesn't,\r
+ * toss up the captcha screen.\r
+ *\r
+ * @fixme Add a message for local admins to add items as well.\r
+ */\r
+$wgCaptchaRegexes = array();\r
+\r
+/** Register special page */\r
+global $wgSpecialPages;\r
+$wgSpecialPages['Captcha'] = array( /*class*/ 'SpecialPage', /*name*/'Captcha', /*restriction*/ '',\r
+       /*listed*/ false, /*function*/ false, /*file*/ false );\r
+\r
+/**\r
+ * Set up message strings for captcha utilities.\r
+ */\r
+function ceSetup() {\r
+       # Add messages\r
+       global $wgMessageCache, $wgConfirmEditMessages;\r
+       foreach( $wgConfirmEditMessages as $lang => $messages )\r
+               $wgMessageCache->addMessages( $messages, $lang );\r
+\r
+       global $wgHooks, $wgCaptcha, $wgCaptchaClass, $wgSpecialPages;\r
+       $wgCaptcha = new $wgCaptchaClass();\r
+       $wgHooks['EditFilter'][] = array( &$wgCaptcha, 'confirmEdit' );\r
+\r
+       $wgHooks['UserCreateForm'][] = array( &$wgCaptcha, 'injectUserCreate' );\r
+       $wgHooks['AbortNewAccount'][] = array( &$wgCaptcha, 'confirmUserCreate' );\r
+       \r
+       $wgHooks['LoginAuthenticateAudit'][] = array( &$wgCaptcha, 'triggerUserLogin' );\r
+       $wgHooks['UserLoginForm'][] = array( &$wgCaptcha, 'injectUserLogin' );\r
+       $wgHooks['AbortLogin'][] = array( &$wgCaptcha, 'confirmUserLogin' );\r
+}\r
+\r
+/**\r
+ * Entry point for Special:Captcha\r
+ */\r
+function wfSpecialCaptcha( $par = null ) {\r
+       global $wgCaptcha;\r
+       switch( $par ) {\r
+       case "image":\r
+               return $wgCaptcha->showImage();\r
+       case "help":\r
+       default:\r
+               return $wgCaptcha->showHelp();\r
+       }\r
+}\r
+\r
+class SimpleCaptcha {\r
+       function SimpleCaptcha() {\r
+               global $wgCaptchaStorageClass;\r
+               $this->storage = new $wgCaptchaStorageClass;\r
+       }\r
+       \r
+       /**\r
+        * Insert a captcha prompt into the edit form.\r
+        * This sample implementation generates a simple arithmetic operation;\r
+        * it would be easy to defeat by machine.\r
+        *\r
+        * Override this!\r
+        *\r
+        * @return string HTML\r
+        */\r
+       function getForm() {\r
+               $a = mt_rand(0, 100);\r
+               $b = mt_rand(0, 10);\r
+               $op = mt_rand(0, 1) ? '+' : '-';\r
+\r
+               $test = "$a $op $b";\r
+               $answer = ($op == '+') ? ($a + $b) : ($a - $b);\r
+\r
+               $index = $this->storeCaptcha( array( 'answer' => $answer ) );\r
+\r
+               return "<p><label for=\"wpCaptchaWord\">$test</label> = " .\r
+                       wfElement( 'input', array(\r
+                               'name' => 'wpCaptchaWord',\r
+                               'id'   => 'wpCaptchaWord',\r
+                               'tabindex' => 1 ) ) . // tab in before the edit textarea\r
+                       "</p>\n" .\r
+                       wfElement( 'input', array(\r
+                               'type'  => 'hidden',\r
+                               'name'  => 'wpCaptchaId',\r
+                               'id'    => 'wpCaptchaId',\r
+                               'value' => $index ) );\r
+       }\r
+\r
+       /**\r
+        * Insert the captcha prompt into an edit form.\r
+        * @param OutputPage $out\r
+        */\r
+       function editCallback( &$out ) {\r
+               $out->addWikiText( $this->getMessage( $this->action ) );\r
+               $out->addHTML( $this->getForm() );\r
+       }\r
+\r
+       /**\r
+        * Show a message asking the user to enter a captcha on edit\r
+        * The result will be treated as wiki text\r
+        *\r
+        * @param $action Action being performed\r
+        * @return string\r
+        */\r
+       function getMessage( $action ) {\r
+               $name = 'captcha-' . $action;\r
+               $text = wfMsg( $name );\r
+               # Obtain a more tailored message, if possible, otherwise, fall back to\r
+               # the default for edits\r
+               return wfEmptyMsg( $name, $text ) ? wfMsg( 'captcha-edit' ) : $text;\r
+       }\r
+\r
+       /**\r
+        * Inject whazawhoo\r
+        * @fixme if multiple thingies insert a header, could break\r
+        * @param SimpleTemplate $template\r
+        * @return bool true to keep running callbacks\r
+        */\r
+       function injectUserCreate( &$template ) {\r
+               global $wgCaptchaTriggers, $wgOut;\r
+               if( $wgCaptchaTriggers['createaccount'] ) {\r
+                       $template->set( 'header',\r
+                               "<div class='captcha'>" .\r
+                               $wgOut->parse( $this->getMessage( 'createaccount' ) ) .\r
+                               $this->getForm() .\r
+                               "</div>\n" );\r
+               }\r
+               return true;\r
+       }\r
+\r
+       /**\r
+        * Inject a captcha into the user login form after a failed\r
+        * password attempt as a speedbump for mass attacks.\r
+        * @fixme if multiple thingies insert a header, could break\r
+        * @param SimpleTemplate $template\r
+        * @return bool true to keep running callbacks\r
+        */\r
+       function injectUserLogin( &$template ) {\r
+               if( $this->isBadLoginTriggered() ) {\r
+                       global $wgOut;\r
+                       $template->set( 'header',\r
+                               "<div class='captcha'>" .\r
+                               $wgOut->parse( $this->getMessage( 'badlogin' ) ) .\r
+                               $this->getForm() .\r
+                               "</div>\n" );\r
+               }\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * When a bad login attempt is made, increment an expiring counter\r
+        * in the memcache cloud. Later checks for this may trigger a\r
+        * captcha display to prevent too many hits from the same place.\r
+        * @param User $user\r
+        * @param string $password\r
+        * @param int $retval authentication return value\r
+        * @return bool true to keep running callbacks\r
+        */\r
+       function triggerUserLogin( $user, $password, $retval ) {\r
+               global $wgCaptchaTriggers, $wgCaptchaBadLoginExpiration, $wgMemc;\r
+               if( $retval == LoginForm::WRONG_PASS && $wgCaptchaTriggers['badlogin'] ) {\r
+                       $key = $this->badLoginKey();\r
+                       $count = $wgMemc->get( $key );\r
+                       if( !$count ) {\r
+                               $wgMemc->add( $key, 0, $wgCaptchaBadLoginExpiration );\r
+                       }\r
+                       $count = $wgMemc->incr( $key );\r
+               }\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * Check if a bad login has already been registered for this\r
+        * IP address. If so, require a captcha.\r
+        * @return bool\r
+        * @access private\r
+        */\r
+       function isBadLoginTriggered() {\r
+               global $wgMemc;\r
+               return intval( $wgMemc->get( $this->badLoginKey() ) ) > 0;\r
+       }\r
+       \r
+       /**\r
+        * Internal cache key for badlogin checks.\r
+        * @return string\r
+        * @access private\r
+        */\r
+       function badLoginKey() {\r
+               return wfMemcKey( 'captcha', 'badlogin', 'ip', wfGetIP() );\r
+       }\r
+       \r
+       /**\r
+        * Check if the submitted form matches the captcha session data provided\r
+        * by the plugin when the form was generated.\r
+        *\r
+        * Override this!\r
+        *\r
+        * @param WebRequest $request\r
+        * @param array $info\r
+        * @return bool\r
+        */\r
+       function keyMatch( $request, $info ) {\r
+               return $request->getVal( 'wpCaptchaWord' ) == $info['answer'];\r
+       }\r
+\r
+       // ----------------------------------\r
+\r
+       /**\r
+        * @param EditPage $editPage\r
+        * @param string $action (edit/create/addurl...)\r
+        * @return bool true if action triggers captcha on editPage's namespace\r
+        */\r
+       function captchaTriggers( &$editPage, $action) {\r
+               global $wgCaptchaTriggers, $wgCaptchaTriggersOnNamespace;       \r
+               //Special config for this NS?\r
+               if (isset( $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action] ) )\r
+                       return $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action];\r
+\r
+               return ( !empty( $wgCaptchaTriggers[$action] ) ); //Default\r
+       }\r
+\r
+\r
+       /**\r
+        * @param EditPage $editPage\r
+        * @param string $newtext\r
+        * @param string $section\r
+        * @return bool true if the captcha should run\r
+        */\r
+       function shouldCheck( &$editPage, $newtext, $section ) {\r
+               $this->trigger = '';\r
+\r
+               global $wgUser;\r
+               if( $wgUser->isAllowed( 'skipcaptcha' ) ) {\r
+                       wfDebug( "ConfirmEdit: user group allows skipping captcha\n" );\r
+                       return false;\r
+               }\r
+\r
+               global $wgEmailAuthentication, $ceAllowConfirmedEmail;\r
+               if( $wgEmailAuthentication && $ceAllowConfirmedEmail &&\r
+                       $wgUser->isEmailConfirmed() ) {\r
+                       wfDebug( "ConfirmEdit: user has confirmed mail, skipping captcha\n" );\r
+                       return false;\r
+               }\r
+\r
+               if( $this->captchaTriggers( $editPage, 'edit' ) ) {\r
+                       // Check on all edits\r
+                       global $wgUser, $wgTitle;\r
+                       $this->trigger = sprintf( "edit trigger by '%s' at [[%s]]",\r
+                               $wgUser->getName(),\r
+                               $wgTitle->getPrefixedText() );\r
+                       $this->action = 'edit';\r
+                       wfDebug( "ConfirmEdit: checking all edits...\n" );\r
+                       return true;\r
+               }\r
+\r
+               if( $this->captchaTriggers( $editPage, 'create' )  && !$editPage->mTitle->exists() ) {\r
+                       //Check if creating a page\r
+                       global $wgUser, $wgTitle;\r
+                       $this->trigger = sprintf( "Create trigger by '%s' at [[%s]]",\r
+                               $wgUser->getName(),\r
+                               $wgTitle->getPrefixedText() );\r
+                       $this->action = 'create';\r
+                       wfDebug( "ConfirmEdit: checking on page creation...\n" );\r
+                       return true;\r
+               }\r
+\r
+               if( $this->captchaTriggers( $editPage, 'addurl' ) ) {\r
+                       // Only check edits that add URLs\r
+                       $oldtext = $this->loadText( $editPage, $section );\r
+\r
+                       $oldLinks = $this->findLinks( $oldtext );\r
+                       $newLinks = $this->findLinks( $newtext );\r
+                       $unknownLinks = array_filter( $newLinks, array( &$this, 'filterLink' ) );\r
+\r
+                       $addedLinks = array_diff( $unknownLinks, $oldLinks );\r
+                       $numLinks = count( $addedLinks );\r
+\r
+                       if( $numLinks > 0 ) {\r
+                               global $wgUser, $wgTitle;\r
+                               $this->trigger = sprintf( "%dx url trigger by '%s' at [[%s]]: %s",\r
+                                       $numLinks,\r
+                                       $wgUser->getName(),\r
+                                       $wgTitle->getPrefixedText(),\r
+                                       implode( ", ", $addedLinks ) );\r
+                               $this->action = 'addurl';\r
+                               return true;\r
+                       }\r
+               }\r
+\r
+               global $wgCaptchaRegexes;\r
+               if( !empty( $wgCaptchaRegexes ) ) {\r
+                       // Custom regex checks\r
+                       $oldtext = $this->loadText( $editPage, $section );\r
+\r
+                       foreach( $wgCaptchaRegexes as $regex ) {\r
+                               $newMatches = array();\r
+                               if( preg_match_all( $regex, $newtext, $newMatches ) ) {\r
+                                       $oldMatches = array();\r
+                                       preg_match_all( $regex, $oldtext, $oldMatches );\r
+\r
+                                       $addedMatches = array_diff( $newMatches[0], $oldMatches[0] );\r
+\r
+                                       $numHits = count( $addedMatches );\r
+                                       if( $numHits > 0 ) {\r
+                                               global $wgUser, $wgTitle;\r
+                                               $this->trigger = sprintf( "%dx %s at [[%s]]: %s",\r
+                                                       $numHits,\r
+                                                       $regex,\r
+                                                       $wgUser->getName(),\r
+                                                       $wgTitle->getPrefixedText(),\r
+                                                       implode( ", ", $addedMatches ) );\r
+                                               $this->action = 'edit';\r
+                                               return true;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               return false;\r
+       }\r
+\r
+       /**\r
+        * Filter callback function for URL whitelisting\r
+        * @return bool true if unknown, false if whitelisted\r
+        * @access private\r
+        */\r
+       function filterLink( $url ) {\r
+               global $wgCaptchaWhitelist;\r
+               return !( $wgCaptchaWhitelist && preg_match( $wgCaptchaWhitelist, $url ) );\r
+       }\r
+\r
+       /**\r
+        * The main callback run on edit attempts.\r
+        * @param EditPage $editPage\r
+        * @param string $newtext\r
+        * @param string $section\r
+        * @param bool true to continue saving, false to abort and show a captcha form\r
+        */\r
+       function confirmEdit( &$editPage, $newtext, $section ) {\r
+               if( $this->shouldCheck( $editPage, $newtext, $section ) ) {\r
+                       if( $this->passCaptcha() ) {\r
+                               return true;\r
+                       } else {\r
+                               $editPage->showEditForm( array( &$this, 'editCallback' ) );\r
+                               return false;\r
+                       }\r
+               } else {\r
+                       wfDebug( "ConfirmEdit: no need to show captcha.\n" );\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Hook for user creation form submissions.\r
+        * @param User $u\r
+        * @param string $message\r
+        * @return bool true to continue, false to abort user creation\r
+        */\r
+       function confirmUserCreate( $u, &$message ) {\r
+               global $wgCaptchaTriggers;\r
+               if( $wgCaptchaTriggers['createaccount'] ) {\r
+                       $this->trigger = "new account '" . $u->getName() . "'";\r
+                       if( !$this->passCaptcha() ) {\r
+                               $message = wfMsg( 'captcha-createaccount-fail' );\r
+                               return false;\r
+                       }\r
+               }\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * Hook for user login form submissions.\r
+        * @param User $u\r
+        * @param string $message\r
+        * @return bool true to continue, false to abort user creation\r
+        */\r
+       function confirmUserLogin( $u, $pass, &$retval ) {\r
+               if( $this->isBadLoginTriggered() ) {\r
+                       $this->trigger = "post-badlogin login '" . $u->getName() . "'";\r
+                       if( !$this->passCaptcha() ) {\r
+                               $message = wfMsg( 'captcha-badlogin-fail' );\r
+                               // Emulate a bad-password return to confuse the shit out of attackers\r
+                               $retval = LoginForm::WRONG_PASS;\r
+                               return false;\r
+                       }\r
+               }\r
+               return true;\r
+       }\r
+\r
+       /**\r
+        * Given a required captcha run, test form input for correct\r
+        * input on the open session.\r
+        * @return bool if passed, false if failed or new session\r
+        */\r
+       function passCaptcha() {\r
+               $info = $this->retrieveCaptcha();\r
+               if( $info ) {\r
+                       global $wgRequest;\r
+                       if( $this->keyMatch( $wgRequest, $info ) ) {\r
+                               $this->log( "passed" );\r
+                               $this->clearCaptcha( $info );\r
+                               return true;\r
+                       } else {\r
+                               $this->clearCaptcha( $info );\r
+                               $this->log( "bad form input" );\r
+                               return false;\r
+                       }\r
+               } else {\r
+                       $this->log( "new captcha session" );\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Log the status and any triggering info for debugging or statistics\r
+        * @param string $message\r
+        */\r
+       function log( $message ) {\r
+               wfDebugLog( 'captcha', 'ConfirmEdit: ' . $message . '; ' .  $this->trigger );\r
+       }\r
+\r
+       /**\r
+        * Generate a captcha session ID and save the info in PHP's session storage.\r
+        * (Requires the user to have cookies enabled to get through the captcha.)\r
+        *\r
+        * A random ID is used so legit users can make edits in multiple tabs or\r
+        * windows without being unnecessarily hobbled by a serial order requirement.\r
+        * Pass the returned id value into the edit form as wpCaptchaId.\r
+        *\r
+        * @param array $info data to store\r
+        * @return string captcha ID key\r
+        */\r
+       function storeCaptcha( $info ) {\r
+               if( !isset( $info['index'] ) ) {\r
+                       // Assign random index if we're not udpating\r
+                       $info['index'] = strval( mt_rand() );\r
+               }\r
+               $this->storage->store( $info['index'], $info );\r
+               return $info['index'];\r
+       }\r
+\r
+       /**\r
+        * Fetch this session's captcha info.\r
+        * @return mixed array of info, or false if missing\r
+        */\r
+       function retrieveCaptcha() {\r
+               global $wgRequest;\r
+               $index = $wgRequest->getVal( 'wpCaptchaId' );\r
+               return $this->storage->retrieve( $index );\r
+       }\r
+\r
+       /**\r
+        * Clear out existing captcha info from the session, to ensure\r
+        * it can't be reused.\r
+        */\r
+       function clearCaptcha( $info ) {\r
+               $this->storage->clear( $info['index'] );\r
+       }\r
+\r
+       /**\r
+        * Retrieve the current version of the page or section being edited...\r
+        * @param EditPage $editPage\r
+        * @param string $section\r
+        * @return string\r
+        * @access private\r
+        */\r
+       function loadText( $editPage, $section ) {\r
+               $rev = Revision::newFromTitle( $editPage->mTitle );\r
+               if( is_null( $rev ) ) {\r
+                       return "";\r
+               } else {\r
+                       $text = $rev->getText();\r
+                       if( $section != '' ) {\r
+                               return Article::getSection( $text, $section );\r
+                       } else {\r
+                               return $text;\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Extract a list of all recognized HTTP links in the text.\r
+        * @param string $text\r
+        * @return array of strings\r
+        */\r
+       function findLinks( $text ) {\r
+               global $wgParser, $wgTitle, $wgUser;\r
+\r
+               $options = new ParserOptions();\r
+               $text = $wgParser->preSaveTransform( $text, $wgTitle, $wgUser, $options );\r
+               $out = $wgParser->parse( $text, $wgTitle, $options );\r
+\r
+               return array_keys( $out->getExternalLinks() );\r
+       }\r
+\r
+       /**\r
+        * Show a page explaining what this wacky thing is.\r
+        */\r
+       function showHelp() {\r
+               global $wgOut, $ceAllowConfirmedEmail;\r
+               $wgOut->setPageTitle( wfMsg( 'captchahelp-title' ) );\r
+               $wgOut->addWikiText( wfMsg( 'captchahelp-text' ) );\r
+               if ( $this->storage->cookiesNeeded() ) {\r
+                       $wgOut->addWikiText( wfMsg( 'captchahelp-cookies-needed' ) );\r
+               }\r
+       }\r
+\r
+}\r
+\r
+class CaptchaSessionStore {\r
+       function store( $index, $info ) {\r
+               $_SESSION['captcha' . $info['index']] = $info;\r
+       }\r
+       \r
+       function retrieve( $index ) {\r
+               if( isset( $_SESSION['captcha' . $index] ) ) {\r
+                       return $_SESSION['captcha' . $index];\r
+               } else {\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       function clear( $index ) {\r
+               unset( $_SESSION['captcha' . $index] );\r
+       }\r
+\r
+       function cookiesNeeded() {\r
+               return true;\r
+       }\r
+}\r
+\r
+class CaptchaCacheStore {\r
+       function store( $index, $info ) {\r
+               global $wgMemc, $wgCaptchaSessionExpiration;\r
+               $wgMemc->set( wfMemcKey( 'captcha', $index ), $info,\r
+                       $wgCaptchaSessionExpiration );\r
+       }\r
+\r
+       function retrieve( $index ) {\r
+               global $wgMemc;\r
+               $info = $wgMemc->get( wfMemcKey( 'captcha', $index ) );\r
+               if( $info ) {\r
+                       return $info;\r
+               } else {\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       function clear( $index ) {\r
+               global $wgMemc;\r
+               $wgMemc->delete( wfMemcKey( 'captcha', $index ) );\r
+       }\r
+\r
+       function cookiesNeeded() {\r
+               return false;\r
+       }\r
+}\r
+\r
+} # End invocation guard\r
+\r
+?>\r
diff --git a/mediawiki/extensions/recaptcha/README b/mediawiki/extensions/recaptcha/README
new file mode 100644 (file)
index 0000000..91604b1
--- /dev/null
@@ -0,0 +1,4 @@
+The reCAPTCH MediaWiki plugin stops spam and password cracking
+attempts. For instructions on installing the plugin, see:
+
+         http://recaptcha.net/plugins/mediawiki
diff --git a/mediawiki/extensions/recaptcha/ReCaptcha.i18n.php b/mediawiki/extensions/recaptcha/ReCaptcha.i18n.php
new file mode 100644 (file)
index 0000000..d73d07f
--- /dev/null
@@ -0,0 +1,28 @@
+<?php\r
+/**\r
+ * Internationalisation file for the reCAPTCHA extension.\r
+ *\r
+ * @addtogroup Extensions\r
+*/\r
+\r
+function efReCaptchaMessages() {\r
+       return array(\r
+\r
+/* English */\r
+'en' => array(\r
+        'recaptcha-edit' => 'To help protect against automated edit spam, please type the two words you see in the box below:', \r
+        'recaptcha-addurl' => 'Your edit includes new external links. To help protect against automated\r
+spam, please type the two words you see in the box below:',\r
+    'recaptcha-badpass' => 'To help protect against automated password cracking, please type the two words you see in the box below:',\r
+       'recaptcha-createaccount' => 'To help protect against automated account creation, please type the two words you see in the box below:',\r
+       'recaptcha-createaccount-fail' => "Incorrect or missing reCAPTCHA answer.",\r
+       'recaptcha-create' => 'To help protect against automated page creation, please type the two words you see in the box below:', \r
+\r
+),\r
+\r
+/* TODO - more languages */\r
+\r
+       );\r
+\r
+}\r
+?>\r
diff --git a/mediawiki/extensions/recaptcha/ReCaptcha.php b/mediawiki/extensions/recaptcha/ReCaptcha.php
new file mode 100644 (file)
index 0000000..e0d51c3
--- /dev/null
@@ -0,0 +1,147 @@
+<?php\r
+\r
+/**\r
+ * Captcha class using the reCAPTCHA widget. \r
+ * Stop Spam. Read Books.  \r
+ *\r
+ * @addtogroup Extensions\r
+ * @author Mike Crawford <mike.crawford@gmail.com>\r
+ * @copyright Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net\r
+ * @licence MIT/X11\r
+ */\r
+\r
+if( defined( 'MEDIAWIKI' ) ) {\r
+require_once( 'recaptchalib.php' );\r
+\r
+// make sure we have the confirm edit plugin \r
+require_once( 'ConfirmEdit.php' );\r
+\r
+// Set the default CAPTCHA to be reCAPTCHA.\r
+$wgCaptchaClass = 'ReCaptcha';\r
+\r
+\r
+global $recaptcha_public_key, $recaptcha_private_key;\r
+\r
+// Set these in LocalSettings.php\r
+$recaptcha_public_key = '';\r
+$recaptcha_private_key = '';\r
+\r
+\r
+$wgExtensionFunctions[] = 'efReCaptcha';\r
+\r
+/**\r
+ * Add the reCAPTCHA messages\r
+ * \r
+ */\r
+function efReCaptcha() {\r
+       global $wgMessageCache;\r
+       global $recaptcha_public_key, $recaptcha_private_key;\r
+       global $wgServerName;\r
+       \r
+       \r
+       require_once( dirname( __FILE__ ) . '/ReCaptcha.i18n.php' );\r
+       foreach( efReCaptchaMessages() as $lang => $messages )\r
+               $wgMessageCache->addMessages( $messages, $lang );\r
+\r
+       if ($recaptcha_private_key == '' || $recaptcha_public_key == '') {\r
+               die ('You need to set $recaptcha_private_key and $recaptcha_public_key in LocalSettings.php to ' .\r
+                    "use the reCAPTCHA plugin. You can sign up for a key <a href='" .\r
+                    htmlentities(recaptcha_get_signup_url ($wgServerName, "mediawiki")) . "'>here</a>.");\r
+       }       \r
+}\r
+\r
+\r
+class ReCaptcha extends SimpleCaptcha {\r
+               \r
+       //reCAPTHCA error code returned from recaptcha_check_answer\r
+       private $recaptcha_error = null;\r
+\r
+               \r
+       /** \r
+        * Displays the reCAPTCHA widget.  \r
+         * If $this->recaptcha_error is set, it will display an error in the widget.\r
+        *\r
+         */\r
+       function getForm() {\r
+               global $recaptcha_public_key;\r
+               return "<script>var RecaptchaOptions = { tabindex : 1 }; </script> " .\r
+               recaptcha_get_html($recaptcha_public_key, $this->recaptcha_error);\r
+       }\r
+\r
+\r
+               \r
+       /**\r
+        * Calls the library function recaptcha_check_answer to verify the users input.\r
+        * Sets $this->recaptcha_error if the user is incorrect.\r
+         * @return boolean \r
+         *\r
+         */\r
+       function passCaptcha() {\r
+               global $recaptcha_private_key;\r
+               $recaptcha_response = recaptcha_check_answer ($recaptcha_private_key,\r
+                                                             wfGetIP (),\r
+                                                             $_POST['recaptcha_challenge_field'],\r
+                                                             $_POST['recaptcha_response_field']);\r
+                if (!$recaptcha_response->is_valid) {\r
+                       $this->recaptcha_error = $recaptcha_response->error;\r
+                       return false;\r
+                }\r
+               $recaptcha_error = null;\r
+                return true;\r
+\r
+       }\r
+\r
+\r
+\r
+        /**\r
+         * Called on all edit page saves. (EditFilter events)\r
+         * @return boolean - true if page save should continue, false if should display Captcha widget.\r
+         */\r
+        function confirmEdit( &$editPage, $newtext, $section ) {\r
+                if( $this->shouldCheck( $editPage, $newtext, $section ) ) {\r
+\r
+                        if (!isset($_POST['recaptcha_response_field'])) {\r
+                                //User has not yet been presented with Captcha, show the widget.\r
+                                $editPage->showEditForm( array( &$this, 'editCallback' ) );\r
+                                return false;\r
+                        }\r
+\r
+                        if( $this->passCaptcha() ) {\r
+                                return true;\r
+                        } else {\r
+                                //Try again - show the widget\r
+                                $editPage->showEditForm( array( &$this, 'editCallback' ) );\r
+                                return false;\r
+                        }\r
+\r
+                } else {\r
+                        wfDebug( "ConfirmEdit: no need to show captcha.\n" );\r
+                        return true;\r
+                }\r
+        }\r
+\r
+       \r
+\r
+       /**\r
+        * Show a message asking the user to enter a captcha on edit\r
+        * The result will be treated as wiki text\r
+        *\r
+        * @param $action Action being performed\r
+        * @return string\r
+        */\r
+       function getMessage( $action ) {\r
+               $name = 'recaptcha-' . $action;\r
+               $text = wfMsg( $name );\r
+               # Obtain a more tailored message, if possible, otherwise, fall back to\r
+               # the default for edits\r
+               return wfEmptyMsg( $name, $text ) ? wfMsg( 'recaptcha-edit' ) : $text;\r
+       }\r
+\r
+}\r
+       \r
+} else {\r
+       echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" );\r
+       die( 1 );\r
+}\r
+\r
+?>\r
diff --git a/mediawiki/extensions/recaptcha/recaptchalib.php b/mediawiki/extensions/recaptcha/recaptchalib.php
new file mode 100644 (file)
index 0000000..b8ac453
--- /dev/null
@@ -0,0 +1,275 @@
+<?php\r
+/*\r
+ * This is a PHP library that handles calling reCAPTCHA.\r
+ *    - Documentation and latest version\r
+ *          http://recaptcha.net/plugins/php/\r
+ *    - Get a reCAPTCHA API Key\r
+ *          http://recaptcha.net/api/getkey\r
+ *    - Discussion group\r
+ *          http://groups.google.com/group/recaptcha\r
+ *\r
+ * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net\r
+ * AUTHORS:\r
+ *   Mike Crawford\r
+ *   Ben Maurer\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy\r
+ * of this software and associated documentation files (the "Software"), to deal\r
+ * in the Software without restriction, including without limitation the rights\r
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+ * copies of the Software, and to permit persons to whom the Software is\r
+ * furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included in\r
+ * all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+ * THE SOFTWARE.\r
+ */\r
+\r
+/**\r
+ * The reCAPTCHA server URL's\r
+ */\r
+$recaptcha_api_server = 'http://api.recaptcha.net';\r
+$recaptcha_api_secure_server = 'https://api-secure.recaptcha.net';\r
+$recaptcha_verify_server = 'api-verify.recaptcha.net';\r
+\r
+\r
+/**\r
+ * Encodes the given data into a query string format\r
+ * @param $data - array of string elements to be encoded\r
+ * @return string - encoded request\r
+ */\r
+function _recaptcha_qsencode ($data) {\r
+        $req = "";\r
+        foreach ( $data as $key => $value )\r
+                $req .= $key . '=' . urlencode( stripslashes($value) ) . '&';\r
+\r
+        // Cut the last '&'\r
+        $req=substr($req,0,strlen($req)-1);\r
+        return $req;\r
+}\r
+\r
+\r
+\r
+/**\r
+ * Submits an HTTP POST to a reCAPTCHA server\r
+ * @param string $host\r
+ * @param string $path\r
+ * @param array $data\r
+ * @param int port\r
+ * @return array response\r
+ */\r
+function _recaptcha_http_post($host, $path, $data, $port = 80) {\r
+\r
+        $req = _recaptcha_qsencode ($data);\r
+\r
+        $http_request  = "POST $path HTTP/1.0\r\n";\r
+        $http_request .= "Host: $host\r\n";\r
+        $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";\r
+        $http_request .= "Content-Length: " . strlen($req) . "\r\n";\r
+        $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";\r
+        $http_request .= "\r\n";\r
+        $http_request .= $req;\r
+\r
+        $response = '';\r
+        if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {\r
+                die ('Could not open socket');\r
+        }\r
+\r
+        fwrite($fs, $http_request);\r
+\r
+        while ( !feof($fs) )\r
+                $response .= fgets($fs, 1160); // One TCP-IP packet\r
+        fclose($fs);\r
+        $response = explode("\r\n\r\n", $response, 2);\r
+\r
+        return $response;\r
+}\r
+\r
+\r
+\r
+/**\r
+ * Gets the challenge HTML (javascript and non-javascript version).\r
+ * This is called from the browser, and the resulting reCAPTCHA HTML widget\r
+ * is embedded within the HTML form it was called from.\r
+ * @param string $pubkey A public key for reCAPTCHA\r
+ * @param string $error The error given by reCAPTCHA (optional, default is null)\r
+ * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false)\r
+\r
+ * @return string - The HTML to be embedded in the user's form.\r
+ */\r
+function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)\r
+{\r
+        global $recaptcha_api_server, $recaptcha_api_ssl_server;\r
+\r
+       if ($pubkey == null || $pubkey == '') {\r
+               die ("To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");\r
+       }\r
+       \r
+       if ($use_ssl) {\r
+           $server = $recaptcha_api_ssl_server;\r
+        } else {\r
+           $server = $recaptcha_api_server;\r
+        }\r
+        $errorpart = "";\r
+        if ($error) {\r
+           $errorpart = "&amp;error=" . $error;\r
+        }\r
+        return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>\r
+\r
+       <noscript>\r
+               <iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br>\r
+               <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>\r
+               <input type="hidden" name="recaptcha_response_field" value="manual_challenge">\r
+       </noscript>';\r
+}\r
+\r
+\r
+\r
+\r
+/**\r
+ * A ReCaptchaResponse is returned from recaptcha_check_answer()\r
+ */\r
+class ReCaptchaResponse {\r
+        var $is_valid;\r
+        var $error;\r
+}\r
+\r
+\r
+/**\r
+  * Calls an HTTP POST function to verify if the user's guess was correct\r
+  * @param string $privkey\r
+  * @param string $remoteip\r
+  * @param string $challenge\r
+  * @param string $response\r
+  * @return ReCaptchaResponse\r
+  */\r
+function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response)\r
+{\r
+       if ($privkey == null || $privkey == '') {\r
+               die ("To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");\r
+       }\r
+\r
+       if ($remoteip == null || $remoteip == '') {\r
+               die ("For security reasons, you must pass the remote ip to reCAPTCHA");\r
+       }\r
+\r
+       \r
+       \r
+        //discard spam submissions\r
+        if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) {\r
+                $recaptcha_response = new ReCaptchaResponse();\r
+                $recaptcha_response->is_valid = false;\r
+                $recaptcha_response->error = 'incorrect-captcha-sol';\r
+                return $recaptcha_response;\r
+        }\r
+\r
+        global $recaptcha_verify_server;\r
+        $response = _recaptcha_http_post ($recaptcha_verify_server, "/verify",\r
+                                          array (\r
+                                                 'privatekey' => $privkey,\r
+                                                 'remoteip' => $remoteip,\r
+                                                 'challenge' => $challenge,\r
+                                                 'response' => $response\r
+                                                 )\r
+                                          );\r
+\r
+        $answers = explode ("\n", $response [1]);\r
+        $recaptcha_response = new ReCaptchaResponse();\r
+\r
+        if (trim ($answers [0]) == 'true') {\r
+                $recaptcha_response->is_valid = true;\r
+        }\r
+        else {\r
+                $recaptcha_response->is_valid = false;\r
+                $recaptcha_response->error = $answers [1];\r
+        }\r
+        return $recaptcha_response;\r
+\r
+}\r
+\r
+/**\r
+ * gets a URL where the user can sign up for reCAPTCHA. If your application\r
+ * has a configuration page where you enter a key, you should provide a link\r
+ * using this function.\r
+ * @param string $domain The domain where the page is hosted\r
+ * @param string $appname The name of your application\r
+ */\r
+function recaptcha_get_signup_url ($domain = null, $appname = null) {\r
+       return "http://recaptcha.net/api/getkey?" .  _recaptcha_qsencode (array ('domain' => $domain, 'app' => $appname));\r
+}\r
+\r
+\r
+\r
+/* Mailhide related code */\r
+\r
+function _recaptcha_aes_encrypt($val,$ky) {\r
+       if (! function_exists ("mcrypt_encrypt")) {\r
+               die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");\r
+       }\r
+       $mode=MCRYPT_MODE_CBC;   \r
+       $enc=MCRYPT_RIJNDAEL_128;\r
+       $val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));\r
+       return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");\r
+}\r
+\r
+\r
+function _recaptcha_mailhide_urlbase64 ($x) {\r
+       return strtr(base64_encode ($x), '+/', '-_');\r
+}\r
+\r
+/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */\r
+function recaptcha_mailhide_url($pubkey, $privkey, $email) {\r
+       if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) {\r
+               die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .\r
+                    "you can do so at <a href='http://mailhide.recaptcha.net/apikey'>http://mailhide.recaptcha.net/apikey</a>");\r
+       }\r
+       \r
+\r
+       $ky = pack('H*', $privkey);\r
+       $cryptmail = _recaptcha_aes_encrypt ($email, $ky);\r
+       \r
+       return "http://mailhide.recaptcha.net/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);\r
+}\r
+\r
+/**\r
+ * gets the parts of the email to expose to the user.\r
+ * eg, given johndoe@example,com return ["john", "example.com"].\r
+ * the email is then displayed as john...@example.com\r
+ */\r
+function _recaptcha_mailhide_email_parts ($email) {\r
+       $arr = preg_split("/@/", $email );\r
+\r
+       if (strlen ($arr[0]) <= 4) {\r
+               $arr[0] = substr ($arr[0], 0, 1);\r
+       } else if (strlen ($arr[0]) <= 6) {\r
+               $arr[0] = substr ($arr[0], 0, 3);\r
+       } else {\r
+               $arr[0] = substr ($arr[0], 0, 4);\r
+       }\r
+       return $arr;\r
+}\r
+\r
+/**\r
+ * Gets html to display an email address given a public an private key.\r
+ * to get a key, go to:\r
+ *\r
+ * http://mailhide.recaptcha.net/apikey\r
+ */\r
+function recaptcha_mailhide_html($pubkey, $privkey, $email) {\r
+       $emailparts = _recaptcha_mailhide_email_parts ($email);\r
+       $url = recaptcha_mailhide_url ($pubkey, $privkey, $email);\r
+       \r
+       return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) .\r
+               "' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]);\r
+\r
+}\r
+\r
+\r
+?>\r
diff --git a/mediawiki/extensions/simplepie.inc b/mediawiki/extensions/simplepie.inc
new file mode 100644 (file)
index 0000000..b5135ad
--- /dev/null
@@ -0,0 +1,5449 @@
+<?php
+/****************************************************
+SIMPLEPIE
+A PHP-Based RSS and Atom Feed Framework
+Takes the hard work out of managing a complete RSS/Atom solution.
+
+Version: "Lemon Meringue"
+Updated: 24 November 2006
+Copyright: 2004-2006 Ryan Parman, Geoffrey Sneddon
+http://simplepie.org
+
+*****************************************************
+LICENSE:
+
+GNU Lesser General Public License 2.1 (LGPL)
+http://creativecommons.org/licenses/LGPL/2.1/
+
+*****************************************************
+Please submit all bug reports and feature requests to the SimplePie forums.
+http://simplepie.org/support/
+
+****************************************************/
+
+class SimplePie
+{
+       // SimplePie Info
+       var $name = 'SimplePie';
+       var $version = '1.0 b3.2';
+       var $build = '20061124';
+       var $url = 'http://simplepie.org/';
+       var $useragent;
+       var $linkback;
+       
+       // Other objects, instances created here so we can set options on them
+       var $sanitize;
+       
+       // Options
+       var $rss_url;
+       var $file;
+       var $timeout = 10;
+       var $xml_dump = false;
+       var $enable_cache = true;
+       var $max_minutes = 60;
+       var $cache_location = './cache';
+       var $order_by_date = true;
+       var $input_encoding = false;
+       var $cache_class = 'SimplePie_Cache';
+       var $locator_class = 'SimplePie_Locator';
+       var $parser_class = 'SimplePie_Parser';
+       var $file_class = 'SimplePie_File';
+       var $force_fsockopen = false;
+       var $cache_name_type = 'sha1';
+       
+       // Misc. variables
+       var $data;
+       var $error;
+       
+       function SimplePie($feed_url = null, $cache_location = null, $cache_max_minutes = null)
+       {
+               // Couple of variables built up from other variables
+               $this->useragent = $this->name . '/' . $this->version . ' (Feed Parser; ' . $this->url . '; Allow like Gecko) Build/' . $this->build;
+               $this->linkback = '<a href="' . $this->url . '" title="' . $this->name . ' ' . $this->version . '">' . $this->name . '</a>';
+               
+               // Other objects, instances created here so we can set options on them
+               $this->sanitize = new SimplePie_Sanitize;
+               
+               // Set options if they're passed to the constructor
+               if (!is_null($feed_url))
+               {
+                       $this->feed_url($feed_url);
+               }
+
+               if (!is_null($cache_location))
+               {
+                       $this->cache_location($cache_location);
+               }
+
+               if (!is_null($cache_max_minutes))
+               {
+                       $this->cache_max_minutes($cache_max_minutes);
+               }
+
+               // If we've passed an xmldump variable in the URL, snap into XMLdump mode
+               if (isset($_GET['xmldump']))
+               {
+                       $this->enable_xmldump(true);
+               }
+               
+               // Only init the script if we're passed a feed URL
+               if (!is_null($feed_url))
+               {
+                       return $this->init();
+               }
+       }
+       
+       function feed_url($url)
+       {
+               $this->rss_url = SimplePie_Misc::fix_protocol($url, 1);
+       }
+       
+       function set_file(&$file)
+       {
+               if (is_a($file, 'SimplePie_File'))
+               {
+                       $this->rss_url = $file->url;
+                       $this->file =& $file;
+               }
+       }
+       
+       function set_timeout($timeout = 10)
+       {
+               $this->timeout = (int) $timeout;
+       }
+       
+       function set_raw_data($data)
+       {
+               $this->raw_data = trim((string) $data);
+       }
+       
+       function enable_xmldump($enable = false)
+       {
+               $this->xml_dump = (bool) $enable;
+       }
+       
+       function enable_caching($enable = true)
+       {
+               $this->enable_cache = (bool) $enable;
+       }
+       
+       function cache_max_minutes($minutes = 60)
+       {
+               $this->max_minutes = (float) $minutes;
+       }
+       
+       function cache_location($location = './cache')
+       {
+               $this->cache_location = (string) $location;
+       }
+       
+       function order_by_date($enable = true)
+       {
+               $this->order_by_date = (bool) $enable;
+       }
+       
+       function input_encoding($encoding = false)
+       {
+               if ($encoding)
+               {
+                       $this->input_encoding = (string) $encoding;
+               }
+               else
+               {
+                       $this->input_encoding = false;
+               }
+       }
+       
+       function set_cache_class($class = 'SimplePie_Cache')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Cache'))
+               {
+                       $this->cache_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_locator_class($class = 'SimplePie_Locator')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Locator'))
+               {
+                       $this->locator_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_parser_class($class = 'SimplePie_Parser')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Parser'))
+               {
+                       $this->parser_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_file_class($class = 'SimplePie_File')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_File'))
+               {
+                       $this->file_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_sanitize_class($object = 'SimplePie_Sanitize')
+       {
+               if (class_exists($object))
+               {
+                       $this->sanitize = new $object;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_useragent($ua)
+       {
+               $this->useragent = (string) $ua;
+       }
+       
+       function force_fsockopen($enable = false)
+       {
+               $this->force_fsockopen = (bool) $enable;
+       }
+       
+       function set_cache_name_type($type = 'sha1')
+       {
+               $type = strtolower(trim($type));
+               switch ($type)
+               {
+                       case 'crc32':
+                               $this->cache_name_type = 'crc32';
+                               break;
+                       
+                       case 'md5':
+                               $this->cache_name_type = 'md5';
+                               break;
+                       
+                       case 'rawurlencode':
+                               $this->cache_name_type = 'rawurlencode';
+                               break;
+                       
+                       case 'urlencode':
+                               $this->cache_name_type = 'urlencode';
+                               break;
+                       
+                       default:
+                               $this->cache_name_type = 'sha1';
+                               break;
+               }
+       }
+       
+       function bypass_image_hotlink($get = false)
+       {
+               $this->sanitize->bypass_image_hotlink($get);
+       }
+       
+       function bypass_image_hotlink_page($page = false)
+       {
+               $this->sanitize->bypass_image_hotlink_page($page);
+       }
+       
+       function replace_headers($enable = false)
+       {
+               $this->sanitize->replace_headers($enable);
+       }
+       
+       function remove_div($enable = true)
+       {
+               $this->sanitize->remove_div($enable);
+       }
+       
+       function strip_ads($enable = false)
+       {
+               $this->sanitize->strip_ads($enable);
+       }
+       
+       function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'), $encode = null)
+       {
+               $this->sanitize->strip_htmltags($tags);
+               if (!is_null($encode))
+               {
+                       $this->sanitize->encode_instead_of_strip($tags);
+               }
+       }
+       
+       function encode_instead_of_strip($enable = true)
+       {
+               $this->sanitize->encode_instead_of_strip($enable);
+       }
+       
+       function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur'))
+       {
+               $this->sanitize->strip_attributes($attribs);
+       }
+       
+       function output_encoding($encoding = 'UTF-8')
+       {
+               $this->sanitize->output_encoding($encoding);
+       }
+       
+       function set_item_class($class = 'SimplePie_Item')
+       {
+               return $this->sanitize->set_item_class($class);
+       }
+       
+       function set_author_class($class = 'SimplePie_Author')
+       {
+               return $this->sanitize->set_author_class($class);
+       }
+       
+       function set_enclosure_class($class = 'SimplePie_Enclosure')
+       {
+               return $this->sanitize->set_enclosure_class($class);
+       }
+       
+       function init()
+       {
+               if (!(function_exists('version_compare') && ((version_compare(phpversion(), '4.3.2', '>=') && version_compare(phpversion(), '5', '<')) || version_compare(phpversion(), '5.0.3', '>='))) || !extension_loaded('xml') || !extension_loaded('pcre'))
+               {
+                       return false;
+               }
+               if ($this->sanitize->bypass_image_hotlink && !empty($_GET[$this->sanitize->bypass_image_hotlink]))
+               {
+                       if (get_magic_quotes_gpc())
+                       {
+                               $_GET[$this->sanitize->bypass_image_hotlink] = stripslashes($_GET[$this->sanitize->bypass_image_hotlink]);
+                       }
+                       SimplePie_Misc::display_file($_GET[$this->sanitize->bypass_image_hotlink], 10, $this->useragent);
+               }
+               
+               if (isset($_GET['js']))
+               {
+                       $embed = <<<EOT
+function embed_odeo(link) {
+       document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
+}
+
+function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
+       if (placeholder != '') {
+               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+       }
+       else {
+               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+       }
+}
+
+function embed_flash(bgcolor, width, height, link, loop, type) {
+       document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
+}
+
+function embed_wmedia(width, height, link) {
+       document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
+}
+EOT;
+
+                       if (function_exists('ob_gzhandler'))
+                       {
+                               ob_start('ob_gzhandler');
+                       }
+                       header('Content-type: text/javascript; charset: UTF-8'); 
+                       header('Cache-Control: must-revalidate'); 
+                       header('Expires: ' .  gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');
+                       echo $embed;
+                       exit;
+               }
+               
+               if (!empty($this->rss_url) || !empty($this->raw_data))
+               {
+                       $this->data = array();
+                       $cache = false;
+                       
+                       if (!empty($this->rss_url))
+                       {
+                               // Decide whether to enable caching
+                               if ($this->enable_cache && preg_match('/^http(s)?:\/\//i', $this->rss_url))
+                               {
+                                       $cache = new $this->cache_class($this->cache_location, call_user_func($this->cache_name_type, $this->rss_url), 'spc');
+                               }
+                               // If it's enabled and we don't want an XML dump, use the cache
+                               if ($cache && !$this->xml_dump)
+                               {
+                                       // Load the Cache
+                                       $this->data = $cache->load();
+                                       if (!empty($this->data))
+                                       {
+                                               // If we've hit a collision just rerun it with caching disabled
+                                               if (isset($this->data['url']) && $this->data['url'] != $this->rss_url)
+                                               {
+                                                       $cache = false;
+                                               }
+                                               // If we've got a feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL
+                                               else if (!empty($this->data['feed_url']))
+                                               {
+                                                       if ($this->data['feed_url'] == $this->data['url'])
+                                                       {
+                                                               $cache->unlink();
+                                                       }
+                                                       else
+                                                       {
+                                                               $this->feed_url($this->data['feed_url']);
+                                                               return $this->init();
+                                                       }
+                                               }
+                                               // If the cache is new enough
+                                               else if ($cache->mtime() + $this->max_minutes * 60 < time())
+                                               {
+                                                       // If we have last-modified and/or etag set
+                                                       if (!empty($this->data['last-modified']) || !empty($this->data['etag']))
+                                                       {
+                                                               $headers = array();
+                                                               if (!empty($this->data['last-modified']))
+                                                               {
+                                                                       $headers['if-modified-since'] = $this->data['last-modified'];
+                                                               }
+                                                               if (!empty($this->data['etag']))
+                                                               {
+                                                                       $headers['if-none-match'] = $this->data['etag'];
+                                                               }
+                                                               $file = new $this->file_class($this->rss_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen);
+                                                               if ($file->success)
+                                                               {
+                                                                       $headers = $file->headers();
+                                                                       if ($headers['status']['code'] == 304)
+                                                                       {
+                                                                               $cache->touch();
+                                                                               return true;
+                                                                       }
+                                                               }
+                                                               else
+                                                               {
+                                                                       unset($file);
+                                                               }
+                                                       }
+                                                       // If we don't have last-modified or etag set, just clear the cache
+                                                       else
+                                                       {
+                                                               $cache->unlink();
+                                                       }
+                                               }
+                                               // If the cache is still valid, just return true
+                                               else
+                                               {
+                                                       return true;
+                                               }
+                                       }
+                                       // If the cache is empty, delete it
+                                       else
+                                       {
+                                               $cache->unlink();
+                                       }
+                               }
+                               $this->data = array();
+                               // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
+                               if (!isset($file))
+                               {
+                                       if (is_a($this->file, 'SimplePie_File') && $this->file->url == $this->rss_url)
+                                       {
+                                               $file =& $this->file;
+                                       }
+                                       else
+                                       {
+                                               $file = new $this->file_class($this->rss_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen);
+                                       }
+                               }
+                               // If the file connection has an error, set SimplePie::error to that and quit
+                               if (!$file->success)
+                               {
+                                       $this->error = $file->error;
+                                       return false;
+                               }
+                               
+                               // Check if the supplied URL is a feed, if it isn't, look for it.
+                               $locate = new $this->locator_class($file, $this->timeout, $this->useragent);
+                               if (!$locate->is_feed($file))
+                               {
+                                       $feed = $locate->find();
+                                       if ($feed)
+                                       {
+                                               if ($cache && !$cache->save(array('url' => $this->rss_url, 'feed_url' => $feed)))
+                                               {
+                                                       $this->error = "$cache->name is not writeable";
+                                                       SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                                               }
+                                               $this->rss_url = $feed;
+                                               return $this->init();
+                                       }
+                                       else
+                                       {
+                                               $this->error = "A feed could not be found at $this->rss_url";
+                                               SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                                               return false;
+                                       }
+                               }
+                               
+                               $headers = $file->headers();
+                               $data = trim($file->body());
+                               $file->close();
+                               unset($file);
+                       }
+                       else
+                       {
+                               $data = $this->raw_data;
+                       }
+                       
+                       // First check to see if input has been overridden.
+                       if (!empty($this->input_encoding))
+                       {
+                               $encoding = $this->input_encoding;
+                       }
+                       // Second try HTTP headers
+                       else if (!empty($headers['content-type']) && preg_match('/charset\s*=\s*([^;]*)/i', $headers['content-type'], $charset))
+                       {
+                               $encoding = $charset[1];
+                       }
+                       // Then prolog, if at the very start of the document
+                       else if (preg_match('/^<\?xml(.*)?>/msiU', $data, $prolog) && preg_match('/encoding\s*=\s*("([^"]*)"|\'([^\']*)\')/Ui', $prolog[1], $encoding))
+                       {
+                               $encoding = substr($encoding[1], 1, -1);
+                       }
+                       // UTF-32 Big Endian BOM
+                       else if (strpos($data, sprintf('%c%c%c%c', 0x00, 0x00, 0xFE, 0xFF)) === 0)
+                       {
+                               $encoding = 'UTF-32be';
+                       }
+                       // UTF-32 Little Endian BOM
+                       else if (strpos($data, sprintf('%c%c%c%c', 0xFF, 0xFE, 0x00, 0x00)) === 0)
+                       {
+                               $encoding = 'UTF-32';
+                       }
+                       // UTF-16 Big Endian BOM
+                       else if (strpos($data, sprintf('%c%c', 0xFE, 0xFF)) === 0)
+                       {
+                               $encoding = 'UTF-16be';
+                       }
+                       // UTF-16 Little Endian BOM
+                       else if (strpos($data, sprintf('%c%c', 0xFF, 0xFE)) === 0)
+                       {
+                               $encoding = 'UTF-16le';
+                       }
+                       // UTF-8 BOM
+                       else if (strpos($data, sprintf('%c%c%c', 0xEF, 0xBB, 0xBF)) === 0)
+                       {
+                               $encoding = 'UTF-8';
+                       }
+                       // Fallback to the default
+                       else
+                       {
+                               $encoding = null;
+                       }
+                       
+                       // Change the encoding to UTF-8 (as we always use UTF-8 internally)
+                       $data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8');
+                       
+                       // Strip illegal characters (if on less  than PHP5, as on PHP5 expat can manage fine)
+                       if (version_compare(phpversion(), '5', '<'))
+                       {
+                               if (function_exists('iconv'))
+                               {
+                                       $data = iconv('UTF-8', 'UTF-8//IGNORE', $data);
+                               }
+                               else if (function_exists('mb_convert_encoding'))
+                               {
+                                       $data = mb_convert_encoding($data, 'UTF-8', 'UTF-8');
+                               }
+                               else
+                               {
+                                       $data = SimplePie_Misc::utf8_bad_replace($data);
+                               }
+                       }
+
+                       // Start parsing
+                       $data = new $this->parser_class($data, 'UTF-8', $this->xml_dump);
+                       // If we want the XML, just output that and quit
+                       if ($this->xml_dump)
+                       {
+                               header('Content-type: text/xml; charset=UTF-8');
+                               echo $data->data;
+                               exit;
+                       }
+                       // If it's parsed fine
+                       else if (!$data->error_code)
+                       {
+                               // Parse the data, and make it sane
+                               $this->sanitize->parse_data_array($data->data, $this->rss_url);
+                               unset($data);
+                               // Get the sane data
+                               $this->data['feedinfo'] = $this->sanitize->feedinfo;
+                               unset($this->sanitize->feedinfo);
+                               $this->data['info'] = $this->sanitize->info;
+                               unset($this->sanitize->info);
+                               $this->data['items'] = $this->sanitize->items;
+                               unset($this->sanitize->items);
+                               $this->data['feedinfo']['encoding'] = $this->sanitize->output_encoding;
+                               $this->data['url'] = $this->rss_url;
+                               
+                               // Store the headers that we need
+                               if (!empty($headers['last-modified']))
+                               {
+                                       $this->data['last-modified'] = $headers['last-modified'];
+                               }
+                               if (!empty($headers['etag']))
+                               {
+                                       $this->data['etag'] = $headers['etag'];
+                               }
+                               
+                               // If we want to order it by date, check if all items have a date, and then sort it
+                               if ($this->order_by_date && !empty($this->data['items']))
+                               {
+                                       $do_sort = true;
+                                       foreach ($this->data['items'] as $item)
+                                       {
+                                               if (!$item->get_date('U'))
+                                               {
+                                                       $do_sort = false;
+                                                       break;
+                                               }
+                                       }
+                                       if ($do_sort)
+                                       {
+                                               usort($this->data['items'], create_function('$a, $b', 'if ($a->get_date(\'U\') == $b->get_date(\'U\')) return 1; return ($a->get_date(\'U\') < $b->get_date(\'U\')) ? 1 : -1;'));
+                                       }
+                               }
+                               
+                               // Cache the file if caching is enabled
+                               if ($cache && !$cache->save($this->data))
+                               {
+                                       $this->error = "$cache->name is not writeable";
+                                       SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                               }
+                               return true;
+                       }
+                       // If we have an error, just set SimplePie::error to it and quit
+                       else
+                       {
+                               $this->error = "XML error: $data->error_string at line $data->current_line, column $data->current_column";
+                               SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                               return false;
+                       }
+               }
+       }
+       
+       function get_encoding()
+       {
+               if (!empty($this->data['feedinfo']['encoding']))
+               {
+                       return $this->data['feedinfo']['encoding'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function handle_content_type($mime = 'text/html')
+       {
+               if (!headers_sent())
+               {
+                       $header = "Content-type: $mime;";
+                       if ($this->get_encoding())
+                       {
+                               $header .= ' charset=' . $this->get_encoding();
+                       }
+                       else
+                       {
+                               $header .= ' charset=UTF-8';
+                       }
+                       header($header);
+               }
+       }
+       
+       function get_type()
+       {
+               if (!empty($this->data['feedinfo']['type']))
+               {
+                       return $this->data['feedinfo']['type'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_version()
+       {
+               if (!empty($this->data['feedinfo']['version']))
+               {
+                       return $this->data['feedinfo']['version'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_favicon($check = false, $alternate = null)
+       {
+               if (!empty($this->data['info']['link']['alternate'][0]))
+               {
+                       $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $this->get_feed_link());
+
+                       if ($check)
+                       {
+                               $file = new $this->file_class($favicon, $this->timeout/10, 5, null, $this->useragent, $this->force_fsockopen);
+                               $headers = $file->headers();
+                               $file->close();
+
+                               if ($headers['status']['code'] == 200)
+                               {
+                                       return $favicon;
+                               }
+                       }
+                       else
+                       {
+                               return $favicon;
+                       }
+               }
+               if (!is_null($alternate))
+               {
+                       return $alternate;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_url()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return $this->rss_url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feed()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return SimplePie_Misc::fix_protocol($this->rss_url, 2);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_outlook()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return 'outlook' . SimplePie_Misc::fix_protocol($this->rss_url, 2);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_podcast()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return SimplePie_Misc::fix_protocol($this->rss_url, 3);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_aol()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://feeds.my.aol.com/add.jsp?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_bloglines()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.bloglines.com/sub/' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_eskobo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.eskobo.com/?AddToMyPage=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feedfeeds()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.feedfeeds.com/add?feed=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feedlounge()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://my.feedlounge.com/external/subscribe?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feedster()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.feedster.com/myfeedster.php?action=addrss&amp;confirm=no&amp;rssurl=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_google()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://fusion.google.com/add?feedurl=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_gritwire()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_msn()
+       {
+               if ($this->subscribe_url())
+               {
+                       $url = 'http://my.msn.com/addtomymsn.armx?id=rss&amp;ut=' . rawurlencode($this->subscribe_url());
+                       if ($this->get_feed_link())
+                       {
+                               $url .= '&amp;ru=' . rawurlencode($this->get_feed_link());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_netvibes()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.netvibes.com/subscribe.php?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_newsburst()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.newsburst.com/Source/?add=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_newsgator()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.newsgator.com/ngs/subscriber/subext.aspx?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_odeo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.odeo.com/listen/subscribe?feed=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_pluck()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://client.pluck.com/pluckit/prompt.aspx?GCID=C12286x053&amp;a=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_podnova()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.podnova.com/index_your_podcasts.srf?action=add&amp;url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_rojo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.rojo.com/add-subscription?resource=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_yahoo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://add.my.yahoo.com/rss?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_title()
+       {
+               if (!empty($this->data['info']['title']))
+               {
+                       return $this->data['info']['title'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_link()
+       {
+               if (!empty($this->data['info']['link']['alternate'][0]))
+               {
+                       return $this->data['info']['link']['alternate'][0];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_links()
+       {
+               if (!empty($this->data['info']['link']))
+               {
+                       return $this->data['info']['link'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_description()
+       {
+               if (!empty($this->data['info']['description']))
+               {
+                       return $this->data['info']['description'];
+               }
+               else if (!empty($this->data['info']['dc:description']))
+               {
+                       return $this->data['info']['dc:description'];
+               }
+               else if (!empty($this->data['info']['tagline']))
+               {
+                       return $this->data['info']['tagline'];
+               }
+               else if (!empty($this->data['info']['subtitle']))
+               {
+                       return $this->data['info']['subtitle'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_copyright()
+       {
+               if (!empty($this->data['info']['copyright']))
+               {
+                       return $this->data['info']['copyright'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_language()
+       {
+               if (!empty($this->data['info']['language']))
+               {
+                       return $this->data['info']['language'];
+               }
+               else if (!empty($this->data['info']['xml:lang']))
+               {
+                       return $this->data['info']['xml:lang'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_exist()
+       {
+               if (!empty($this->data['info']['image']['url']) || !empty($this->data['info']['image']['logo']))
+               {
+                       return true;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_title()
+       {
+               if (!empty($this->data['info']['image']['title']))
+               {
+                       return $this->data['info']['image']['title'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_url()
+       {
+               if (!empty($this->data['info']['image']['url']))
+               {
+                       return $this->data['info']['image']['url'];
+               }
+               else if (!empty($this->data['info']['image']['logo']))
+               {
+                       return $this->data['info']['image']['logo'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_link()
+       {
+               if (!empty($this->data['info']['image']['link']))
+               {
+                       return $this->data['info']['image']['link'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_width()
+       {
+               if (!empty($this->data['info']['image']['width']))
+               {
+                       return $this->data['info']['image']['width'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_height()
+       {
+               if (!empty($this->data['info']['image']['height']))
+               {
+                       return $this->data['info']['image']['height'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_item_quantity($max = 0)
+       {
+               if (!empty($this->data['items']))
+               {
+                       $qty = sizeof($this->data['items']);
+               }
+               else
+               {
+                       $qty = 0;
+               }
+               if ($max == 0)
+               {
+                       return $qty;
+               }
+               else
+               {
+                       return ($qty > $max) ? $max : $qty;
+               }
+       }
+       
+       function get_item($key = 0)
+       {
+               if (!empty($this->data['items'][$key]))
+               {
+                       return $this->data['items'][$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_items($start = 0, $end = 0)
+       {
+               if ($this->get_item_quantity() > 0)
+               {
+                       if ($end == 0)
+                       {
+                               return array_slice($this->data['items'], $start);
+                       }
+                       else
+                       {
+                               return array_slice($this->data['items'], $start, $end);
+                       }
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Item
+{
+       var $data;
+       
+       function SimplePie_Item($data)
+       {
+               $this->data =& $data;
+       }
+       
+       function get_id()
+       {
+               if (!empty($this->data['guid']['data']))
+               {
+                       return $this->data['guid']['data'];
+               }
+               else if (!empty($this->data['id']))
+               {
+                       return $this->data['id'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_title()
+       {
+               if (!empty($this->data['title']))
+               {
+                       return $this->data['title'];
+               }
+               else if (!empty($this->data['dc:title']))
+               {
+                       return $this->data['dc:title'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_description()
+       {
+               if (!empty($this->data['content']))
+               {
+                       return $this->data['content'];
+               }
+               else if (!empty($this->data['encoded']))
+               {
+                       return $this->data['encoded'];
+               }
+               else if (!empty($this->data['summary']))
+               {
+                       return $this->data['summary'];
+               }
+               else if (!empty($this->data['description']))
+               {
+                       return $this->data['description'];
+               }
+               else if (!empty($this->data['dc:description']))
+               {
+                       return $this->data['dc:description'];
+               }
+               else if (!empty($this->data['longdesc']))
+               {
+                       return $this->data['longdesc'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_category($key = 0)
+       {
+               $categories = $this->get_categories();
+               if (!empty($categories[$key]))
+               {
+                       return $categories[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_categories()
+       {
+               $categories = array();
+               if (!empty($this->data['category']))
+               {
+                       $categories = array_merge($categories, $this->data['category']);
+               }
+               if (!empty($this->data['subject']))
+               {
+                       $categories = array_merge($categories, $this->data['subject']);
+               }
+               if (!empty($this->data['term']))
+               {
+                       $categories = array_merge($categories, $this->data['term']);
+               }
+               if (!empty($categories))
+               {
+                       return array_unique($categories);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_author($key = 0)
+       {
+               $authors = $this->get_authors();
+               if (!empty($authors[$key]))
+               {
+                       return $authors[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_authors()
+       {
+               $authors = array();
+               if (!empty($this->data['author']))
+               {
+                       $authors = array_merge($authors, $this->data['author']);
+               }
+               if (!empty($this->data['creator']))
+               {
+                       $authors = array_merge($authors, $this->data['creator']);
+               }
+               if (!empty($authors))
+               {
+                       return array_unique($authors);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_date($date_format = 'j F Y, g:i a')
+       {
+               if (!empty($this->data['pubdate']))
+               {
+                       return date($date_format, $this->data['pubdate']);
+               }
+               else if (!empty($this->data['dc:date']))
+               {
+                       return date($date_format, $this->data['dc:date']);
+               }
+               else if (!empty($this->data['issued']))
+               {
+                       return date($date_format, $this->data['issued']);
+               }
+               else if (!empty($this->data['published']))
+               {
+                       return date($date_format, $this->data['published']);
+               }
+               else if (!empty($this->data['modified']))
+               {
+                       return date($date_format, $this->data['modified']);
+               }
+               else if (!empty($this->data['updated']))
+               {
+                       return date($date_format, $this->data['updated']);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_permalink()
+       {
+               $link = $this->get_link(0);
+               $enclosure = $this->get_enclosure(0);
+               if (!empty($link))
+               {
+                       return $link;
+               }
+               else if (!empty($enclosure))
+               {
+                       return $enclosure->get_link();
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_link($key = 0, $rel = 'alternate')
+       {
+               $links = $this->get_links($rel);
+               if (!empty($links[$key]))
+               {
+                       return $links[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_links($rel = 'alternate')
+       {
+               if ($rel == 'alternate')
+               {
+                       $links = array();
+                       if (!empty($this->data['link'][$rel]))
+                       {
+                               $links = $this->data['link'][$rel];
+                       }
+                       if (!empty($this->data['guid']['data']) && $this->data['guid']['permalink'] == true)
+                       {
+                               $links[] = $this->data['guid']['data'];
+                       }
+                       return $links;
+               }
+               else if (!empty($this->data['link'][$rel]))
+               {
+                       return $this->data['link'][$rel];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_enclosure($key = 0)
+       {
+               $enclosures = $this->get_enclosures();
+               if (!empty($enclosures[$key]))
+               {
+                       return $enclosures[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_enclosures()
+       {
+               $enclosures = array();
+               $links = $this->get_links('enclosure');
+               if (!empty($this->data['enclosures']))
+               {
+                       $enclosures = array_merge($enclosures, $this->data['enclosures']);
+               }
+               if (!empty($links))
+               {
+                       $enclosures = array_merge($enclosures, $links);
+               }
+               if (!empty($enclosures))
+               {
+                       return array_unique($enclosures);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_blinklist()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;Title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_blogmarks()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_delicious()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://del.icio.us/post/?v=3&amp;url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_digg()
+       {
+               if ($this->get_permalink())
+               {
+                       return 'http://digg.com/submit?phase=2&amp;URL=' . rawurlencode($this->get_permalink());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_furl()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.furl.net/storeIt.jsp?u=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;t=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_magnolia()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://ma.gnolia.com/bookmarklet/add?url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_myweb20()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://myweb2.search.yahoo.com/myresults/bookmarklet?u=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;t=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_newsvine()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.newsvine.com/_wine/save?u=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;h=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_reddit()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://reddit.com/submit?url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_segnalo()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://segnalo.com/post.html.php?url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_simpy()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.simpy.com/simpy/LinkAdd.do?href=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_smarking()
+       {
+               if ($this->get_permalink())
+               {
+                       return 'http://smarking.com/editbookmark/?url=' . rawurlencode($this->get_permalink());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_spurl()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.spurl.net/spurl.php?v=3&amp;url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_wists()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://wists.com/r.php?c=&amp;r=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function search_technorati()
+       {
+               if ($this->get_permalink())
+               {
+                       return 'http://www.technorati.com/search/' . rawurlencode($this->get_permalink());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Author
+{
+       var $name;
+       var $link;
+       var $email;
+       
+       // Constructor, used to input the data
+       function SimplePie_Author($name, $link, $email)
+       {
+               $this->name = $name;
+               $this->link = $link;
+               $this->email = $email;
+       }
+       
+       function get_name()
+       {
+               if (!empty($this->name))
+               {
+                       return $this->name;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_link()
+       {
+               if (!empty($this->link))
+               {
+                       return $this->link;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_email()
+       {
+               if (!empty($this->email))
+               {
+                       return $this->email;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Enclosure
+{
+       var $link;
+       var $type;
+       var $length;
+
+       // Constructor, used to input the data
+       function SimplePie_Enclosure($link, $type, $length)
+       {
+               $this->link = $link;
+               $this->type = $type;
+               $this->length = $length;
+       }
+
+       function get_link()
+       {
+               if (!empty($this->link))
+               {
+                       if (class_exists('idna_convert'))
+                       {
+                               $idn = new idna_convert;
+                               $this->link = $idn->encode($this->link);
+                       }
+                       return $this->link;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_extension()
+       {
+               if (!empty($this->link))
+               {
+                       return pathinfo($this->link, PATHINFO_EXTENSION);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_type()
+       {
+               if (!empty($this->type))
+               {
+                       return $this->type;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_length()
+       {
+               if (!empty($this->length))
+               {
+                       return $this->length;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_size()
+       {
+               $length = $this->get_length();
+               if (!empty($length))
+               {
+                       return round($length/1048576, 2);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function native_embed($options='')
+       {
+               return $this->embed($options, true);            
+       }
+
+       function embed($options = '', $native = false)
+       {
+               // Set up defaults
+               $audio = '';
+               $video = '';
+               $alt = '';
+               $altclass = '';
+               $loop = 'false';
+               $width = 'auto';
+               $height = 'auto';
+               $bgcolor = '#ffffff';
+
+               // Process options and reassign values as necessary
+               if (is_array($options))
+               {
+                       extract($options);
+               }
+               else
+               {
+                       $options = explode(',', $options);
+                       foreach($options as $option)
+                       {
+                               $opt = explode(':', $option, 2);
+                               if (isset($opt[0], $opt[1]))
+                               {
+                                       $opt[0] = trim($opt[0]);
+                                       $opt[1] = trim($opt[1]);
+                                       switch ($opt[0])
+                                       {
+                                               case 'audio':
+                                                       $audio = $opt[1];
+                                                       break;
+                                               
+                                               case 'video':
+                                                       $video = $opt[1];
+                                                       break;
+                                               
+                                               case 'alt':
+                                                       $alt = $opt[1];
+                                                       break;
+                                               
+                                               case 'altclass':
+                                                       $altclass = $opt[1];
+                                                       break;
+                                               
+                                               case 'loop':
+                                                       $loop = $opt[1];
+                                                       break;
+                                               
+                                               case 'width':
+                                                       $width = $opt[1];
+                                                       break;
+                                               
+                                               case 'height':
+                                                       $height = $opt[1];
+                                                       break;
+                                               
+                                               case 'bgcolor':
+                                                       $bgcolor = $opt[1];
+                                                       break;
+                                       }
+                               }
+                       }
+               }
+       
+               $type = strtolower($this->get_type());
+
+               // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
+               if (!in_array($type, array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'x-audio/mp3', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video', 'application/x-shockwave-flash', 'application/futuresplash', 'application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx')))
+               {                       
+                       switch (strtolower($this->get_extension()))
+                       {
+                               // Audio mime-types
+                               case 'aac':
+                               case 'adts':
+                                       $type = 'audio/acc';
+                                       break;
+                               
+                               case 'aif':
+                               case 'aifc':
+                               case 'aiff':
+                               case 'cdda':
+                                       $type = 'audio/aiff';
+                                       break;
+                               
+                               case 'bwf':
+                                       $type = 'audio/wav';
+                                       break;
+                               
+                               case 'kar':
+                               case 'mid':
+                               case 'midi':
+                               case 'smf':
+                                       $type = 'audio/midi';
+                                       break;
+                               
+                               case 'm4a':
+                                       $type = 'audio/x-m4a';
+                                       break;
+                               
+                               case 'mp3':
+                               case 'swa':
+                                       $type = 'audio/mp3';
+                                       break;
+                               
+                               case 'wav':
+                                       $type = 'audio/wav';
+                                       break;
+                               
+                               case 'wax':
+                                       $type = 'audio/x-ms-wax';
+                                       break;
+                               
+                               case 'wma':
+                                       $type = 'audio/x-ms-wma';
+                                       break;
+                               
+                               // Video mime-types
+                               case '3gp':
+                               case '3gpp':
+                                       $type = 'video/3gpp';
+                                       break;
+
+                               case '3g2':
+                               case '3gp2':
+                                       $type = 'video/3gpp2';
+                                       break;
+
+                               case 'asf':
+                                       $type = 'video/x-ms-asf';
+                                       break;
+
+                               case 'm1a':
+                               case 'm1s':
+                               case 'm1v':
+                               case 'm15':
+                               case 'm75':
+                               case 'mp2':
+                               case 'mpa':
+                               case 'mpeg':
+                               case 'mpg':
+                               case 'mpm':
+                               case 'mpv':
+                                       $type = 'video/mpeg';
+                                       break;
+
+                               case 'm4v':
+                                       $type = 'video/x-m4v';
+                                       break;
+
+                               case 'mov':
+                               case 'qt':
+                                       $type = 'video/quicktime';
+                                       break;
+
+                               case 'mp4':
+                               case 'mpg4':
+                                       $type = 'video/mp4';
+                                       break;
+
+                               case 'sdv':
+                                       $type = 'video/sd-video';
+                                       break;
+
+                               case 'wm':
+                                       $type = 'video/x-ms-wm';
+                                       break;
+
+                               case 'wmv':
+                                       $type = 'video/x-ms-wmv';
+                                       break;
+
+                               case 'wvx':
+                                       $type = 'video/x-ms-wvx';
+                                       break;
+                                       
+                               // Flash mime-types
+                               case 'spl':
+                                       $type = 'application/futuresplash';
+                                       break;
+
+                               case 'swf':
+                                       $type = 'application/x-shockwave-flash';
+                                       break;
+                       }
+               }
+
+               $mime = explode('/', $type, 2);
+               $mime = $mime[0];
+               
+               // Process values for 'auto'
+               if ($width == 'auto')
+               {
+                       if ($mime == 'video')
+                       {
+                               $width = '320';
+                       }
+                       else
+                       {
+                               $width = '100%';
+                       }
+               }
+               if ($height == 'auto')
+               {
+                       if ($mime == 'audio')
+                       {
+                               $height = 0;
+                       }
+                       else if ($mime == 'video')
+                       {
+                               $height = 240;
+                       }
+                       else
+                       {
+                               $height = 256;
+                       }
+               }
+
+               // Set proper placeholder value
+               if ($mime == 'audio')
+               {
+                       $placeholder = $audio;
+               }
+               else if ($mime == 'video')
+               {
+                       $placeholder = $video;
+               }
+
+               $embed = '';
+
+               // Make sure the JS library is included
+               // (I know it'll be included multiple times, but I can't think of a better way to do this automatically)
+               if (!$native)
+               {
+                       $embed .= '<script type="text/javascript" src="?js"></script>';                 
+               }
+
+               // Odeo Feed MP3's
+               if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com') {
+                       if ($native)
+                       {
+                               $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
+                       }
+                       else
+                       {
+                               $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';                           
+                       }
+               }
+
+               // QuickTime 7 file types.  Need to test with QuickTime 6.
+               else if (in_array($type, array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'x-audio/mp3', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video')))
+               {
+                       $height += 16;
+                       if ($native)
+                       {
+                               if ($placeholder != "") {
+                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://www.apple.com/quicktime/download/\"></embed>";
+                               }
+                               else {
+                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width+\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://www.apple.com/quicktime/download/\"></embed>";
+                               }
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
+                       }
+               }
+
+               // Flash
+               else if (in_array($type, array('application/x-shockwave-flash', 'application/futuresplash')))
+               {
+                       if ($native)
+                       {
+                               $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
+                       }
+               }
+
+               // Windows Media
+               else if (in_array($type, array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx')))
+               {
+                       $height += 45;
+                       if ($native)
+                       {
+                               $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
+                       }
+               }
+
+               // Everything else
+               else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
+
+               return $embed;
+       }
+}
+
+class SimplePie_File
+{
+       var $url;
+       var $useragent;
+       var $success = true;
+       var $headers = array();
+       var $body;
+       var $fp;
+       var $redirects = 0;
+       var $error;
+       var $method;
+       
+       function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+       {
+               if (class_exists('idna_convert'))
+               {
+                       $idn = new idna_convert;
+                       $url = $idn->encode($url);
+               }
+               $this->url = $url;
+               $this->useragent = $useragent;
+               if (preg_match('/^http(s)?:\/\//i', $url))
+               {
+                       if (empty($useragent))
+                       {
+                               $useragent = ini_get('user_agent');
+                               $this->useragent = $useragent;
+                       }
+                       if (!is_array($headers))
+                       {
+                               $headers = array();
+                       }
+                       if (extension_loaded('curl') && version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=') && !$force_fsockopen)
+                       {
+                               $this->method = 'curl';
+                               $fp = curl_init();
+                               $headers2 = array();
+                               foreach ($headers as $key => $value)
+                               {
+                                       $headers2[] = "$key: $value";
+                               }
+                               curl_setopt($fp, CURLOPT_ENCODING, '');
+                               curl_setopt($fp, CURLOPT_URL, $url);
+                               curl_setopt($fp, CURLOPT_HEADER, 1);
+                               curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
+                               curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
+                               curl_setopt($fp, CURLOPT_REFERER, $url);
+                               curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
+                               curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
+                               if (!ini_get('open_basedir') && !ini_get('safe_mode'))
+                               {
+                                       curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
+                                       curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
+                               }
+
+                               $this->headers = trim(curl_exec($fp));
+                               if (curl_errno($fp) == 23 || curl_errno($fp) == 61)
+                               {
+                                       curl_setopt($fp, CURLOPT_ENCODING, 'none');
+                                       $this->headers = trim(curl_exec($fp));
+                               }
+                               if (curl_errno($fp))
+                               {
+                                       $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
+                                       $this->success = false;
+                                       return false;
+                               }
+                               $info = curl_getinfo($fp);
+                               $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 2);
+                               if (count($this->headers) == $info['redirect_count'] + 1)
+                               {
+                                       $this->headers = array_pop($this->headers);
+                                       $this->body = '';
+                               }
+                               else
+                               {
+                                       $this->body = array_pop($this->headers);
+                                       $this->headers = array_pop($this->headers);
+                               }
+                               $this->headers = $this->parse_headers($this->headers);
+                               if (($this->headers['status']['code'] == 301 || $this->headers['status']['code'] == 302 || $this->headers['status']['code'] == 303 || $this->headers['status']['code'] == 307) && !empty($this->headers['location']) && $this->redirects < $redirects)
+                               {
+                                       $this->redirects++;
+                                       return $this->SimplePie_File($this->headers['location'], $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+                               }
+                       }
+                       else
+                       {
+                               $this->method = 'fsockopen';
+                               $url_parts = parse_url($url);
+                               if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https')
+                               {
+                                       $url_parts['host'] = "ssl://$url_parts[host]";
+                                       $url_parts['port'] = 443;
+                               }
+                               if (!isset($url_parts['port']))
+                               {
+                                       $url_parts['port'] = 80;
+                               }
+                               $this->fp = fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
+                               if (!$this->fp)
+                               {
+                                       $this->error = 'fsockopen error: ' . $errstr;
+                                       $this->success = false;
+                                       return false;
+                               }
+                               else
+                               {
+                                       stream_set_timeout($this->fp, $timeout);
+                                       $get = (isset($url_parts['query'])) ? "$url_parts[path]?$url_parts[query]" : $url_parts['path'];
+                                       $out = "GET $get HTTP/1.0\r\n";
+                                       $out .= "Host: $url_parts[host]\r\n";
+                                       $out .= "User-Agent: $useragent\r\n";
+                                       if (function_exists('gzinflate'))
+                                       {
+                                               $out .= "Accept-Encoding: gzip,deflate\r\n";
+                                       }
+
+                                       if (!empty($url_parts['user']) && !empty($url_parts['pass']))
+                                       {
+                                               $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
+                                       }
+                                       foreach ($headers as $key => $value)
+                                       {
+                                               $out .= "$key: $value\r\n";
+                                       }
+                                       $out .= "Connection: Close\r\n\r\n";
+                                       fwrite($this->fp, $out);
+                                       
+                                       $info = stream_get_meta_data($this->fp);
+                                       $data = '';
+                                       while (strpos($data, "\r\n\r\n") === false && !$info['timed_out'])
+                                       {
+                                               $data .= fgets($this->fp, 128);
+                                               $info = stream_get_meta_data($this->fp);
+                                       }
+                                       if (!$info['timed_out'])
+                                       {
+                                               $this->headers = $this->parse_headers($data);
+                                               if (($this->headers['status']['code'] == 301 || $this->headers['status']['code'] == 302 || $this->headers['status']['code'] == 303 || $this->headers['status']['code'] == 307) && !empty($this->headers['location']) && $this->redirects < $redirects)
+                                               {
+                                                       $this->redirects++;
+                                                       return $this->SimplePie_File($this->headers['location'], $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+                                               }
+                                       }
+                                       else
+                                       {
+                                               $this->close();
+                                               $this->error = 'fsocket timed out';
+                                               $this->success = false;
+                                               return false;
+                                       }
+                               }
+                       }
+                       return $this->headers['status']['code'];
+               }
+               else
+               {
+                       $this->method = 'fopen';
+                       if ($this->fp = fopen($url, 'r'))
+                       {
+                               return true;
+                       }
+                       else
+                       {
+                               $this->error = 'fopen could not open the file';
+                               $this->success = false;
+                               return false;
+                       }
+               }
+       }
+       
+       function headers()
+       {
+               return $this->headers;
+       }
+       
+       function body()
+       {
+               if (is_null($this->body))
+               {
+                       if ($this->fp)
+                       {
+                               $info = stream_get_meta_data($this->fp);
+                               $this->body = '';
+                               while (!$info['eof'] && !$info['timed_out'])
+                               {
+                                       $this->body .= fread($this->fp, 1024);
+                                       $info = stream_get_meta_data($this->fp);
+                               }
+                               if (!$info['timed_out'])
+                               {
+                                       $this->body = trim($this->body);
+                                       if ($this->method == 'fsockopen' && !empty($this->headers['content-encoding']) && ($this->headers['content-encoding'] == 'gzip' || $this->headers['content-encoding'] == 'deflate'))
+                                       {
+                                               if (substr($this->body, 0, 8) == "\x1f\x8b\x08\x00\x00\x00\x00\x00")
+                                               {
+                                                       $this->body = substr($this->body, 10);
+                                               }
+                                               $this->body = gzinflate($this->body);
+                                       }
+                                       $this->close();
+                               }
+                               else
+                               {
+                                       return false;
+                               }
+                       }
+                       else
+                       {
+                               return false;
+                       }
+               }
+               return $this->body;
+       }
+       
+       function close()
+       {
+               if (!is_null($this->fp))
+               {
+                       if (fclose($this->fp))
+                       {
+                               $this->fp = null;
+                               return true;
+                       }
+                       else
+                       {
+                               return false;
+                       }
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function parse_headers($headers)
+       {
+               $headers = explode("\r\n", trim($headers));
+               $status = array_shift($headers);
+               foreach ($headers as $header)
+               {
+                       $data = explode(':', $header, 2);
+                       $head[strtolower(trim($data[0]))] = trim($data[1]);
+               }
+               if (preg_match('/HTTP\/[0-9\.]+ ([0-9]+)(.*)$/i', $status, $matches))
+               {
+                       if (isset($head['status']))
+                       {
+                               unset($head['status']);
+                       }
+                       $head['status']['code'] = $matches[1];
+                       $head['status']['name'] = trim($matches[2]);
+               }
+               return $head;
+       }
+}
+
+class SimplePie_Cache
+{
+       var $location;
+       var $filename;
+       var $extension;
+       var $name;
+       
+       function SimplePie_Cache($location, $filename, $extension)
+       {
+               $this->location = $location;
+               $this->filename = rawurlencode($filename);
+               $this->extension = rawurlencode($extension);
+               $this->name = "$location/$this->filename.$this->extension";
+       }
+       
+       function save($data)
+       {
+               if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
+               {
+                       $fp = fopen($this->name, 'w');
+                       if ($fp)
+                       {
+                               fwrite($fp, serialize($data));
+                               fclose($fp);
+                               return true;
+                       }
+               }
+               return false;
+       }
+       
+       function load()
+       {
+               if (file_exists($this->name) && is_readable($this->name))
+               {
+                       return unserialize(file_get_contents($this->name));
+               }
+               return false;
+       }
+       
+       function mtime()
+       {
+               if (file_exists($this->name))
+               {
+                       return filemtime($this->name);
+               }
+               return false;
+       }
+       
+       function touch()
+       {
+               if (file_exists($this->name))
+               {
+                       return touch($this->name);
+               }
+               return false;
+       }
+       
+       function unlink()
+       {
+               if (file_exists($this->name))
+               {
+                       return unlink($this->name);
+               }
+               return false;
+       }
+}
+
+class SimplePie_Misc
+{
+       function absolutize_url($relative, $base)
+       {
+               $relative = trim($relative);
+               $base = trim($base);
+               if (!empty($relative))
+               {
+                       $relative = SimplePie_Misc::parse_url($relative, false);
+                       $relative = array('scheme' => $relative[2], 'authority' => $relative[3], 'path' => $relative[5], 'query' => $relative[7], 'fragment' => $relative[9]);
+                       if (!empty($relative['scheme']))
+                       {
+                               $target = $relative;
+                       }
+                       else if (!empty($base))
+                       {
+                               $base = SimplePie_Misc::parse_url($base, false);
+                               $base = array('scheme' => $base[2], 'authority' => $base[3], 'path' => $base[5], 'query' => $base[7], 'fragment' => $base[9]);
+                               $target['scheme'] = $base['scheme'];
+                               if (!empty($relative['authority']))
+                               {
+                                       $target = array_merge($relative, $target);
+                               }
+                               else
+                               {
+                                       $target['authority'] = $base['authority'];
+                                       if (!empty($relative['path']))
+                                       {
+                                               if (strpos($relative['path'], '/') === 0)
+                                               {
+                                                       $target['path'] = $relative['path'];
+                                               }
+                                               else
+                                               {
+                                                       if (!empty($base['path']))
+                                                       {
+                                                               $target['path'] = dirname("$base[path].") . '/' . $relative['path'];
+                                                       }
+                                                       else
+                                                       {
+                                                               $target['path'] = '/' . $relative['path'];
+                                                       }
+                                               }
+                                               if (!empty($relative['query']))
+                                               {
+                                                       $target['query'] = $relative['query'];
+                                               }
+                                               $input = $target['path'];
+                                               $target['path'] = '';
+                                               while (!empty($input))
+                                               {
+                                                       if (strpos($input, '../') === 0)
+                                                       {
+                                                               $input = substr($input, 3);
+                                                       }
+                                                       else if (strpos($input, './') === 0)
+                                                       {
+                                                               $input = substr($input, 2);
+                                                       }
+                                                       else if (strpos($input, '/./') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', 0, 3);
+                                                       }
+                                                       else if (strpos($input, '/.') === 0 && SimplePie_Misc::strendpos($input, '/.') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', -2);
+                                                       }
+                                                       else if (strpos($input, '/../') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', 0, 4);
+                                                               $target['path'] = preg_replace('/(\/)?([^\/]+)$/msiU', '', $target['path']);
+                                                       }
+                                                       else if (strpos($input, '/..') === 0 && SimplePie_Misc::strendpos($input, '/..') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', 0, 3);
+                                                               $target['path'] = preg_replace('/(\/)?([^\/]+)$/msiU', '', $target['path']);
+                                                       }
+                                                       else if ($input == '.' || $input == '..')
+                                                       {
+                                                               $input = '';
+                                                       }
+                                                       else
+                                                       {
+                                                               if (preg_match('/^(.+)(\/|$)/msiU', $input, $match))
+                                                               {
+                                                                       $target['path'] .= $match[1];
+                                                                       $input = substr_replace($input, '', 0, strlen($match[1]));
+                                                               }
+                                                       }
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (!empty($base['path']))
+                                               {
+                                                       $target['path'] = $base['path'];
+                                               }
+                                               else
+                                               {
+                                                       $target['path'] = '/';
+                                               }
+                                               if (!empty($relative['query']))
+                                               {
+                                                       $target['query'] = $relative['query'];
+                                               }
+                                               else if (!empty($base['query']))
+                                               {
+                                                       $target['query'] = $base['query'];
+                                               }
+                                       }
+                               }
+                               if (!empty($relative['fragment']))
+                               {
+                                       $target['fragment'] = $relative['fragment'];
+                               }
+                       }
+                       else
+                       {
+                               return false;
+                       }
+                       $return = '';
+                       if (!empty($target['scheme']))
+                       {
+                               $return .= "$target[scheme]:";
+                       }
+                       if (!empty($target['authority']))
+                       {
+                               $return .= $target['authority'];
+                       }
+                       if (!empty($target['path']))
+                       {
+                               $return .= $target['path'];
+                       }
+                       if (!empty($target['query']))
+                       {
+                               $return .= "?$target[query]";
+                       }
+                       if (!empty($target['fragment']))
+                       {
+                               $return .= "#$target[fragment]";
+                       }
+               }
+               else
+               {
+                       $return = $base;
+               }
+               return $return;
+       }
+       
+       function strendpos($haystack, $needle)
+       {
+               return strlen($haystack) - strpos($haystack, $needle) - strlen($needle);
+       }
+       
+       function get_element($realname, $string)
+       {
+               $return = array();
+               $name = preg_quote($realname, '/');
+               preg_match_all("/<($name)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))*)\s*((\/)?>|>(.*)<\/$name>)/msiU", $string, $matches, PREG_SET_ORDER);
+               for ($i = 0; $i < count($matches); $i++)
+               {
+                       $return[$i]['tag'] = $realname;
+                       $return[$i]['full'] = $matches[$i][0];
+                       if (strlen($matches[$i][10]) <= 2)
+                       {
+                               $return[$i]['self_closing'] = true;
+                       }
+                       else
+                       {
+                               $return[$i]['self_closing'] = false;
+                               $return[$i]['content'] = $matches[$i][12];
+                       }
+                       $return[$i]['attribs'] = array();
+                       if (!empty($matches[$i][2]))
+                       {
+                               preg_match_all('/((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(\S+))\s/msiU', ' ' . $matches[$i][2] . ' ', $attribs, PREG_SET_ORDER);
+                               for ($j = 0; $j < count($attribs);  $j++)
+                               {
+                                       $return[$i]['attribs'][strtoupper($attribs[$j][1])]['data'] = $attribs[$j][count($attribs[$j])-1];
+                                       $first = substr($attribs[$j][2], 0, 1);
+                                       $return[$i]['attribs'][strtoupper($attribs[$j][1])]['split'] = ($first == '"' || $first == "'") ? $first : '"';
+                               }
+                       }
+               }
+               return $return;
+       }
+       
+       function element_implode($element)
+       {
+               $full = "<$element[tag]";
+               foreach ($element['attribs'] as $key => $value)
+               {
+                       $key = strtolower($key);
+                       $full .= " $key=$value[split]$value[data]$value[split]";
+               }
+               if ($element['self_closing'])
+               {
+                       $full .= ' />';
+               }
+               else
+               {
+                       $full .= ">$element[content]</$element[tag]>";
+               }
+               return $full;
+       }
+       
+       function error($message, $level, $file, $line)
+       {
+               switch ($level)
+               {
+                       case E_USER_ERROR:
+                               $note = 'PHP Error';
+                               break;
+                       case E_USER_WARNING:
+                               $note = 'PHP Warning';
+                               break;
+                       case E_USER_NOTICE:
+                               $note = 'PHP Notice';
+                               break;
+                       default:
+                               $note = 'Unknown Error';
+                               break;
+               }
+               error_log("$note: $message in $file on line $line", 0);
+               return $message;
+       }
+       
+       function display_file($url, $timeout = 10, $useragent = null)
+       {
+               $file = new SimplePie_File($url, $timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $useragent);
+               $headers = $file->headers();
+               if ($file->body() !== false)
+               {
+                       header('Content-type: ' . $headers['content-type']);
+                       echo $file->body();
+                       exit;
+               }
+       }
+       
+       function fix_protocol($url, $http = 1)
+       {
+               $parsed = SimplePie_Misc::parse_url($url);
+               if (!empty($parsed['scheme']) && strtolower($parsed['scheme']) != 'http' && strtolower($parsed['scheme']) != 'https')
+               {
+                       return SimplePie_Misc::fix_protocol("$parsed[authority]$parsed[path]$parsed[query]$parsed[fragment]", $http);
+               }
+               if (!file_exists($url) && empty($parsed['scheme']))
+               {
+                       return SimplePie_Misc::fix_protocol("http://$url", $http);
+               }
+
+               if ($http == 2 && !empty($parsed['scheme']))
+               {
+                       return "feed:$url";
+               }
+               else if ($http == 3 && strtolower($parsed['scheme']) == 'http')
+               {
+                       return substr_replace($url, 'podcast', 0, 4);
+               }
+               else
+               {
+                       return $url;
+               }
+       }
+       
+       function parse_url($url, $parse_match = true)
+       {
+               preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/i', $url, $match);
+               if (empty($match[0]))
+               {
+                       return false;
+               }
+               else
+               {
+                       for ($i = 6; $i < 10; $i++)
+                       {
+                               if (!isset($match[$i]))
+                               {
+                                       $match[$i] = '';
+                               }
+                       }
+                       if ($parse_match)
+                       {
+                               $match = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[6], 'fragment' => $match[8]);
+                       }
+                       return $match;
+               }
+       }
+       
+       /**
+        * Replace bad bytes
+        *
+        * PCRE Pattern to locate bad bytes in a UTF-8 string
+        * Comes from W3 FAQ: Multilingual Forms
+        * Note: modified to include full ASCII range including control chars
+        *
+        * Modified by Geoffrey Sneddon 2006-11-19 to remove functionality
+        * to choose what the replace string is, and to use a variable for
+        * the output instead of PHP's output buffer
+        */
+       function utf8_bad_replace($str)
+       {
+               $UTF8_BAD =
+                '([\x00-\x7F]' .                                                       # ASCII (including control chars)
+                '|[\xC2-\xDF][\x80-\xBF]' .                            # non-overlong 2-byte
+                '|\xE0[\xA0-\xBF][\x80-\xBF]' .                        # excluding overlongs
+                '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}' .         # straight 3-byte
+                '|\xED[\x80-\x9F][\x80-\xBF]' .                        # excluding surrogates
+                '|\xF0[\x90-\xBF][\x80-\xBF]{2}' .                     # planes 1-3
+                '|[\xF1-\xF3][\x80-\xBF]{3}' .                         # planes 4-15
+                '|\xF4[\x80-\x8F][\x80-\xBF]{2}' .                     # plane 16
+                '|(.{1}))';                                                            # invalid byte
+               $output = '';
+               while (preg_match('/' . $UTF8_BAD . '/S', $str, $matches))
+               {
+                       if (!isset($matches[2]))
+                       {
+                               $output .= $matches[0];
+                       }
+                       $str = substr($str, strlen($matches[0]));
+               }
+               return $output;
+       }
+       
+       function change_encoding($data, $input, $output)
+       {
+               $input = SimplePie_Misc::encoding($input);
+               $output = SimplePie_Misc::encoding($output);
+               
+               if ($input != $output)
+               {
+                       if (function_exists('iconv') && $input['use_iconv'] && $output['use_iconv'] && iconv($input['encoding'], "$output[encoding]//TRANSLIT", $data))
+                       {
+                               return iconv($input['encoding'], "$output[encoding]//TRANSLIT", $data);
+                       }
+                       else if (function_exists('iconv') && $input['use_iconv'] && $output['use_iconv'] && iconv($input['encoding'], $output['encoding'], $data))
+                       {
+                               return iconv($input['encoding'], $output['encoding'], $data);   
+                       }
+                       else if (function_exists('mb_convert_encoding') && $input['use_mbstring'] && $output['use_mbstring'])
+                       {
+                               return mb_convert_encoding($data, $output['encoding'], $input['encoding']);
+                       }
+                       else if ($input['encoding'] == 'ISO-8859-1' && $output['encoding'] == 'UTF-8')
+                       {
+                               return utf8_encode($data);
+                       }
+                       else if ($input['encoding'] == 'UTF-8' && $output['encoding'] == 'ISO-8859-1')
+                       {
+                               return utf8_decode($data);
+                       }
+               }
+               return $data;
+       }
+       
+       function encoding($encoding)
+       {
+               $return['use_mbstring'] = false;
+               $return['use_iconv'] = false;
+               switch (strtolower($encoding))
+               {
+
+                       // 7bit
+                       case '7bit':
+                       case '7-bit':
+                               $return['encoding'] = '7bit';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // 8bit
+                       case '8bit':
+                       case '8-bit':
+                               $return['encoding'] = '8bit';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ARMSCII-8
+                       case 'armscii-8':
+                       case 'armscii':
+                               $return['encoding'] = 'ARMSCII-8';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ASCII
+                       case 'us-ascii':
+                       case 'ascii':
+                               $return['encoding'] = 'US-ASCII';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // BASE64
+                       case 'base64':
+                       case 'base-64':
+                               $return['encoding'] = 'BASE64';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Big5 - Traditional Chinese, mainly used in Taiwan
+                       case 'big5':
+                       case '950':
+                               $return['encoding'] = 'BIG5';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Big5 with Hong Kong extensions, Traditional Chinese
+                       case 'big5-hkscs':
+                               $return['encoding'] = 'BIG5-HKSCS';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte2be
+                       case 'byte2be':
+                               $return['encoding'] = 'byte2be';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte2le
+                       case 'byte2le':
+                               $return['encoding'] = 'byte2le';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte4be
+                       case 'byte4be':
+                               $return['encoding'] = 'byte4be';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte4le
+                       case 'byte4le':
+                               $return['encoding'] = 'byte4le';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-CN
+                       case 'euc-cn':
+                       case 'euccn':
+                               $return['encoding'] = 'EUC-CN';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-JISX0213
+                       case 'euc-jisx0213':
+                       case 'eucjisx0213':
+                               $return['encoding'] = 'EUC-JISX0213';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // EUC-JP
+                       case 'euc-jp':
+                       case 'eucjp':
+                               $return['encoding'] = 'EUC-JP';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUCJP-win
+                       case 'euc-jp-win':
+                       case 'eucjp-win':
+                       case 'eucjpwin':
+                               $return['encoding'] = 'EUCJP-win';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-KR
+                       case 'euc-kr':
+                       case 'euckr':
+                               $return['encoding'] = 'EUC-KR';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-TW
+                       case 'euc-tw':
+                       case 'euctw':
+                               $return['encoding'] = 'EUC-TW';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // GB18030 - Simplified Chinese, national standard character set
+                       case 'gb18030-2000':
+                       case 'gb18030':
+                               $return['encoding'] = 'GB18030';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // GB2312 - Simplified Chinese, national standard character set
+                       case 'gb2312':
+                       case '936':
+                               $return['encoding'] = 'GB2312';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // GBK
+                       case 'gbk':
+                               $return['encoding'] = 'GBK';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Georgian-Academy
+                       case 'georgian-academy':
+                               $return['encoding'] = 'Georgian-Academy';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Georgian-PS
+                       case 'georgian-ps':
+                               $return['encoding'] = 'Georgian-PS';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // HTML-ENTITIES
+                       case 'html-entities':
+                       case 'htmlentities':
+                               $return['encoding'] = 'HTML-ENTITIES';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // HZ
+                       case 'hz':
+                               $return['encoding'] = 'HZ';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-2022-CN
+                       case 'iso-2022-cn':
+                       case 'iso2022-cn':
+                       case 'iso2022cn':
+                               $return['encoding'] = 'ISO-2022-CN';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-CN-EXT
+                       case 'iso-2022-cn-ext':
+                       case 'iso2022-cn-ext':
+                       case 'iso2022cn-ext':
+                       case 'iso2022cnext':
+                               $return['encoding'] = 'ISO-2022-CN';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-JP
+                       case 'iso-2022-jp':
+                       case 'iso2022-jp':
+                       case 'iso2022jp':
+                               $return['encoding'] = 'ISO-2022-JP';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-2022-JP-1
+                       case 'iso-2022-jp-1':
+                       case 'iso2022-jp-1':
+                       case 'iso2022jp-1':
+                       case 'iso2022jp1':
+                               $return['encoding'] = 'ISO-2022-JP-1';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-JP-2
+                       case 'iso-2022-jp-2':
+                       case 'iso2022-jp-2':
+                       case 'iso2022jp-2':
+                       case 'iso2022jp2':
+                               $return['encoding'] = 'ISO-2022-JP-2';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-JP-3
+                       case 'iso-2022-jp-3':
+                       case 'iso2022-jp-3':
+                       case 'iso2022jp-3':
+                       case 'iso2022jp3':
+                               $return['encoding'] = 'ISO-2022-JP-3';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-KR
+                       case 'iso-2022-kr':
+                       case 'iso2022-kr':
+                       case 'iso2022kr':
+                               $return['encoding'] = 'ISO-2022-KR';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-1
+                       case 'iso-8859-1':
+                       case 'iso8859-1':
+                               $return['encoding'] = 'ISO-8859-1';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-2
+                       case 'iso-8859-2':
+                       case 'iso8859-2':
+                               $return['encoding'] = 'ISO-8859-2';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-3
+                       case 'iso-8859-3':
+                       case 'iso8859-3':
+                               $return['encoding'] = 'ISO-8859-3';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-4
+                       case 'iso-8859-4':
+                       case 'iso8859-4':
+                               $return['encoding'] = 'ISO-8859-4';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-5
+                       case 'iso-8859-5':
+                       case 'iso8859-5':
+                               $return['encoding'] = 'ISO-8859-5';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-6
+                       case 'iso-8859-6':
+                       case 'iso8859-6':
+                               $return['encoding'] = 'ISO-8859-6';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-7
+                       case 'iso-8859-7':
+                       case 'iso8859-7':
+                               $return['encoding'] = 'ISO-8859-7';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-8
+                       case 'iso-8859-8':
+                       case 'iso8859-8':
+                               $return['encoding'] = 'ISO-8859-8';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-9
+                       case 'iso-8859-9':
+                       case 'iso8859-9':
+                               $return['encoding'] = 'ISO-8859-9';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-10
+                       case 'iso-8859-10':
+                       case 'iso8859-10':
+                               $return['encoding'] = 'ISO-8859-10';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // mbstring/iconv functions don't appear to support 11 & 12
+
+                       // ISO-8859-13
+                       case 'iso-8859-13':
+                       case 'iso8859-13':
+                               $return['encoding'] = 'ISO-8859-13';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-14
+                       case 'iso-8859-14':
+                       case 'iso8859-14':
+                               $return['encoding'] = 'ISO-8859-14';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-15
+                       case 'iso-8859-15':
+                       case 'iso8859-15':
+                               $return['encoding'] = 'ISO-8859-15';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-16
+                       case 'iso-8859-16':
+                       case 'iso8859-16':
+                               $return['encoding'] = 'ISO-8859-16';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // JIS
+                       case 'jis':
+                               $return['encoding'] = 'JIS';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // JOHAB - Korean
+                       case 'johab':
+                               $return['encoding'] = 'JOHAB';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Russian
+                       case 'koi8-r':
+                       case 'koi8r':
+                               $return['encoding'] = 'KOI8-R';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Turkish
+                       case 'koi8-t':
+                       case 'koi8t':
+                               $return['encoding'] = 'KOI8-T';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Ukrainian
+                       case 'koi8-u':
+                       case 'koi8u':
+                               $return['encoding'] = 'KOI8-U';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Russian+Ukrainian
+                       case 'koi8-ru':
+                       case 'koi8ru':
+                               $return['encoding'] = 'KOI8-RU';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Macintosh (Mac OS Classic)
+                       case 'macintosh':
+                               $return['encoding'] = 'Macintosh';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacArabic (Mac OS Classic)
+                       case 'macarabic':
+                               $return['encoding'] = 'MacArabic';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacCentralEurope (Mac OS Classic)
+                       case 'maccentraleurope':
+                               $return['encoding'] = 'MacCentralEurope';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacCroatian (Mac OS Classic)
+                       case 'maccroatian':
+                               $return['encoding'] = 'MacCroatian';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacCyrillic (Mac OS Classic)
+                       case 'maccyrillic':
+                               $return['encoding'] = 'MacCyrillic';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacGreek (Mac OS Classic)
+                       case 'macgreek':
+                               $return['encoding'] = 'MacGreek';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacHebrew (Mac OS Classic)
+                       case 'machebrew':
+                               $return['encoding'] = 'MacHebrew';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacIceland (Mac OS Classic)
+                       case 'maciceland':
+                               $return['encoding'] = 'MacIceland';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacRoman (Mac OS Classic)
+                       case 'macroman':
+                               $return['encoding'] = 'MacRoman';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacRomania (Mac OS Classic)
+                       case 'macromania':
+                               $return['encoding'] = 'MacRomania';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacThai (Mac OS Classic)
+                       case 'macthai':
+                               $return['encoding'] = 'MacThai';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacTurkish (Mac OS Classic)
+                       case 'macturkish':
+                               $return['encoding'] = 'MacTurkish';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacUkraine (Mac OS Classic)
+                       case 'macukraine':
+                               $return['encoding'] = 'MacUkraine';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MuleLao-1
+                       case 'mulelao-1':
+                       case 'mulelao1':
+                               $return['encoding'] = 'MuleLao-1';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Shift_JIS
+                       case 'shift_jis':
+                       case 'sjis':
+                       case '932':
+                               $return['encoding'] = 'Shift_JIS';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Shift_JISX0213
+                       case 'shift-jisx0213':
+                       case 'shiftjisx0213':
+                               $return['encoding'] = 'Shift_JISX0213';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // SJIS-win
+                       case 'sjis-win':
+                       case 'sjiswin':
+                       case 'shift_jis-win':
+                               $return['encoding'] = 'SJIS-win';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // TCVN - Vietnamese
+                       case 'tcvn':
+                               $return['encoding'] = 'TCVN';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // TDS565 - Turkish
+                       case 'tds565':
+                               $return['encoding'] = 'TDS565';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // TIS-620 Thai
+                       case 'tis-620':
+                       case 'tis620':
+                               $return['encoding'] = 'TIS-620';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2
+                       case 'ucs-2':
+                       case 'ucs2':
+                       case 'utf-16':
+                       case 'utf16':
+                               $return['encoding'] = 'UCS-2';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2BE
+                       case 'ucs-2be':
+                       case 'ucs2be':
+                       case 'utf-16be':
+                       case 'utf16be':
+                               $return['encoding'] = 'UCS-2BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2LE
+                       case 'ucs-2le':
+                       case 'ucs2le':
+                       case 'utf-16le':
+                       case 'utf16le':
+                               $return['encoding'] = 'UCS-2LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2-INTERNAL
+                       case 'ucs-2-internal':
+                       case 'ucs2internal':
+                               $return['encoding'] = 'UCS-2-INTERNAL';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // UCS-4
+                       case 'ucs-4':
+                       case 'ucs4':
+                       case 'utf-32':
+                       case 'utf32':
+                               $return['encoding'] = 'UCS-4';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-4BE
+                       case 'ucs-4be':
+                       case 'ucs4be':
+                       case 'utf-32be':
+                       case 'utf32be':
+                               $return['encoding'] = 'UCS-4BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-4LE
+                       case 'ucs-4le':
+                       case 'ucs4le':
+                       case 'utf-32le':
+                       case 'utf32le':
+                               $return['encoding'] = 'UCS-4LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-4-INTERNAL
+                       case 'ucs-4-internal':
+                       case 'ucs4internal':
+                               $return['encoding'] = 'UCS-4-INTERNAL';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // UCS-16
+                       case 'ucs-16':
+                       case 'ucs16':
+                               $return['encoding'] = 'UCS-16';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-16BE
+                       case 'ucs-16be':
+                       case 'ucs16be':
+                               $return['encoding'] = 'UCS-16BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-16LE
+                       case 'ucs-16le':
+                       case 'ucs16le':
+                               $return['encoding'] = 'UCS-16LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-32
+                       case 'ucs-32':
+                       case 'ucs32':
+                               $return['encoding'] = 'UCS-32';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-32BE
+                       case 'ucs-32be':
+                       case 'ucs32be':
+                               $return['encoding'] = 'UCS-32BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-32LE
+                       case 'ucs-32le':
+                       case 'ucs32le':
+                               $return['encoding'] = 'UCS-32LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UTF-7
+                       case 'utf-7':
+                       case 'utf7':
+                               $return['encoding'] = 'UTF-7';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UTF7-IMAP
+                       case 'utf-7-imap':
+                       case 'utf7-imap':
+                       case 'utf7imap':
+                               $return['encoding'] = 'UTF7-IMAP';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // VISCII - Vietnamese ASCII
+                       case 'viscii':
+                               $return['encoding'] = 'VISCII';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Central & Eastern Europe
+                       case 'cp1250':
+                       case 'windows-1250':
+                       case 'win-1250':
+                       case '1250':
+                               $return['encoding'] = 'Windows-1250';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Cyrillic
+                       case 'cp1251':
+                       case 'windows-1251':
+                       case 'win-1251':
+                       case '1251':
+                               $return['encoding'] = 'Windows-1251';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Windows-specific Western Europe
+                       case 'cp1252':
+                       case 'windows-1252':
+                       case '1252':
+                               $return['encoding'] = 'Windows-1252';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Windows-specific Greek
+                       case 'cp1253':
+                       case 'windows-1253':
+                       case '1253':
+                               $return['encoding'] = 'Windows-1253';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Turkish
+                       case 'cp1254':
+                       case 'windows-1254':
+                       case '1254':
+                               $return['encoding'] = 'Windows-1254';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Hebrew
+                       case 'cp1255':
+                       case 'windows-1255':
+                       case '1255':
+                               $return['encoding'] = 'Windows-1255';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Arabic
+                       case 'cp1256':
+                       case 'windows-1256':
+                       case '1256':
+                               $return['encoding'] = 'Windows-1256';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Baltic
+                       case 'cp1257':
+                       case 'windows-1257':
+                       case '1257':
+                               $return['encoding'] = 'Windows-1257';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Vietnamese
+                       case 'cp1258':
+                       case 'windows-1258':
+                       case '1258':
+                               $return['encoding'] = 'Windows-1258';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Default to UTF-8
+                       default:
+                               $return['encoding'] = 'UTF-8';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+               }
+               
+               // Then, return it.
+               return $return;
+       }
+       
+       function get_curl_version()
+       {
+               $curl = 0;
+               if (is_array(curl_version()))
+               {
+                       $curl = curl_version();
+                       $curl = $curl['version'];
+               }
+               else
+               {
+                       $curl = curl_version();
+                       $curl = explode(' ', $curl);
+                       $curl = explode('/', $curl[0]);
+                       $curl = $curl[1];
+               }
+               return $curl;
+       }
+       
+       function is_a_class($class1, $class2)
+       {
+               if (class_exists($class1))
+               {
+                       $classes = array(strtolower($class1));
+                       while ($class1 = get_parent_class($class1))
+                       {
+                               $classes[] = strtolower($class1);
+                       }
+                       return in_array(strtolower($class2), $classes);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Locator
+{
+       var $useragent;
+       var $timeout;
+       var $file;
+       var $local;
+       var $elsewhere;
+       var $file_class = 'SimplePie_File';
+       
+       function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File')
+       {
+               if (!is_a($file, 'SimplePie_File'))
+               {
+                       $this->file = new $this->file_class($file, $timeout, $useragent);
+               }
+               else
+               {
+                       $this->file =& $file;
+               }
+               $this->file_class = $file_class;
+               $this->useragent = $useragent;
+               $this->timeout = $timeout;
+       }
+               
+       
+       function find()
+       {               
+               if ($this->is_feed($this->file))
+               {
+                       return $this->file->url;
+               }
+               
+               $autodiscovery = $this->autodiscovery($this->file);
+               if ($autodiscovery)
+               {
+                       return $autodiscovery;
+               }
+               
+               if ($this->get_links($this->file))
+               {
+                       if (!empty($this->local))
+                       {
+                               $extension_local = $this->extension($this->local);
+                               if ($extension_local)
+                               {
+                                       return $extension_local;
+                               }
+                       
+                               $body_local = $this->body($this->local);
+                               if ($body_local)
+                               {
+                                       return $body_local;
+                               }
+                       }
+                       
+                       if (!empty($this->elsewhere))
+                       {
+                               $extension_elsewhere = $this->extension($this->elsewhere);
+                               if ($extension_elsewhere)
+                               {
+                                       return $extension_elsewhere;
+                               }
+                               
+                               $body_elsewhere = $this->body($this->elsewhere);
+                               if ($body_elsewhere)
+                               {
+                                       return $body_elsewhere;
+                               }
+                       }
+               }
+               return false;
+       }
+       
+       function is_feed(&$file)
+       {
+               if (!is_a($file, 'SimplePie_File'))
+               {
+                       if (isset($this))
+                       {
+                               $file2 = new $this->file_class($file, $this->timeout, 5, null, $this->useragent);
+                       }
+                       else
+                       {
+                               $file2 = new $this->file_class($file);
+                       }
+                       $file2->body();
+                       $file2->close();
+               }
+               else
+               {
+                       $file2 =& $file;
+               }
+               $body = preg_replace('/<\!-(.*)-\>/msiU', '', $file2->body());
+               if (preg_match('/<(\w+\:)?rss/msiU', $body) || preg_match('/<(\w+\:)?RDF/mi', $body) || preg_match('/<(\w+\:)?feed/mi', $body))
+               {
+                       return true;
+               }
+               return false;
+       }
+       
+       function autodiscovery(&$file)
+       {
+               $links = SimplePie_Misc::get_element('link', $file->body());
+               $done = array();
+               foreach ($links as $link)
+               {
+                       if (!empty($link['attribs']['TYPE']['data']) && !empty($link['attribs']['HREF']['data']) && !empty($link['attribs']['REL']['data']))
+                       {
+                               $rel = preg_split('/\s+/', strtolower(trim($link['attribs']['REL']['data'])));
+                               $type = preg_match('/^(application\/rss\+xml|application\/atom\+xml|application\/rdf\+xml|application\/xml\+rss|application\/xml\+atom|application\/xml\+rdf|application\/xml|application\/x\.atom\+xml|text\/xml)(;|$)/msiU', trim($link['attribs']['TYPE']['data']));
+                               $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['HREF']['data']), $this->file->url);
+                               if (!in_array($href, $done) && in_array('alternate', $rel) && $type)
+                               {
+                                       $feed = $this->is_feed($href);
+                                       if ($feed)
+                                       {
+                                               return $href;
+                                       }
+                               }
+                               $done[] = $href;
+                       }
+               }
+               return false;
+       }
+       
+       function get_links(&$file)
+       {
+               $links = SimplePie_Misc::get_element('a', $file->body());
+               foreach ($links as $link)
+               {
+                       if (!empty($link['attribs']['HREF']['data']))
+                       {
+                               $href = trim($link['attribs']['HREF']['data']);
+                               $parsed = SimplePie_Misc::parse_url($href);
+                               if (empty($parsed['scheme']) || $parsed['scheme'] != 'javascript')
+                               {
+                                       $current = SimplePie_Misc::parse_url($this->file->url);
+                                       if (empty($parsed['authority']) || $parsed['authority'] == $current['authority'])
+                                       {
+                                               $this->local[] = SimplePie_Misc::absolutize_url($href, $this->file->url);
+                                       }
+                                       else
+                                       {
+                                               $this->elsewhere[] = SimplePie_Misc::absolutize_url($href, $this->file->url);
+                                       }
+                               }
+                       }
+               }
+               if (!empty($this->local))
+               {
+                       $this->local = array_unique($this->local);
+               }
+               if (!empty($this->elsewhere))
+               {
+                       $this->elsewhere = array_unique($this->elsewhere);
+               }
+               if (!empty($this->local) || !empty($this->elsewhere))
+               {
+                       return true;
+               }
+               return false;
+       }
+       
+       function extension(&$array)
+       {
+               foreach ($array as $key => $value)
+               {
+                       $value = SimplePie_Misc::absolutize_url($value, $this->file->url);
+                       if (in_array(strrchr($value, '.'), array('.rss', '.rdf', '.atom', '.xml')))
+                       {
+                               if ($this->is_feed($value))
+                               {
+                                       return $value;
+                               }
+                               else
+                               {
+                                       unset($array[$key]);
+                               }
+                       }
+               }
+               return false;
+       }
+       
+       function body(&$array)
+       {
+               foreach ($array as $key => $value)
+               {
+                       $value = SimplePie_Misc::absolutize_url($value, $this->file->url);
+                       if (preg_match('/(rss|rdf|atom|xml)/i', $value))
+                       {
+                               if ($this->is_feed($value))
+                               {
+                                       return $value;
+                               }
+                               else
+                               {
+                                       unset($array[$key]);
+                               }
+                       }
+               }
+               return false;
+       }
+}
+
+class SimplePie_Parser
+{      
+       var $encoding;
+       var $data;
+       var $namespaces = array('xml' => 'HTTP://WWW.W3.ORG/XML/1998/NAMESPACE', 'atom' => 'ATOM', 'rss2' => 'RSS', 'rdf' => 'RDF', 'rss1' => 'RSS', 'dc' => 'DC', 'xhtml' => 'XHTML', 'content' => 'CONTENT');
+       var $xml;
+       var $error_code;
+       var $error_string;
+       var $current_line;
+       var $current_column;
+       var $current_byte;
+       var $tag_name;
+       var $inside_item;
+       var $item_number = 0;
+       var $inside_channel;
+       var $author_number= 0;
+       var $category_number = 0;
+       var $enclosure_number = 0;
+       var $link_number = 0;
+       var $item_link_number = 0;
+       var $inside_image;
+       var $attribs;
+       var $is_first;
+       var $inside_author;
+       var $depth_inside_item = 0;
+               
+       function SimplePie_Parser($data, $encoding, $return_xml = false)
+       {
+               $this->encoding = $encoding;
+               
+               // Strip BOM:
+               // UTF-32 Big Endian BOM
+               if (strpos($data, sprintf('%c%c%c%c', 0x00, 0x00, 0xFE, 0xFF)) === 0)
+               {
+                       $data = substr($data, 4);
+               }
+               // UTF-32 Little Endian BOM
+               else if (strpos($data, sprintf('%c%c%c%c', 0xFF, 0xFE, 0x00, 0x00)) === 0)
+               {
+                       $data = substr($data, 4);
+               }
+               // UTF-16 Big Endian BOM
+               else if (strpos($data, sprintf('%c%c', 0xFE, 0xFF)) === 0)
+               {
+                       $data = substr($data, 2);
+               }
+               // UTF-16 Little Endian BOM
+               else if (strpos($data, sprintf('%c%c', 0xFF, 0xFE)) === 0)
+               {
+                       $data = substr($data, 2);
+               }
+               // UTF-8 BOM
+               else if (strpos($data, sprintf('%c%c%c', 0xEF, 0xBB, 0xBF)) === 0)
+               {
+                       $data = substr($data, 3);
+               }
+               
+               // Make sure the XML prolog is sane and has the correct encoding
+               if (preg_match('/^<\?xml(.*)?>/msiU', $data, $prolog))
+               {
+                       $data = substr_replace($data, '', 0, strlen($prolog[0]));
+               }
+               $data = "<?xml version='1.0' encoding='$encoding'?>\n" . $data;
+               
+               // Put some data into CDATA blocks
+               // If we're RSS
+               if ((stristr($data, '<rss') || preg_match('/<([a-z0-9]+\:)?RDF/mi', $data)) && (preg_match('/<([a-z0-9]+\:)?channel/mi', $data) || preg_match('/<([a-z0-9]+\:)?item/mi', $data)))
+               {
+                       $sp_elements = array(
+                               'author',
+                               'category',
+                               'copyright', 
+                               'description',
+                               'docs', 
+                               'generator', 
+                               'guid', 
+                               'language',
+                               'lastBuildDate', 
+                               'link',
+                               'managingEditor', 
+                               'pubDate', 
+                               'title',
+                               'url', 
+                               'webMaster', 
+                       );
+               }
+               // Or if we're Atom
+               else
+               {
+                       $sp_elements = array(
+                               'content',
+                               'copyright',
+                               'name',
+                               'subtitle',
+                               'summary',
+                               'tagline',
+                               'title',
+                       );
+               }
+               foreach ($sp_elements as $full)
+               {
+                       $data = preg_replace_callback("/<($full)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'))*)\s*(\/>|>(.*)<\/$full>)/msiU", array(&$this, 'add_cdata'), $data);
+               }
+               foreach ($sp_elements as $full)
+               {
+                       // Deal with CDATA within CDATA (this can be caused by us inserting CDATA above)
+                       $data = preg_replace_callback("/<($full)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'))*)\s*(\/>|><!\[CDATA\[(.*)\]\]><\/$full>)/msiU", array(&$this, 'cdata_in_cdata'), $data);
+               }
+               
+               // Return the XML, if so desired
+               if ($return_xml)
+               {
+                       $this->data =& $data;
+                       return;
+               }
+               
+               // Create the parser
+               $this->xml = xml_parser_create_ns($encoding);
+               xml_parser_set_option($this->xml, XML_OPTION_SKIP_WHITE, 1);
+               xml_set_object($this->xml, $this);
+               xml_set_character_data_handler($this->xml, 'data_handler');
+               xml_set_element_handler($this->xml, 'start_handler', 'end_handler');
+               xml_set_start_namespace_decl_handler($this->xml, 'start_name_space');
+               xml_set_end_namespace_decl_handler($this->xml, 'end_name_space');
+               
+               // Parse!
+               if (!xml_parse($this->xml, $data))
+               {
+                       $this->data = null;
+                       $this->error_code = xml_get_error_code($this->xml);
+                       $this->error_string = xml_error_string($this->error_code);
+               }
+               $this->current_line = xml_get_current_line_number($this->xml);
+               $this->current_column = xml_get_current_column_number($this->xml);
+               $this->current_byte = xml_get_current_byte_index($this->xml);
+               xml_parser_free($this->xml);
+               return;
+       }
+       
+       function add_cdata($match)
+       {
+               if (isset($match[10]))
+               {
+                       return "<$match[1]$match[2]><![CDATA[$match[10]]]></$match[1]>";
+               }
+               return $match[0];
+       }
+
+       function cdata_in_cdata($match)
+       {
+               if (isset($match[10]))
+               {
+                       $match[10] = preg_replace_callback('/<!\[CDATA\[(.*)\]\]>/msiU', array(&$this, 'real_cdata_in_cdata'), $match[10]);
+                       return "<$match[1]$match[2]><![CDATA[$match[10]]]></$match[1]>";
+               }
+               return $match[0];
+       }
+       
+       function real_cdata_in_cdata($match)
+       {
+               return htmlspecialchars($match[1], ENT_NOQUOTES);
+       }
+       
+       function do_add_content(&$array, $data)
+       {
+               if ($this->is_first)
+               {
+                       $array['data'] = $data;
+                       $array['attribs'] = $this->attribs;
+               }
+               else
+               {
+                       $array['data'] .= $data;
+               }
+       }
+       
+       function start_handler($parser, $name, $attribs)
+       {
+               $this->tag_name = $name;
+               $this->attribs = $attribs;
+               $this->is_first = true;
+
+               if ($this->inside_item)
+               {
+                       $this->depth_inside_item++;
+               }
+
+               switch ($this->tag_name)
+               {
+                       case 'ITEM':
+                       case $this->namespaces['rss2'] . ':ITEM':
+                       case $this->namespaces['rss1'] . ':ITEM':
+                       case 'ENTRY':
+                       case $this->namespaces['atom'] . ':ENTRY':
+                               $this->inside_item = true;
+                               $this->do_add_content($this->data['items'][$this->item_number], '');
+                               break;
+
+                       case 'CHANNEL':
+                       case $this->namespaces['rss2'] . ':CHANNEL':
+                       case $this->namespaces['rss1'] . ':CHANNEL':
+                               $this->inside_channel = true;
+                               break;
+
+                       case 'RSS':
+                       case $this->namespaces['rss2'] . ':RSS':
+                               $this->data['feedinfo']['type'] = 'RSS';
+                               $this->do_add_content($this->data['feeddata'], '');
+                               if (!empty($attribs['VERSION']))
+                               {
+                                       $this->data['feedinfo']['version'] = trim($attribs['VERSION']);
+                               }
+                               break;
+
+                       case $this->namespaces['rdf'] . ':RDF':
+                               $this->data['feedinfo']['type'] = 'RSS';
+                               $this->do_add_content($this->data['feeddata'], '');
+                               $this->data['feedinfo']['version'] = 1;
+                               break;
+
+                       case 'FEED':
+                       case $this->namespaces['atom'] . ':FEED':
+                               $this->data['feedinfo']['type'] = 'Atom';
+                               $this->do_add_content($this->data['feeddata'], '');
+                               if (!empty($attribs['VERSION']))
+                               {
+                                       $this->data['feedinfo']['version'] = trim($attribs['VERSION']);
+                               }
+                               break;
+
+                       case 'IMAGE':
+                       case $this->namespaces['rss2'] . ':IMAGE':
+                       case $this->namespaces['rss1'] . ':IMAGE':
+                               if ($this->inside_channel)
+                               {
+                                       $this->inside_image = true;
+                               }
+                               break;
+               }
+
+               if (!empty($this->data['feedinfo']['type']) && $this->data['feedinfo']['type'] == 'Atom' && ($this->tag_name == 'AUTHOR' || $this->tag_name == $this->namespaces['atom'] . ':AUTHOR'))
+               {
+                       $this->inside_author = true;
+               }
+               $this->data_handler($this->xml, '');
+       }
+
+       function data_handler($parser, $data)
+       {
+               if ($this->inside_item && $this->depth_inside_item == 1)
+               {
+                       switch ($this->tag_name)
+                       {
+                               case 'TITLE':
+                               case $this->namespaces['rss1'] . ':TITLE':
+                               case $this->namespaces['rss2'] . ':TITLE':
+                               case $this->namespaces['atom'] . ':TITLE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['title'], $data);
+                                       break;
+                                       
+                               case $this->namespaces['dc'] . ':TITLE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['dc:title'], $data);
+                                       break;
+
+                               case 'CONTENT':
+                               case $this->namespaces['atom'] . ':CONTENT':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['content'], $data);
+                                       break;
+
+                               case $this->namespaces['content'] . ':ENCODED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['encoded'], $data);
+                                       break;
+
+                               case 'SUMMARY':
+                               case $this->namespaces['atom'] . ':SUMMARY':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['summary'], $data);
+                                       break;
+
+                               case 'LONGDESC':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['longdesc'], $data);
+                                       break;
+
+                               case 'DESCRIPTION':
+                               case $this->namespaces['rss1'] . ':DESCRIPTION':
+                               case $this->namespaces['rss2'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['description'], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['dc:description'], $data);
+                                       break;
+
+                               case 'LINK':
+                               case $this->namespaces['rss1'] . ':LINK':
+                               case $this->namespaces['rss2'] . ':LINK':
+                               case $this->namespaces['atom'] . ':LINK':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['link'][$this->item_link_number], $data);
+                                       break;
+                                       
+                               case 'ENCLOSURE':
+                               case $this->namespaces['rss1'] . ':ENCLOSURE':
+                               case $this->namespaces['rss2'] . ':ENCLOSURE':
+                               case $this->namespaces['atom'] . ':ENCLOSURE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['enclosure'][$this->enclosure_number], $data);
+                                       break;
+
+                               case 'GUID':
+                               case $this->namespaces['rss1'] . ':GUID':
+                               case $this->namespaces['rss2'] . ':GUID':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['guid'], $data);
+                                       break;
+
+                               case 'ID':
+                               case $this->namespaces['atom'] . ':ID':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['id'], $data);
+                                       break;
+
+                               case 'PUBDATE':
+                               case $this->namespaces['rss1'] . ':PUBDATE':
+                               case $this->namespaces['rss2'] . ':PUBDATE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['pubdate'], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':DATE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['dc:date'], $data);
+                                       break;
+
+                               case 'ISSUED':
+                               case $this->namespaces['atom'] . ':ISSUED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['issued'], $data);
+                                       break;
+
+                               case 'PUBLISHED':
+                               case $this->namespaces['atom'] . ':PUBLISHED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['published'], $data);
+                                       break;
+
+                               case 'MODIFIED':
+                               case $this->namespaces['atom'] . ':MODIFIED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['modified'], $data);
+                                       break;
+
+                               case 'UPDATED':
+                               case $this->namespaces['atom'] . ':UPDATED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['updated'], $data);
+                                       break;
+       
+                               case 'CATEGORY':
+                               case $this->namespaces['rss1'] . ':CATEGORY':
+                               case $this->namespaces['rss2'] . ':CATEGORY':
+                               case $this->namespaces['atom'] . ':CATEGORY':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['category'][$this->category_number], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':SUBJECT':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['subject'][$this->category_number], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':CREATOR':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['creator'][$this->author_number], $data);
+                                       break;
+
+                               case 'AUTHOR':
+                               case $this->namespaces['rss1'] . ':AUTHOR':
+                               case $this->namespaces['rss2'] . ':AUTHOR':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['rss'], $data);
+                                       break;
+                       }
+
+                       if ($this->inside_author)
+                       {
+                               switch ($this->tag_name)
+                               {
+                                       case 'NAME':
+                                       case $this->namespaces['atom'] . ':NAME':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['name'], $data);
+                                               break;
+
+                                       case 'URL':
+                                       case $this->namespaces['atom'] . ':URL':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['url'], $data);
+                                               break;
+
+                                       case 'URI':
+                                       case $this->namespaces['atom'] . ':URI':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['uri'], $data);
+                                               break;
+
+                                       case 'HOMEPAGE':
+                                       case $this->namespaces['atom'] . ':HOMEPAGE':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['homepage'], $data);
+                                               break;
+
+                                       case 'EMAIL':
+                                       case $this->namespaces['atom'] . ':EMAIL':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['email'], $data);
+                                               break;
+                               }
+                       }
+               }
+
+               else if (($this->inside_channel && !$this->inside_image) || (isset($this->data['feedinfo']['type']) && $this->data['feedinfo']['type'] == 'Atom'))
+               {
+                       switch ($this->tag_name)
+                       {
+                               case 'TITLE':
+                               case $this->namespaces['rss1'] . ':TITLE':
+                               case $this->namespaces['rss2'] . ':TITLE':
+                               case $this->namespaces['atom'] . ':TITLE':
+                                       $this->do_add_content($this->data['info']['title'], $data);
+                                       break;
+
+                               case 'LINK':
+                               case $this->namespaces['rss1'] . ':LINK':
+                               case $this->namespaces['rss2'] . ':LINK':
+                               case $this->namespaces['atom'] . ':LINK':
+                                       $this->do_add_content($this->data['info']['link'][$this->link_number], $data);
+                                       break;
+
+                               case 'DESCRIPTION':
+                               case $this->namespaces['rss1'] . ':DESCRIPTION':
+                               case $this->namespaces['rss2'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['info']['description'], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['info']['dc:description'], $data);
+                                       break;
+
+                               case 'TAGLINE':
+                               case $this->namespaces['atom'] . ':TAGLINE':
+                                       $this->do_add_content($this->data['info']['tagline'], $data);
+                                       break;
+
+                               case 'SUBTITLE':
+                               case $this->namespaces['atom'] . ':SUBTITLE':
+                                       $this->do_add_content($this->data['info']['subtitle'], $data);
+                                       break;
+
+                               case 'COPYRIGHT':
+                               case $this->namespaces['rss1'] . ':COPYRIGHT':
+                               case $this->namespaces['rss2'] . ':COPYRIGHT':
+                               case $this->namespaces['atom'] . ':COPYRIGHT':
+                                       $this->do_add_content($this->data['info']['copyright'], $data);
+                                       break;
+
+                               case 'LANGUAGE':
+                               case $this->namespaces['rss1'] . ':LANGUAGE':
+                               case $this->namespaces['rss2'] . ':LANGUAGE':
+                                       $this->do_add_content($this->data['info']['language'], $data);
+                                       break;
+                               
+                               case 'LOGO':
+                               case $this->namespaces['atom'] . ':LOGO':
+                                       $this->do_add_content($this->data['info']['logo'], $data);
+                                       break;
+                               
+                       }
+               }
+
+               else if ($this->inside_channel && $this->inside_image)
+               {
+                       switch ($this->tag_name)
+                       {
+                               case 'TITLE':
+                               case $this->namespaces['rss1'] . ':TITLE':
+                               case $this->namespaces['rss2'] . ':TITLE':
+                                       $this->do_add_content($this->data['info']['image']['title'], $data);
+                                       break;
+
+                               case 'URL':
+                               case $this->namespaces['rss1'] . ':URL':
+                               case $this->namespaces['rss2'] . ':URL':
+                                       $this->do_add_content($this->data['info']['image']['url'], $data);
+                                       break;
+
+                               case 'LINK':
+                               case $this->namespaces['rss1'] . ':LINK':
+                               case $this->namespaces['rss2'] . ':LINK':
+                                       $this->do_add_content($this->data['info']['image']['link'], $data);
+                                       break;
+
+                               case 'WIDTH':
+                               case $this->namespaces['rss1'] . ':WIDTH':
+                               case $this->namespaces['rss2'] . ':WIDTH':
+                                       $this->do_add_content($this->data['info']['image']['width'], $data);
+                                       break;
+
+                               case 'HEIGHT':
+                               case $this->namespaces['rss1'] . ':HEIGHT':
+                               case $this->namespaces['rss2'] . ':HEIGHT':
+                                       $this->do_add_content($this->data['info']['image']['height'], $data);
+                                       break;
+                       }
+               }
+               $this->is_first = false;
+       }
+
+       function end_handler($parser, $name)
+       {
+               $this->tag_name = '';
+               switch ($name)
+               {
+                       case 'ITEM':
+                       case $this->namespaces['rss1'] . ':ITEM':
+                       case $this->namespaces['rss2'] . ':ITEM':
+                       case 'ENTRY':
+                       case $this->namespaces['atom'] . ':ENTRY':
+                               $this->inside_item = false;
+                               $this->item_number++;
+                               $this->author_number = 0;
+                               $this->category_number = 0;
+                               $this->enclosure_number = 0;
+                               $this->item_link_number = 0;
+                               break;
+
+                       case 'CHANNEL':
+                       case $this->namespaces['rss1'] . ':CHANNEL':
+                       case $this->namespaces['rss2'] . ':CHANNEL':
+                               $this->inside_channel = false;
+                               break;
+
+                       case 'IMAGE':
+                       case $this->namespaces['rss1'] . ':IMAGE':
+                       case $this->namespaces['rss2'] . ':IMAGE':
+                               $this->inside_image = false;
+                               break;
+
+                       case 'AUTHOR':
+                       case $this->namespaces['rss1'] . ':AUTHOR':
+                       case $this->namespaces['rss2'] . ':AUTHOR':
+                       case $this->namespaces['atom'] . ':AUTHOR':
+                               $this->author_number++;
+                               $this->inside_author = false;
+                               break;
+
+                       case 'CATEGORY':
+                       case $this->namespaces['rss1'] . ':CATEGORY':
+                       case $this->namespaces['rss2'] . ':CATEGORY':
+                       case $this->namespaces['atom'] . ':CATEGORY':
+                       case $this->namespaces['dc'] . ':SUBJECT':
+                               $this->category_number++;
+                               break;
+                       
+                       case 'ENCLOSURE':
+                       case $this->namespaces['rss1'] . ':ENCLOSURE':
+                       case $this->namespaces['rss2'] . ':ENCLOSURE':
+                               $this->enclosure_number++;
+                               break;
+                               
+                       case 'LINK':
+                       case $this->namespaces['rss1'] . ':LINK':
+                       case $this->namespaces['rss2'] . ':LINK':
+                       case $this->namespaces['atom'] . ':LINK':
+                               if ($this->inside_item)
+                               {
+                                       $this->item_link_number++;
+                               }
+                               else
+                               {
+                                       $this->link_number++;
+                               }
+                               break;
+               }
+               if ($this->inside_item)
+               {
+                       $this->depth_inside_item--;
+               }
+       }
+       
+       function start_name_space($parser, $prefix, $uri = null)
+       {
+               $prefix = strtoupper($prefix);
+               $uri = strtoupper($uri);
+               if ($prefix == 'ATOM' || $uri == 'HTTP://WWW.W3.ORG/2005/ATOM' || $uri == 'HTTP://PURL.ORG/ATOM/NS#')
+               {
+                       $this->namespaces['atom'] = $uri;
+               }
+               else if ($prefix == 'RSS2' || $uri == 'HTTP://BACKEND.USERLAND.COM/RSS2')
+               {
+                       $this->namespaces['rss2'] = $uri;
+               }
+               else if ($prefix == 'RDF' || $uri == 'HTTP://WWW.W3.ORG/1999/02/22-RDF-SYNTAX-NS#')
+               {
+                       $this->namespaces['rdf'] = $uri;
+               }
+               else if ($prefix == 'RSS' || $uri == 'HTTP://PURL.ORG/RSS/1.0/' || $uri == 'HTTP://MY.NETSCAPE.COM/RDF/SIMPLE/0.9/')
+               {
+                       $this->namespaces['rss1'] = $uri;
+               }
+               else if ($prefix == 'DC' || $uri == 'HTTP://PURL.ORG/DC/ELEMENTS/1.1/')
+               {
+                       $this->namespaces['dc'] = $uri;
+               }
+               else if ($prefix == 'XHTML' || $uri == 'HTTP://WWW.W3.ORG/1999/XHTML')
+               {
+                       $this->namespaces['xhtml'] = $uri;
+                       $this->xhtml_prefix = $prefix;
+               }
+               else if ($prefix == 'CONTENT' || $uri == 'HTTP://PURL.ORG/RSS/1.0/MODULES/CONTENT/')
+               {
+                       $this->namespaces['content'] = $uri;
+               }
+       }
+       
+       function end_name_space($parser, $prefix)
+       {
+               if ($key = array_search(strtoupper($prefix), $this->namespaces))
+               {
+                       if ($key == 'atom')
+                       {
+                               $this->namespaces['atom'] = 'ATOM';
+                       }
+                       else if ($key == 'rss2')
+                       {
+                               $this->namespaces['rss2'] = 'RSS';
+                       }
+                       else if ($key == 'rdf')
+                       {
+                               $this->namespaces['rdf'] = 'RDF';
+                       }
+                       else if ($key == 'rss1')
+                       {
+                               $this->namespaces['rss1'] = 'RSS';
+                       }
+                       else if ($key == 'dc')
+                       {
+                               $this->namespaces['dc'] = 'DC';
+                       }
+                       else if ($key == 'xhtml')
+                       {
+                               $this->namespaces['xhtml'] = 'XHTML';
+                               $this->xhtml_prefix = 'XHTML';
+                       }
+                       else if ($key == 'content')
+                       {
+                               $this->namespaces['content'] = 'CONTENT';
+                       }
+               }
+       }
+}
+
+class SimplePie_Sanitize
+{
+       // Private vars
+       var $feedinfo;
+       var $info;
+       var $items;
+       var $feed_xmlbase;
+       var $item_xmlbase;
+       var $attribs;
+       var $cached_entities;
+       var $cache_convert_entities;
+       
+       // Options
+       var $remove_div = true;
+       var $strip_ads = false;
+       var $replace_headers = false;
+       var $bypass_image_hotlink = false;
+       var $bypass_image_hotlink_page = false;
+       var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+       var $encode_instead_of_strip = false;
+       var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur');
+       var $input_encoding = 'UTF-8';
+       var $output_encoding = 'UTF-8';
+       var $item_class = 'SimplePie_Item';
+       var $author_class = 'SimplePie_Author';
+       var $enclosure_class = 'SimplePie_Enclosure';
+       
+       function remove_div($enable = true)
+       {
+               $this->remove_div = (bool) $enable;
+       }
+       
+       function strip_ads($enable = false)
+       {
+               $this->strip_ads = (bool) $enable;
+       }
+       
+       function replace_headers($enable = false)
+       {
+               $this->enable_headers = (bool) $enable;
+       }
+       
+       function bypass_image_hotlink($get = false)
+       {
+               if ($get)
+               {
+                       $this->bypass_image_hotlink = (string) $get;
+               }
+               else
+               {
+                       $this->bypass_image_hotlink = false;
+               }
+       }
+       
+       function bypass_image_hotlink_page($page = false)
+       {
+               if ($page)
+               {
+                       $this->bypass_image_hotlink_page = (string) $page;
+               }
+               else
+               {
+                       $this->bypass_image_hotlink_page = false;
+               }
+       }
+       
+       function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
+       {
+               if ($tags)
+               {
+                       if (is_array($tags))
+                       {
+                               $this->strip_htmltags = $tags;
+                       }
+                       else
+                       {
+                               $this->strip_htmltags = explode(',', $tags);
+                       }
+               }
+               else
+               {
+                       $this->strip_htmltags = false;
+               }
+       }
+       
+       function encode_instead_of_strip($enable = false)
+       {
+               $this->encode_instead_of_strip = (bool) $enable;
+       }
+       
+       function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur'))
+       {
+               if ($attribs)
+               {
+                       if (is_array($attribs))
+                       {
+                               $this->strip_attributes = $attribs;
+                       }
+                       else
+                       {
+                               $this->strip_attributes = explode(',', $attribs);
+                       }
+               }
+               else
+               {
+                       $this->strip_attributes = false;
+               }
+       }
+       
+       function input_encoding($encoding = 'UTF-8')
+       {
+               $this->input_encoding = (string) $encoding;
+       }
+       
+       function output_encoding($encoding = 'UTF-8')
+       {
+               $this->output_encoding = (string) $encoding;
+       }
+       
+       function set_item_class($class = 'SimplePie_Item')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Item'))
+               {
+                       $this->item_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_author_class($class = 'SimplePie_Author')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Author'))
+               {
+                       $this->author_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_enclosure_class($class = 'SimplePie_Enclosure')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Enclosure'))
+               {
+                       $this->enclosure_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function parse_data_array(&$data, $url)
+       {               
+               // Feed Info (Type and Version)
+               if (!empty($data['feedinfo']['type']))
+               {
+                       $this->feedinfo = $data['feedinfo'];
+               }
+               
+               // Feed level xml:base
+               if (!empty($data['feeddata']['attribs']['XML:BASE']))
+               {
+                       $this->feed_xmlbase = $data['feeddata']['attribs']['XML:BASE'];
+               }
+               else if (!empty($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
+               {
+                       $this->feed_xmlbase = $data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'];
+               }
+               // FeedBurner feeds use alternate link
+               else if (strpos($url, 'http://feeds.feedburner.com/') !== 0)
+               {
+                       $this->feed_xmlbase = SimplePie_Misc::parse_url($url);
+                       if (empty($this->feed_xmlbase['authority']))
+                       {
+                               $this->feed_xmlbase = preg_replace('/^' . preg_quote(realpath($_SERVER['DOCUMENT_ROOT']), '/') . '/', '', realpath($url));
+                       }
+                       else
+                       {
+                               $this->feed_xmlbase = $url;
+                       }
+               }
+               
+               
+               // Feed link(s)
+               if (!empty($data['info']['link']))
+               {
+                       foreach ($data['info']['link'] as $link)
+                       {
+                               if (empty($link['attribs']['REL']))
+                               {
+                                       $rel = 'alternate';
+                               }
+                               else
+                               {
+                                       $rel = strtolower($link['attribs']['REL']);
+                               }
+                               if ($rel == 'enclosure')
+                               {
+                                       $href = null;
+                                       $type = null;
+                                       $length = null;
+                                       if (!empty($link['data']))
+                                       {
+                                               $href = $this->sanitize($link['data'], $link['attribs'], true);
+                                       }
+                                       else if (!empty($link['attribs']['HREF']))
+                                       {
+                                               $href = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                       }
+                                       if (!empty($link['attribs']['TYPE'])) {
+                                               $type = $this->sanitize($link['attribs']['TYPE'], $link['attribs']);
+                                       }
+                                       if (!empty($link['attribs']['LENGTH'])) {
+                                               $length = $this->sanitize($link['attribs']['LENGTH'], $link['attribs']);
+                                       }
+                                       $this->info['link']['enclosure'][] = new $this->enclosure_class($href, $type, $length);
+                               }
+                               else
+                               {
+                                       if (!empty($link['data']))
+                                       {
+                                               $this->info['link'][$rel][] = $this->sanitize($link['data'], $link['attribs'], true);
+                                       }
+                                       else if (!empty($link['attribs']['HREF']))
+                                       {
+                                               $this->info['link'][$rel][] = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                       }
+                               }
+                       }
+               }
+               
+               // Use the first alternate link if we don't have any feed xml:base
+               if (empty($this->feed_xmlbase) && !empty($this->info['link']['alternate'][0]))
+               {
+                       $this->feed_xmlbase = $this->info['link']['alternate'][0];
+               }
+               
+               // Feed Title
+               if (!empty($data['info']['title']['data']))
+               {
+                       $this->info['title'] = $this->sanitize($data['info']['title']['data'], $data['info']['title']['attribs']);
+               }
+               
+               // Feed Descriptions
+               if (!empty($data['info']['description']['data']))
+               {
+                       $this->info['description'] = $this->sanitize($data['info']['description']['data'], $data['info']['description']['attribs'], false, true);
+               }
+               if (!empty($data['info']['dc:description']['data']))
+               {
+                       $this->info['dc:description'] = $this->sanitize($data['info']['dc:description']['data'], $data['info']['dc:description']['attribs']);
+               }
+               if (!empty($data['info']['tagline']['data']))
+               {
+                       $this->info['tagline'] = $this->sanitize($data['info']['tagline']['data'], $data['info']['tagline']['attribs']);
+               }
+               if (!empty($data['info']['subtitle']['data']))
+               {
+                       $this->info['subtitle'] = $this->sanitize($data['info']['subtitle']['data'], $data['info']['subtitle']['attribs']);
+               }
+               
+               // Feed Language
+               if (!empty($data['info']['language']['data']))
+               {
+                       $this->info['language'] = $this->sanitize($data['info']['language']['data'], $data['info']['language']['attribs']);
+               }
+               if (!empty($data['feeddata']['attribs']['XML:LANG']))
+               {
+                       $this->info['xml:lang'] = $this->sanitize($data['feeddata']['attribs']['XML:LANG'], null);
+               }
+               else if (!empty($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:LANG']))
+               {
+                       $this->info['xml:lang'] = $this->sanitize($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:LANG'], null);
+               }
+               
+               // Feed Copyright
+               if (!empty($data['info']['copyright']['data']))
+               {
+                       $this->info['copyright'] = $this->sanitize($data['info']['copyright']['data'], $data['info']['copyright']['attribs']);
+               }
+               
+               // Feed Image
+               if (!empty($data['info']['image']['title']['data']))
+               {
+                       $this->info['image']['title'] = $this->sanitize($data['info']['image']['title']['data'], $data['info']['image']['title']['attribs']);
+               }
+               if (!empty($data['info']['image']['url']['data']))
+               {
+                       $this->info['image']['url'] = $this->sanitize($data['info']['image']['url']['data'], $data['info']['image']['url']['attribs'], true);
+               }
+               if (!empty($data['info']['logo']['data']))
+               {
+                       $this->info['image']['logo'] = $this->sanitize($data['info']['logo']['data'], $data['info']['logo']['attribs'], true);
+               }
+               if (!empty($data['info']['image']['link']['data']))
+               {
+                       $this->info['image']['link'] = $this->sanitize($data['info']['image']['link']['data'], $data['info']['image']['link']['attribs'], true);
+               }
+               if (!empty($data['info']['image']['width']['data']))
+               {
+                       $this->info['image']['width'] = $this->sanitize($data['info']['image']['width']['data'], $data['info']['image']['width']['attribs']);
+               }
+               if (!empty($data['info']['image']['height']['data']))
+               {
+                       $this->info['image']['height'] = $this->sanitize($data['info']['image']['height']['data'], $data['info']['image']['height']['attribs']);
+               }
+               
+               // Items
+               if (!empty($data['items']))
+               {
+                       foreach ($data['items'] as $key => $item)
+                       {
+                               $newitem = null;
+                               
+                               // Item level xml:base
+                               if (!empty($item['attribs']['XML:BASE']))
+                               {
+                                       $this->item_xmlbase = SimplePie_Misc::absolutize_url($item['attribs']['XML:BASE'], $this->feed_xmlbase);
+                               }
+                               else if (!empty($item['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
+                               {
+                                       $this->item_xmlbase = SimplePie_Misc::absolutize_url($item['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'], $this->feed_xmlbase);
+                               }
+                               else
+                               {
+                                       $this->item_xmlbase = null;
+                               }
+       
+                               // Title
+                               if (!empty($item['title']['data'])) {
+                                       $newitem['title'] = $this->sanitize($item['title']['data'], $item['title']['attribs']);
+                               }
+                               if (!empty($item['dc:title']['data']))
+                               {
+                                       $newitem['dc:title'] = $this->sanitize($item['dc:title']['data'], $item['dc:title']['attribs']);
+                               }
+                               
+                               // Description
+                               if (!empty($item['content']['data']))
+                               {
+                                       $newitem['content'] = $this->sanitize($item['content']['data'], $item['content']['attribs']);
+                               }
+                               if (!empty($item['encoded']['data']))
+                               {
+                                       $newitem['encoded'] = $this->sanitize($item['encoded']['data'], $item['encoded']['attribs']);
+                               }
+                               if (!empty($item['summary']['data']))
+                               {
+                                       $newitem['summary'] = $this->sanitize($item['summary']['data'], $item['summary']['attribs']);
+                               }
+                               if (!empty($item['description']['data']))
+                               {
+                                       $newitem['description'] = $this->sanitize($item['description']['data'], $item['description']['attribs'], false, true);
+                               }
+                               if (!empty($item['dc:description']['data']))
+                               {
+                                       $newitem['dc:description'] = $this->sanitize($item['dc:description']['data'], $item['dc:description']['attribs']);
+                               }
+                               if (!empty($item['longdesc']['data']))
+                               {
+                                       $newitem['longdesc'] = $this->sanitize($item['longdesc']['data'], $item['longdesc']['attribs']);
+                               }
+               
+                               // Link(s)
+                               if (!empty($item['link']))
+                               {
+                                       foreach ($item['link'] as $link)
+                                       {
+                                               if (empty($link['attribs']['REL']))
+                                               {
+                                                       $rel = 'alternate';
+                                               }
+                                               else
+                                               {
+                                                       $rel = strtolower($link['attribs']['REL']);
+                                               }
+                                               if ($rel == 'enclosure')
+                                               {
+                                                       $href = null;
+                                                       $type = null;
+                                                       $length = null;
+                                                       if (!empty($link['data']))
+                                                       {
+                                                               $href = $this->sanitize($link['data'], $link['attribs'], true);
+                                                       }
+                                                       else if (!empty($link['attribs']['HREF']))
+                                                       {
+                                                               $href = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                                       }
+                                                       if (!empty($link['attribs']['TYPE'])) {
+                                                               $type = $this->sanitize($link['attribs']['TYPE'], $link['attribs']);
+                                                       }
+                                                       if (!empty($link['attribs']['LENGTH'])) {
+                                                               $length = $this->sanitize($link['attribs']['LENGTH'], $link['attribs']);
+                                                       }
+                                                       if (!empty($href))
+                                                       {
+                                                               $newitem['link'][$rel][] = new $this->enclosure_class($href, $type, $length);
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       if (!empty($link['data']))
+                                                       {
+                                                               $newitem['link'][$rel][] = $this->sanitize($link['data'], $link['attribs'], true);
+                                                       }
+                                                       else if (!empty($link['attribs']['HREF']))
+                                                       {
+                                                               $newitem['link'][$rel][] = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                                       }
+                                               }
+                                       }
+                               }
+                               
+                               // Enclosure(s)
+                               if (!empty($item['enclosure']))
+                               {
+                                       foreach ($item['enclosure'] as $enclosure)
+                                       {
+                                               if (!empty($enclosure['attribs']['URL']))
+                                               {
+                                                       $type = null;
+                                                       $length = null;
+                                                       $href = $this->sanitize($enclosure['attribs']['URL'], $enclosure['attribs'], true);
+                                                       if (!empty($enclosure['attribs']['TYPE']))
+                                                       {
+                                                               $type = $this->sanitize($enclosure['attribs']['TYPE'], $enclosure['attribs']);
+                                                       }
+                                                       if (!empty($enclosure['attribs']['LENGTH']))
+                                                       {
+                                                               $length = $this->sanitize($enclosure['attribs']['LENGTH'], $enclosure['attribs']);
+                                                       }
+                                                       $newitem['enclosures'][] = new $this->enclosure_class($href, $type, $length);
+                                               }
+                                       }
+                               }
+                               
+                               // ID
+                               if (!empty($item['guid']['data']))
+                               {
+                                       if (!empty($item['guid']['attribs']['ISPERMALINK']) && strtolower($item['guid']['attribs']['ISPERMALINK']) == 'false')
+                                       {
+                                               $newitem['guid']['permalink'] = false;
+                                       }
+                                       else
+                                       {
+                                               $newitem['guid']['permalink'] = true;
+                                       }
+                                       $newitem['guid']['data'] = $this->sanitize($item['guid']['data'], $item['guid']['attribs']);
+                               }
+                               if (!empty($item['id']['data']))
+                               {
+                                       $newitem['id'] = $this->sanitize($item['id']['data'], $item['id']['attribs']);
+                               }
+                               
+                               // Date
+                               if (!empty($item['pubdate']['data']))
+                               {
+                                       $newitem['pubdate'] = $this->parse_date($this->sanitize($item['pubdate']['data'], $item['pubdate']['attribs']));
+                               }
+                               if (!empty($item['dc:date']['data']))
+                               {
+                                       $newitem['dc:date'] = $this->parse_date($this->sanitize($item['dc:date']['data'], $item['dc:date']['attribs']));
+                               }
+                               if (!empty($item['issued']['data']))
+                               {
+                                       $newitem['issued'] = $this->parse_date($this->sanitize($item['issued']['data'], $item['issued']['attribs']));
+                               }
+                               if (!empty($item['published']['data']))
+                               {
+                                       $newitem['published'] = $this->parse_date($this->sanitize($item['published']['data'], $item['published']['attribs']));
+                               }
+                               if (!empty($item['modified']['data']))
+                               {
+                                       $newitem['modified'] = $this->parse_date($this->sanitize($item['modified']['data'], $item['modified']['attribs']));
+                               }
+                               if (!empty($item['updated']['data']))
+                               {
+                                       $newitem['updated'] = $this->parse_date($this->sanitize($item['updated']['data'], $item['updated']['attribs']));
+                               }
+                               
+                               // Categories
+                               if (!empty($item['category']))
+                               {
+                                       foreach ($item['category'] as $category)
+                                       {
+                                               if (!empty($category['data']))
+                                               {
+                                                       $newitem['category'][] = $this->sanitize($category['data'], $category['attribs']);
+                                               }
+                                               else if (!empty($category['attribs']['TERM']))
+                                               {
+                                                       $newitem['term'][] = $this->sanitize($category['attribs']['TERM'], $category['attribs']);
+                                               }
+                                       }
+                               }
+                               if (!empty($item['subject']))
+                               {
+                                       foreach ($item['subject'] as $category)
+                                       {
+                                               if (!empty($category['data']))
+                                               {
+                                                       $newitem['subject'][] = $this->sanitize($category['data'], $category['attribs']);
+                                               }
+                                       }
+                               }
+                               
+                               // Author
+                               if (!empty($item['creator']))
+                               {
+                                       foreach ($item['creator'] as $creator)
+                                       {
+                                               if (!empty($creator['data']))
+                                               {
+                                                       $newitem['creator'][] = new $this->author_class($this->sanitize($creator['data'], $creator['attribs']), null, null);
+                                               }
+                                       }
+                               }
+                               if (!empty($item['author']))
+                               {
+                                       foreach ($item['author'] as $author)
+                                       {
+                                               $name = null;
+                                               $link = null;
+                                               $email = null;
+                                               if (!empty($author['rss']))
+                                               {
+                                                       $sane = $this->sanitize($author['rss']['data'], $author['rss']['attribs']);
+                                                       if (preg_match('/(.*)@(.*) \((.*)\)/msiU', $sane, $matches)) {
+                                                               $name = trim($matches[3]);
+                                                               $email = trim("$matches[1]@$matches[2]");
+                                                       } else {
+                                                               $email = $sane;
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       if (!empty($author['name']))
+                                                       {
+                                                               $name = $this->sanitize($author['name']['data'], $author['name']['attribs']);
+                                                       }
+                                                       if (!empty($author['url']))
+                                                       {
+                                                               $link = $this->sanitize($author['url']['data'], $author['url']['attribs'], true);
+                                                       }
+                                                       else if (!empty($author['uri']))
+                                                       {
+                                                               $link = $this->sanitize($author['uri']['data'], $author['uri']['attribs'], true);
+                                                       }
+                                                       else if (!empty($author['homepage']))
+                                                       {
+                                                               $link = $this->sanitize($author['homepage']['data'], $author['homepage']['attribs'], true);
+                                                       }
+                                                       if (!empty($author['email'])) {
+                                                               $email = $this->sanitize($author['email']['data'], $author['email']['attribs']);
+                                                       }
+                                               }
+                                               $newitem['author'][] = new $this->author_class($name, $link, $email);
+                                       }
+                               }
+                               unset($data['items'][$key]);
+                               $this->items[] = new $this->item_class($newitem);
+                       }
+               }
+       }
+       
+       function sanitize($data, $attribs, $is_url = false, $force_decode = false)
+       {
+               $this->attribs = $attribs;
+               if (isset($this->feedinfo['type']) && $this->feedinfo['type'] == 'Atom')
+               {
+                       if ((!empty($attribs['MODE']) && $attribs['MODE'] == 'base64') || (!empty($attribs['TYPE']) && $attribs['TYPE'] == 'application/octet-stream'))
+                       {
+                               $data = trim($data);
+                               $data = base64_decode($data);
+                       }
+                       else if ((!empty($attribs['MODE']) && $attribs['MODE'] == 'escaped' || !empty($attribs['TYPE']) && ($attribs['TYPE'] == 'html' || $attribs['TYPE'] == 'text/html')))
+                       {
+                               $data = $this->entities_decode($data);
+                       }
+                       if (!empty($attribs['TYPE']) && ($attribs['TYPE'] == 'xhtml' || $attribs['TYPE'] == 'application/xhtml+xml'))
+                       {
+                               if ($this->remove_div)
+                               {
+                                       $data = preg_replace('/<div( .*)?>/msiU', '', strrev(preg_replace('/>vid\/</i', '', strrev($data), 1)), 1);
+                               }
+                               else
+                               {
+                                       $data = preg_replace('/<div( .*)?>/msiU', '<div>', $data, 1);
+                               }
+                               $data = $this->convert_entities($data);
+                       }
+               }
+               else
+               {
+                       $data = $this->convert_entities($data);
+               }
+               if ($force_decode)
+               {
+                       $data = $this->entities_decode($data);
+               }
+               $data = trim($data);
+               $data = preg_replace('/<\!--([^-]|-[^-])*-->/msiU', '', $data);
+
+               // If Strip Ads is enabled, strip them.
+               if ($this->strip_ads)
+               {
+                       $data = preg_replace('/<a (.*)href=(.*)click\.phdo\?s=(.*)<\/a>/msiU', '', $data); // Pheedo links (tested with Dooce.com)
+                       $data = preg_replace('/<p(.*)>(.*)<a href="http:\/\/ad.doubleclick.net\/jump\/(.*)<\/p>/msiU', '', $data); // Doubleclick links (tested with InfoWorld.com)
+                       $data = preg_replace('/<p><map (.*)name=(.*)google_ad_map(.*)<\/p>/msiU', '', $data); // Google AdSense for Feeds (tested with tuaw.com).
+                       // Feedflare, from Feedburner
+               }
+
+               // Replace H1, H2, and H3 tags with the less important H4 tags.
+               // This is because on a site, the more important headers might make sense,
+               // but it most likely doesn't fit in the context of RSS-in-a-webpage.
+               if ($this->replace_headers)
+               {
+                       $data = preg_replace('/<h[1-3]((\s*((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(.*)))*)\s*>/msiU', '<h4\\1>', $data);
+                       $data = preg_replace('/<\/h[1-3]>/i', '</h4>', $data);
+               }
+
+               if ($is_url)
+               {
+                       $data = $this->replace_urls($data, true);
+               }
+               else
+               {
+                       $data = preg_replace_callback('/<(\S+)((\s*((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(.*)))*)\s*(\/>|>(.*)<\/\S+>)/msiU', array(&$this, 'replace_urls'), $data);
+               }
+
+               // If Bypass Image Hotlink is enabled, rewrite all the image tags.
+               if ($this->bypass_image_hotlink)
+               {
+                       $images = SimplePie_Misc::get_element('img', $data);
+                       foreach ($images as $img)
+                       {
+                               if (!empty($img['attribs']['SRC']['data']))
+                               {
+                                       $pre = '';
+                                       if ($this->bypass_image_hotlink_page)
+                                       {
+                                               $pre = $this->bypass_image_hotlink_page;
+                                       }
+                                       $pre .= "?$this->bypass_image_hotlink=";
+                                       $img['attribs']['SRC']['data'] = $pre . rawurlencode(strtr($img['attribs']['SRC']['data'], array_flip(get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES))));
+                                       $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+                               }
+                       }
+               }
+
+               // Strip out HTML tags and attributes that might cause various security problems.
+               // Based on recommendations by Mark Pilgrim at:
+               // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
+               if ($this->strip_htmltags)
+               {
+                       foreach ($this->strip_htmltags as $tag)
+                       {
+                               $data = preg_replace_callback("/<($tag)((\s*((\w+:)?\w+)(\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))?)*)\s*(\/>|>(.*)<\/($tag)((\s*((\w+:)?\w+)(\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))?)*)\s*>)/msiU", array(&$this, 'do_strip_htmltags'), $data);
+                       }
+               }
+
+               if ($this->strip_attributes)
+               {
+                       foreach ($this->strip_attributes as $attrib)
+                       {
+                               $data = preg_replace('/ '. trim($attrib) .'=("|&quot;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\'|&apos;|<|>|\+|{|})*("|&quot;)/i', '', $data);
+                               $data = preg_replace('/ '. trim($attrib) .'=(\'|&apos;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|"|&quot;|<|>|\+|{|})*(\'|&apos;)/i', '', $data);
+                               $data = preg_replace('/ '. trim($attrib) .'=(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\+|{|})*/i', '', $data);
+                       }
+               }
+               
+               // Convert encoding
+               $data = SimplePie_Misc::change_encoding($data, $this->input_encoding, $this->output_encoding);
+
+               return $data;
+       }
+       
+       function do_strip_htmltags($match)
+       {
+               if ($this->encode_instead_of_strip)
+               {
+                       if (isset($match[12]) && !in_array(strtolower($match[1]), array('script', 'style')))
+                       {
+                               return "&lt;$match[1]$match[2]&gt;$match[12]&lt;/$match[1]&gt;";
+                       }
+                       else if (isset($match[12]))
+                       {
+                               return "&lt;$match[1]$match[2]&gt;&lt;/$match[1]&gt;";
+                       }
+                       else
+                       {
+                               return "&lt;$match[1]$match[2]/&gt;";
+                       }
+               }
+               else
+               {
+                       if (isset($match[12]) && !in_array(strtolower($match[1]), array('script', 'style')))
+                       {
+                               return $match[12];
+                       }
+                       else
+                       {
+                               return '';
+                       }
+               }
+       }
+       
+       function replace_urls($data, $raw_url = false)
+       {
+               if (!empty($this->attribs['XML:BASE']))
+               {
+                       $xmlbase = $attribs['XML:BASE'];
+               }
+               else if (!empty($this->attribs['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
+               {
+                       $xmlbase = $this->attribs['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'];
+               }
+               if (!empty($xmlbase))
+               {
+                       if (!empty($this->item_xmlbase))
+                       {
+                               $xmlbase = SimplePie_Misc::absolutize_url($xmlbase, $this->item_xmlbase);
+                       }
+                       else
+                       {
+                               $xmlbase = SimplePie_Misc::absolutize_url($xmlbase, $this->feed_xmlbase);
+                       }
+               }
+               else if (!empty($this->item_xmlbase))
+               {
+                       $xmlbase = $this->item_xmlbase;
+               }
+               else
+               {
+                       $xmlbase = $this->feed_xmlbase;
+               }
+               
+               if ($raw_url)
+               {
+                       return SimplePie_Misc::absolutize_url($data, $xmlbase);
+               }
+               else
+               {
+                       $attributes = array(
+                               'background',
+                               'href',
+                               'src',
+                               'longdesc',
+                               'usemap',
+                               'codebase',
+                               'data',
+                               'classid',
+                               'cite',
+                               'action',
+                               'profile',
+                               'for'
+                       );
+                       foreach ($attributes as $attribute)
+                       {
+                               if (preg_match("/$attribute='(.*)'/siU", $data[0], $attrib) || preg_match("/$attribute=\"(.*)\"/siU", $data[0], $attrib) || preg_match("/$attribute=(.*)[ |\/|>]/siU", $data[0], $attrib))
+                               {
+                                       $new_tag = str_replace($attrib[1], SimplePie_Misc::absolutize_url($attrib[1], $xmlbase), $attrib[0]);
+                                       $data[0] = str_replace($attrib[0], $new_tag, $data[0]);
+                               }
+                       }
+                       return $data[0];
+               }
+       }
+       
+       function entities_decode($data)
+       {
+               return preg_replace_callback('/&(#)?(x)?([0-9a-z]+);/mi', array(&$this, 'do_entites_decode'), $data);
+       }
+       
+       function do_entites_decode($data)
+       {
+               if (isset($this->cached_entities[$data[0]]))
+               {
+                       return $this->cached_entities[$data[0]];
+               }
+               else
+               {
+                       $return = SimplePie_Misc::change_encoding(html_entity_decode($data[0], ENT_QUOTES), 'ISO-8859-1', $this->input_encoding);
+                       if ($return == $data[0])
+                       {
+                               $return = SimplePie_Misc::change_encoding(preg_replace_callback('/&#([x]?[0-9a-f]+);/mi', array(&$this, 'replace_num_entity'), $data[0]), 'UTF-8', $this->input_encoding);
+                       }
+                       $this->cached_entities[$data[0]] = $return;
+                       return $return;
+               }
+       }
+       
+       function convert_entities($data)
+       {
+               return preg_replace_callback('/&#(x)?([0-9a-z]+);/mi', array(&$this, 'do_convert_entities'), $data);
+       }
+       
+       function do_convert_entities($data)
+       {
+               if (isset($this->cache_convert_entities[$data[0]]))
+               {
+                       return $this->cache_convert_entities[$data[0]];
+               }
+               else if (isset($this->cached_entities[$data[0]]))
+               {
+                       $return = htmlentities($this->cached_entities[$data[0]], ENT_QUOTES, 'UTF-8');
+               }
+               else
+               {
+                       $return = htmlentities(preg_replace_callback('/&#([x]?[0-9a-f]+);/mi', array(&$this, 'replace_num_entity'), $data[0]), ENT_QUOTES, 'UTF-8');
+               }
+               $this->cache_convert_entities[$data[0]] = $return;
+               return $return;
+       }
+
+       /*
+        * Escape numeric entities
+        * From a PHP Manual note (on html_entity_decode())
+        * Copyright (c) 2005 by "php dot net at c dash ovidiu dot tk", 
+        * "emilianomartinezluque at yahoo dot com" and "hurricane at cyberworldz dot org".
+        *
+        * This material may be distributed only subject to the terms and conditions set forth in 
+        * the Open Publication License, v1.0 or later (the latest version is presently available at 
+        * http://www.opencontent.org/openpub/).
+        */
+       function replace_num_entity($ord)
+       {
+               $ord = $ord[1];
+               if (preg_match('/^x([0-9a-f]+)$/i', $ord, $match))
+               {
+                       $ord = hexdec($match[1]);
+               }
+               else
+               {
+                       $ord = intval($ord);
+               }
+               
+               $no_bytes = 0;
+               $byte = array();
+               if ($ord < 128)
+               {
+                       return chr($ord);
+               }
+               if ($ord < 2048)
+               {
+                       $no_bytes = 2;
+               }
+               else if ($ord < 65536)
+               {
+                       $no_bytes = 3;
+               }
+               else if ($ord < 1114112)
+               {
+                       $no_bytes = 4;
+               }
+               else
+               {
+                       return;
+               }
+               switch ($no_bytes)
+               {
+                       case 2:
+                               $prefix = array(31, 192);
+                               break;
+                               
+                       case 3:
+                               $prefix = array(15, 224);
+                               break;
+                               
+                       case 4:
+                               $prefix = array(7, 240);
+                               break;
+               }
+               
+               for ($i = 0; $i < $no_bytes; $i++)
+               {
+                       $byte[$no_bytes-$i-1] = (($ord & (63 * pow(2,6*$i))) / pow(2,6*$i)) & 63 | 128;
+               }
+               $byte[0] = ($byte[0] & $prefix[0]) | $prefix[1];
+               
+               $ret = '';
+               for ($i = 0; $i < $no_bytes; $i++)
+               {
+                       $ret .= chr($byte[$i]);
+               }
+               return $ret;
+       }
+       
+       function parse_date($date)
+       {
+               $military_timezone = array('A' => '-0100', 'B' => '-0200', 'C' => '-0300', 'D' => '-0400', 'E' => '-0500', 'F' => '-0600', 'G' => '-0700', 'H' => '-0800', 'I' => '-0900', 'K' => '-1000', 'L' => '-1100', 'M' => '-1200', 'N' => '+0100', 'O' => '+0200', 'P' => '+0300', 'Q' => '+0400', 'R' => '+0500', 'S' => '+0600', 'T' => '+0700', 'U' => '+0800', 'V' => '+0900', 'W' => '+1000', 'X' => '+1100', 'Y' => '+1200', 'Z' => '-0000');
+               $north_american_timezone = array('GMT' => '-0000', 'EST' => '-0500', 'EDT' => '-0400', 'CST' => '-0600', 'CDT' => '-0500', 'MST' => '-0700', 'MDT' => '-0600', 'PST' => '-0800', 'PDT' => '-0700');
+               if (preg_match('/([0-9]{2,4})-?([0-9]{2})-?([0-9]{2})T([0-9]{2}):?([0-9]{2})(:?([0-9]{2}(\.[0-9]*)?))?(UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[a-z]|(\\+|-)[0-9]{4}|(\\+|-)[0-9]{2}:[0-9]{2})?/i', $date, $matches))
+               {
+                       if (!isset($matches[7]))
+                       {
+                               $matches[7] = '';
+                       }
+                       if (!isset($matches[9]))
+                       {
+                               $matches[9] = '';
+                       }
+                       $matches[7] = str_pad(round($matches[7]), 2, '0', STR_PAD_LEFT);
+                       switch (strlen($matches[9]))
+                       {
+                               case 0:
+                                       $timezone = '';
+                                       break;
+                                       
+                               case 1:
+                                       $timezone = $military_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 2:
+                                       $timezone = '-0000';
+                                       break;
+                               
+                               case 3:
+                                       $timezone = $north_american_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 5:
+                                       $timezone = $matches[9];
+                                       break;
+                               
+                               case 6:
+                                       $timezone = substr_replace($matches[9], '', 3, 1);
+                                       break;
+                       }
+                       $date = strtotime("$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:$matches[7] $timezone");
+               }
+               else if (preg_match('/([0-9]{1,2})\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s*([0-9]{2}|[0-9]{4})\s*([0-9]{2}):([0-9]{2})(:([0-9]{2}(\.[0-9]*)?))?\s*(UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[a-z]|(\\+|-)[0-9]{4}|(\\+|-)[0-9]{2}:[0-9]{2})?/i', $date, $matches))
+               {
+                       $three_month = array('Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12);
+                       $month = $three_month[$matches[2]];
+                       if (strlen($matches[3]) == 2)
+                       {
+                               $year = ($matches[3] < 70) ? "20$matches[3]" : "19$matches[3]";
+                       }
+                       else
+                       {
+                               $year = $matches[3];
+                       }
+                       if (!isset($matches[7]))
+                       {
+                               $matches[7] = '';
+                       }
+                       if (!isset($matches[9]))
+                       {
+                               $matches[9] = '';
+                       }
+                       $second = str_pad(round($matches[7]), 2, '0', STR_PAD_LEFT);
+                       switch (strlen($matches[9]))
+                       {
+                               case 0:
+                                       $timezone = '';
+                                       break;
+                                       
+                               case 1:
+                                       $timezone = $military_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 2:
+                                       $timezone = '-0000';
+                                       break;
+                               
+                               case 3:
+                                       $timezone = $north_american_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 5:
+                                       $timezone = $matches[9];
+                                       break;
+                               
+                               case 6:
+                                       $timezone = substr_replace($matches[9], '', 3, 1);
+                                       break;
+                       }
+                       $date = strtotime("$year-$month-$matches[1] $matches[4]:$matches[5]:$second $timezone");
+               }
+               else
+               {
+                       $date = strtotime($date);
+               }
+               if ($date !== false && $date !== -1)
+               {
+                       return $date;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/mediawiki/img_auth.php b/mediawiki/img_auth.php
new file mode 120000 (symlink)
index 0000000..76f6b0c
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/img_auth.php
\ No newline at end of file
diff --git a/mediawiki/includes b/mediawiki/includes
new file mode 120000 (symlink)
index 0000000..e7e733f
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/includes
\ No newline at end of file
diff --git a/mediawiki/index.php b/mediawiki/index.php
new file mode 120000 (symlink)
index 0000000..01a952b
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/index.php
\ No newline at end of file
diff --git a/mediawiki/install-utils.inc b/mediawiki/install-utils.inc
new file mode 120000 (symlink)
index 0000000..8a8a6f7
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/install-utils.inc
\ No newline at end of file
diff --git a/mediawiki/languages b/mediawiki/languages
new file mode 120000 (symlink)
index 0000000..0b6c6d1
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/languages
\ No newline at end of file
diff --git a/mediawiki/maintenance b/mediawiki/maintenance
new file mode 120000 (symlink)
index 0000000..3397d8b
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/maintenance
\ No newline at end of file
diff --git a/mediawiki/opensearch_desc.php b/mediawiki/opensearch_desc.php
new file mode 120000 (symlink)
index 0000000..f669fe0
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/opensearch_desc.php
\ No newline at end of file
diff --git a/mediawiki/profileinfo.php b/mediawiki/profileinfo.php
new file mode 120000 (symlink)
index 0000000..87ceea0
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/profileinfo.php
\ No newline at end of file
diff --git a/mediawiki/redirect.php b/mediawiki/redirect.php
new file mode 120000 (symlink)
index 0000000..f304aa8
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/redirect.php
\ No newline at end of file
diff --git a/mediawiki/redirect.phtml b/mediawiki/redirect.phtml
new file mode 120000 (symlink)
index 0000000..8c8b365
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/redirect.phtml
\ No newline at end of file
diff --git a/mediawiki/skins/Chick.deps.php b/mediawiki/skins/Chick.deps.php
new file mode 120000 (symlink)
index 0000000..37c45d8
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Chick.deps.php
\ No newline at end of file
diff --git a/mediawiki/skins/Chick.php b/mediawiki/skins/Chick.php
new file mode 120000 (symlink)
index 0000000..2762915
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Chick.php
\ No newline at end of file
diff --git a/mediawiki/skins/CologneBlue.php b/mediawiki/skins/CologneBlue.php
new file mode 120000 (symlink)
index 0000000..71fa325
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/CologneBlue.php
\ No newline at end of file
diff --git a/mediawiki/skins/MonoBook.deps.php b/mediawiki/skins/MonoBook.deps.php
new file mode 120000 (symlink)
index 0000000..10deba1
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MonoBook.deps.php
\ No newline at end of file
diff --git a/mediawiki/skins/MonoBook.php b/mediawiki/skins/MonoBook.php
new file mode 120000 (symlink)
index 0000000..898b73c
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MonoBook.php
\ No newline at end of file
diff --git a/mediawiki/skins/MySkin.deps.php b/mediawiki/skins/MySkin.deps.php
new file mode 120000 (symlink)
index 0000000..72f4ca9
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MySkin.deps.php
\ No newline at end of file
diff --git a/mediawiki/skins/MySkin.php b/mediawiki/skins/MySkin.php
new file mode 120000 (symlink)
index 0000000..2731872
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MySkin.php
\ No newline at end of file
diff --git a/mediawiki/skins/Nostalgia.php b/mediawiki/skins/Nostalgia.php
new file mode 120000 (symlink)
index 0000000..4477b7d
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Nostalgia.php
\ No newline at end of file
diff --git a/mediawiki/skins/Openbox.php b/mediawiki/skins/Openbox.php
new file mode 100644 (file)
index 0000000..2fa63db
--- /dev/null
@@ -0,0 +1,251 @@
+<?php
+/**
+ * openbox skin to integrate into the new openbox site
+ *
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+  die( -1 );
+
+/** */
+require_once('includes/SkinTemplate.php');
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinOpenbox extends SkinTemplate {
+  function initPage( &$out ) {
+    SkinTemplate::initPage( $out );
+    $this->skinname  = 'openbox';
+    $this->stylename = 'openbox';
+    $this->template  = 'OpenboxTemplate';
+  }
+}
+
+class OpenboxTemplate extends QuickTemplate {
+  function execute() {
+    global $wgUser;
+    $skin = $wgUser->getSkin();
+
+    // Suppress warnings to prevent notices about missing indexes in
+    // $this->data
+    wfSuppressWarnings();
+
+    // wiki style shows the wiki things all the time, help style hides them
+    // out of view a bit
+    $style_wiki=1;
+    $style_help=2;
+    if (preg_match('/^Special:(.*)/', $skin->titletxt))
+      $style=$style_wiki;
+    else
+      $style=$style_help;
+
+    // figure out the title to use for displaying the page
+    $title = htmlspecialchars($this->data['title']);
+    $title = preg_replace('/_/', ' ', $title);
+
+    // set the breadcrumb trail
+    $breadcrumb=array('Home', '.');
+    if ($title != 'Help') {
+      $breadcrumb[] = 'Help';
+      $breadcrumb[] = 'help.php';
+    }
+
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+     foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+       ?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+     } ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+
+<?php include('../head.php'); ?>
+  <?php $this->html('headlinks') ?>
+
+  <link rel="stylesheet" type="text/css" href="css/help.css" />
+  <link rel="stylesheet" type="text/css" href="css/wiki.css" />
+
+  <!--[-if lt IE 7]>
+    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"></script>
+  <![endif]-->
+
+  <?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+                
+  <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+
+<!--
+  <?php if($this->data['jsvarurl'  ]) { ?>
+  <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"></script>
+  <?php } ?>
+-->
+<!--
+  <?php if($this->data['pagecss'   ]) { ?>
+  <style type="text/css"><?php $this->html('pagecss'   ) ?></style>
+  <?php } ?>
+  <?php if($this->data['usercss'   ]) { ?>
+  <style type="text/css"><?php $this->html('usercss'   ) ?></style>
+  <?php } ?>
+  <?php if($this->data['userjs'    ]) { ?>
+  <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs' ) ?>"></script>
+  <?php } ?>
+  <?php if($this->data['userjsprev']) { ?>
+  <script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
+  <?php } ?>
+-->
+
+<!--
+  <?php if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
+-->
+  <!-- Head Scripts -->
+  <?php $this->html('headscripts') ?>
+</head>
+
+<?php include('../top.php'); ?>
+
+<?php splash_title('images/splash/help.png', $title, true); ?>
+
+<?php include('../content.php'); ?>
+
+<?php if ($style == $style_help) { ?>
+<div id="col1" class="widecol">
+<?php include('../helpmenu.php'); ?>
+</div> <!--col1-->
+<?php } ?>
+
+<?php if ($style == $style_help) { ?>
+<div id="col2" class="widecol">
+<?php } else { ?>
+<div id="col2" class="widecol fullcol">
+<?php } ?>
+
+<div id="wikithings">
+  <?php if($this->data['undelete']) { ?>
+  <div id="contentSub2"><?php     $this->html('undelete') ?></div>
+  <?php } ?>
+
+  <?php if($this->data['newtalk'] ) { ?>
+  <div class="usermessage"><?php $this->html('newtalk')  ?></div>
+  <?php } ?>
+
+  <div id="p-edit" class="wikimenu">
+    <?php foreach(array_slice($this->data['content_actions'], 0, 1) as $key => $tab) { ?>
+    <div class="header <?php echo ($this->data['content_actions']['edit'] ? 'editable' : 'locked') ?>" id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+    if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php } ?>>
+      <a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>>
+      <?php echo htmlspecialchars($tab['text']) ?></a></div>
+  <?php } ?>
+  <?php if (count($this->data['content_actions']) > 1) {?>
+  <ul>
+    <?php foreach(array_slice($this->data['content_actions'], 1) as $key => $tab) { ?>
+    <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+    if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php } ?>>
+      <a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>>
+      <?php echo htmlspecialchars($tab['text']) ?></a></li>
+  <?php } ?>
+  </ul>
+  <?php } ?>
+  </div> <!--p-edit-->
+
+  <div class="wikimenu" id="p-personal">
+    <?php foreach(array_slice($this->data['personal_urls'], 0, 1) as $key => $item) { ?>
+    <div class="header" id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
+      if ($item['active']) { ?> class="active"<?php } ?>>
+      <a href="<?php echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?>
+      <?php if(!empty($item['class'])) { ?> class="<?php echo htmlspecialchars($item['class']) ?>"<?php } ?>>
+      <?php echo htmlspecialchars($item['text']) ?></a></div>
+  <?php } ?>
+  <?php if (count($this->data['personal_urls']) > 1) {?>
+  <ul>
+    <?php foreach(array_slice($this->data['personal_urls'], 1) as $key => $item) { ?>
+    <li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
+      if ($item['active']) { ?> class="active"<?php } ?>>
+      <a href="<?php echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?>
+      <?php if(!empty($item['class'])) { ?> class="<?php echo htmlspecialchars($item['class']) ?>"<?php } ?>>
+      <?php echo htmlspecialchars($item['text']) ?></a></li>
+    <?php } ?>
+  </ul>
+  <?php } ?>
+  </div> <!--p-personal-->
+
+  <div class="wikimenu" id="p-wiki">
+    <div class="header" id="pt-toolbox"></div>
+
+  <ul>
+    <?php if($this->data['notspecialpage']) { ?>
+      <li id="t-whatlinkshere">
+        <a href="<?php echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])?>"
+          <?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a>
+      </li>
+      <?php if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
+        <li id="t-recentchangeslinked">
+          <a href="<?php echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])?>"
+            <?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a>
+        </li>
+      <?php }
+    } ?>
+    <?php foreach( array('contributions', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+      if($this->data['nav_urls'][$special]) {?>
+        <li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])?>"
+          <?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
+      <?php }
+    } ?>
+
+    <?php if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
+      <li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])?>"
+        <?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
+    } elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
+      <li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
+    } ?>
+  </ul>
+
+  </div> <!--p-wiki-->
+  
+</div> <!--wikithings-->
+
+<script type="<?php $this->text('jsmimetype') ?>">
+document.getElementById('p-personal').style.width=
+      getElementWidth('p-personal-menu')+'px';
+document.getElementById('p-edit').style.width=
+      getElementWidth('p-edit-menu')+'px';
+</script>
+
+<div class="clear"></div>
+
+<div class="wikibody" <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
+<?php $this->html('bodytext') ?>
+</div>
+</div> <!--col2-->
+
+
+<script type="<?php $this->text('jsmimetype') ?>">
+  if (window.isMSIE55) fixalpha();
+</script>
+<?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
+<?php $this->html('reporttime') ?>
+<?php wfRestoreWarnings(); ?>
+
+<?php include('../bottom.php'); ?>
+
+<?php return; ?>
+
+<!-- extra stuff -->
+<ul>
+<?php
+$footerlinks = array(
+ 'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
+ 'privacy', 'about', 'disclaimer', 'tagline',
+);
+foreach( $footerlinks as $aLink ) {
+  if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {?>
+    <li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
+  <?php }
+}
+?>
+</ul>
+
+<?php
+  }
+}
+?>
diff --git a/mediawiki/skins/OpenboxWiki.php b/mediawiki/skins/OpenboxWiki.php
new file mode 100644 (file)
index 0000000..61909b1
--- /dev/null
@@ -0,0 +1,323 @@
+<?php
+/**
+ * openbox foo
+ *
+ * Translated from gwicke's previous TAL template version to remove
+ * dependency on PHPTAL.
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+       die( -1 );
+
+/** */
+require_once('includes/SkinTemplate.php');
+
+$nav_urlss['news'] = 'Openbox:News';
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinOpenboxWiki extends SkinTemplate {
+       /** Using monobook. */
+       function initPage( &$out ) {
+               SkinTemplate::initPage( $out );
+               $this->skinname  = 'openboxwiki';
+               $this->stylename = 'openboxwiki';
+               $this->template  = 'OpenboxWikiTemplate';
+       }
+}
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class OpenboxWikiTemplate extends QuickTemplate {
+       /**
+        * Template filter callback for MonoBook skin.
+        * Takes an associative array of data set from a SkinTemplate-based
+        * class, and a wrapper for MediaWiki's localization database, and
+        * outputs a formatted page.
+        *
+        * @access private
+        */
+       function execute() {
+               global $wgUser;
+               $skin = $wgUser->getSkin();
+
+               // Suppress warnings to prevent notices about missing indexes in $this->data
+               wfSuppressWarnings();
+
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+       foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+               ?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+       } ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+       <head>
+               <meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
+               <?php $this->html('headlinks') ?>
+               <title><?php $this->text('pagetitle') ?></title>
+               <style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>"; /*]]>*/</style>
+               <link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php } ?> href="<?php $this->text('stylepath') ?>/common/commonPrint.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" />
+               <!--link rel="stylesheet" type="text/css" media="handheld" href="<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/handheld.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" /-->
+               <!--[-if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if IE 7]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE70Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"></script>
+               <meta http-equiv="imagetoolbar" content="no" /><![endif]-->
+               
+               <?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+                
+               <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+<?php  if($this->data['jsvarurl'  ]) { ?>
+               <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"><!-- site js --></script>
+<?php  } ?>
+<?php  if($this->data['pagecss'   ]) { ?>
+               <style type="text/css"><?php $this->html('pagecss'   ) ?></style>
+<?php  }
+               if($this->data['usercss'   ]) { ?>
+               <style type="text/css"><?php $this->html('usercss'   ) ?></style>
+<?php  }
+               if($this->data['userjs'    ]) { ?>
+               <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs' ) ?>"></script>
+<?php  }
+               if($this->data['userjsprev']) { ?>
+               <script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
+<?php  }
+               if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
+               <!-- Head Scripts -->
+<?php $this->html('headscripts') ?>
+       </head>
+<body <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
+       <div id="globalWrapper">
+               <div id="column-content">
+       <div id="content">
+               <a name="top" id="top"></a>
+               <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
+               <h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
+               <div id="bodyContent">
+                       <h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
+                       <div id="contentSub"><?php $this->html('subtitle') ?></div>
+                       <?php if($this->data['undelete']) { ?><div id="contentSub2"><?php     $this->html('undelete') ?></div><?php } ?>
+                       <?php if($this->data['newtalk'] ) { ?><div class="usermessage"><?php $this->html('newtalk')  ?></div><?php } ?>
+                       <?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto') ?> <a href="#column-one"><?php $this->msg('jumptonavigation') ?></a>, <a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div><?php } ?>
+                       <!-- start content -->
+                       <?php $this->html('bodytext') ?>
+                       <?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks') ?></div><?php } ?>
+                       <!-- end content -->
+                       <div class="visualClear"></div>
+               </div>
+       </div>
+               </div>
+               <div id="column-one">
+       <div id="p-cactions" class="portlet">
+               <h5><?php $this->msg('views') ?></h5>
+               <div class="pBody">
+                       <ul>
+       <?php                   foreach($this->data['content_actions'] as $key => $tab) { ?>
+                                <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+                                               if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
+                                        ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>><?php
+                                        echo htmlspecialchars($tab['text']) ?></a></li>
+       <?php                    } ?>
+                       </ul>
+               </div>
+       </div>
+       <div class="portlet" id="p-personal">
+               <h5><?php $this->msg('personaltools') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php                  foreach($this->data['personal_urls'] as $key => $item) { ?>
+                               <li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
+                                       if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php
+                               echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
+                               if(!empty($item['class'])) { ?> class="<?php
+                               echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
+                               echo htmlspecialchars($item['text']) ?></a></li>
+<?php                  } ?>
+                       </ul>
+               </div>
+       </div>
+       <div class="portlet" id="p-logo">
+               <a style="background-image: url(<?php $this->text('logopath') ?>);" <?php
+                       ?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"<?php
+                       echo $skin->tooltipAndAccesskey('n-mainpage') ?>></a>
+       </div>
+       <script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
+       <?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
+       <div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar) ?>'<?php echo $skin->tooltip('p-'.$bar) ?>>
+               <h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
+               <div class='pBody'>
+                       <ul>
+<?php                  foreach($cont as $key => $val) { ?>
+                               <li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
+                                       if ( $val['active'] ) { ?> class="active" <?php }
+                               ?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
+<?php                  } ?>
+                       </ul>
+               </div>
+       </div>
+       <?php } ?>
+       <div id="p-search" class="portlet">
+               <h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+               <div id="searchBody" class="pBody">
+                       <form action="<?php $this->text('searchaction') ?>" id="searchform"><div>
+                               <input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
+                                       if( isset( $this->data['search'] ) ) {
+                                               ?> value="<?php $this->text('search') ?>"<?php } ?> />
+                               <input type='submit' name="go" class="searchButton" id="searchGoButton" value="<?php $this->msg('searcharticle') ?>" />&nbsp;
+                               <input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>" />
+                       </div></form>
+               </div>
+       </div>
+       <div class="portlet" id="p-tb">
+               <h5><?php $this->msg('toolbox') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php
+               if($this->data['notspecialpage']) { ?>
+                               <li id="t-whatlinkshere"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
+<?php
+                       if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
+                               <li id="t-recentchangeslinked"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a></li>
+<?php          }
+               }
+               if(isset($this->data['nav_urls']['trackbacklink'])) { ?>
+                       <li id="t-trackbacklink"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
+<?php  }
+               if($this->data['feeds']) { ?>
+                       <li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
+                                       ?><span id="feed-<?php echo Sanitizer::escapeId($key) ?>"><a href="<?php
+                                       echo htmlspecialchars($feed['href']) ?>"<?php echo $skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
+                                       <?php } ?></li><?php
+               }
+
+               foreach( array('contributions', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+
+                       if($this->data['nav_urls'][$special]) {
+                               ?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
+<?php          }
+               }
+
+               if(!empty($this->data['nav_urls']['print']['href'])) { ?>
+                               <li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
+               }
+
+               if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
+                               <li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
+               } elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
+                               <li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
+               }
+
+               wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
+?>
+                       </ul>
+               </div>
+       </div>
+
+       <div id="p-advertisement" class="portlet">
+               <h5>books for children</h5>
+               <div class="pBody">
+                       <!-- Phoophie ad! -->
+                       <!--
+                       <div><a target="_BLANK" href="http://www.phoophie.com"><img src="/openbox/webgfx/bannerbyeve3.gif" /></a></div>
+                       -->
+
+                       <!-- Books for Africa widget -->
+                       <div><small>Help us support the 
+                         Fray Luis Primary School through
+                         <a target="_blank" href="http://www.booksforafrica.org/donate/projects.php?p=11">Books for Africa</a>
+                       </small></div>
+<a href="http://www.firstgiving.com/chatoyance" alt="Firstgiving- SPONSOR ME" target="_blank"><img src="http://www.firstgiving.com/design/1/images/badges/firstgiving_badge5.gif" border="0" width="150" height="85"></a>
+                       <!-- no flash please...
+                       <object type="application/x-shockwave-flash"
+                               allowScriptAccess="always" 
+                               allowNetworking="all"
+                               height="230" width="150" align="middle"
+                               data="http://www.firstgiving.com/widgets/fgwidget.swf"
+                               flashvars="EggId=380566">
+                         <param name="allowScriptAccess" value="always" />
+                         <param name="allowNetworking" value="all" />
+                         <param name="movie"
+                                value="http://www.firstgiving.com/widgets/fgwidget.swf" />
+                         <param name="quality" value="high" />
+                         <param name="wmode" value="transparent" />
+                         <param name="flashvars" value="EggId=380566" />
+                         <param name="bgcolor" value="#ffffff" />
+                       </object-->
+               </div>
+       </div>
+
+<?php
+               if( $this->data['language_urls'] ) { ?>
+       <div id="p-lang" class="portlet">
+               <h5><?php $this->msg('otherlanguages') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php          foreach($this->data['language_urls'] as $langlink) { ?>
+                               <li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php
+                               ?><a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'] ?></a></li>
+<?php          } ?>
+                       </ul>
+               </div>
+       </div>
+<?php  } ?>
+               </div><!-- end of the left (by default at least) column -->
+                       <div class="visualClear"></div>
+                       <div id="footer">
+<?php
+               if($this->data['poweredbyico']) { ?>
+                               <div id="f-poweredbyico"><?php $this->html('poweredbyico') ?></div>
+<?php  }
+               if($this->data['copyrightico']) { ?>
+                               <div id="f-copyrightico"><?php $this->html('copyrightico') ?></div>
+<?php  }
+
+               // Generate additional footer links
+?>
+                       <ul id="f-list">
+<?php
+               $footerlinks = array(
+                       'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
+                       'privacy', 'about', 'disclaimer', 'tagline',
+               );
+               foreach( $footerlinks as $aLink ) {
+                       if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
+?>                             <li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
+<?php          }
+               }
+?>
+                       </ul>
+               </div>
+               
+       <?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
+</div>
+<?php $this->html('reporttime') ?>
+<?php if ( $this->data['debug'] ): ?>
+<!-- Debug output:
+<?php $this->text( 'debug' ); ?>
+
+-->
+<?php endif; ?>
+</body></html>
+<?php
+       wfRestoreWarnings();
+       } // end of execute() method
+} // end of class
+?>
diff --git a/mediawiki/skins/Simple.deps.php b/mediawiki/skins/Simple.deps.php
new file mode 120000 (symlink)
index 0000000..43e7574
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Simple.deps.php
\ No newline at end of file
diff --git a/mediawiki/skins/Simple.php b/mediawiki/skins/Simple.php
new file mode 120000 (symlink)
index 0000000..7aac591
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Simple.php
\ No newline at end of file
diff --git a/mediawiki/skins/Skin.sample b/mediawiki/skins/Skin.sample
new file mode 120000 (symlink)
index 0000000..6443809
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Skin.sample
\ No newline at end of file
diff --git a/mediawiki/skins/SkinPHPTal.sample b/mediawiki/skins/SkinPHPTal.sample
new file mode 120000 (symlink)
index 0000000..ed8bbd4
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/SkinPHPTal.sample
\ No newline at end of file
diff --git a/mediawiki/skins/Standard.php b/mediawiki/skins/Standard.php
new file mode 120000 (symlink)
index 0000000..d58d03c
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Standard.php
\ No newline at end of file
diff --git a/mediawiki/skins/chick b/mediawiki/skins/chick
new file mode 120000 (symlink)
index 0000000..930be72
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/chick
\ No newline at end of file
diff --git a/mediawiki/skins/common b/mediawiki/skins/common
new file mode 120000 (symlink)
index 0000000..5597d1d
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/common
\ No newline at end of file
diff --git a/mediawiki/skins/disabled b/mediawiki/skins/disabled
new file mode 120000 (symlink)
index 0000000..1b9789a
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/disabled
\ No newline at end of file
diff --git a/mediawiki/skins/htmldump b/mediawiki/skins/htmldump
new file mode 120000 (symlink)
index 0000000..0a22cb9
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/htmldump
\ No newline at end of file
diff --git a/mediawiki/skins/monobook b/mediawiki/skins/monobook
new file mode 120000 (symlink)
index 0000000..7cbca7e
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/monobook
\ No newline at end of file
diff --git a/mediawiki/skins/myskin b/mediawiki/skins/myskin
new file mode 120000 (symlink)
index 0000000..03bc601
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/myskin
\ No newline at end of file
diff --git a/mediawiki/skins/openbox/bg-bottom.gif b/mediawiki/skins/openbox/bg-bottom.gif
new file mode 100644 (file)
index 0000000..81b27e2
Binary files /dev/null and b/mediawiki/skins/openbox/bg-bottom.gif differ
diff --git a/mediawiki/skins/openbox/bg.gif b/mediawiki/skins/openbox/bg.gif
new file mode 100644 (file)
index 0000000..4015a0c
Binary files /dev/null and b/mediawiki/skins/openbox/bg.gif differ
diff --git a/mediawiki/skins/openbox/bullet.gif b/mediawiki/skins/openbox/bullet.gif
new file mode 100644 (file)
index 0000000..6197b63
Binary files /dev/null and b/mediawiki/skins/openbox/bullet.gif differ
diff --git a/mediawiki/skins/openbox/default-icon-theme.css b/mediawiki/skins/openbox/default-icon-theme.css
new file mode 100644 (file)
index 0000000..f681802
--- /dev/null
@@ -0,0 +1,17 @@
+table.default-icon-theme td,th {
+       border-bottom: 1px solid #EEE;
+               margin: 0;
+                       padding: 4px;
+                               font-family: sans-serif;
+                                       vertical-align: middle;
+                                               color: #555;
+                                               }
+
+                                               table.default-icon-theme td.dit-icon {
+                                                       color: #999;
+                                                               text-align: center;
+                                                               }
+
+                                                               table.default-icon-theme td.dit-description {
+                                                                       font-size: x-small;
+                                                                       }
diff --git a/mediawiki/skins/openbox/discussionitem_icon.gif b/mediawiki/skins/openbox/discussionitem_icon.gif
new file mode 100644 (file)
index 0000000..ce57163
Binary files /dev/null and b/mediawiki/skins/openbox/discussionitem_icon.gif differ
diff --git a/mediawiki/skins/openbox/external.png b/mediawiki/skins/openbox/external.png
new file mode 100644 (file)
index 0000000..dac9539
Binary files /dev/null and b/mediawiki/skins/openbox/external.png differ
diff --git a/mediawiki/skins/openbox/file_icon.gif b/mediawiki/skins/openbox/file_icon.gif
new file mode 100644 (file)
index 0000000..9964800
Binary files /dev/null and b/mediawiki/skins/openbox/file_icon.gif differ
diff --git a/mediawiki/skins/openbox/headbg.gif b/mediawiki/skins/openbox/headbg.gif
new file mode 100644 (file)
index 0000000..9408bff
Binary files /dev/null and b/mediawiki/skins/openbox/headbg.gif differ
diff --git a/mediawiki/skins/openbox/headbg.jpg b/mediawiki/skins/openbox/headbg.jpg
new file mode 100644 (file)
index 0000000..9939153
Binary files /dev/null and b/mediawiki/skins/openbox/headbg.jpg differ
diff --git a/mediawiki/skins/openbox/icons.css b/mediawiki/skins/openbox/icons.css
new file mode 100644 (file)
index 0000000..916cafd
--- /dev/null
@@ -0,0 +1,14 @@
+/* Icon Renderings */
+
+div.icons {
+       display: block;
+       float: left;
+       width: 300px;
+       position: relative;
+}
+
+div.icons h4 {
+       position: absolute;
+       bottom: 0px;
+       left: 0px;
+}
diff --git a/mediawiki/skins/openbox/link_icon.gif b/mediawiki/skins/openbox/link_icon.gif
new file mode 100644 (file)
index 0000000..70b20f7
Binary files /dev/null and b/mediawiki/skins/openbox/link_icon.gif differ
diff --git a/mediawiki/skins/openbox/lock_icon.gif b/mediawiki/skins/openbox/lock_icon.gif
new file mode 100644 (file)
index 0000000..9597cf4
Binary files /dev/null and b/mediawiki/skins/openbox/lock_icon.gif differ
diff --git a/mediawiki/skins/openbox/magnify-clip.png b/mediawiki/skins/openbox/magnify-clip.png
new file mode 100644 (file)
index 0000000..c6c7c68
Binary files /dev/null and b/mediawiki/skins/openbox/magnify-clip.png differ
diff --git a/mediawiki/skins/openbox/mail_icon.gif b/mediawiki/skins/openbox/mail_icon.gif
new file mode 100644 (file)
index 0000000..d83875d
Binary files /dev/null and b/mediawiki/skins/openbox/mail_icon.gif differ
diff --git a/mediawiki/skins/openbox/main-withphoophie.css b/mediawiki/skins/openbox/main-withphoophie.css
new file mode 100644 (file)
index 0000000..1d28899
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -12.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 12.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 11.6em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 11.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/mediawiki/skins/openbox/main.css b/mediawiki/skins/openbox/main.css
new file mode 100644 (file)
index 0000000..2780593
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -13.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 13.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 12.8em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 12.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/mediawiki/skins/openbox/news_icon.png b/mediawiki/skins/openbox/news_icon.png
new file mode 100644 (file)
index 0000000..529b2af
Binary files /dev/null and b/mediawiki/skins/openbox/news_icon.png differ
diff --git a/mediawiki/skins/openbox/null b/mediawiki/skins/openbox/null
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/mediawiki/skins/openbox/old.css b/mediawiki/skins/openbox/old.css
new file mode 100644 (file)
index 0000000..030feee
--- /dev/null
@@ -0,0 +1,989 @@
+/*
+** Mediawiki 'Tango' style sheet for CSS2-capable browsers.
+** License: GPL
+**
+** Based on 'monobook', Copyright Gabriel Wicke - http://wikidev.net/
+*/
+
+#globalWrapper {
+       padding: 0 20px 2em 2em;
+}
+#column-content {
+       margin: 0;
+       padding:0;
+}
+#content {
+       background: transparent url("tango-steps.png") no-repeat top right;
+       margin: 20px 0 0 0;
+       padding: 120px 170px 0 3em;
+       z-index: 2;
+}
+#column-one { 
+       padding-top: 2em; 
+       margin-top: 2em; 
+       border-top: 1px solid #aaa;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font-size: 85%;
+       line-height: 1.2em;
+       font-family: tahoma, bitstream vera sans, sans-serif;
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       /*
+       background: #f9f9f9 url("headbg.jpg") 0px 0px no-repeat;
+       background: #6b6c69 url("bg-bottom.gif") 0px 134px;
+       background-repeat: repeat-x;
+       */
+       background: #000 url("bg.gif") 0px 0px;
+       background-repeat: repeat-x;
+       color: #eee;
+       margin: 0 auto;
+}
+html>body {
+}
+
+.visualClear { clear: both; }
+
+/* general styles */
+
+table {
+}
+a {
+       text-decoration: none;
+       color: #f57900;
+       background: none;
+}
+a:visited { color: #ce5c00; }
+a:active { color: Orange; }
+a:hover { 
+       color: #fcaf3e;
+       text-decoration: underline; 
+}
+a.stub { color: #772233; }
+
+a.new,
+#p-personal a.new { color:#ba0000; }
+
+a.new:visited,
+#p-personal a.new:visited { color:#a55858; }
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+p {
+       margin: 0.8em 0em 1.0em;
+}
+
+p img { margin: 0; }
+
+hr {
+       height: 1px;
+       color: #444;
+       background-color: #444;
+       border: 0;
+       margin: 0.5em 0 0.5em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: normal;
+       font-family: times new roman, times, serif;
+       color: #888;
+       background: none;
+       padding: 0;
+       margin: 2em 20px 0.25em;
+}
+h1 { 
+       color: #aaa;
+       padding: 0 0 0.5em;
+       margin: 1.25em 0 0;
+       /*
+       margin: 0.75em 0 0;
+       position: relative; 
+       top: 0.75em;
+       */
+}
+/*
+h1 { font-size: 150%; }
+h2 { font-size: 125%; }
+*/
+h3, h4, h5, h6 { 
+}
+/*
+h3 { font-size: 132%; }
+h4 { font-size: 1.5%; }
+h5 { font-size: 100%; }
+h6 { font-size: 80%;  }
+*/
+
+ul { 
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: 0.3em 0 0 1.5em;
+       padding:0;
+       list-style-image: url("bullet.gif");
+}
+ol {
+       line-height: 1.5em;
+       margin: 0.3em 0 0 3.2em;
+       padding:0;
+       list-style-image: none;
+}
+li { margin-bottom: 0.1em; }
+dt { 
+       font-weight: bold; 
+       margin-bottom: 0.1em;
+}
+dl{
+       margin-top: 0.2em;
+       margin-bottom: 0.5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: 0.1em;
+}
+
+fieldset {
+       border: 1px solid #ccc;
+       border-width: 1px 0 0;
+       margin: 1em 0em 1em 0em;
+       padding: 0em 1em 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       font-weight: bold;
+       padding: 0.5em;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       padding: 0.1em;
+       overflow: auto;
+}
+/* hide this from ie/mac and konq2.2 */
+@media All {
+       head:first-child+body input {
+               visibility: visible;
+               border: 1px solid #2f6fab;  
+               color: Black;
+               vertical-align: middle;
+               padding: 0.2em;
+       }
+}
+input.historysubmit {
+       padding: 0 0.3em 0.3em 0.3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.5em;
+}
+input[type="radio"],
+input[type="checkbox"] { border:none; }
+select {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted Black;
+       color: Black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code { 
+       background-color: #333; 
+}
+pre {
+       font-family: bitstream vera sans mono, monospace;
+       font-size: 80%;
+       overflow: auto;
+       padding: 1em;
+       border: 1px dotted #888;
+       color: #fff;
+       background-color: #222;
+       line-height: 1.1em;
+}
+
+
+/*
+** the main content area
+*/
+
+#siteSub { display: none; }
+#contentSub {
+       font-size: 84%;
+       line-height: 1.2em;
+       color: #7d7d7d;
+}
+span.subpages { display: block; }
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; }
+#bodyContent h3,
+#bodyContent h4,
+#bodyContent h5 {
+       margin-bottom: 0.3em;
+}
+.firstHeading { margin-bottom:0.1em; }
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: Black;
+       font-weight: bold;
+       margin: 2em 0em 1em 0em;
+       padding: 0.5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 0.9em 0 0.9em;
+}
+#siteNotice p { margin: none; padding: none; }
+.error {
+       color: red;
+       font-size: larger;
+}
+#catlinks {
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0em;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * { font-size: 94%; }
+table.small { font-size: 100% }
+
+/*
+** content styles
+*/
+
+#toc { 
+       float: right;
+       margin: 0 1em 0.5em;
+       /*border:1px solid #2f6fab;*/
+       padding: 0.75em;
+       font-size: 95%;
+       border:1px solid #333;
+       -moz-border-radius: 2.5px;
+       background-color: #111;
+}
+#toc .tocindent { margin-left: 2em; }
+#toc .tocline { margin-bottom: 0px; }
+#toc p { margin: 0 }
+#toc .toctoggle { font-size: 94%; }
+#toc .editsection { 
+       margin-top: 0.7em; 
+       font-size: 94%;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right; 
+       margin: 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.floatright p { font-style: italic; } 
+div.floatleft, table.floatleft {
+       float: left; 
+       margin: 0.3em 0.5em 0.5em 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+div.floatleft p { font-style: italic; } 
+/* thumbnails */
+div.thumb {
+       margin-bottom: 0.5em;
+       border-style: solid; border-color: transparent;
+       width: auto;
+}
+div.thumb div {
+       border:1px solid #444;
+       padding: 3px !important;
+       background-color: #222;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+div.thumb div a img {
+       background-color: #eee;
+       border:1px solid #fff;
+}
+div.thumb div div.thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4;
+       padding: 0.3em 0 0.1em 0;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+       float: left;
+       margin-right:0.5em;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+.urlexpansion,
+.hiddenStructure {
+       display: none;
+}
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float:right; 
+       position:relative;
+       margin-left:1em; 
+       margin-bottom:1em;
+       text-align:center;
+}
+.toccolours { 
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       font-size: 95%;
+}
+div.townBox {
+       position:relative;
+       float:right;
+       background:transparent;
+       margin-left:1em;
+       border: 1px solid Grey;
+       padding:0.3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 0.3em 0; 
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+       margin: 0.1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment { color: gray; }
+#pagehistory span.user { 
+       margin-left: 1.4em;
+       margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li { border: 1px solid transparent; }
+#pagehistory li.selected { 
+       background-color:#f9f9f9;
+       border:1px dashed #aaaaaa;
+}
+/*
+** Diff rendering
+*/
+table.diff { background:transparent; }
+td.diff-otitle { background:#ffffff; }
+td.diff-ntitle { background:#ffffff; }
+td.diff-addedline { 
+       background:#ccffcc;
+       font-size: smaller;
+}
+td.diff-deletedline { 
+       background:#ffffaa;
+       font-size: smaller;
+}
+td.diff-context {
+       background:#eeeeee;
+       font-size: smaller;
+}
+span.diffchange { color: red; }
+
+/* 
+** keep the transparentspace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2 
+*/
+#bodyContent a[href ^="http://"],
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url("lock_icon.gif") center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url("mail_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url("news_icon.png") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url("file_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url("discussionitem_icon.gif")  center right no-repeat;
+       padding-right: 18px;
+}
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #3366bb;
+}
+#bodyContent a.external { color: #c95616; }
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 0.5em 0em;
+       padding: 0;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h5 { 
+       background: transparent;
+       padding: 0em 1em 0em 0.5em;
+       text-transform: lowercase;
+       display: inline;
+       font-size: 91%;
+       height: 1em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h6 { 
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0em 1em 0em 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background: transparent;
+       border-collapse: collapse;
+       padding: 0 0.8em 0.3em 0.5em;
+}
+.portlet h1, 
+.portlet h2, 
+.portlet h3, 
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url("bullet.gif");
+       font-size:95%;
+       list-style: none;
+       text-align: center;
+}
+.portlet li {
+       display: inline;
+       padding:0;
+       margin: 0 0 0 0;
+       margin-bottom: 0;
+}
+
+/* 
+** Logo properties 
+*/
+
+#p-logo {
+       /*    background-color: #333; */
+       z-index: 3;
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       width: 100%;
+       overflow: visible;
+       height: 140px;
+}
+#p-logo h5 { display: none; }
+#p-logo a {
+       position: relative;
+       display: block;
+       height: 140px;
+       width: 280px;
+       background-repeat: no-repeat;
+       background-position: 30px;
+}
+#p-logo a:hover {
+       text-decoration: none;
+}
+
+/*
+** the navbar at the top
+*/
+#p-navbar {
+       position: absolute;
+       top: 140px;
+       left: 0;
+       right: 0;
+       background-color: #d3dbe7;
+       border-bottom: 1px solid #a8b9cf;
+       padding: 4px;
+       opacity: 0.75;
+}
+
+.navlinks li {
+       vertical-align: middle;
+}
+.navlinks li a {
+       padding: 2pt 20pt;
+       margin: 1px;
+       color: #29416b;
+}
+.navlinks li a:hover {
+       background-color: #e2e7ef;
+       text-decoration: none;
+       -moz-border-radius: 2.5px;
+       border-radius: 2.5px;
+       color: #000;
+}
+
+/*
+** the navigation portlet
+*/
+
+#p-nav {
+       position:absolute;
+       top: 120px;
+       left: 30px;
+       z-index: 100;
+}
+#p-nav a {
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       font-style: italic;
+       text-transform: lowercase;
+       text-decoration: none;
+       display: block;
+       float: left;
+       padding: 3px 12px;
+       margin: 0;
+}
+
+/*
+** Search portlet
+*/
+#p-search {
+       position:relative;
+       z-index:3;
+}    
+#p-search h5 {
+       display: none;
+}
+#p-search .pBody {
+       text-align: center;
+}
+input.searchButton {
+       margin-top:1px;
+       padding: 0 0.4em !important;
+       font-size: 95%;
+       cursor: pointer;
+       background-color: #dfe7f0;
+}
+#searchInput {
+       width:10.9em;
+       margin: 0 0 0 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: 0.5em 0.4em 0.4em 0.4em;
+}
+
+/* 
+** the personal toolbar
+*/
+
+#p-personal {
+       width: 100%;
+       text-align: center;
+}
+
+#p-personal h5 {
+       display:none;
+}
+#p-personal .portlet,
+#p-personal .pBody {
+       border: none;
+}
+/* this is the ul contained in the portlet */
+#p-personal ul {
+}
+#p-personal li {
+       display: inline;
+       margin-left: 1em;
+       line-height: 1.2em;
+}
+#p-personal li a {
+       text-decoration: none;
+       color: #005896;
+       padding-bottom: 0.2em;
+       background: none;
+}
+#p-personal li a:hover {
+       background-color: transparent;
+       padding-bottom: 0.2em;
+       text-decoration: none;
+}
+
+/* the icon in front of the user name, single quotes
+in bg url to hide it from iemac */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background:  url('user.gif') top left no-repeat;
+       padding-left: 20px;
+       text-transform: none;
+}
+
+/*
+** the page-related actions- page/talk, edit etc 
+*/
+#p-cactions {
+       text-align: center;
+}
+#p-cactions h5 {
+       display: none;
+}
+#p-cactions ul {
+       display: inline;
+       overflow: visible;
+}
+#p-cactions ul li {
+       display: inline;
+}
+#p-cactions ul li a {
+       padding: 2px 5px;
+}
+/*
+#p-cactions {
+       top: 1.3em;
+       left: 11.5em;
+       margin: 0;
+       transparent-space:nowrap;
+       width: 76%;
+       line-height: 1.1em;
+       overflow: visible;
+       background: none;
+       border-collapse: collapse;
+       padding-left: 1em;
+       list-style: none;
+       font-size: 95%;
+}
+#p-cactions .hiddenStructure { display: none; }
+#p-cactions ul {
+       list-style: none;
+}
+#p-cactions li {
+       display: inline;
+       border: 1px solid #aaaaaa;
+       border-bottom: none;
+       padding: 0 0 0.1em 0;
+       margin: 0 0.3em 0 0;
+       overflow: visible;
+       background: transparent;
+}
+#p-cactions li.selected {
+       border-color: #fabd23;
+       padding: 0 0 0.2em 0;
+}
+*/
+#p-cactions li a {
+       /*
+       background-color: transparent;
+       */
+       color: #002bb8;
+       /*
+       border: none;
+       padding: 0 0.8em 0.3em 0.8em;
+       */
+       text-decoration: none;
+       text-transform: lowercase;
+       position: relative;
+       z-index: 0;
+       margin: 0;
+}
+/*
+#p-cactions .selected a { z-index: 3; }
+#p-cactions .new a { color:#ba0000; }
+#p-cactions li a:hover {
+       z-index: 3;
+       text-decoration: none;
+}
+#p-cactions h5 { display: none; }
+#p-cactions li.istalk { margin-right: 0; }
+#p-cactions li.istalk a { padding-right: 0.5em; }
+#p-cactions #ca-addsection a { 
+       padding-left: 0.4em;
+       padding-right: 0.4em;
+}
+*/
+/* offsets to distinguish the tab groups */
+/*
+li#ca-talk { margin-right: 1.5em; }
+li#ca-watch, li#ca-watch { margin-left: 1.5em; }
+*/
+li#ca-talk { margin-bottom: 1.5em; }
+li#ca-watch, li#ca-watch { margin-top: 1.5em; }
+#p-cactions .new a { color:#ba0000; }
+
+
+/*
+** the remaining portlets
+*/
+#p-tbx,
+#p-lang {
+       position:relative;
+       z-index:3;
+}
+
+/*
+** footer
+*/
+#footer {
+       text-align: center;
+       font-size: xx-small;
+       margin: 2em 0;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+/* hide from incapable browsers */
+/*
+head:first-child+body #footer li { transparent-space: nowrap; }
+*/
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc { 
+       float: left;
+       margin: 1em 1em 1em 1em;
+       width: 13em;
+       border: 1px solid #aaaaaa;
+       background-color: #fff;
+}
+#preftoc li { 
+       border: 1px solid transparent; 
+       list-style: none;
+}
+#preftoc li.selected { 
+       background-color: Highlight;
+       border:1px solid #aaaaaa;
+}
+#preftoc li.selected a {
+       color: HighlightText;
+}
+#preftoc a,
+#preftoc a:active {
+       text-decoration: none;
+       display: block;
+       color: #0014a6;
+       padding: 2px 4px;
+}
+#prefcontrol { 
+       clear: both;
+       float: left;
+       margin-top: 1em;
+}
+div.prefsectiontip { 
+       font-size: 95%;
+       margin-top: 1em;
+}
+fieldset.operaprefsection { margin-left: 15em }
+
+.prefsection label {
+}
+.prefsection div {
+       margin: 4pt 0;
+}
+
+/* 
+** IE/Mac fixes, hope to find a validating way to move this
+** to a separate stylesheet. This would work but doesn't validate: 
+** @import("IEMacFixes.css");
+*/
+* > html #p-cactions li.selected a { border-color: #fabd23; }
+/* footer icons need a fixed width */
+* > html #f-poweredbyico,
+* > html #f-copyrightico { width: 88px; }
+* > html #bodyContent,
+* > html #bodyContent pre {
+       overflow-x: auto;
+       width: 100%;
+       padding-bottom: 25px;
+}
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+/*
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+*/
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       /*
+       position: absolute;
+       left: 0;
+       top: 0;
+       */
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+
+.printfooter {
+       display: none;
+}
+
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+.portlet h5 {
+       display: none;
+}
+
+.editsection {
+       font-size: x-small;
+       color: #8ba2bf;
+}
+.editsection a:link,
+.editsection a:visited {
+       text-decoration: none;
+}
diff --git a/mediawiki/skins/openbox/openbox.gif b/mediawiki/skins/openbox/openbox.gif
new file mode 100644 (file)
index 0000000..508aab4
Binary files /dev/null and b/mediawiki/skins/openbox/openbox.gif differ
diff --git a/mediawiki/skins/openbox/openbox.png b/mediawiki/skins/openbox/openbox.png
new file mode 100644 (file)
index 0000000..839a14d
Binary files /dev/null and b/mediawiki/skins/openbox/openbox.png differ
diff --git a/mediawiki/skins/openbox/required.gif b/mediawiki/skins/openbox/required.gif
new file mode 100644 (file)
index 0000000..1d70814
Binary files /dev/null and b/mediawiki/skins/openbox/required.gif differ
diff --git a/mediawiki/skins/openbox/rtl.css b/mediawiki/skins/openbox/rtl.css
new file mode 100644 (file)
index 0000000..77b44ac
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+Right-to-left fixes for MonoBook.
+Places sidebar on right, tweaks various alignment issues.
+
+Works mostly ok nicely on Safari 1.2.1; fine in Mozilla.
+
+Safari bugs (1.2.1):
+* Tabs are still appearing in left-to-right order. (Try after localizing)
+
+Opera bugs (7.23 linux):
+* Some bits of ltr text (sidebar box titles) have forward and backward versions overlapping each other
+
+IE/mac bugs:
+* The thing barfs on Hebrew and Arabic anyway, so no point testing.
+
+Missing features due to lack of support:
+* external link icons, icon next to user name
+
+To test:
+* Opera6
+* IE 5.0
+* etc
+
+*/
+body,
+body * {
+    direction: rtl;
+/*    unicode-bidi: bidi-override;*/
+    unicode-bidi: embed;
+}
+#column-content {
+       margin: 0 -12.2em 0 0;
+        float: left;
+}
+#column-content #content{
+       margin-left: 0;
+       margin-right: 12.2em;
+    border-right: 1px solid #aaaaaa;
+    border-left: none;
+}
+html>body .portlet {
+    float: right;
+    clear: right;
+}
+/* recover IEMac (might be fine with the float, but usually it's close to IE */
+*>body .portlet {
+    float: none;
+    clear: none;
+}
+.pBody {
+    padding-right: 0.8em;
+    padding-left: 0.5em;
+}
+
+/* Fix alignment */
+.documentByLine,
+.portletDetails,
+.portletMore,
+#p-personal {
+       text-align: left;
+}
+
+div div.thumbcaption {
+       text-align: right;
+}
+
+div.magnify,
+#div.townBox,
+#p-logo {
+       left: auto;
+       right: 0;
+}
+#p-personal {
+       left: auto;
+       right: 0;
+}
+
+#p-cactions {
+       left: auto;
+       right: 11.5em;
+        padding-left: 0;
+        padding-right: 1em;
+}
+#p-cactions li {
+    margin-left: 0.3em;
+    margin-right: 0;
+    float: right;
+}
+* html #p-cactions li a {
+    display: block;
+    padding-bottom: 0;
+}
+* html #p-cactions li a:hover {
+    padding-bottom: 0.2em;
+}
+/* offsets to distinguish the tab groups */
+li#ca-talk {
+    margin-right: auto;
+    margin-left: 1.6em;
+}
+li#ca-watch,li#ca-unwatch {
+    margin-right: 1.6em !important;
+}
+
+/* Fix margins */
+/* top right bottom left */
+
+ul {
+       margin-left: 0;
+       margin-right: 1.5em;
+}
+ol {
+       margin-left: 0;
+       margin-right: 2.4em;
+}
+dd {
+       margin-left: 0;
+       margin-right: 1.6em;
+}
+#contentSub {
+       margin-right: 1em;
+       margin-left: 0;
+}
+.tocindent {
+       margin-left: 0;
+       margin-right: 2em;
+}
+div.tright {
+    clear: none;
+}
+div.tleft {
+    clear: left;
+}
+div.floatright, table.floatright {
+    clear: none;
+}
+div.floatleft, table.floatleft {
+    clear: left;
+}
+div.townBox {
+       margin-left: 0;
+       margin-right: 1em;
+}
+div.townBox dl dd {
+       margin-left: 0;
+       margin-right: 1.1em;
+}
+#p-personal li {
+       margin-left: 0;
+       margin-right: 1em;
+}
+
+li#ca-talk,
+li#ca-watch {
+       margin-right: auto;
+       margin-left: 1.6em;
+}
+
+#p-personal li {
+    float: left;
+}
+/* Fix link icons */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background: none;
+       padding-left: 0;
+}
+.external {
+    padding: 0 !important;
+    background: none !important;
+}
+#footer {
+    clear: both;
+}
+* html #footer {
+    margin-left: 0;
+    margin-right: 13.6em;
+    border-left: 0;
+    border-right: 1px solid #fabd23;
+} 
+* html #column-content { 
+    float: none;
+    margin-left: 0;
+    margin-right: 0;
+}
+* html #column-content #content {
+    margin-left: 0;
+    margin-top: 3em;
+}
+* html #column-one { right: 0; }
+
+/* js pref toc */
+#preftoc { float: right; }
+/* workaround for moz bug, displayed bullets on left side */
+#preftoc li { list-style: none; }
+#prefcontrol { float: right; }
+fieldset.prefsection,
+fieldset.operaprefsection { 
+    margin-left: 0 !important;
+    margin-right: 15em;
+}
diff --git a/mediawiki/skins/openbox/user.gif b/mediawiki/skins/openbox/user.gif
new file mode 100644 (file)
index 0000000..958c6a7
Binary files /dev/null and b/mediawiki/skins/openbox/user.gif differ
diff --git a/mediawiki/skins/openboxwiki/bg-bottom.gif b/mediawiki/skins/openboxwiki/bg-bottom.gif
new file mode 100644 (file)
index 0000000..81b27e2
Binary files /dev/null and b/mediawiki/skins/openboxwiki/bg-bottom.gif differ
diff --git a/mediawiki/skins/openboxwiki/bg.gif b/mediawiki/skins/openboxwiki/bg.gif
new file mode 100644 (file)
index 0000000..4015a0c
Binary files /dev/null and b/mediawiki/skins/openboxwiki/bg.gif differ
diff --git a/mediawiki/skins/openboxwiki/bullet.gif b/mediawiki/skins/openboxwiki/bullet.gif
new file mode 100644 (file)
index 0000000..6197b63
Binary files /dev/null and b/mediawiki/skins/openboxwiki/bullet.gif differ
diff --git a/mediawiki/skins/openboxwiki/css.diff b/mediawiki/skins/openboxwiki/css.diff
new file mode 100644 (file)
index 0000000..797c811
--- /dev/null
@@ -0,0 +1,45 @@
+--- old/main.css       Wed Apr  6 17:20:10 2005
++++ main.css   Thu Apr  7 15:45:14 2005
+@@ -6,6 +6,7 @@
+ */
+ #globalWrapper {
++      background: transparent url("tango-steps-dark.gif") no-repeat 100% 42px;
+       padding: 0;
+ }
+ #column-content {
+@@ -37,8 +38,8 @@
+ */
+ body {
+-      background: transparent url("tango-steps-dark.gif") no-repeat 100% 42px;
+-      background-color: #333;
++      background: transparent url("bg.gif") repeat-x top;
++      background-color: #33436a;
+       color: #eee;
+       font-size: 92%;
+       line-height: 1.4em;
+@@ -86,12 +87,14 @@
+ }
+ dd img {
+-      border: 5px solid #ccc;
++      border: 5px solid #ede38e;
+       -moz-border-radius: 3px;
+       float: left;
+       margin-right: 12px;
+       margin-bottom: 6px;
+       margin-top: 6px; 
++      padding: 1px;
++      background-color: #96842e;
+ }
+ dt, dd { clear: both; }
+@@ -119,6 +122,7 @@
+       margin: 0;
+ }
+ h2 {
++      color: #8fb171;
+       padding-left: 43px;
+       background: transparent url(tango-steps-heading.gif) no-repeat left bottom;
+ }
diff --git a/mediawiki/skins/openboxwiki/default-icon-theme.css b/mediawiki/skins/openboxwiki/default-icon-theme.css
new file mode 100644 (file)
index 0000000..f681802
--- /dev/null
@@ -0,0 +1,17 @@
+table.default-icon-theme td,th {
+       border-bottom: 1px solid #EEE;
+               margin: 0;
+                       padding: 4px;
+                               font-family: sans-serif;
+                                       vertical-align: middle;
+                                               color: #555;
+                                               }
+
+                                               table.default-icon-theme td.dit-icon {
+                                                       color: #999;
+                                                               text-align: center;
+                                                               }
+
+                                                               table.default-icon-theme td.dit-description {
+                                                                       font-size: x-small;
+                                                                       }
diff --git a/mediawiki/skins/openboxwiki/discussionitem_icon.gif b/mediawiki/skins/openboxwiki/discussionitem_icon.gif
new file mode 100644 (file)
index 0000000..ce57163
Binary files /dev/null and b/mediawiki/skins/openboxwiki/discussionitem_icon.gif differ
diff --git a/mediawiki/skins/openboxwiki/external.png b/mediawiki/skins/openboxwiki/external.png
new file mode 100644 (file)
index 0000000..dac9539
Binary files /dev/null and b/mediawiki/skins/openboxwiki/external.png differ
diff --git a/mediawiki/skins/openboxwiki/file_icon.gif b/mediawiki/skins/openboxwiki/file_icon.gif
new file mode 100644 (file)
index 0000000..9964800
Binary files /dev/null and b/mediawiki/skins/openboxwiki/file_icon.gif differ
diff --git a/mediawiki/skins/openboxwiki/headbg.gif b/mediawiki/skins/openboxwiki/headbg.gif
new file mode 100644 (file)
index 0000000..9408bff
Binary files /dev/null and b/mediawiki/skins/openboxwiki/headbg.gif differ
diff --git a/mediawiki/skins/openboxwiki/headbg.jpg b/mediawiki/skins/openboxwiki/headbg.jpg
new file mode 100644 (file)
index 0000000..9939153
Binary files /dev/null and b/mediawiki/skins/openboxwiki/headbg.jpg differ
diff --git a/mediawiki/skins/openboxwiki/icons.css b/mediawiki/skins/openboxwiki/icons.css
new file mode 100644 (file)
index 0000000..916cafd
--- /dev/null
@@ -0,0 +1,14 @@
+/* Icon Renderings */
+
+div.icons {
+       display: block;
+       float: left;
+       width: 300px;
+       position: relative;
+}
+
+div.icons h4 {
+       position: absolute;
+       bottom: 0px;
+       left: 0px;
+}
diff --git a/mediawiki/skins/openboxwiki/link_icon.gif b/mediawiki/skins/openboxwiki/link_icon.gif
new file mode 100644 (file)
index 0000000..70b20f7
Binary files /dev/null and b/mediawiki/skins/openboxwiki/link_icon.gif differ
diff --git a/mediawiki/skins/openboxwiki/lock_icon.gif b/mediawiki/skins/openboxwiki/lock_icon.gif
new file mode 100644 (file)
index 0000000..9597cf4
Binary files /dev/null and b/mediawiki/skins/openboxwiki/lock_icon.gif differ
diff --git a/mediawiki/skins/openboxwiki/magnify-clip.png b/mediawiki/skins/openboxwiki/magnify-clip.png
new file mode 100644 (file)
index 0000000..c6c7c68
Binary files /dev/null and b/mediawiki/skins/openboxwiki/magnify-clip.png differ
diff --git a/mediawiki/skins/openboxwiki/mail_icon.gif b/mediawiki/skins/openboxwiki/mail_icon.gif
new file mode 100644 (file)
index 0000000..d83875d
Binary files /dev/null and b/mediawiki/skins/openboxwiki/mail_icon.gif differ
diff --git a/mediawiki/skins/openboxwiki/main-withphoophie.css b/mediawiki/skins/openboxwiki/main-withphoophie.css
new file mode 100644 (file)
index 0000000..1d28899
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -12.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 12.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 11.6em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 11.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/mediawiki/skins/openboxwiki/main.css b/mediawiki/skins/openboxwiki/main.css
new file mode 100644 (file)
index 0000000..2780593
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -13.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 13.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 12.8em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 12.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/mediawiki/skins/openboxwiki/news_icon.png b/mediawiki/skins/openboxwiki/news_icon.png
new file mode 100644 (file)
index 0000000..529b2af
Binary files /dev/null and b/mediawiki/skins/openboxwiki/news_icon.png differ
diff --git a/mediawiki/skins/openboxwiki/null b/mediawiki/skins/openboxwiki/null
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/mediawiki/skins/openboxwiki/old.css b/mediawiki/skins/openboxwiki/old.css
new file mode 100644 (file)
index 0000000..030feee
--- /dev/null
@@ -0,0 +1,989 @@
+/*
+** Mediawiki 'Tango' style sheet for CSS2-capable browsers.
+** License: GPL
+**
+** Based on 'monobook', Copyright Gabriel Wicke - http://wikidev.net/
+*/
+
+#globalWrapper {
+       padding: 0 20px 2em 2em;
+}
+#column-content {
+       margin: 0;
+       padding:0;
+}
+#content {
+       background: transparent url("tango-steps.png") no-repeat top right;
+       margin: 20px 0 0 0;
+       padding: 120px 170px 0 3em;
+       z-index: 2;
+}
+#column-one { 
+       padding-top: 2em; 
+       margin-top: 2em; 
+       border-top: 1px solid #aaa;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font-size: 85%;
+       line-height: 1.2em;
+       font-family: tahoma, bitstream vera sans, sans-serif;
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       /*
+       background: #f9f9f9 url("headbg.jpg") 0px 0px no-repeat;
+       background: #6b6c69 url("bg-bottom.gif") 0px 134px;
+       background-repeat: repeat-x;
+       */
+       background: #000 url("bg.gif") 0px 0px;
+       background-repeat: repeat-x;
+       color: #eee;
+       margin: 0 auto;
+}
+html>body {
+}
+
+.visualClear { clear: both; }
+
+/* general styles */
+
+table {
+}
+a {
+       text-decoration: none;
+       color: #f57900;
+       background: none;
+}
+a:visited { color: #ce5c00; }
+a:active { color: Orange; }
+a:hover { 
+       color: #fcaf3e;
+       text-decoration: underline; 
+}
+a.stub { color: #772233; }
+
+a.new,
+#p-personal a.new { color:#ba0000; }
+
+a.new:visited,
+#p-personal a.new:visited { color:#a55858; }
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+p {
+       margin: 0.8em 0em 1.0em;
+}
+
+p img { margin: 0; }
+
+hr {
+       height: 1px;
+       color: #444;
+       background-color: #444;
+       border: 0;
+       margin: 0.5em 0 0.5em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: normal;
+       font-family: times new roman, times, serif;
+       color: #888;
+       background: none;
+       padding: 0;
+       margin: 2em 20px 0.25em;
+}
+h1 { 
+       color: #aaa;
+       padding: 0 0 0.5em;
+       margin: 1.25em 0 0;
+       /*
+       margin: 0.75em 0 0;
+       position: relative; 
+       top: 0.75em;
+       */
+}
+/*
+h1 { font-size: 150%; }
+h2 { font-size: 125%; }
+*/
+h3, h4, h5, h6 { 
+}
+/*
+h3 { font-size: 132%; }
+h4 { font-size: 1.5%; }
+h5 { font-size: 100%; }
+h6 { font-size: 80%;  }
+*/
+
+ul { 
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: 0.3em 0 0 1.5em;
+       padding:0;
+       list-style-image: url("bullet.gif");
+}
+ol {
+       line-height: 1.5em;
+       margin: 0.3em 0 0 3.2em;
+       padding:0;
+       list-style-image: none;
+}
+li { margin-bottom: 0.1em; }
+dt { 
+       font-weight: bold; 
+       margin-bottom: 0.1em;
+}
+dl{
+       margin-top: 0.2em;
+       margin-bottom: 0.5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: 0.1em;
+}
+
+fieldset {
+       border: 1px solid #ccc;
+       border-width: 1px 0 0;
+       margin: 1em 0em 1em 0em;
+       padding: 0em 1em 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       font-weight: bold;
+       padding: 0.5em;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       padding: 0.1em;
+       overflow: auto;
+}
+/* hide this from ie/mac and konq2.2 */
+@media All {
+       head:first-child+body input {
+               visibility: visible;
+               border: 1px solid #2f6fab;  
+               color: Black;
+               vertical-align: middle;
+               padding: 0.2em;
+       }
+}
+input.historysubmit {
+       padding: 0 0.3em 0.3em 0.3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.5em;
+}
+input[type="radio"],
+input[type="checkbox"] { border:none; }
+select {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted Black;
+       color: Black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code { 
+       background-color: #333; 
+}
+pre {
+       font-family: bitstream vera sans mono, monospace;
+       font-size: 80%;
+       overflow: auto;
+       padding: 1em;
+       border: 1px dotted #888;
+       color: #fff;
+       background-color: #222;
+       line-height: 1.1em;
+}
+
+
+/*
+** the main content area
+*/
+
+#siteSub { display: none; }
+#contentSub {
+       font-size: 84%;
+       line-height: 1.2em;
+       color: #7d7d7d;
+}
+span.subpages { display: block; }
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; }
+#bodyContent h3,
+#bodyContent h4,
+#bodyContent h5 {
+       margin-bottom: 0.3em;
+}
+.firstHeading { margin-bottom:0.1em; }
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: Black;
+       font-weight: bold;
+       margin: 2em 0em 1em 0em;
+       padding: 0.5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 0.9em 0 0.9em;
+}
+#siteNotice p { margin: none; padding: none; }
+.error {
+       color: red;
+       font-size: larger;
+}
+#catlinks {
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0em;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * { font-size: 94%; }
+table.small { font-size: 100% }
+
+/*
+** content styles
+*/
+
+#toc { 
+       float: right;
+       margin: 0 1em 0.5em;
+       /*border:1px solid #2f6fab;*/
+       padding: 0.75em;
+       font-size: 95%;
+       border:1px solid #333;
+       -moz-border-radius: 2.5px;
+       background-color: #111;
+}
+#toc .tocindent { margin-left: 2em; }
+#toc .tocline { margin-bottom: 0px; }
+#toc p { margin: 0 }
+#toc .toctoggle { font-size: 94%; }
+#toc .editsection { 
+       margin-top: 0.7em; 
+       font-size: 94%;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right; 
+       margin: 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.floatright p { font-style: italic; } 
+div.floatleft, table.floatleft {
+       float: left; 
+       margin: 0.3em 0.5em 0.5em 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+div.floatleft p { font-style: italic; } 
+/* thumbnails */
+div.thumb {
+       margin-bottom: 0.5em;
+       border-style: solid; border-color: transparent;
+       width: auto;
+}
+div.thumb div {
+       border:1px solid #444;
+       padding: 3px !important;
+       background-color: #222;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+div.thumb div a img {
+       background-color: #eee;
+       border:1px solid #fff;
+}
+div.thumb div div.thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4;
+       padding: 0.3em 0 0.1em 0;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+       float: left;
+       margin-right:0.5em;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+.urlexpansion,
+.hiddenStructure {
+       display: none;
+}
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float:right; 
+       position:relative;
+       margin-left:1em; 
+       margin-bottom:1em;
+       text-align:center;
+}
+.toccolours { 
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       font-size: 95%;
+}
+div.townBox {
+       position:relative;
+       float:right;
+       background:transparent;
+       margin-left:1em;
+       border: 1px solid Grey;
+       padding:0.3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 0.3em 0; 
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+       margin: 0.1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment { color: gray; }
+#pagehistory span.user { 
+       margin-left: 1.4em;
+       margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li { border: 1px solid transparent; }
+#pagehistory li.selected { 
+       background-color:#f9f9f9;
+       border:1px dashed #aaaaaa;
+}
+/*
+** Diff rendering
+*/
+table.diff { background:transparent; }
+td.diff-otitle { background:#ffffff; }
+td.diff-ntitle { background:#ffffff; }
+td.diff-addedline { 
+       background:#ccffcc;
+       font-size: smaller;
+}
+td.diff-deletedline { 
+       background:#ffffaa;
+       font-size: smaller;
+}
+td.diff-context {
+       background:#eeeeee;
+       font-size: smaller;
+}
+span.diffchange { color: red; }
+
+/* 
+** keep the transparentspace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2 
+*/
+#bodyContent a[href ^="http://"],
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url("lock_icon.gif") center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url("mail_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url("news_icon.png") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url("file_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url("discussionitem_icon.gif")  center right no-repeat;
+       padding-right: 18px;
+}
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #3366bb;
+}
+#bodyContent a.external { color: #c95616; }
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 0.5em 0em;
+       padding: 0;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h5 { 
+       background: transparent;
+       padding: 0em 1em 0em 0.5em;
+       text-transform: lowercase;
+       display: inline;
+       font-size: 91%;
+       height: 1em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h6 { 
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0em 1em 0em 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background: transparent;
+       border-collapse: collapse;
+       padding: 0 0.8em 0.3em 0.5em;
+}
+.portlet h1, 
+.portlet h2, 
+.portlet h3, 
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url("bullet.gif");
+       font-size:95%;
+       list-style: none;
+       text-align: center;
+}
+.portlet li {
+       display: inline;
+       padding:0;
+       margin: 0 0 0 0;
+       margin-bottom: 0;
+}
+
+/* 
+** Logo properties 
+*/
+
+#p-logo {
+       /*    background-color: #333; */
+       z-index: 3;
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       width: 100%;
+       overflow: visible;
+       height: 140px;
+}
+#p-logo h5 { display: none; }
+#p-logo a {
+       position: relative;
+       display: block;
+       height: 140px;
+       width: 280px;
+       background-repeat: no-repeat;
+       background-position: 30px;
+}
+#p-logo a:hover {
+       text-decoration: none;
+}
+
+/*
+** the navbar at the top
+*/
+#p-navbar {
+       position: absolute;
+       top: 140px;
+       left: 0;
+       right: 0;
+       background-color: #d3dbe7;
+       border-bottom: 1px solid #a8b9cf;
+       padding: 4px;
+       opacity: 0.75;
+}
+
+.navlinks li {
+       vertical-align: middle;
+}
+.navlinks li a {
+       padding: 2pt 20pt;
+       margin: 1px;
+       color: #29416b;
+}
+.navlinks li a:hover {
+       background-color: #e2e7ef;
+       text-decoration: none;
+       -moz-border-radius: 2.5px;
+       border-radius: 2.5px;
+       color: #000;
+}
+
+/*
+** the navigation portlet
+*/
+
+#p-nav {
+       position:absolute;
+       top: 120px;
+       left: 30px;
+       z-index: 100;
+}
+#p-nav a {
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       font-style: italic;
+       text-transform: lowercase;
+       text-decoration: none;
+       display: block;
+       float: left;
+       padding: 3px 12px;
+       margin: 0;
+}
+
+/*
+** Search portlet
+*/
+#p-search {
+       position:relative;
+       z-index:3;
+}    
+#p-search h5 {
+       display: none;
+}
+#p-search .pBody {
+       text-align: center;
+}
+input.searchButton {
+       margin-top:1px;
+       padding: 0 0.4em !important;
+       font-size: 95%;
+       cursor: pointer;
+       background-color: #dfe7f0;
+}
+#searchInput {
+       width:10.9em;
+       margin: 0 0 0 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: 0.5em 0.4em 0.4em 0.4em;
+}
+
+/* 
+** the personal toolbar
+*/
+
+#p-personal {
+       width: 100%;
+       text-align: center;
+}
+
+#p-personal h5 {
+       display:none;
+}
+#p-personal .portlet,
+#p-personal .pBody {
+       border: none;
+}
+/* this is the ul contained in the portlet */
+#p-personal ul {
+}
+#p-personal li {
+       display: inline;
+       margin-left: 1em;
+       line-height: 1.2em;
+}
+#p-personal li a {
+       text-decoration: none;
+       color: #005896;
+       padding-bottom: 0.2em;
+       background: none;
+}
+#p-personal li a:hover {
+       background-color: transparent;
+       padding-bottom: 0.2em;
+       text-decoration: none;
+}
+
+/* the icon in front of the user name, single quotes
+in bg url to hide it from iemac */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background:  url('user.gif') top left no-repeat;
+       padding-left: 20px;
+       text-transform: none;
+}
+
+/*
+** the page-related actions- page/talk, edit etc 
+*/
+#p-cactions {
+       text-align: center;
+}
+#p-cactions h5 {
+       display: none;
+}
+#p-cactions ul {
+       display: inline;
+       overflow: visible;
+}
+#p-cactions ul li {
+       display: inline;
+}
+#p-cactions ul li a {
+       padding: 2px 5px;
+}
+/*
+#p-cactions {
+       top: 1.3em;
+       left: 11.5em;
+       margin: 0;
+       transparent-space:nowrap;
+       width: 76%;
+       line-height: 1.1em;
+       overflow: visible;
+       background: none;
+       border-collapse: collapse;
+       padding-left: 1em;
+       list-style: none;
+       font-size: 95%;
+}
+#p-cactions .hiddenStructure { display: none; }
+#p-cactions ul {
+       list-style: none;
+}
+#p-cactions li {
+       display: inline;
+       border: 1px solid #aaaaaa;
+       border-bottom: none;
+       padding: 0 0 0.1em 0;
+       margin: 0 0.3em 0 0;
+       overflow: visible;
+       background: transparent;
+}
+#p-cactions li.selected {
+       border-color: #fabd23;
+       padding: 0 0 0.2em 0;
+}
+*/
+#p-cactions li a {
+       /*
+       background-color: transparent;
+       */
+       color: #002bb8;
+       /*
+       border: none;
+       padding: 0 0.8em 0.3em 0.8em;
+       */
+       text-decoration: none;
+       text-transform: lowercase;
+       position: relative;
+       z-index: 0;
+       margin: 0;
+}
+/*
+#p-cactions .selected a { z-index: 3; }
+#p-cactions .new a { color:#ba0000; }
+#p-cactions li a:hover {
+       z-index: 3;
+       text-decoration: none;
+}
+#p-cactions h5 { display: none; }
+#p-cactions li.istalk { margin-right: 0; }
+#p-cactions li.istalk a { padding-right: 0.5em; }
+#p-cactions #ca-addsection a { 
+       padding-left: 0.4em;
+       padding-right: 0.4em;
+}
+*/
+/* offsets to distinguish the tab groups */
+/*
+li#ca-talk { margin-right: 1.5em; }
+li#ca-watch, li#ca-watch { margin-left: 1.5em; }
+*/
+li#ca-talk { margin-bottom: 1.5em; }
+li#ca-watch, li#ca-watch { margin-top: 1.5em; }
+#p-cactions .new a { color:#ba0000; }
+
+
+/*
+** the remaining portlets
+*/
+#p-tbx,
+#p-lang {
+       position:relative;
+       z-index:3;
+}
+
+/*
+** footer
+*/
+#footer {
+       text-align: center;
+       font-size: xx-small;
+       margin: 2em 0;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+/* hide from incapable browsers */
+/*
+head:first-child+body #footer li { transparent-space: nowrap; }
+*/
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc { 
+       float: left;
+       margin: 1em 1em 1em 1em;
+       width: 13em;
+       border: 1px solid #aaaaaa;
+       background-color: #fff;
+}
+#preftoc li { 
+       border: 1px solid transparent; 
+       list-style: none;
+}
+#preftoc li.selected { 
+       background-color: Highlight;
+       border:1px solid #aaaaaa;
+}
+#preftoc li.selected a {
+       color: HighlightText;
+}
+#preftoc a,
+#preftoc a:active {
+       text-decoration: none;
+       display: block;
+       color: #0014a6;
+       padding: 2px 4px;
+}
+#prefcontrol { 
+       clear: both;
+       float: left;
+       margin-top: 1em;
+}
+div.prefsectiontip { 
+       font-size: 95%;
+       margin-top: 1em;
+}
+fieldset.operaprefsection { margin-left: 15em }
+
+.prefsection label {
+}
+.prefsection div {
+       margin: 4pt 0;
+}
+
+/* 
+** IE/Mac fixes, hope to find a validating way to move this
+** to a separate stylesheet. This would work but doesn't validate: 
+** @import("IEMacFixes.css");
+*/
+* > html #p-cactions li.selected a { border-color: #fabd23; }
+/* footer icons need a fixed width */
+* > html #f-poweredbyico,
+* > html #f-copyrightico { width: 88px; }
+* > html #bodyContent,
+* > html #bodyContent pre {
+       overflow-x: auto;
+       width: 100%;
+       padding-bottom: 25px;
+}
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+/*
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+*/
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       /*
+       position: absolute;
+       left: 0;
+       top: 0;
+       */
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+
+.printfooter {
+       display: none;
+}
+
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+.portlet h5 {
+       display: none;
+}
+
+.editsection {
+       font-size: x-small;
+       color: #8ba2bf;
+}
+.editsection a:link,
+.editsection a:visited {
+       text-decoration: none;
+}
diff --git a/mediawiki/skins/openboxwiki/openbox.gif b/mediawiki/skins/openboxwiki/openbox.gif
new file mode 100644 (file)
index 0000000..508aab4
Binary files /dev/null and b/mediawiki/skins/openboxwiki/openbox.gif differ
diff --git a/mediawiki/skins/openboxwiki/openbox.png b/mediawiki/skins/openboxwiki/openbox.png
new file mode 100644 (file)
index 0000000..839a14d
Binary files /dev/null and b/mediawiki/skins/openboxwiki/openbox.png differ
diff --git a/mediawiki/skins/openboxwiki/required.gif b/mediawiki/skins/openboxwiki/required.gif
new file mode 100644 (file)
index 0000000..1d70814
Binary files /dev/null and b/mediawiki/skins/openboxwiki/required.gif differ
diff --git a/mediawiki/skins/openboxwiki/rtl.css b/mediawiki/skins/openboxwiki/rtl.css
new file mode 100644 (file)
index 0000000..77b44ac
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+Right-to-left fixes for MonoBook.
+Places sidebar on right, tweaks various alignment issues.
+
+Works mostly ok nicely on Safari 1.2.1; fine in Mozilla.
+
+Safari bugs (1.2.1):
+* Tabs are still appearing in left-to-right order. (Try after localizing)
+
+Opera bugs (7.23 linux):
+* Some bits of ltr text (sidebar box titles) have forward and backward versions overlapping each other
+
+IE/mac bugs:
+* The thing barfs on Hebrew and Arabic anyway, so no point testing.
+
+Missing features due to lack of support:
+* external link icons, icon next to user name
+
+To test:
+* Opera6
+* IE 5.0
+* etc
+
+*/
+body,
+body * {
+    direction: rtl;
+/*    unicode-bidi: bidi-override;*/
+    unicode-bidi: embed;
+}
+#column-content {
+       margin: 0 -12.2em 0 0;
+        float: left;
+}
+#column-content #content{
+       margin-left: 0;
+       margin-right: 12.2em;
+    border-right: 1px solid #aaaaaa;
+    border-left: none;
+}
+html>body .portlet {
+    float: right;
+    clear: right;
+}
+/* recover IEMac (might be fine with the float, but usually it's close to IE */
+*>body .portlet {
+    float: none;
+    clear: none;
+}
+.pBody {
+    padding-right: 0.8em;
+    padding-left: 0.5em;
+}
+
+/* Fix alignment */
+.documentByLine,
+.portletDetails,
+.portletMore,
+#p-personal {
+       text-align: left;
+}
+
+div div.thumbcaption {
+       text-align: right;
+}
+
+div.magnify,
+#div.townBox,
+#p-logo {
+       left: auto;
+       right: 0;
+}
+#p-personal {
+       left: auto;
+       right: 0;
+}
+
+#p-cactions {
+       left: auto;
+       right: 11.5em;
+        padding-left: 0;
+        padding-right: 1em;
+}
+#p-cactions li {
+    margin-left: 0.3em;
+    margin-right: 0;
+    float: right;
+}
+* html #p-cactions li a {
+    display: block;
+    padding-bottom: 0;
+}
+* html #p-cactions li a:hover {
+    padding-bottom: 0.2em;
+}
+/* offsets to distinguish the tab groups */
+li#ca-talk {
+    margin-right: auto;
+    margin-left: 1.6em;
+}
+li#ca-watch,li#ca-unwatch {
+    margin-right: 1.6em !important;
+}
+
+/* Fix margins */
+/* top right bottom left */
+
+ul {
+       margin-left: 0;
+       margin-right: 1.5em;
+}
+ol {
+       margin-left: 0;
+       margin-right: 2.4em;
+}
+dd {
+       margin-left: 0;
+       margin-right: 1.6em;
+}
+#contentSub {
+       margin-right: 1em;
+       margin-left: 0;
+}
+.tocindent {
+       margin-left: 0;
+       margin-right: 2em;
+}
+div.tright {
+    clear: none;
+}
+div.tleft {
+    clear: left;
+}
+div.floatright, table.floatright {
+    clear: none;
+}
+div.floatleft, table.floatleft {
+    clear: left;
+}
+div.townBox {
+       margin-left: 0;
+       margin-right: 1em;
+}
+div.townBox dl dd {
+       margin-left: 0;
+       margin-right: 1.1em;
+}
+#p-personal li {
+       margin-left: 0;
+       margin-right: 1em;
+}
+
+li#ca-talk,
+li#ca-watch {
+       margin-right: auto;
+       margin-left: 1.6em;
+}
+
+#p-personal li {
+    float: left;
+}
+/* Fix link icons */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background: none;
+       padding-left: 0;
+}
+.external {
+    padding: 0 !important;
+    background: none !important;
+}
+#footer {
+    clear: both;
+}
+* html #footer {
+    margin-left: 0;
+    margin-right: 13.6em;
+    border-left: 0;
+    border-right: 1px solid #fabd23;
+} 
+* html #column-content { 
+    float: none;
+    margin-left: 0;
+    margin-right: 0;
+}
+* html #column-content #content {
+    margin-left: 0;
+    margin-top: 3em;
+}
+* html #column-one { right: 0; }
+
+/* js pref toc */
+#preftoc { float: right; }
+/* workaround for moz bug, displayed bullets on left side */
+#preftoc li { list-style: none; }
+#prefcontrol { float: right; }
+fieldset.prefsection,
+fieldset.operaprefsection { 
+    margin-left: 0 !important;
+    margin-right: 15em;
+}
diff --git a/mediawiki/skins/openboxwiki/user.gif b/mediawiki/skins/openboxwiki/user.gif
new file mode 100644 (file)
index 0000000..958c6a7
Binary files /dev/null and b/mediawiki/skins/openboxwiki/user.gif differ
diff --git a/mediawiki/skins/simple b/mediawiki/skins/simple
new file mode 120000 (symlink)
index 0000000..7920ede
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/simple
\ No newline at end of file
diff --git a/mediawiki/thumb.php b/mediawiki/thumb.php
new file mode 120000 (symlink)
index 0000000..a6f3760
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/thumb.php
\ No newline at end of file
diff --git a/mediawiki/trackback.php b/mediawiki/trackback.php
new file mode 120000 (symlink)
index 0000000..75788ec
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/trackback.php
\ No newline at end of file
diff --git a/mediawiki/uploads/README b/mediawiki/uploads/README
new file mode 100644 (file)
index 0000000..ca30bbc
--- /dev/null
@@ -0,0 +1,5 @@
+If uploads are enabled in the wiki, files will be put in subdirectories
+under here.
+
+Note to upgraders: as of MediaWiki 1.5, the images used in the user
+interface have been moved to skins/common/images.
diff --git a/mediawiki/wiki.phtml b/mediawiki/wiki.phtml
new file mode 120000 (symlink)
index 0000000..e735a4f
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/wiki.phtml
\ No newline at end of file
diff --git a/oldwiki/StartProfiler.php b/oldwiki/StartProfiler.php
new file mode 120000 (symlink)
index 0000000..db2e729
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/StartProfiler.php
\ No newline at end of file
diff --git a/oldwiki/Test.php b/oldwiki/Test.php
new file mode 120000 (symlink)
index 0000000..5d0a08d
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/Test.php
\ No newline at end of file
diff --git a/oldwiki/api.php b/oldwiki/api.php
new file mode 120000 (symlink)
index 0000000..a507230
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/api.php
\ No newline at end of file
diff --git a/oldwiki/extensions/ConfirmEdit/ConfirmEdit.i18n.php b/oldwiki/extensions/ConfirmEdit/ConfirmEdit.i18n.php
new file mode 100644 (file)
index 0000000..c0e90b7
--- /dev/null
@@ -0,0 +1,1595 @@
+<?php
+/**
+ * Internationalisation file for ConfirmEdit extension.
+ *
+ * @addtogroup Extensions
+*/
+
+$messages = array();
+
+$messages['en'] = array(
+       'captcha-edit' => 'To edit this article, please solve the simple sum below and enter the answer in
+the box ([[Special:Captcha/help|more info]]):',
+       'captcha-addurl' => 'Your edit includes new external links. To help protect against automated
+spam, please solve the simple sum below and enter the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captcha-badlogin' => 'To help protect against automated password cracking, please solve the simple sum
+below and enter the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount' => 'To help protect against automated account creation, please solve the simple sum
+       below and enter the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount-fail' => "Incorrect or missing confirmation code.",
+       'captcha-create' => 'To create the page, please solve the simple sum below and enter
+the answer in the box ([[Special:Captcha/help|more info]]):',
+       'captchahelp-title'          => 'Captcha help',
+       'captchahelp-cookies-needed' => "You will need to have cookies enabled in your browser for this to work.",
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.
+
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.
+
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.
+
+Hit the 'back' button in your browser to return to the page editor.",
+       'captcha-addurl-whitelist' => '
+ #<!-- leave this line exactly as it is --> <pre>
+# Syntax is as follows:
+#   * Everything from a "#" character to the end of the line is a comment
+#   * Every non-blank line is a regex fragment which will only match hosts inside URLs
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Afrikaans (Afrikaans)
+ */
+$messages['af'] = array(
+       'captcha-edit'               => 'U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])',
+       'captcha-addurl'             => 'U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])',
+       'captcha-createaccount'      => "As 'n beskerming teen geoutomatiseerde gemors, tik asseblief die woorde wat in die beeld verskyn in om 'n rekening te skep: <br />([[Special:Captcha/help|Wat is hierdie?]])",
+       'captcha-createaccount-fail' => 'Verkeerde of geen bevestigingkode.',
+       'captcha-create'             => 'U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])',
+       'captchahelp-title'          => 'Captcha-hulp',
+       'captchahelp-text'           => "Webwerwe wat bydraes van die publiek aanvaar (soos hierdie wiki) word soms lastig geval deur kwaaddoeners met programme wat outomaties klomp skakels plak in die werf. Alhoewel hierdie gemors verwyder kan word, is dit lastig. In party gevalle, veral as u webskakels by 'n blad voeg, sal die wiki dalk 'n beeld met verwronge teks vertoon en vra dat u die woorde daarin intik. Omdat hierdie taak moeilik geoutomatiseer word, laat dit meeste regte mense toe om bydraes te maak terwyl dit meeste kwaaddoeners stop. Hierdie kan ongelukkig lastig wees vir mense met beperkte sig, of diegene wat teks- of spraakgebaseerde blaaiers gebruik. Tans is daar nog nie 'n klankalternatief beskikbaar nie. Kontak asseblief die werfadministrateurs vir hulp as hierdie u onverwags belemmer om legitieme bydraes te maak. Gebruik die \"terug\"-knoppie van u blaaier om na die vorige blad terug te keer.",
+);
+
+/** Amharic (አማርኛ)
+ * @author Codex Sinaiticus
+ * @author Siebrand
+ */
+$messages['am'] = array(
+       'captcha-createaccount' => 'ያልተፈለገ የመኪናነት አባልነት ለመከላከል፥ አባል ለመሆን በዚህ ምስል የታዩት እንግሊዝኛ ቃላት ወይም ቁጥር መልስ በትክክል መጻፍ ግዴታ ነው። ([[Special:Captcha/help|ይህ ምንድነው?]]):',
+       'captchahelp-title'     => "የ'ካፕቻ' መግለጫ",
+       'captchahelp-text'      => "አንዳንዴ 'ስፓም' የተባሉት ያልተፈለጉ መልእክቶች የሚላኩ ሰዎች በመኪናነት አማካይነት በብዙ ድረገጽ ላይ የማይገባ ማስታወቂያ በመልጠፍ ላይ እየተገኘ ነው። ይህን የማይገባ መያያዣ ማስወገድ ቢቻለም አስቸጋሪ ናቸው።
+
+ስለዚህ በመጀመርያ አባልነት ሲገቡ ወይም አንዳንዴ የውጭ ድረገጽ አድራሻ ሲጨመር የፕሮግራሙ ሶፍትዌር 'ካፕቻ' የእንግሊዝኛን ቃላት ወይም የቁጥር መልስ እንዲዳግሙ ለፈተና ይጠይቃል። ይህ አደራረግ ለመኪናነት ቀላል ተግባር ሰላማይሆን፥ እውነተኛ ሰው ከሆነ ለመልጠፍ ያስችለዋል ነገር ግን መኪናነት ከሆነ ዕንቅፋት ይሆንበታል።  
+
+ይህ ዘዴ ከመልጠፍ ያለግባብ ቢከለክልዎ እባክዎ መጋቢን ይጠይቁ። 
+
+አሁን ( <= 'back' ) በbrowserዎ ላይ ይጫኑ።",
+);
+
+/** Aragonese (Aragonés)
+ * @author Juanpabl
+ */
+$messages['an'] = array(
+       'captcha-edit'               => 'Ta editar iste articlo, por fabor faiga a fázil suma qu apareixe contino y escriba a soluzión en a caixa ([[Special:Captcha/help|más informazión]]):',
+       'captcha-addurl'             => "A suya edizión encluye binclos esternos. Ta aduyar-nos en a protezión contra o spam automatizato, por fabor, faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):",
+       'captcha-badlogin'           => 'Ta aduyar en a protezión contra a obtenzión automatizata de palabras de paso, por fabor faiga a suma simpla que amanixe contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):',
+       'captcha-createaccount'      => "Ta aduyar-nos en a protezión contra a creyazión automatica de cuentas, por fabor faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):",
+       'captcha-createaccount-fail' => 'No ha escrito o codigo de confirmazión, u iste ye incorreuto.',
+       'captcha-create'             => "Ta creyar a pachina, por fabor faiga a suma simpla que s'amuestra contino y escriba a respuesta en a caixa ([[Special:Captcha/help|más informazión]]):",
+       'captchahelp-title'          => 'Aduya sobre o "captcha"',
+       'captchahelp-cookies-needed' => 'Ta que o sistema funzione le cal tener as cookies autibatas en o nabegador.',
+       'captchahelp-text'           => "Os sitios web que azeptan mensaches d'o publico, como iste wiki, son á ormino obcheto d'abusos por spammers que fan serbir ferramientas automatizatas ta encluyir-ie binclos ta asabelos sitios. Anque istos binclos se pueden sacar, son un gran estorbo.
+
+Bellas begadas, espezialment cuan se mire de adibir nuebos binclos á una pachina, o wiki talment le amuestre una imachen con testo en color y distorsionato, y le pregunte cuals son as palabras amostratas. Como ista ye una faina de mal automatizar, premitirá á os usuarios umanos fer as suyas edizions de bez que aturará á muitos spammers y atacants automaticos.
+
+Manimenos, isto puede estar un barrache ta usuarios con bisión limitata u que faigan ser nabegadors basatos en testo u en a boz. Por l'inte no tenemos garra alternatiba de audio. Por fabor, contaute con os almenistradors d'o sistema ta demandar aduya si isto le ye pribando de fer as suyas edizions lechitimas.
+
+Punche o botón 'entazaga' d'o suyo nabegador ta tornar t'o editor de pachinas.",
+       'captcha-addurl-whitelist'   => "  #<!-- leave this line exactly as it is --> <pre>  
+# A sintaxis ye asinas:  
+#  * Tot o que bi ha dende un caráuter \"#\" dica a fin d'a linia ye un comentario
+#  * Cualsiquier linia con testo un troz d'expresión regular (regex) que sólo concordará con os hosts aintro d'URLs
+  #</pre> <!-- leave this line exactly as it is -->",
+);
+
+/** Arabic (العربية)
+ * @author Mido
+ * @author Meno25
+ * @author Alnokta
+ * @author OsamaK
+ */
+$messages['ar'] = array(
+       'captcha-edit'               => 'يحتوي تعديلك هذا على وصلات خارجية. للحماية من السخام الأوتوماتيكي، قم من فضلك بحل المسألة الرياضية البسيطة أدناه وأدخل الحل في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):',
+       'captcha-addurl'             => 'تعديلك يحتوي على وصلات خارجية جديدة. للمساعدة في الحماية من السخام الأوتوماتيكي، من فضلك حل عملية الجمع بالأسفل و أضف الحل في الصندوق  ([[Special:Captcha/help|معلومات إضافية]]):',
+       'captcha-badlogin'           => 'للمساعدة في الحماية ضد سرقة كلمات السر، من فضلك حل عملية الجمع البسيطة بالأسفل وأدخل الحل في الصندوق ([[Special:Captcha/help|معلومات إضافية]]):',
+       'captcha-createaccount'      => 'كحماية ضد العمليات التخريبية، يجب أن تدخل ناتج العملية الحسابية التالية لكي تنشأ حسابا: <br />([[Special:Captcha/help|ما هذا؟]])',
+       'captcha-createaccount-fail' => 'كود غير مطابق أو لم تقم بإدخاله.',
+       'captcha-create'             => 'من فضلك قم بحل المسألة الرياضية التالية لإنشاء هذه الصفحة وأدخل
+الجواب في الصندوق ([[Special:Captcha/help|ما هذا؟]]):',
+       'captchahelp-title'          => 'مساعدة الكابتشا',
+       'captchahelp-cookies-needed' => 'ستحتاج إلى أن تكون الكوكيز مفعلة في متصفحك لكي يعمل هذا',
+       'captchahelp-text'           => "عادة ما يتم في المواقع التي تقبل الردود والرسائل من العامة، كهذا الويكي، تخريب الموقع عن طريق الأشخاص الذين يستعملون آليات معينة لإرسال وصلاتهم لمواقع متعددة بصورة آلية. وعلى الرغم من أن هذا يمكن إزالته ولكنه مزعج للغاية.
+
+في بعض الأحيان، خصوصا عند إضافة وصلات لصفحة، ربما يعرض الويكي صورة ملونة أو مشوشة ويطلب منك إدخال كلمات موجودة بالصورة أو يعرض عليك مسألة رياضية عشوائية ويطلب منك حلها. ولأن هذه المهمة صعبة للغاية لأن يقوم بها برنامج، سيسمح هذا للأشخاص الآدميين بإضافة تحريراتهم بينما ستوقف البرامج التخريبية والهجمات الآلية الأخرى.
+
+للأسف سيكون هذا صعبا بالنسبة لمستخدمي المتصفحات المحدودة أو التي تعتمد على النصوص فقط أو قراءة النصوص. في الوقت الحالي لا يوجد لدينا بديل سمعي. من فضلك راسل مديري الموقع للمساعدة إذا كان هذا الأمر يمنعك من التعديل ووضع وصلات قانونية.
+
+إذا كنت تحرر صفحة معينة: اضغط زر 'العودة' في متصفحك للعودة إلى التحرير.",
+       'captcha-addurl-whitelist'   => ' #<!-- اترك هذا السطر تمامًا كما هو --> <pre> 
+# الصيغة كما تلي: 
+#   * كل شيء من علامة "#" لنهاية السطر تعليق
+#   * كل سطر غير فارغ هو جزء تعبير نمطي والذي سوف يطابق فقط المضيفين داخل العناوين
+ #</pre> <!-- اترك هذا السطر تمامًا كما هو -->',
+);
+
+/** Asturian (Asturianu)
+ * @author SPQRobin
+ * @author Esbardu
+ */
+$messages['ast'] = array(
+       'captcha-edit'               => "Pa editar esti artículu, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-addurl'             => "La to edición inclúi nuevos enllaces esternos. P'aidar a protexer escontra'l spam automatizáu, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-badlogin'           => "P'aidar a protexer escontra'l descifráu automáticu de claves, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-createaccount'      => "P'aidar a protexer escontra la creación automática de cuentes, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captcha-createaccount-fail' => 'Códigu de confirmación incorreutu o ausente.',
+       'captcha-create'             => "Pa crear la páxina, por favor resuelvi la suma simple d'embaxo y pon la rempuesta nel caxellu ([[Special:Captcha/help|más información]]):",
+       'captchahelp-title'          => 'Aida tocante al captcha',
+       'captchahelp-cookies-needed' => "Has tener les cookies habilitaes nel to navegador pa que'l sistema funcione.",
+       'captchahelp-text'           => "Los sitios web qu'aceuten mensaxes del publicu, como esta wiki, davezu son oxetu d'abusu por spammers qu'usen programes pa incluyir los sos enllaces automáticamente. Si bien estos enllaces spam puen quitase, son una bona molestia.
+
+Dacuando, especialmente cuando amiesta nuevos enllaces web nuna páxina, la wiki pue amosate una imaxe de testu coloreáu o distorsionáu y va pidite qu'escribas les pallabres amosaes. Yá qu'esti ye un llabor difícil d'automatizar, permitirá a les más de les persones reales unviar los sos testos, al empar que detién los más de los spammers y otros atacantes automáticos.
+
+Desafortunadamente esto pue suponer un inconveniente pa los usuarios con visión llimitada o qu'usen navegadores de testu o voz. De momentu nun tenemos disponible una alternativa per audiu. Por favor, contauta colos alministradores del sitiu pa pidir aida si esto t'impide facer ediciones llexítimes.
+
+Calca nel botón 'atrás' del to navegador pa volver a la páxina d'edicion.",
+       'captcha-addurl-whitelist'   => '  #<!-- dexa esta llinia exautamente como ta --> <pre>
+# La sintaxis ye como sigue:
+#  * Too dende\'l carauter "#" hasta la fin de la llinia ye un comentariu
+#  * Toa llinia non vacia ye un fragmentu regex que namái buscará hosts n\'URLs
+  #</pre> <!-- dexa esta llinia exautamente como ta -->',
+);
+
+$messages['bcl'] = array(
+       'captcha-create'              => 'Tangarig maggibo an pahina, paki simbagan an simpleng suma sa ibaba asin ikaag an simbag sa laog kan kahon ([[Special:Captcha/help|more info]]):',
+       'captchahelp-title'           => 'Tabang sa Captcha',
+);
+
+/** Belarusian (Беларуская)
+ * @author Yury Tarasievich
+ */
+$messages['be'] = array(
+       'captcha-create'             => 'Каб стварыць старонку, развяжыце простае ўраўненне, што ніжэй, і ўпішыце адказ у адпаведнае поле ([[Special:Captcha/help|больш падрабязна]]):',
+       'captchahelp-title'          => 'Даведка Капчы',
+       'captchahelp-cookies-needed' => 'Каб гэтая магчымасць працавала, належыць дазволіць у браўзеры апрацоўку квіткоў ("кукі").',
+       'captcha-addurl-whitelist'   => ' #<!-- радок абавязкова пакінуць як ёсць (у т.л., з прагалам у пачатку) --> <pre>  
+# Сінтаксіс наступны:  
+#  * Усё ад знаку "#" да канца радка гэта каментар
+#  * Кожны непусты радок гэта частковы рэгулярны выраз, які параўноўваецца з адрасамі сервераў унутры URL-яў
+  #</pre> <!-- радок абавязкова пакінуць як ёсць (у т.л., з прагалам у пачатку) -->',
+);
+
+/** Bulgarian (Български)
+ * @author DCLXVI
+ * @author Spiritia
+ */
+$messages['bg'] = array(
+       'captcha-edit'               => 'Редактирането на тази статия изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-addurl'             => 'Тази редакция съдържа нови външни препратки. Като защита срещу автоматизиран спам системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-badlogin'           => 'Като защита срещу автоматизирано компрометиране на пароли, системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-createaccount'      => 'Като защита от автоматизирани регистрации, системата изисква при регистриране на потребителска сметка потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):',
+       'captcha-createaccount-fail' => 'Грешен или липсващ код за потвърждение.',
+       'captcha-create'             => 'За създаване на страницата е необходимо да се реши задачата и да се въведе отговорът в кутията ([[Special:Captcha/help|повече информация]]):',
+       'captchahelp-text'           => "Уеб сайтовете, които позволяват свободно да се редактира и добавя ново съдържание (като това уики), често са обект на атаки от страна на спамъри, които използват средства за автоматизирано редактиране за публикуване на препратки към много сайтове. Въпреки че тези препратки могат да бъдат премахнати, те са особено неприятни за потребителите. 
+
+Понякога, особено когато се добавят нови препратки към страниците, е възможно уикито да покаже картинка с текст, който трябва да бъде въведен в посоченото поле. Тъй като това е стъпка, която е трудно да бъде прескочена при автоматизирано редактиране, тя затруднява и спира повечето спамъри и роботи, но допуска истинските потребителите да правят редакции. 
+
+За съжаление тази стъпка може да затрудни незрящи потребители или потребители, които използват текстови или речеви браузъри. За момента системата не разполага с възможност за гласова алтернатива. Обърнете се за помощ към администратор на сайта, ако това изискване на системата ви затруднява да допринасяте легитимно. 
+
+Натиснете бутона 'back' на вашия браузър, за да се върнете към редактора на страници.",
+);
+
+/** Bengali (বাংলা)
+ * @author Bellayet
+ */
+$messages['bn'] = array(
+       'captcha-edit'               => 'এই নিবন্ধটি সম্পাদনা করতে, দয়া করে নিম্নের সহজ অংকটি সমাধান করুন এবং এর ফলাফল বক্সটিতে দিন ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount-fail' => 'ভুল অথবা হারিয়ে যাওয়া নিশ্চিতকরণ সংকেত',
+       'captchahelp-title'          => 'ক্যাপচা সাহায্য',
+       'captchahelp-cookies-needed' => 'এই কাজটি করার জন্য আপনাকে আপনার ব্রাউজারের কুকি সক্রিয় করতে হবে।',
+);
+
+/** Breton (Brezhoneg)
+ * @author Fulup
+ */
+$messages['br'] = array(
+       'captcha-edit'               => "Liammoù diavaez nevez zo bet ouzhpennet ganeoc'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captcha-addurl'             => "Liammoù diavaez nevez zo bet ouzhpennet ganeoc'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captcha-createaccount'      => "A-benn hor skoazellañ d'en em wareziñ diouzh ar c'hrouiñ kontoù emgefre, skrivit ar gerioù a zeu war wel er stern-mañ evit enrollañ ho kont : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captcha-createaccount-fail' => "Mankout a ra ar c'hod kadarnaat pe fall eo.",
+       'captcha-create'             => "Liammoù diavaez nevez zo bet ouzhpennet ganeoc'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])",
+       'captchahelp-title'          => 'Skoazell Capcha',
+       'captchahelp-text'           => "Alies e vez taget al lec'hiennoù a zegemer kemennadennoù a-berzh an holl, evel ar wiki-mañ, gant ar spamerien a implij ostilhoù emgefre evit postañ o liammoù war lec'hiennoù a bep seurt. Diverket e c'hallont bezañ, gwir eo, kazus-mat ez int memes tra. A-wechoù, dreist-holl pa vez ouzhpennet liammoù Web nevez war ur bajenn, e c'hallo ar wiki-mañ diskouez deoc'h ur skeudenn warni un tamm testenn liv pe a-dreuz. Goulennet e vo diganeoc'h skrivañ ar gerioù deuet war wel. Un trevell start da emgefrekaat eo hemañ. Gant se e c'hallo an implijerien wirion postañ ar pezh a fel ldezho tra ma vo lakaet un harz d'an darn vrasañ eus ar spamerien pe d'an dagerien robotek all. Koulskoude e c'hallo an implijerien berr o gweled pe ar re a implij merdeerioù diazezet war ar skrid pe war ar vouezh bezañ strafuilhet gant se. N'omp ket evit kinnig un diskoulm dre glevet evit c'hoazh. Kit e darempred gant merourien al lec'hienn m'hoc'h eus diaesterioù evit kemer perzh abalamour d'an teknik-se. Pouezit war bouton 'kent' ho merdeer evit distreiñ d'ar bajenn gemmañ.",
+);
+
+/** Bosnian (Bosanski)
+ */
+$messages['bs'] = array(
+       'captcha-edit'               => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captcha-addurl'             => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captcha-createaccount'      => 'Kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje se nalaze na slici da biste registrovali nalog:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captcha-createaccount-fail' => 'Netačan unos ili nedostatak šifre za potvrđivanje.',
+       'captcha-create'             => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',
+       'captchahelp-text'           => "Vebsajtovi koji podržavaju slanje sadržaja iz javnosti, kao što je ovaj viki, često zloupotrebljavaju vandali koji koriste automatizovane alate da šalju svoje poveznice ka mnogim sajtovima.  Iako se ove neželjene poveznice mogu ukloniti, one ipak zadaju veliku muku.
+
+Ponekad, pogotovo kad se dodaju nove internet poveznice na stranicu, viki softver Vam može pokazati sliku obojenog i izvrnutog teksta i tražiti da ukucate traženu riječ.  Pošto je teško automatizovati ovakav zadatak, on omogućuje svim pravim ljudima da vrše svoje izmjene, ali će zato spriječiti vandale i ostale robotske napadače.
+
+Nažalost, ovo može da bude nepovoljno za korisnike sa ograničenim vidom i za one koji koriste brauzere bazirane na tekstu ili govoru.  U ovom trenutku, audio alternativa nije dostupna.  Molimo Vas da kontaktirate administratore sajta radi pomoći ako Vas ovo neočekivano ometa u pravljenju dobrih izmjena.
+
+Kliknite 'nazad' ('back') dugme vašeg brauzera da se vratite na polje za unos teksta.",
+);
+
+/** Catalan (Català)
+ * @author SMP
+ * @author Toniher
+ */
+$messages['ca'] = array(
+       'captcha-edit'               => 'Per a poder editar aquest article cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre ([[Special:Captcha/help|més informació]]):',
+       'captcha-addurl'             => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',
+       'captcha-badlogin'           => "Per a ajudar en la protecció contra l'obtenció automatitzada de contrasenyes haureu de resoldre la suma que apareix a continuació ([[Special:Captcha/help|més informació]]):",
+       'captcha-createaccount'      => "Com a protecció contra la creació automàtica de comptes d'usuari necessitem que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):",
+       'captcha-createaccount-fail' => 'Manca el codi de confirmació, o bé és incorrecte.',
+       'captcha-create'             => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',
+       'captchahelp-title'          => 'Ajuda amb el sistema captcha',
+       'captchahelp-cookies-needed' => "Heu d'activar les galetes al vostre navegador per a que funcioni.",
+       'captchahelp-text'           => "Els webs que accepten la publicació de missatges per part del seu públic, com aquesta wiki, són sovint víctimes de spam per part de robots automàtics que hi posen enllaços cap als seus webs. Aquests enllaços poden anar essent esborrats, però són un important destorb.
+
+Quan creeu nous comptes d'usuari o voleu afegir enllaços a una pàgina se us pot demanar que respongueu una pregunta fàcil, una suma o que digueu quina paraula apareix en una imatge distorsionada. Aquestes tasques són molt difícils de fer per a un programa automàtic i per tant permet que la majoria d'usuaris humans puguin introduir la informació que creguin i alhora atura la majoria d'atacants robots.
+
+Malauradament, aquest sistema pot suposar un inconvenient per a usuaris amb problemes de visió o que utilitzin navegadors de text simple o de veu. Actualment no disposem de cap alternativa auditiva disponible. Contacteu els administradors del web si aquests sistema us impedeix de fer edicions legítimes.
+
+Necessitareu tenir les galetes activades en el vostre navegador per a que funcioni.
+
+Cliqueu el botó de retrocedir del vostre navegador per a tornar al formulari.",
+       'captcha-addurl-whitelist'   => "
+  #<!-- deixeu aquesta línia tal com està --> <pre>  
+# La sintaxi és la següent:  
+#  * Totes les línies que comencen amb un # son considerades comentaris
+#  * Tota línia no buida és un fragment d'expressió regular (regexp) que enllaçarà amb els hosts de les URL
+  #</pre> <!-- deixeu aquesta línia tal com està -->",
+);
+
+$messages['cdo'] = array(
+       'captcha-edit' => 'Nṳ̄ gă-tiĕng lāu sĭng gì nguôi-buô lièng-giék. Ôi lāu ê̤ṳ-huòng ô tiàng-sê̤ṳ cê̤ṳ-dông huák-buó bóng-só̤ séng-sék (\'\'spam\'\'), kī-dâe̤ng nṳ̄ gié-sáung â-dā̤ gāng-dăng gì gă-huák, gái ciŏng dák-áng siā diē gáh-gáh diē-sié ([[Special:Captcha/help|gáing sâ̤ séng-sék]]):',
+       'captchahelp-title'          => 'Captcha bŏng-cô',
+       'captchahelp-text'           => "Chiông wiki dēng kăi-huóng gì uōng-câng sèu-sèu ké̤ṳk bóng-só̤ séng-sék huák-buó-nè̤ng (\'\'spammer\'\') páh-chā: ĭ-gáuk-nè̤ng kĕk cê̤ṳ-dông-huá gì gă-sĭ táik bóng-só̤ guōng-gó̤ lièng gáu ĭ gì uōng-câng. Chŭi-iòng cī piĕ bóng-só̤ séng-sék â̤ dù lâi gì, dáng-sê iâ cêng-go̤ tō̤-iéng.
+
+Ô sèng-hâiu, dĕk-biék sê găk nṳ̄ gă-tiĕng sĭng gì nguôi-buô lièng-giék gáu wiki gì sèng-hâiu, wiki â̤ hiēng-sê sáik-ké gáuk-iông hĕ̤k-ciā sê hìng-câung ô gāi-biéng gì ùng-cê dù-chiông, giéu nṳ̄ páh diē nṳ̄ sū káng giéng gì cê hĕ̤k sṳ̀ (hô̤ lō̤ \"captcha\"). Ĭng-ôi gĭ-ké-nè̤ng mâ̤ chiàng ciā êng-ô, gó-chṳ̄ cêu â̤ huòng-cī duâi-buô-hông iù gĭ-ké-nè̤ng huák-buó bóng-só̤ séng-sék (bók-guó, cĭng nè̤ng huák-buó  bóng-só̤ séng-sék, ciā huŏng-huák huòng mâ̤ lì).
+
+Cĭng mì-hâng, dó̤i hī piĕ mĕ̤k-ciŭ mâ̤ hō̤, hĕ̤k-ciā sê sāi-ê̤ṳng gĭ-ṳ̀ ùng-buōng (\'\'text-based\'\') hĕ̤k gĭ-ṳ̀ siăng-ĭng (\'\'speech-based\'\') gì báuk-lāng-ké (\'\'browser\'\') gì ê̤ṳng-hô lì gōng, cūng-kuāng cĭng mâ̤ lê-biêng. Cī òng, nàng-gă gó mò̤ 1 cṳ̄ng gá hō̤ gì huŏng-huák. Nâ sê gōng, cuòi īng-hiōng nṳ̄ ciáng-siòng piĕng-cĭk, chiāng nṳ̄ lièng-hiê guāng-lī-uòng.
+
+Ôi lāu captcha gì ciáng-siòng gĕ̤ng-cáuk, nṳ̄ diŏh páh kŭi báuk-lāng-ké gì cookie.
+
+Buóh diōng kó̤ piĕng-cĭk hiĕk-miêng, áik \"diōng kó̤ sèng 1 hiĕk\" (\'\'back\'\').",
+);
+
+/** Czech (Česky)
+ * @author Li-sung
+ */
+$messages['cs'] = array(
+       'captcha-edit'               => 'Abyste mohli editovat tuto stránku, musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captcha-addurl'             => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captcha-badlogin'           => 'V rámci ochrany před automatickým pokusům uhodnout heslo musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]]):',
+       'captcha-createaccount'      => 'V rámci ochrany před automatickým vytvářením účtů musíte pro provedení registrace vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captcha-createaccount-fail' => 'Chybějící či neplatný potvrzovací kód.',
+       'captcha-create'             => 'Abyste mohli založit stránku musíte vyřešit následující jednoduchý součet a napsat výsledek. ([[Special:Captcha/help|Co tohle znamená?]])',
+       'captchahelp-title'          => 'Nápověda ke captcha',
+       'captchahelp-cookies-needed' => 'Musíte mít zapnuty cookies ve svém prohlížeči.',
+       'captchahelp-text'           => 'Webové stránky, do kterých mohou přispívat jejich návštěvníci (jako například tato wiki), jsou často terčem spammerů, kteří pomocí automatických nástrojů vkládají své odkazy na velké množství stránek. Přestože lze tento spam odstranit, představuje nepříjemné obtěžování.
+
+Někdy, zvláště při přidávání nových webových odkazů, vám může wiki ukázat obrázek barevného či pokrouceného textu a požádat vás o opsání zobrazených znaků. Jelikož takovou úlohu lze jen těžko automatizovat, skuteční lidé mohou dále přispívat, zatímco většinu spammerů a jiných robotických útočníků to zastaví.
+
+Bohužel to však může představovat nepříjemný problém pro uživatele se zrakovým postižením či uživatele používající textové prohlížeče či hlasové čtečky. V současné době nemáme alternativní zvukovou verzi. Kontaktujte laskavě správce serveru, pokud vám to brání v užitečných příspěvcích a potřebujete pomoc.
+
+Pro návrat na předchozí stránku stiskněte ve svém prohlížeči tlačítko „zpět“.',
+);
+
+/** Welsh (Cymraeg)
+ * @author Lloffiwr
+ */
+$messages['cy'] = array(
+       'captcha-edit'               => "Er mwyn gallu golygu'r dudalen, gwnewch y swm isod a gosodwch y canlyniad yn y blwch ([[Special:Captcha/help|rhagor o wybodaeth]]):",
+       'captcha-addurl'             => 'Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])',
+       'captcha-createaccount'      => "Teipiwch y geiriau sy'n ymddangos yn y ddelwedd isod os gwelwch yn dda. Mae'r nodwedd hon yn rhwystro rhaglenni sbam rhag creu cyfrifon i'w hunain. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",
+       'captcha-createaccount-fail' => "Côd cadarnhau ar goll neu'n anghywir.",
+       'captcha-create'             => "Er mwyn gallu creu'r dudalen, gwnewch y swm isod a gosodwch y canlyniad yn y blwch ([[Special:Captcha/help|rhagor o wybodaeth]]):",
+       'captchahelp-title'          => 'Cymorth "captcha"',
+       'captchahelp-text'           => "Yn anffodus, mae safleoedd gwe fel Wicipedia, sy'n caniatau i'r cyhoedd ysgrifennu iddi, yn darged beunyddiol i sbamwyr sy'n defnyddio rhaglenni arbennig i bostio eu cysylltiadau. Gellir dileu'r dolenni o'r dudalen, ond mae hyn yn drafferth mawr. O dro i dro, fe fydd y safle hon yn dangos delwedd o destun, ac fe fydd yn rhaid i chi deipio'r geiriau a ddangosir. Mae hyn yn dasg anodd iawn i ragenni cyfrifiadurol, felly dylai golygwyr go iawn gyflawni'r dasg yn di-drafferth, yn wahanol i'r rhaglenni sbam. Mae hyn yn amlwg yn creu trafferthion i'r sawl sydd yn defnyddio porwyr testun neu sydd yn colli eu golwg. Ar hyn o bryd nid oes fersiwn sain ar gael. Cysylltwch â gweinyddwyr y safle os ydi'r nodwedd hon yn eich rhwystro rhag ychwanegu golygiadau dilys. Gwasgwch botwm 'nôl' eich porwr er mwyn dychwelyd.",
+);
+
+/** Danish (Dansk)
+ * @author Wegge
+ * @author Morten LJ
+ */
+$messages['da'] = array(
+       'captcha-edit'               => 'For at redigere denne side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-addurl'             => 'Din redigering tilføjer nye eksterne henvisninger til artiklen. Som beskyttelse mod automatiseret spam, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-badlogin'           => 'For at beskytte mod automatiserede gæt på kodeord, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-createaccount'      => 'For at beskytte mod automatisk oprettelse af brugernavne, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captcha-createaccount-fail' => 'Forkert eller manglende kodeord.',
+       'captcha-create'             => 'For at oprette en ny side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):',
+       'captchahelp-title'          => 'Captcha-hjælp',
+       'captchahelp-cookies-needed' => 'Din browser skal understøtte cookies, før dette kan gennemføres.',
+       'captchahelp-text'           => "Websites der accepterer indhold fra offentligheden, bliver ofte udsat for angreb fra spammere. Disse angreb sker med automatiske værktøjer, der anbringer de samme links på et stort antal websites på kort tid. Selvom disse links kan fjernes, er de en vedligeholdelsesmæssig byrde.
+
+I visse tilfælde, specielt når der tilføjes nye links til denne wiki, vil softwaren vise dig et billede af et stykke forvredet og sløret tekst. Du skal indtaste det ord, der vises, før du kan gennemføre handlingen. Formålet er at skelne mellem mennesker og automatiserede værktøjer, da de sidste har meget svært ved at genkende ordene.
+
+Desværre kan dette medføre problemer for svagtseende brugere, og brugere der bruger software der oplæser indholdet af siden. For øjeblikket findes der ikke et lydbaseret alternativ. Kontakt venligst en administrator med henblik på at få hjælp, hvis dette forhindrer tilføjelsen af godartet materiale.
+
+Tryk på 'tilbage'-knappen i din browser for at returnere til redigeringssiden.",
+       'captcha-addurl-whitelist'   => '
+ #<!-- Undlad at rette denne linie --> <pre>
+# Vejledning:
+#   * Alt fra et "#"-tegn til slutningen af en linie er en kommentar
+#   * Alle ikke-blanke linier benyttes som regulært udtryk, der anvendes på hostnavne i URLer
+ #</pre> <!-- Undlad at rette denne linie -->',
+);
+
+$messages['de'] = array(
+       'captcha-edit'               => "Zur Bearbeitung der Seite löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captcha-addurl'             => "Deine Bearbeitung enthält neue externe Links. Zum Schutz vor automatisiertem Spamming löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein. Klicke dann erneut auf „Seite speichern“ [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captcha-badlogin'            => 'Zum Schutz vor einer Kompromittierung deines Benutzerkontos löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]]:',
+       'captcha-createaccount'      => "Zum Schutz vor automatisierter Anlage von Benutzerkonten löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captcha-createaccount-fail' => "Falscher oder fehlender Bestätigungscode.",
+       'captcha-create'             => "Zur Erstellung der Seite löse die nachfolgende Rechenaufgabe und trage das Ergebnis in das Feld unten ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",
+       'captchahelp-title'          => 'Captcha-Hilfe',
+       'captchahelp-cookies-needed' => "'''Wichtiger Hinweis:''' Es müssen Cookies im Browser erlaubt sein.",
+       'captchahelp-text'           => "Internetangebote, die für Beiträge von praktisch jedem offen sind — so wie das {{SITENAME}}-Wiki — werden oft von Spammern missbraucht, die ihre Links automatisch auf vielen Webseiten platzieren. Diese Spam-Links können wieder entfernt werden, sie sind aber ein erhebliches Ärgernis. In manchen Fällen, insbesondere beim Hinzufügen von neuen Weblinks zu einer Seite, kann es vorkommen, dass dieses Wiki ein Bild mit einem farbigen und verzerrten Text anzeigt und dazu auffordert, die angezeigten Wörter einzutippen. Da eine solche Aufgabe nur schwer automatisch erledigt werden kann, werden dadurch die meisten Spammer, die mit automatischen Werkzeugen arbeiten, gestoppt, wogegen menschliche Benutzer ihren Beitrag absenden können. Leider kann dies zu Schwierigkeiten für Personen führen, die über eine eingeschränkte Sehfähigkeit verfügen oder text- oder sprachbasierte Browser verwenden. Eine Lösung ist die reguläre Anmeldung als Benutzer. Der „Zurück“-Knopf des Browsers führt zurück in das Bearbeitungsfenster.",
+       'captcha-addurl-whitelist' => '
+ #<!-- leave this line exactly as it is --> <pre>
+#  Syntax:
+#   * Alles von einem #-Zeichen bis zum Ende der Zeile ist ein Kommentar
+#   * Jeder nicht-leere Zeile ist ein Regex-Fragment, das gegenüber den Hostnamen einer URL geprüft wird
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['el'] = array(
+       'captcha-badlogin'            => 'Για να βοηθήσετε στην προστασία ενάντια στον "σπασμένο" κωδικό πρόσβασης, παρακαλώ λύστε αυτή την απλή πράξη και εισάγετε το αποτέλεσμα της στο παρακάτω κενό ([[Special:Captcha/help|περισσότερες πληροφορίες]]):',
+       'captcha-createaccount'       => 'Για να βοηθήσετε στην προστασία ενάντια στην αυτοματοποιημένη δημιουργία λογαριασμού, παρακαλώ λύστε την απλή πράξη
+και εισάγετε την λύση της στο παρακάτω κενό
+([[Special:Captcha/help|περισσότερες πληροφορίες]]):',
+       'captchahelp-text'            => 'Οι ιστοσελίδες που δέχονται τις επεξεργασίες από το κοινό, όπως αυτό το wiki, δεν χρησιμοποιούνται συχνά σωστά από τους spammers που χρησιμοποιούν τα αυτοματοποιημένα εργαλεία για να αποστείλουν τις συνδέσεις τους με πολλές σελίδες. Αυτές οι spam συνδέσεις  μπορούν να αφαιρεθούν, επειδή είναι σημαντικά ενοχλητικές.
+
+Μερικές φορές, ειδικά κατά την προσθήκη νέων συνδέσμων σε μια σελίδα, το wiki μπορεί να σας παρουσιάσει μια εικόνα με ένα χρωματισμένο ή διαστρεβλωμένο κείμενο και να σας ζητήσει να πληκτρολογήσετε τις λέξεις που παρουσιάζονται. Δεδομένου ότι αυτό είναι ένας στόχος που είναι δύσκολο να αυτοματοποιηθεί, θα επιτρέψει στους περισσότερους χρήστες να κάνουν τις επεξεργασίες τους, σταματώντας τους spammers και άλλους ρομποτικά επιτιθέμενους.
+
+Δυστυχώς αυτό μπορεί να ενοχλήσει τους χρήστες περιορίζοντας το όραμα τους ή αυτούς που βασίζονται στο κείμενο ή στην ομιλία που βασίζεται στις μηχανές αναζήτησης. Προς το παρόν δεν έχουμε μια διαθέσιμη εναλλακτική λύση. Παρακαλώ ελάτε σε επαφή με τους διαχειριστές των σελίδων για βοήθεια, εάν αυτό σας αποτρέπει απροσδόκητα από την παραγωγή των νόμιμων επεξεργασιών.
+
+Πατήστε το κουμπί \'πίσω\' στη μηχανή αναζήτησης σας για να επιστρέψετε στο συντάκτη σελίδων.',
+);
+
+$messages['es'] = array(
+       'captcha-edit'                => 'Para editar este artículo, por favor resuelve la sencilla suma que aparece abajo e introduce la solución en la caja ([[Special:Captcha/help|más información]]):',
+       'captcha-addurl'              => 'Tu edición incluye nuevos enlaces externos. Para ayudar a proteger contra el spam automatizado, por favor resuelve la sencilla suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):',
+       'captcha-createaccount'       => 'Para ayudar a protegernos de la creación automática de cuentas, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):',
+       'captcha-createaccount-fail'  => 'Falta el código de confirmación, o éste es incorrecto.',
+       'captcha-create'              => 'Para crear la página, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):',
+       'captchahelp-title'           => 'Ayuda sobre el captcha',
+       'captchahelp-cookies-needed'  => 'Debe tener las cookies activadas en el navegador para que el sistema funcione.',
+       'captchahelp-text'            => 'Los sitios web que aceptan mensajes del público, como esta wiki, son a menudo objeto de abusos  por spammers que utilizan programas para incluir automáticamente sus enlaces. Si bien estos enlaces pueden quitarse, son una gran molestia.
+
+En ocasiones, especialmente cuando añada nuevos enlaces a una página, la wiki le mostrará una imagen de texto coloreado o distorsionado y le pedirá que escriba las palabras que muestra. Dado que esta es una tarea difícil de automatizar, permite a la mayoría de las personas enviar sus textos, a la vez que detiene a la mayoría de los spammers y otros atacantes automáticos.',
+);
+
+/** Estonian (Eesti)
+ */
+$messages['et'] = array(
+       'captcha-edit'               => 'Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captcha-addurl'             => 'Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captcha-createaccount'      => 'Kaitsena spämmi vastu peate konto registreerimiseks lahtrisse kirjutama järgneva tehte tulemuse.<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captcha-createaccount-fail' => 'Puuduv või valesti sisestatud kinnituskood.',
+       'captcha-create'             => 'Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])',
+       'captchahelp-title'          => 'Mis on Captcha?',
+       'captchahelp-text'           => 'Internetisaite, mis lubavad külastajatel sisu muuta (nagu ka see Viki), kasutavad sageli spämmerid ära, postitades reklaamlinke - spämmi. Kuigi neid linke saab alati ära võtta, on nad ikkagi üpris tülikad. Omale kasutajakontot registreerides või mõnele lehele uusi internetiaadresse postitades näidatakse teile moonutatud tekstiga pilti ning palutakse teil sisestada seal näidatud sõnad. Kuna selliselt pildilt on arvutil raske teksti välja lugeda, on see efektiivseks kaitseks spämmirobotite vastu, samas lubades tavainimestel oma muudatusi rahus teha. Kahjuks võib see tekitada ebamugavusi nägemisraskustega inimestele või neile, kes kasutavad kõnesüntesaatorit või tekstipõhist brauserit. Hetkel pole meil helipõhist alternatiivi. Kui teil tekib ootamatult raskusi oma muudatuste tegemisel, siis kirjutage sellest [[Vikipeedia:Üldine arutelu|üldise arutelu]] lehele. Konto registreerimise lehele või lehe redigeerimisele tagasi jõudmiseks vajutage oma brauseri tagasi-nuppu.',
+);
+
+/** Basque (Euskara)
+ */
+$messages['eu'] = array(
+       'captcha-edit'               => 'Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captcha-addurl'             => 'Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captcha-createaccount'      => 'Spam-a saihesteko, mesedez, irudian agertzen den hizki edo zenbaki kodea, beheko laukian idatzi zure kontua sortzeko:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captcha-createaccount-fail' => 'Baieztatze kode ezegokia.',
+       'captcha-create'             => 'Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])',
+       'captchahelp-title'          => 'Captcha laguntza',
+       'captchahelp-text'           => "Publikoki aldaketak egiteko aukerak dituzten webguneetan, wiki honetan bezalaxe, spam testuak gehitzen dira sarritan tresna automatikoak erabiliz. Lotura horiek ezabatu egin daitezkeen arren, traba dira. Batzutan, eta bereziki webgune berri bateko loturak gehitzen dituzunean, hitz batzuk dituen irudi bat agertuko zaizu, eta bertan ageri den testua idazteko eskatuko zaizu. Lan hori automatizatzeko zaila da, eta pertsonei ezer kostatzen ez zaigunez, spam testuak saihesteko lagungarria da. Zoritxarrez, ikusmen mugatua edo testu bidezko nabigatzaileak erabiltzen dituzten erabiltzeek arazoak izan ditzakete. Horrelako zerbait gertatzen bazaizu, mesedez, jarri administratzaileekin harremanetan. Zure nabigatzaileko 'atzera' lotura erabili aldaketen orrialdera itzultzeko.",
+);
+
+# فارسی (Huji)
+$messages['fa'] = array(
+       'captcha-edit'               => 'برای ویرایش این مقاله، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-addurl'             => 'ویرایش شما شامل پیوندهای تازه‌ای به بیرون است. برای کمک به جلوگیری از ارسال خودکار هرزنامه‌ها، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-badlogin'           => 'برای کمک به جلوگیری از سرقت خودکار کلمه عبور، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-createaccount'      => 'برای جلوگیری از ایجاد خودکار حساب کاربری، لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captcha-createaccount-fail' => 'کلمه تایید نادرست یا گم‌شده:',
+       'captcha-create'             => 'برای ایجاد صفحه لطفاً حاصل جمع زیر را حساب کنید و نتیجه را در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):',
+       'captchahelp-title'          => 'راهنمای Captcha',
+       'captchahelp-cookies-needed' => 'برای کار کردن آن، شما باید کوکی‌های مرورگرتان را فعال کنید.',
+       'captchahelp-text'           => 'وبگاه‌هایی که امکان تغییر توسط همگان در آن‌ها وجود دارد، مانند این ویکی، گاه و بیگاه توسط هرزنگارهایی که توسط ابزارهای خودکار پیوند خود را در چندین وبگاه درج می‌کنند مورد سوء استفاده قرار می‌گیرند.
+
+در پاره‌ای از موارد، به ویژه زمانی که یک پیوند اینترنتی جدید به صفحه اضافه می‌شود، ویکی ممکن است یک تصویر از حروف رنگی یا معوج به شما نشان بدهد و از شما بخواهد که کلمه‌ای که در آن می‌بینید را وارد کنید. به خاطر این که انجام این کار به شکل خودکار دشوار است، این عمل به اکثر انسان‌های اجازه می‌دهد که به ارسال مطالب بپردازند در حالی که بیشتر ربات‌های حمله‌کننده و هرزنگارها را متوقف می‌کند.
+
+متاسفانه این روش ممکن است کاربرانی را که بینایی محدودی دارند یا از مرورگرهای متنی یا کلامی استفاده می‌کنند دچار محدودیت‌هایی بکند. در حال حاضر هیچ جایگزین صوتی برای این روش موجود نیست. چنان‌چه این مساله شما را دچار محدودیتی دور از انتظار در ارسال نوشته‌های مجاز می‌کند، با مدیران وبگاه تماس بگیرید.
+
+دکمه «قبل» در مرورگرتان را بزنید تا به صفحهٔ ویرایش بازگردید.',
+       'captcha-addurl-whitelist'   => '  #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>
+# قواعد به این شکل است:
+#  * همه‌چیز از «#» تا آخر سطر یک توضیح در نظر گرفته می‌شود.
+#  * هر سطری که خالی نباشد یک قطعه در نظر گرفته می‌شود که فقط با نام میزبان اینترنتی سنجیده می‌شود.
+  #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->',
+
+);
+
+/** Finnish (Suomi)
+ * @author Nike
+ * @author Crt
+ */
+$messages['fi'] = array(
+       'captcha-edit'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-addurl'             => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-badlogin'           => 'Salasananmurtajasovellusten takia, ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-createaccount'      => 'Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captcha-createaccount-fail' => 'Väärä tai puuttuva varmistuskoodi.',
+       'captcha-create'             => 'Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',
+       'captchahelp-title'          => 'Captcha-ohje',
+       'captchahelp-cookies-needed' => 'Tämä toiminto vaatii evästeiden hyväksymistä.',
+       'captchahelp-text'           => 'Verkkosivut, jotka sallivat ulkopuolisten lisätä sisältöä, joutuvat usein spam-hyökkäysten kohteeksi. Spam-hyökkäyksessä spammerit käyttävät työkaluja, jotka automaattisesti lisäävät linkkejä monille sivuille. Vaikka nämä linkit voidaan poistaa, aiheutuu niistä silti merkittävä haitta.
+
+Joskus, erityisesti kun lisäät uusia linkkejä, saatat nähdä kuvan, jossa on värillistä ja vääristynyttä tekstiä, ja sinua pyydetään kirjoittamaan sen sisältämät sanat. Koska tätä tehtävää on vaikea automatisoida, se sallii melkein kaikkien oikeiden ihmisten tehdä muutoksensa, mutta estää automaattiset lisäykset.
+
+Valitettavasti tämä saattaa estää käyttäjiä, joilla on rajoittunut näkökyky tai käyttäjiä, jotka käyttävät teksti- tai puhepohjaisia selaimia. Ota yhteyttä sivuston ylläpitäjään, jos et pysty tekemään kunnollisia muutoksia.
+
+Varmistus ei toimi, jos evästeet eivät ole käytössä.
+
+Voit palata muokkaustilaan selaimen paluutoiminnolla.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>  
+# Syntaksi on seuraava:  
+#  * Kaikki #-merkistä eteenpäin on kommenttia
+#  * Jokainen ei-tyhjä rivi on säännöllisen lausekkeen osa, joka suoritetaan vain linkeissä esiintyville verkkonimille.
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['fo'] = array(
+       'captcha-createaccount'       => 'Sum ein vernd ímóti sjálvvirknum spam, er neyðugt hjá tær at skriva inn tey orð, sum koma fyri á myndini fyri at stovna eina kontu: <br />([[Special:Captcha/help|Hvat er hetta?]])',
+       'captchahelp-title'           => 'Captcha hjálp',
+);
+
+/** French (Français)
+ * @author Meithal
+ * @author Sherbrooke
+ * @author Grondin
+ */
+$messages['fr'] = array(
+       'captcha-edit'               => "Pour modifier cette page, vous être prié de résoudre l'opération ci-dessous et d'en inscrire le résultat dans le champ ([[Special:Captcha/help|Plus d'infos]]) :",
+       'captcha-addurl'             => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le pourriel automatique, veuillez entrer le résultat de l’opération ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',
+       'captcha-badlogin'           => "Afin de lutter contre le piratage automatisé de mots de passe par des bots, vous être prié de résoudre l'opération ci-dessous et d'y inscrire le résultat dans le champ [[Special:Captcha/help|plus d'infos]]) :",
+       'captcha-createaccount'      => 'Comme protection contre les créations de compte abusives, veuillez entrer le résultat de l’opération dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :',
+       'captcha-createaccount-fail' => 'Code de confirmation erroné ou manquant.',
+       'captcha-create'             => "Pour modifier la page, vous être prié de résoudre l'opération ci-dessous et d'en inscrire le résultat dans le champ ([[Special:Captcha/help|Plus d'infos]]) :",
+       'captchahelp-title'          => 'Aide sur les captcha',
+       'captchahelp-cookies-needed' => 'Il faut activer les cookies dans votre navigateur Web pour que cela fonctionne.',
+       'captchahelp-text'           => "Les sites Web acceptant des contributions du public, comme ce wiki, sont souvent utilisés par des spammeurs qui utilisent des outils automatiques pour placer de nombreux liens vers leurs sites. Même si ces liens de « spam » peuvent être enlevés, ils n'en représentent pas moins une nuisance.
+
+Parfois, en particulier lors de l’ajout de nouveaux liens externes à une page, le wiki peut vous montrer une image représentant un texte brouillé et vous demander de taper les mots indiqués. Cette tâche est difficile à automatiser, et permet aux humains de faire leurs contributions tout en stoppant la plupart des spammeurs.
+
+Cette solution peut malheureusement gêner les utilisateurs malvoyants ou ceux utilisant un navigateur en texte seul. Nous ne disposons pas d’alternative audio pour l’instant. Veuillez contacter un [[Special:Listusers/sysop|administrateur]] du site si vous ne parvenez pas à faire vos contributions.
+
+Cliquez sur le bouton « Précédent » de votre navigateur pour revenir sur la page d’édition.",
+       'captcha-addurl-whitelist'   => " #<!-- laissez cette ligne exactement telle quelle --> <pre> 
+# La syntaxe est la suivante : 
+#   * Tout caractère suivant « # » jusqu'à la fin de la ligne sera interprêté comme un commentaire
+#   * Toute ligne non vide est un code regex qui sera utilisé uniquement à l'intérieur des liens hypertextes.
+ #</pre> <!-- laissez cette ligne exactement telle quelle -->",
+);
+
+/** Franco-Provençal (Arpetan)
+ * @author ChrisPtDe
+ */
+$messages['frp'] = array(
+       'captcha-edit'               => 'Por modifiar ceta pâge, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-addurl'             => 'Voutra modificacion encllut de novéls lims de defôr. Coment protèccion contre lo spame ôtomatico, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-badlogin'           => 'Coment protèccion contre lo piratâjo ôtomatisâ de mots de pâssa per des bots, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-createaccount'      => 'Coment protèccion contre les crèacions de compto abusives, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captcha-createaccount-fail' => 'Code de confirmacion fôx ou manquent.',
+       'captcha-create'             => 'Por crèar ceta pâge, volyéd entrar lo rèsultat de l’opèracion dens la bouèta ce-desot ([[Special:Captcha/help|més d’enformacions]]) :',
+       'captchahelp-title'          => 'Éde sur los captcha',
+       'captchahelp-cookies-needed' => "Fôt activar los tèmouens (''cookies'') dens voutron navigator por que cen fonccione.",
+       'captchahelp-text'           => 'Los setos Malyâjo accèptent des contribucions du publico, coment ceti vouiqui, sont sovent utilisâs per des spamors qu’utilisont des outils ôtomaticos por placiér tot plen de lims vers lors setos. Quand ben que celos lims de « spame » porriant étre enlevâs, reprèsentont una nuésence.
+
+Des côps, en particuliér pendent l’aponsa de novéls lims de defôr a una pâge, lo vouiqui pôt vos montrar una émâge reprèsentent un tèxte colorâ ou ben tordu et vos demandar de buchiér los mots montrâs. Cél ovrâjo est dificilo a ôtomatisar, et pèrmèt ux homos de fâre lors contribucions tot en arrètent la plepârt des spamors.
+
+Mâlherosament ceta solucion pôt gênar los utilisators mâl-veyents ou utilisent un navigator en tèxte solèt. Nos disposens pas d’altèrnativa ôdiô por lo moment. Volyéd vos veriér vers un [[Special:Listusers/sysop|administrator]] du seto se vos arrevâd pas a fâre voutres contribucions.
+
+Clicâd sur lo boton « Prècèdent » de voutron navigator por tornar a la pâge d’èdicion.',
+       'captcha-addurl-whitelist'   => '  #<!-- lèssiéd ceta legne justo d’ense --> <pre>
+# La sintaxa est la siuventa :
+#  * Tot caractèro siuvent « # » tant qu’a la fin de la legne serat entèrprètâ coment un comentèro.
+#  * Tota legne pas voueda est un bocon de RegEx que serat utilisâ ren qu’u dedens des lims hipèrtèxte.
+  #</pre> <!-- lèssiéd ceta legne justo d’ense -->',
+);
+
+/** Irish (Gaeilge)
+ * @author Alison
+ * @author SPQRobin
+ */
+$messages['ga'] = array(
+       'captcha-edit'               => 'Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Special:Captcha/help|Céard é seo?]])',
+       'captcha-addurl'             => 'Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])',
+       'captcha-createaccount'      => 'Mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur chun cuntas a chlárú: <br />([[Speisialta:Captcha/help|Céard é seo?]])',
+       'captcha-createaccount-fail' => 'Ní raibh an cód deimhnithe ceart sa bhosca, nó ní raibh aon chód ann ar chor ar bith.',
+       'captcha-create'             => 'Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Special:Captcha/help|Céard é seo?]])',
+       'captchahelp-title'          => 'Cabhair maidir le Captcha',
+);
+
+/** Galician (Galego)
+ * @author Alma
+ * @author Xosé
+ */
+$messages['gl'] = array(
+       'captcha-edit'               => 'Para editar este artigo, resolta a suma simple que aparece embaixo e introduza a resposta na caixa ([[Special:Captcha/help|máis información]]):',
+       'captcha-addurl'             => 'A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de ligazóns publicitarias necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])',
+       'captcha-badlogin'           => 'Como protección para que non descubran o contrasinal por medios automáticos, resolva a suma simple de embaixo e introduza a resposta na caixa ([[Special:Captcha/help|máis información]])',
+       'captcha-createaccount'      => "Como protección fronte a sistemas de creación automática de contas de usuario usados polos ''spammers'', ten que teclear as palabras que aparecen na imaxe para rexistrar unha conta:<br /> ([[Special:Captcha/help|Qué é isto?]])",
+       'captcha-createaccount-fail' => 'Falta o código de confirmación ou é incorrecto.',
+       'captcha-create'             => 'Para crear a páxina, resolva a suma simple que aparece embaixo e introduza a resposta na caixa  ([[Special:Captcha/help|Qué é isto?]])',
+       'captchahelp-title'          => 'Axuda acerca do Captcha',
+       'captchahelp-cookies-needed' => 'Vostede necesita ter as cookies habilitadas no seu navegador para que funcione.',
+       'captchahelp-text'           => "'''CAPTCHA''' (acrónimo de \"'''C'''ompletely '''A'''utomated '''P'''ublic '''T'''uring test to tell '''C'''omputers and '''H'''umans '''A'''part\") é un test de autentificación do tipo desafío-resposta usado nos contornos informáticos para distinguir usuarios humanos de máquinas. Os sitios web que aceptan publicar as contribucións dos usuarios coma este wiki sofren, con frecuencia, o abuso por parte de ''spammers'' que usan ferramentas que automatizan a inclusión de lixo en forma de ligazóns publicitarias nunha chea de páxinas en pouco tempo. Mentres ditas ligazóns non son eliminadas supoñen unha molestia e unha perda de tempo. En ocasións, en particular cando engada algún novo vínculo externo, o wiki pode mostrar unha imaxe dun texto coloreado e distorsionado e pedirlle que teclee as palabras mostradas. Como esta tarefa é difícil de automatizar, permite distinguir entre persoas e robots e dificulta os ataques automatizados dos ''spammers''. Por desgraza, pódelles causar problemas a aqueles usuarios con dificultades de visión ou aos que utilicen navegadores de texto ou navegadores baseados en sistemas de voz. Polo de agora non dispoñemos dunha alternativa de audio. Por favor, contacte cun [[Special:Listusers/sysop|administrador]] do wiki para solicitar axuda se o sistema lle impide rexistrarse para facer contribucións lexítimas. Prema no botón \"atrás\" ou equivalente do seu navegador para volver á páxina na que estaba.",
+       'captcha-addurl-whitelist'   => ' #<!-- deixe esta liña exactamente como está --> <pre>
+# A sintaxe é a seguinte:
+#   * Todo o que vai desde o carácter "#" até o final da liña é un comentario  
+#   * Cada liña que non estea en branco é un fragmento de expresión regular que só coincidirá con hosts dentro de URLs
+ #</pre> <!-- deixe esta liña exactamente como está -->',
+);
+
+/** Gujarati (ગુજરાતી)
+ * @author Dsvyas
+ */
+$messages['gu'] = array(
+       'captcha-edit'               => 'આ લેખમાં ફેરફાર કરવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો ([[Special:Captcha/help|more info]]):',
+       'captcha-addurl'             => 'તમે કરેલા ફેરફારોમાં નવી બાહ્ય કડીઓ સામેલ છે. સ્વચાલિત સ્પેમ/સ્પામ(spam) થી બચવવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો
+([[Special:Captcha/help|more info]]):',
+       'captcha-badlogin'           => 'આપોઆપ થતી ગુપ્તસંજ્ઞાની ચોરી (password cracking)થી બચાવવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount'      => 'આપોઆપ નવા ખાતા ખુલતા રોકવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો',
+       'captcha-createaccount-fail' => 'ખોટી અથવા ખૂટતી પુષ્ટિ સંજ્ઞા',
+       'captcha-create'             => 'નવું પાનું બનાવવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો  ([[Special:Captcha/help|more info]]):',
+       'captchahelp-title'          => 'કેપ્ટ્ચા/કેપ્ચા (Captcha) મદદ',
+       'captchahelp-cookies-needed' => 'આ વ્યવસ્થિત રીતે જોઇ શકાય તે માટે તમારા બ્રાઉઝરમાં કુકીઝ એનેબલ કરેલી હોવી જોઇશે.',
+       'captchahelp-text'           => "આપણી વિકિ જેવી વૅબ સાઇટો કે જે લોકોને યોગદાન કરવાની પરવાનગી આપે છે, તેમેનો સ્પામરો દ્વારા દુરૂપયોગ થતો આવ્યો છે. આવા સ્પામરો તેમની કડીઓ એક સાથે અનેક વૅબ સાઇટો પર મુકવા માટે સ્વચાલિત સાધનો (Tools) વાપરે છે. આવી કડીઓ ખરેખર એક દૂષણ છે અને તેને દૂર કરવાના ઉપાય કરવા જોઇએ.
+
+ક્યારેક, ખાસ કરીને જ્યારે તમે તમારા લેખમાં બાહ્ય કડી ઉમેરતા હોવ ત્યારે, વિકિ તમને એક રંગીન કે તુટેલા-ફુટેલા અક્ષરો કે શબ્દોનું ચિત્ર બતાવે અને તેમા વંચાતા શબ્દો બાજુનાં ખાનામાં લખવા માટે પુછે એવું બને. આનું કારણ એ છે કે આ એક એવી પદ્ધતિ છે જે સ્વચાલિત રીતે કરવી લગભગ અશક્ય છે, અને ફક્ત વ્યક્તિગત રીતે જ થઇ
+શકે છે, જે સ્પામરો અને અન્ય ઘુસણખોરો ના હુમલાને ખાળે છે.
+
+કમભાગ્યે આ પદ્ધતિ, એવા લોકોને તકલિફ આપે તેમ છે જેઓની દૃષ્ટિ નબળી છે અથવાતો જેઓ વાચા આધારીત કે સાદા બ્રાઉઝરનો ઉપયોગ કરે છે. હાલમા અમારી પાસે આવા ચિત્રોની વાચા આધારિત વ્યવસ્થા નથી. જો આ કારણે આપ કોઇ લેખમાં પ્રદાન ન કરી શકતા હોવ તો વધુ સહાય માટે કૃપા કરી પ્રબંધકનો સંપર્ક સાધો.
+
+લેખમા ફેરફાર કરવાના પાના ઉપર પાછા ફરવા માટી આપના બ્રાઉઝરના 'બેક' બટન ઉપર ક્લિક કરો.",
+       'captcha-addurl-whitelist'   => '#<!-- આ લીટીને જેમ છે તેમ જ રહેવા દો --> <pre>  
+# સીન્ટેક્સ (Syntax) આ પ્રમાણે છે :  
+#  * "#" સંજ્ઞાથી શરૂ કરીને લીટીના અંત સુધીનું વર્ણન એક ટીપ્પણી છે
+#  * ખાલી ન હોય તેવી દરેક લીટી રેજેક્સનો ભાગ છે, જે ફક્ત URLsમાંના હોસ્ટ સાથે જ મેળ ખાશે
+  #</pre> <!-- આ લીટીને જેમ છે તેમ જ રહેવા દો -->',
+);
+
+$messages['he'] = array(
+       'captcha-edit'               => 'כדי לערוך את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-addurl'             => 'עריכתכם כוללת קישורים חיצוניים חדשים. כהגנה מפני ספאם אוטומטי, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-badlogin'            => 'כהגנה מפני פריצת סיסמאות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-createaccount'      => 'כהגנה מפני יצירת חשבונות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captcha-createaccount-fail' => 'לא הקלדתם קוד אישור, או שהוא שגוי.',
+       'captcha-create'             => 'כדי ליצור את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',
+       'captchahelp-cookies-needed' => "עליכם להפעיל את תכונת העוגיות (Cookies) בדפדפן שלכם כדי שזה יעבוד.",
+       'captchahelp-title'          => 'עזרה במערכת הגנת הספאם',
+       'captchahelp-text'           => "פעמים רבות מנצלים ספאמרים אתרים שמקבלים תוכן מהציבור, כמו הוויקי הזה, כדי לפרסם את הקישורים שלהם לאתרים רבים באינטרנט, באמצעות כלים אוטומטיים. אמנם ניתן להסיר את קישורי הספאם הללו, אך זהו מטרד משמעותי.
+
+לעיתים, בעיקר כשאתם מכניסים קישורי אינטרנט חדשים לתוך עמוד, הוויקי עשוי להראות תמונה של טקסט צבעוני או מעוקם ויבקש מכם להקליד את המילים המוצגות. כיוון שזו משימה שקשה לבצעה בצורה אוטומטית, הדבר יאפשר לבני־אדם אמיתיים לשלוח את הדפים, אך יעצור את רוב הספאמרים והמתקיפים הרובוטיים.
+
+לרוע המזל, הדבר עשוי לגרום לאי נוחות למשתמשים עם דפדפן בגרסה מוגבלת, או שמשתמשים בדפדפנים מבוססי טקסט או דיבור. כרגע, אין לנו חלופה קולית זמינה. אנא צרו קשר עם מנהלי האתר לעזרה אם המערכת מונעת מכם באופן בלתי צפוי לבצע עריכות לגיטימיות.
+
+אנא לחצו על הכפתור 'Back' בדפדפן שלכם כדי לחזור לדף העריכה.",
+       'captcha-addurl-whitelist' => '
+ #<!-- יש להשאיר שורה זו בדיוק כפי שהיא כתובה --> <pre>
+# זהו תחביר ההודעה:
+#   * כל דבר בשורה שנכתב לאחר סימן "#" הוא הערה
+#   * כל שורה לא ריקה היא ביטוי רגולרי שיתאים לאתרים בכתובות URL
+ #</pre> <!-- יש להשאיר שורה זו בדיוק כפי שהיא כתובה -->',
+);
+
+/** Croatian (Hrvatski)
+ * @author SpeedyGonsales
+ */
+$messages['hr'] = array(
+       'captcha-edit'               => 'Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])',
+       'captcha-addurl'             => 'Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])',
+       'captcha-badlogin'           => 'Da se spriječi automatizirano pogađanje lozinki,
+molimo zbrojite donje brojeve i upišite rezultat ([[Special:Captcha/help|pomoć]]):',
+       'captcha-createaccount'      => 'Kao zaštitu od automatskog spama, pri otvaranju računa trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć]])',
+       'captcha-createaccount-fail' => 'Potvrdni kod je nepotpun ili netočan.',
+       'captcha-create'             => 'Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])',
+       'captchahelp-title'          => 'Antispam pomoć',
+       'captchahelp-cookies-needed' => "Trebate imati uključene kolačiće (''cookies'') u vašem web pregledniku za ovu funkciju.",
+       'captchahelp-text'           => 'Web poslužitelje koji rade na temelju javnih doprinosa, poput wiki, često zloupotrebljavaju spameri. Oni koriste automatske alate pomoću kojih generiraju poveznice od vlastitog interesa. Iako se te poveznice najčešće uklanjaju, mogu predstavljati neugodnost pri radu. Ponekad se dogodi da wiki prikaže sliku čudnog tekstualnog sadržaja uz koju morate unijeti prikazana slova. Budući da je takvu radnju teško automatizirati, većina se napadača obeshrabri, a pravi suradnici bez većih smetnji nastavljaju pridonositi. Ukoliko ste suradnik koji koristi tekstualni klijent te vas česte ovakve provjere ometaju pri dodavanju važećih sadržaja, molimo da se obratite [[Special:Listusers/sysop|administratorima]].',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre> 
+# Rabi se slijedeća sintaksa: 
+#   * Sve od "#" znaka do kraja linije je komentar
+#   * Svaki neprazni redak je regularni izraz (regex) koji odgovara poslužitelju unutar URL-a
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Upper Sorbian (Hornjoserbsce)
+ * @author Michawiki
+ */
+$messages['hsb'] = array(
+       'captcha-edit'               => 'Zo by stronu wobdźěłał, rozrisaj prošu slědowacy ličenski nadawk a zapodaj wuslědk do kašćika ([[Special:Captcha/help|Dalše informacije]]):',
+       'captcha-addurl'             => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',
+       'captcha-badlogin'           => 'Zo by so awtomatiskemu zadobywanju do hesłow zadźěwało, dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. [[{{ns:special}}:Captcha/help|(Prašenja abo problemy?)]]',
+       'captcha-createaccount'      => 'Jako škitna naprawa přećiwo awtomatiskemu wutworjenju wužiwarskich kontow dyrbiš slědowacy nadawk wuličeć. [[{{ns:special}}:Captcha/help|(Prašenja abo problemy?)]]',
+       'captcha-createaccount-fail' => 'Wopačny abo pobrachowacy wuslědk.',
+       'captcha-create'             => 'Zo by stronu wutworił, rozrisaj prošu slědowacy ličenski nadawk a zapodaj wuslědk do kašćika ([[Special:Captcha/help|Dalše informacije]]):',
+       'captchahelp-title'          => 'Pomoc z captcha',
+       'captchahelp-cookies-needed' => 'Dyrbiš placki (cookies) w swojim wobhladowaku zmóžnić.',
+       'captchahelp-text'           => 'Sydła kaž {{SITENAME}}, kotrež móža so swobodnje wot kóždeho wobdźěłować su často z woporom spamarjow, kotřiž swoje wotkazy awtomatisce we wjele sydłach broja. Tute spam-wotkazy móža so zaso wotstronjeć, wubudźa pak njesnadne mjerzanje. W někotrych padach, wosebje při přidawanju nowych eksternych wotkazow, móže so stać, zo pokazuje tutón wiki wobraz z pisanym abo skomolenym tekstom abo kaza jednory ličenski nadawk wuličeć, kotrehož wuslědk dyrbi so potom do zapodawanskeho kašćika zapisować. Dokelž hodźi so tajki nadawk jenož ćežko z awtomatiskimi srědkami spamarjow spjelnić, móža so tajcy wotdźeržować, druzy wužiwarjo pak móža swoje změny składować. Bohužel móže to k wobćežnosćam za tutych wužiwarjow dowjesć, kotrychž kmanosć widźenja je wobmjezowana abo kotřiž dźěłaja z wobhladowakami kiž su na tekstowe abo rěčne wudawanje wusměrjene. Móžne rozrisanje tutoho problema je přizjewjenje jako wužiwar. Tłóčatko „Wróćo” swojeho wobhladowaka dowjedźe tebje zaso do wobdźěłowanskeho pola.',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre>
+# Syntaks je slědowaca:
+# * Wšo wot znamješka "#" hač do kónca linky je komentar
+# * Kóžda popisana linka je fragment regex (regularneho wuraza) kotryž so z mjenom hosta wěsteje URL přirunuje
+
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Hungarian (Magyar)
+ * @author Bdanee
+ */
+$messages['hu'] = array(
+       'captcha-edit'               => 'A lap szerkesztéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét. ([[Special:Captcha/help|segítség]])',
+       'captcha-addurl'             => 'Szerkesztésed új külső linket tartalmaz. A reklámokat elhelyező robotok kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi matematikai művelet eredményét. ([[Special:Captcha/help|segítség]])',
+       'captcha-badlogin'           => 'Az automatikus jelszófeltörés kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét ([[Special:Captcha/help|segítség]]):',
+       'captcha-createaccount'      => 'A felhasználói fiókok automatizált létrehozásának kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét. ([[Special:Captcha/help|segítség]])',
+       'captcha-createaccount-fail' => 'Hibás vagy hiányzó ellenőrző kód.',
+       'captcha-create'             => 'Az oldal elkészítéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét. ([[Special:Captcha/help|segítség]])',
+       'captchahelp-title'          => 'Captcha segítség',
+       'captchahelp-cookies-needed' => 'Engedélyezned kell a böngésződben a sütiket.',
+       'captchahelp-text'           => 'Az olyan weboldalakat, amelyekre bárki írhat, gyakran támadják meg spammerek olyan eszközök felhasználásával, amelyek képesek automatikusan, emberi felügyelet nélkül elhelyezni egy linket sok különböző oldalon. Az ilyen linkek kézi eltávolítása rengeteg energiát emésztene fel, ezért néha, különösen ha egy külső linket teszel egy cikkbe, a wiki egy valamilyen módon eltorzított szöveget (captcha-t) jelenít meg, és arra kér, hogy gépeld be azt. Mivel ezt automatikusan nagyon nehéz megtenni, a valódi szerkesztők így könnyen megkülönböztethetőek a spammerek robotjaitól.
+
+Sajnos ez komoly kényelmetlenséget jelenthet azoknak a felhasználóknak, akik gyengén látnak, vagy szöveges vagy hang-alapú böngészőt használnak. Jelenleg nem tudunk hang-alapú alternatívával szolgálni; ha a captcha megakadályoz abban, hogy szerkeszd a wiki, vedd fel a kapcsolatot az adminisztrátorokkal. Ahhoz, hogy a capctha-t meg tudd oldani, engedélyezned kell a sütiket a böngésződben.
+
+Ha a captcha megoldása helyett inkább visszatérnél a szöveg szerkesztéséhez, használd a böngésződ „vissza” gombját.',
+       'captcha-addurl-whitelist'   => '
+  #<!-- ezt a sort hagyd pontosan így --> <pre>  
+# A szintaktika a következő:  
+#  * Minden „#” karakterrel kezdődő sor megjegyzés
+#  * Minden nem üres sor egy reguláris kifejezés darabja, amely csak az URL-ekben található kiszolgálókra keres
+  #</pre> <!-- ezt a sort hagyd pontosan így -->',
+);
+
+/** Indonesian (Bahasa Indonesia)
+ * @author Borgx
+ */
+$messages['id'] = array(
+       'captcha-edit'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />
+([[Special:Captcha/help|info lengkap]])",
+       'captcha-addurl'             => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />
+([[Special:Captcha/help|info lengkap]])",
+       'captcha-badlogin'           => 'Untuk membantu perlindungan terhadap perengkahan kunci sandi otomatis, tolong masukkan kata atau hasil perhitungan sederhana berikut dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):',
+       'captcha-createaccount'      => 'Sebagai perlindungan melawan spam, Anda diharuskan untuk mengetikkan kata atau hasil perhitungan di bawah ini di kotak yang tersedia untuk dapat mendaftarkan pengguna baru:<br />
+([[Special:Captcha/help|info lengkap]])',
+       'captcha-createaccount-fail' => 'Kode konfirmasi salah atau belum diisi.',
+       'captcha-create'             => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />
+([[Special:Captcha/help|info lengkap]])",
+       'captchahelp-title'          => 'Mengenai Captcha',
+       'captchahelp-cookies-needed' => 'Anda perlu mengaktifkan cookie pada penjelajah web Anda untuk menggunakan fitur ini.',
+       'captchahelp-text'           => "Situs-situs web yang menerima masukan data dari publik, seperti {{ns:project}} ini, kerapkali disalahgunakan oleh pengguna-pengguna yang tidak bertanggungjawab untuk mengirimkan spam dengan menggunakan program-program otomatis. Walaupun spam-spam tersebut dapat dibuang, tetapi tetap saja menimbulkan gangguan berarti.
+
+Ketika menambahkan pranala web baru ke suatu halaman, {{ns:project}} akan menampilkan sebuah gambar tulisan yang terdistorsi atau suatu perhitungan sederhana dan meminta Anda untuk mengetikkan kata atau hasil dimaksud. Karena ini merupakan suatu pekerjaan yang sulit diotomatisasi, pembatasan ini akan mengizinkan hampir semua manusia untuk melakukannya, tapi di sisi lain akan menghentikan kebanyakan aksi spam dan penyerangan yang dilakukan oleh bot otomatis.
+
+Sayangnya, hal ini dapat menimbulkan kesulitan bagi pengguna dengan keterbatasan penglihatan atau pengguna yang menggunakan penjelajah basis teks atau suara. Saat ini, kami tidak memiliki suatu alternatif suara untuk hal ini. Silakan minta bantuan dari pengurus situs jika hal ini menghambat Anda untuk mengirimkan suntingan yang layak.
+
+Tekan tombol 'back' di penjelajah web Anda untuk kembali ke halaman penyuntingan.",
+);
+
+/** Icelandic (Íslenska)
+ * @author S.Örvarr.S
+ */
+$messages['is'] = array(
+       'captcha-edit'               => 'Til að breyta þessari grein, gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í
+kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-addurl'             => 'Breyting þín felur í sér viðbætta ytri tengla. Til að hjálpa okkur að verjast sjálfvirku
+auglýsingarusli gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-badlogin'           => 'Til að hjálpa okkur að verjast sjálfvirku leyniorðaárásum, gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í
+kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-createaccount'      => 'Til að hjálpa okkur að verjast sjálfvirkri gerð aðganga gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captcha-createaccount-fail' => 'Staðfestingarkóðinn var rangur eða ekki til staðar.',
+       'captcha-create'             => 'Til að búa síðuna til, gjörðu svo vel og finndu summuna að neðan og skrifaðu svarið í kassann ([[Special:Captcha/help|frekari upplýsinngar]]):',
+       'captchahelp-title'          => 'Captcha-hjálp',
+       'captchahelp-cookies-needed' => 'Þú verður að leyfa vefkökur til þess að þetta virki.',
+       'captchahelp-text'           => 'Vefsíður sem að leyfa framlög frá frá almenningi, líkt og þessi wiki-vefur, eru oft misnotaðar af svokölluðum „spömmurum“ sem nota sjálfvirk tól til þess að setja inn tengla á aðrar vefsíður. Aðrir notendur geta fjarlægt þessa tengla en töluverð truflun er af þeim.
+
+Stundum þegar þú breytir síðum, sérstaklega ef breytingin felur í sér nýja tengla á aðra vefi, getur gerst að þú sért beðin(n) um að skrifa inn orð sem birtast á lituðum eða óskýrum myndum. Fyrir flesta notendur af holdi og blóði er þetta lítið mál en sjálfvirk tól ráða ekki við þetta.
+
+Því miður kann þetta að valda notendum óþægindum sem hafa skerta sjón eða notast við talmálsvafra. Enn sem komið er eru ekki til aðrir valkostir fyrir þau tilvik. Ef þetta kemur í veg fyrir lögmætar breytingar af þinni hálfu getur þú leitað aðstoðar hjá stjórnendum vefsins.
+
+Notaðu „back“-hnapp vafrans til að halda áfram.',
+);
+
+/** Italian (Italiano)
+ * @author BrokenArrow
+ */
+$messages['it'] = array(
+       'captcha-edit'               => 'Per modificare la pagina è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella
+([[Special:Captcha/help|maggiori informazioni]]):',
+       'captcha-addurl'             => "La modifica richiesta aggiunge dei nuovi collegamenti esterni alla pagina; come misura precauzionale contro l'inserimento automatico di spam, è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella ([[Special:Captcha/help|maggiori informazioni]]):",
+       'captcha-badlogin'           => 'Come misura precauzionale contro i tentativi di forzatura automatica della password, è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella ([[Special:Captcha/help|maggiori informazioni]]):',
+       'captcha-createaccount'      => 'Come misura precauzionale contro i tentativi di creazione automatica degli account, per registrarsi è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella ([[Special:Captcha/help|maggiori informazioni]]):',
+       'captcha-createaccount-fail' => 'Codice di verifica errato o mancante.',
+       'captcha-create'             => 'Per creare la pagina è necessario risolvere il semplice calcolo presentato di seguito e inserire il risultato nella casella:<br />
+([[Special:Captcha/help|maggiori informazioni]]):',
+       'captchahelp-title'          => "Cos'è il captcha?",
+       'captchahelp-cookies-needed' => 'È necessario abilitare i cookie sul proprio browser per proseguire',
+       'captchahelp-text'           => "Capita spesso che i siti Web che accettano messaggi pubblici, come questo wiki, siano presi di mira da spammer che usano strumenti automatici per inserire collegamenti pubblicitari verso un gran numero di siti. Per quanto i collegamenti indesiderati si possano rimuovere, si tratta comunque di una seccatura non indifferente.
+
+In alcuni casi, ad esempio quando si tenta di aggiungere nuovi collegamenti Web in una pagina, il software wiki può mostrare una immagine con un breve testo colorato e/o distorto chiedendo di riscriverlo in un'apposita finestrella. Poiché si tratta di un'azione difficile da replicare da parte di un computer, questo meccanismo consente a (quasi tutti) gli utenti reali di completare l'inserimento desiderato, impedendo l'accesso alla maggior parte degli spammer e degli altri attacchi automatizzati.
+
+Sfortunatamente, queste misure di sicurezza possono mettere in difficoltà gli utenti con problemi visivi o coloro che utilizzano browser testuali o basati sulla sintesi vocale. Purtroppo al momento non è disponibile un meccanismo alternativo basato su messaggi audio; se queste procedure impediscono l'inserimento informazioni che si ritengono legittime, si prega di contattare gli amministratori del sito e chiedere loro assistenza.
+
+Fare clic sul pulsante 'back' del browser per tornare alla pagina di modifica.",
+       'captcha-addurl-whitelist'   => '  #<!-- non modificare in alcun modo questa riga --> <pre>  
+# La sintassi è la seguente:  
+#  * Tutto ciò che segue un carattere "#" è un commento, fino al termine della riga
+#  * Tutte le righe non vuote sono frammenti di espressioni regolari che si applicano al solo nome dell\'host nelle URL
+  #</pre> <!-- non modificare in alcun modo questa riga -->',
+);
+
+$messages['ja'] = array(
+       'captcha-edit'                => 'このページを編集するには下記に現れる数式の答えを入力してください。<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-addurl'              => 'あなたの編集には新たに外部リンクが追加されています。スパム防止のため、下記の数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-badlogin'            => '自動化スクリプトによるパスワードクラック攻撃を防止するため、下記に現れる数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-createaccount'       => 'スパム防止のため、アカウントを登録するには、下記に現れる数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captcha-createaccount-fail'  => '確認コードの入力がないか、間違っています。',
+       'captcha-create'              => 'あなたの編集は新たに外部リンクが追加されています。スパム防止のため、下記に現れる数式の答えを入力してください<br />
+([[Special:Captcha/help|詳細]])',
+       'captchahelp-title'           => 'Captcha ヘルプ',
+       'captchahelp-cookies-needed'  => 'ブラウザのクッキー機能を有効にする必要があります。',
+       'captchahelp-text'            => '当Wikiのような、投稿が公開されているウェブサイトは、多くのサイトに自分たちへのリンクを自動投稿するツールを用いるスパマーにより荒らされます。これらのスパムは除去できるものの、その作業大変うっとうしいものです。
+
+時々、特に新しいリンクをページに追加したとき、Wikiは色の付いた、もしくは、ゆがめられた文字を提示し、その入力をお願いすることがあります。この作業は自動化が難しいため、本当の人間の投稿を可能にしつつ、多くのスパマーやロボットの攻撃を防ぐことが出来ます。
+
+しかし、残念なことに、テキストベースやスピーチベースのブラウザを使っている、視覚障害者に不便をおかけする場合があります。現時点では、音声版の代替物がありません。正当な投稿をするにあたって、これが障害となっている場合、サイト管理者に連絡し、協力を求めてください。
+
+編集ページに戻るには、ブラウザの戻るボタンを押してください。',
+);
+
+$messages['kk-arab'] = array(
+       'captcha-edit' => 'بۇل بەتتٸ ٶڭدەۋ ٷشٸن, تٶمەندەگٸ قوسىندىلاۋدى شەشٸڭٸز دە, نٵتيجەسٸن
+اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-addurl' => 'تٷزەتۋٸڭٸزدە جاڭا سىرتقى سٸلتەمەلەر بار ەكەن. ٶزدٸكتٸك «سپام» جاسالۋىنان قورعانۋ ٷشٸن,
+تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى شەشٸڭٸز دە, نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-badlogin' => 'قۇپييا سٶزدٸ ٶزدٸكتٸك قيراتۋدان قورعانۋ ٷشٸن,
+تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى شەشٸڭٸز دە, نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-createaccount' => 'جاڭا تٸركەلگٸ ٶزدٸكتٸك جاسالۋىنان قورعانۋ ٷشٸن, تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى
+شەشٸڭٸز دە, نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captcha-createaccount-fail' => "كۋٵلاندىرۋ كودى دۇرىس ەمەس نەمەسە جوق.",
+       'captcha-create' => 'جاڭا بەتتٸ باستاۋ ٷشٸن, تٶمەندەگٸ قاراپايىم قوسىندىلاۋدى شەشٸڭٸز دە,
+نٵتيجەسٸن اۋماققا ەنگٸزٸڭٸز ([[{{ns:special}}:Captcha/help|كٶبٸرەك اقپارات]]):',
+       'captchahelp-title'          => 'CAPTCHA انىقتاماسى',
+       'captchahelp-cookies-needed' => "بۇل جۇمىس ٸستەۋ ٷشٸن, شولعىشىڭىزدا  «cookies»  دەگەندٸ ەندٸرٸڭٸز.",
+       'captchahelp-text'           => "ٶزدٸكتٸك قۇرالدارى بار «سپاممەرلەر», بارشادان جٸبەرٸلگەن حاباردى قابىلدايتىن, بۇل ۋيكي سيياقتى, ۆەب-توراپتارعا سٸلتەمەلەرٸمەن جيٸ جاۋدىرادى. وسىنداي «سپام» سٸلتەمەلەرٸن الاستاۋ بولعاندا دا, بۇل مٵندٸ ىزا كەلتٸرەدٸ.
+
+كەيدە, ٵسٸرەسە بەتكە جاڭا ۆەب سٸلتەمەسٸن قوسقاندا, ۋيكي ٶڭٸ ٶزگەرگەن نە قيسايعان مٵتٸندٸ كٶرسەتٸپ جٵنە سول سٶزدەردٸ ەنگٸزۋ سۇراۋى مٷمكٸن. بۇل تاپسىرىس ٶزدٸك تٷردە اتقارۋ ٶتە قيىن, سوندىقتان بۇل يماندى ادام كٶپشٸلٸگٸنە كەدەرگٸ بولمايدى, بٸراق «سپاممەرلەردٸ» جٵنە بۇزاقى بوتپەن باسقا شابۋىل جاساعانداردى توقتاتادى.
+
+ٶكٸنٸشكە وراي, بۇل كٶرۋٸ تٶمەندەگەن, نەمەسە مٵتٸن نە داۋىس نەگٸزٸندەگٸ شولعىشتى قولداناتىن پايدالانۋشىعا ىڭعايسىزدىق كەلتٸرۋگە مٷمكٸن. وسى قازٸر بٸزدە دىبىستى بالاما جوق. ەگەر بۇل ادال جازۋىڭىزعا كەدەرگٸلەسە, توراپ باقىلاۋشىلارىنا قاتىناسىڭىز.
+
+بۇل جۇمىستى ٸستەۋ ٷشٸن شولعىشىڭىزدا «cookies» دەگەندٸ ەندٸرۋ قاجەت.
+
+بەت ٶڭدەۋٸنە قايتۋ بارۋ ٷشٸن «ارتقا» دەگەن تٷيمەسٸن باسىڭىز."
+);
+
+$messages['kk-cyrl'] = array(
+       'captcha-edit' => 'Бұл бетті өңдеу үшін, төмендегі қосындылауды шешіңіз де, нәтижесін
+аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-addurl' => 'Түзетуіңізде жаңа сыртқы сілтемелер бар екен. Өздіктік «спам» жасалуынан қорғану үшін,
+төмендегі қарапайым қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-badlogin' => 'Құпия сөзді өздіктік қиратудан қорғану үшін,
+төмендегі қарапайым қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-createaccount' => 'Жаңа тіркелгі өздіктік жасалуынан қорғану үшін, төмендегі қарапайым қосындылауды
+шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captcha-createaccount-fail' => "Куәландыру коды дұрыс емес немесе жоқ.",
+       'captcha-create' => 'Жаңа бетті бастау үшін, төмендегі қарапайым қосындылауды шешіңіз де,
+нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):',
+       'captchahelp-title'          => 'CAPTCHA анықтамасы',
+       'captchahelp-cookies-needed' => "Бұл жұмыс істеу үшін, шолғышыңызда  «cookies»  дегенді ендіріңіз.",
+       'captchahelp-text'           => "Өздіктік құралдары бар «спаммерлер», баршадан жіберілген хабарды қабылдайтын, бұл уики сияқты, веб-тораптарға сілтемелерімен жиі жаудырады. Осындай «спам» сілтемелерін аластау болғанда да, бұл мәнді ыза келтіреді.
+
+Кейде, әсіресе бетке жаңа веб сілтемесін қосқанда, уики өңі өзгерген не қисайған мәтінді көрсетіп және сол сөздерді енгізу сұрауы мүмкін. Бұл тапсырыс өздік түрде атқару өте қиын, сондықтан бұл иманды адам көпшілігіне кедергі болмайды, бірақ «спаммерлерді» және бұзақы ботпен басқа шабуыл жасағандарды тоқтатады.
+
+Өкінішке орай, бұл көруі төмендеген, немесе мәтін не дауыс негізіндегі шолғышты қолданатын пайдаланушыға ыңғайсыздық келтіруге мүмкін. Осы қазір бізде дыбысты балама жоқ. Егер бұл адал жазуыңызға кедергілесе, торап бақылаушыларына қатынасыңыз.
+
+Бұл жұмысты істеу үшін шолғышыңызда «cookies» дегенді ендіру қажет.
+
+Бет өңдеуіне қайту бару үшін «Артқа» деген түймесін басыңыз."
+);
+
+$messages['kk-latn'] = array(
+       'captcha-edit' => 'Bul betti öñdew üşin, tömendegi qosındılawdı şeşiñiz de, nätïjesin
+awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-addurl' => 'Tüzetwiñizde jaña sırtqı siltemeler bar eken. Özdiktik «spam» jasalwınan qorğanw üşin,
+tömendegi qarapaýım qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-badlogin' => 'Qupïya sözdi özdiktik qïratwdan qorğanw üşin,
+tömendegi qarapaýım qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-createaccount' => 'Jaña tirkelgi özdiktik jasalwınan qorğanw üşin, tömendegi qarapaýım qosındılawdı
+şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captcha-createaccount-fail' => "Kwälandırw kodı durıs emes nemese joq.",
+       'captcha-create' => 'Jaña betti bastaw üşin, tömendegi qarapaýım qosındılawdı şeşiñiz de,
+nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):',
+       'captchahelp-title'          => 'CAPTCHA anıqtaması',
+       'captchahelp-cookies-needed' => "Bul jumıs istew üşin, şolğışıñızda  «cookies»  degendi endiriñiz.",
+       'captchahelp-text'           => "Özdiktik quraldarı bar «spammerler», barşadan jiberilgen xabardı qabıldaýtın, bul wïkï sïyaqtı, veb-toraptarğa siltemelerimen jïi jawdıradı. Osındaý «spam» siltemelerin alastaw bolğanda da, bul mändi ıza keltiredi.
+
+Keýde, äsirese betke jaña veb siltemesin qosqanda, wïkï öñi özgergen ne qïsaýğan mätindi körsetip jäne sol sözderdi engizw surawı mümkin. Bul tapsırıs özdik türde atqarw öte qïın, sondıqtan bul ïmandı adam köpşiligine kedergi bolmaýdı, biraq «spammerlerdi» jäne buzaqı botpen basqa şabwıl jasağandardı toqtatadı.
+
+Ökinişke oraý, bul körwi tömendegen, nemese mätin ne dawıs negizindegi şolğıştı qoldanatın paýdalanwşığa ıñğaýsızdıq keltirwge mümkin. Osı qazir bizde dıbıstı balama joq. Eger bul adal jazwıñızğa kedergilese, torap baqılawşılarına qatınasıñız.
+
+Bul jumıstı istew üşin şolğışıñızda «cookies» degendi endirw qajet.
+
+Bet öñdewine qaýtw barw üşin «Artqa» degen tüýmesin basıñız."
+);
+
+/** Korean (한국어)
+ * @author Klutzy
+ */
+$messages['ko'] = array(
+       'captcha-edit'               => '글을 편집하기 위해서는, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captcha-addurl'             => '편집 내용에 다른 웹 사이트 링크가 포함되어 있습니다. 자동 스팸을 막기 위해, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captcha-badlogin'           => '계정 암호 해킹을 막기 위해, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captcha-createaccount'      => '자동 가입을 막기 위해, 아래 문제의 답을 적어야만 가입이 가능합니다([[Special:Captcha/help|관련 도움말]]):',
+       'captcha-createaccount-fail' => '입력값이 잘못되었거나 없습니다.',
+       'captcha-create'             => '문서를 만들기 위해서는, 아래의 간단한 계산 값을 입력상자에 적어 주세요([[Special:Captcha/help|자세한 정보]]):',
+       'captchahelp-title'          => 'Captcha 도움말',
+       'captchahelp-cookies-needed' => '정상적으로 작동하려면 웹 브라우저의 쿠키 사용이 활성화되어있어야 합니다.',
+       'captchahelp-text'           => "이곳의 위키와 같이 사용자들의 공개적인 참여가 가능한 웹 사이트에서는, 자동 프로그램이 스팸을 뿌리는 경우가 있습니다. 물론 이러한 스팸은 제거할 수는 있지만 귀찮은 작업이 늘어납니다.
+
+이러한 스팸을 방지하기 위해서, 이곳 위키의 문서에 웹 사이트 주소를 추가하거나 하는 등의 행동을 할 경우에는, 비틀린 글자가 들어있는 그림을 보여주고 그 그림의 글자를 입력해 달라고 하는 경우가 있습니다. 이 글자 입력 작업은 자동 프로그램을 만들기가 힘들기 때문에, 스팸을 효과적으로 막으면서 일반 사용자를 막지 않을 수 있습니다.
+
+웹 브라우저에서 그림을 완벽하게 표시할 수 없거나, 또는 그림이 나오지 않는 텍스트 방식이나 음성 합성 방식 웹 브라우저를 사용하는 경우에는 이러한 입력이 불가능합니다. 아짂가지는 이런 경우에 대한 대안책이 없습니다. 이 경우 사이트 관리자에게 도움을 요청해주세요.
+
+이전의 편집창으로 돌아가려면 웹 브라우저의 '뒤로' 버튼을 눌러 주세요.",
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# 문법은 다음과 같습니다:
+#  * "#"로 시작하는 줄은 주석입니다.
+#  * 빈 줄이 아닌 줄은 정규식으로, URL의 호스트만을 검사합니다.
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['la'] = array(
+       'captcha-edit'                => 'Ad hanc paginam recensendum, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-addurl'              => 'Emendatione tua insunt nexus externi; ut spam automaticum vitemus, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-badlogin'             => 'Ut vitemus ne tesserae frangantur, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-createaccount'       => 'Ut creationem rationum automaticam vitemus, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captcha-createaccount-fail'  => 'Codex affirmationis aut non scriptus est aut male.',
+       'captcha-create'              => 'Ad paginam creandum, necesse est tibi solvere calculationem subter et responsum in capsam inscribere ([[Special:Captcha/help|Quidst illud?]]):',
+       'captchahelp-title'           => 'Captcha auxilium',
+);
+
+/** Luxembourgish (Lëtzebuergesch)
+ * @author Robby
+ * @author Siebrand
+ */
+$messages['lb'] = array(
+       'captcha-edit'               => "Fir dës Säit ze änneren, léist w.e.g. déi folgend Rechenaufgab a gitt d'Resultat an d'Këscht ënnendrënner an ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captcha-addurl'             => 'An ärer Ännerung sinn nei extern Linken. Fir eis virun automatiséiertem Spamming ze schütze froe mir iech fir déi folgend einfach  Rechenaufgab ze léisen an d\'Resultat an d\'Feld ënnen anzedroën. Klickt duerno w.e.g. nach eng Kéier op "Säit ofspäicheren" [[Special:Captcha/help|méi Informatiounen]].',
+       'captcha-badlogin'           => "Fir eis géint automatescht Hacke vu Passwierder ze schützen, léist w.e.g. déi einfach Additioun hei ënnendrënner an tippt d'Äntwert an d'Këscht ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captcha-createaccount'      => "Fir eis géint d'autamescht Uleeë vu Benotzerkonten ze schützen, léist w.e.g. déi einfach Additioun hei ënnendrënner an tippt d'Äntwert an d'Këscht ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captcha-createaccount-fail' => 'Falschen oder keen Konfirmatiouns-Code.',
+       'captcha-create'             => "Fir eng Nei Säit unzleeën, léist w.e.g. déi einfach Additioun hei ënnendrënner an tippt d'Äntwert an d'Këscht ([[Special:Captcha/help|méi Informatiounen]]):",
+       'captchahelp-title'          => 'Captcha-Hëllef',
+       'captchahelp-cookies-needed' => 'Dir musst Cookieën an ärem Browser erlaben fir dat dëst fonktionéiert.',
+       'captchahelp-text'           => "Websiten, déi jidferengem et erlaben Ännerunge virzehuelen, sou wéi op dëser wiki, ginn dacks vu sougenannte Spammer mëssbraucht, déi automatiséiert hir Linkën op vill Internetsitë setzen. Esou Spam-Linkë kënne wuel geläscht ginn, mee si sinn trotzdem e grousst Iergernëss.
+
+Heiandsdo, besonnesch wann nei Internet-Linkën op eng Säit derbäigesat ginn, weist dës Wiki iech e Bild mat farwegëm oder verzerrtëm Text a freet iech fir déi gewise Wierder anzetipppen. Well dëst eng Aufgab ass déi schwéier ze automatiséieren ass, erlaabt dëst dat Mënschen hir Ännerunge kënnen agi wärend déi meescht Spammer an aner Roboter-Attacken kënnen ofgewiert ginn.
+
+Leider kann dëst zu Schwierigkeete féiere fir Persounen déi net esou gutt gesinn oder déi text-baséiert oder sprooch-baséiert Browser benotzen. Zu dësem Zäitpunkt hu mir leider keng audio-Alternativ zu eiser Verfügung. Eng Léisung ass d'Umeldung als Benotzer oder kontaktéiert een Administrateur fir Hëllef wann dëst iech onerwarter Wäis vu legitimen Editen ofhält.
+
+Dréckt op den 'Zréck' Knäppchen vun ärem Browser fir an d'Beaarbectungsfënster zréckzekommen.",
+       'captcha-addurl-whitelist'   => '   #<!-- leave this line exactly as it is --> <pre>
+#  Syntax:
+#  * Alles mat engem #-Zeechen u bis zum Enn vun däer Zeil ass eng Bemierkung
+#  * All Zeil déi net eidel ass, ass ee Regex-Fragment, dat nëmme mat Hosten bannent URLë fonktionéiert
+   #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['lo'] = array(
+       'captcha-edit'               => 'ການດັດແກ້ ຂອງ ທ່ານ ມີລິ້ງູຄ໌ພາຍນອກ. ເພື່ອ ເປັນການຊ່ອຍປ້ອງກັນ ສະແປມອັດຕະໂນມັດ, ກະລຸນາແກ້ເລກບວກ ງ່າຍໆຂ້າງລຸ່ມນີ້ ແລ້ວ ພິມຄຳຕອບໃສ່ໃນ ກັບ ([[Special:Captcha/help|more info]]):',
+       'captcha-addurl'             => 'ການດັດແກ້ຂອງທ່ານ ມີ ການກາງລິ້ງຄ໌ຫາພາຍນອກ. ເພື່ອເປັນການຊ່ອຍປ້ອງກັນ ສະແປມອັດຕະໂນມັດ ກະລຸນາ ແກ້ເລກບວກງ່າຍໆຂ້າງລຸ່ມນີ້ ແລ້ວ ພິມຜົນບວກ ໃສ່ ກັບ ([[Special:Captcha/help|ຂໍ້ມູນເພີ່ມເຕີມ]]):',
+       'captcha-createaccount'      => 'ເພື່ອປ້ອງກັນ ການສ້າງບັນຊີແບບອັດຕະໂນມັດ, ກະລຸນາ ແກ້ເລກບວກງ່າຍໆ ຂ້າງລຸ່ມ ແລ້ວ ພິມຄຳຕອບໃສ່ ກັບ ([[Special:Captcha/help|more info]]):',
+       'captcha-createaccount-fail' => "ບໍ່ຖືກ ຫຼື ບໍ່ມີລະຫັດຢືນຢັນ.",
+       'captcha-create'             => 'ກະລຸນາ ແກ້ເລກບວກງ່າຍໆລຸ່ມນີ້ ແລະ ພິມຜົນບວກໃສ່ໃນກັບ ເພື່ອ ສ້າງໜ້ານີ້ ([[Special:Captcha/help|ຂໍ້ມູນເພີ່ມເຕີມ]]):',
+);
+
+/** Lithuanian (Lietuvių)
+ * @author Matasg
+ * @author Garas
+ */
+$messages['lt'] = array(
+       'captcha-edit'               => 'Kad redaguotumėte šį straipsnį, prašome apskaičiuokite šią paprastą sumą ir įveskite atsakymą į laukelį ([[Special:Captcha/help|daugiau informacijos]]):',
+       'captcha-createaccount-fail' => 'Blogas arba nerastas patvirtinimo kodas.',
+);
+
+/** Latvian (Latviešu)
+ */
+$messages['lv'] = array(
+       'captcha-edit'               => 'Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captcha-addurl'             => 'Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captcha-createaccount'      => 'Lai pasargātos no automātiskas mēstuļošanas, Tev reģistrējoties ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captcha-createaccount-fail' => 'Nepareizs apstiprinājuma kods vai arī tas nav ievadīts.',
+       'captcha-create'             => 'Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])',
+       'captchahelp-text'           => "Interneta lapas, kurās iespējams pievienot tekstu, kā šajā wiki, bieži cieš no mēstuļotājiem, kuri izmanto automatizētus līdzekļus, lai pievienotu savus saites daudzās jo daudzās interneta lapās. Kaut arī šīs saites var viegli dzēst, tomēr tās ir nozīmīgs traucēklis. Reizēm, jo īpaši pievienojot jaunas interneta saites, wiki programmatūra var parādīt Tev attēlu, kurā ir krāsains vai sagrozīts teksts. Šis teksts ir jāpārraksta un to ir ļoti grūti izdarīt automātiski, tā apgrūtinot lielāko daļu mēstuļotāju, savukārt gandrīz visi parastie lietotāji to var izdarīt bez grūtībām. Diemžēl tas var apgrūtināt lietotājus, kuriem ir redzes traucējumi vai kuri izmanto teksta pārlūkus vai dzirdes pārlūkus. Šobrīd nav pieejama audio alternatīva, bet sazinies ar wiki administratoriem, ja tas liedz Tev veikt labi domātus papildinājumus. Spied pārlūka pogu \"Atpakaļ\" (''Back''), lai atgrieztos iepriekšējā lapā.",
+);
+
+$messages['nan'] = array(
+       'captcha-createaccount'      => "Ūi beh ī-hông lâng iōng ke-si chū-tōng chù-chheh koh tah kóng-kò, chhiáⁿ lí kā chhut-hiān tī ang-á lāi-bīn ê jī phah 1 piàn (thang chèng-bêng lí m̄ sī ki-khì-lâng): <br />
+([[Special:Captcha/help|Che sī siáⁿ-hòe?]])",
+       'captcha-createaccount-fail' => "Khak-jīn-bé chhò-gō· iah-sī làu-kau.",
+);
+$messages['nds'] = array(
+       'captcha-edit'                => 'In dien Text steiht en nee Lenk na buten dat Wiki. Dat hier keen automaatsch instellten Spam rinkummt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount'       => 'Dat hier nich Brukers automaatsch anleggt warrt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount-fail'  => 'Kood to’n Bestätigen is verkehrt oder fehlt.',
+       'captchahelp-title'           => 'Help to Captchas',
+       'captcha-addurl-whitelist'    => ' #<!-- leave this line exactly as it is --> <pre>
+# Op disse Siet staht de Websteden, bi de en Bruker,
+# de nich anmellt is un en ne’en Lenk in de Siet infögen deit,
+# keen Captcha utfüllen mutt.
+#
+# Syntax is disse:
+#   * Allens vun en „#“-Teken bet na’t Enn vun de Reeg is en Kommentar
+#   * All de annern Regen, de nich leddig sünd, warrt as regulären Utdruck bekeken,
+#     de för Delen vun de Domään steiht.
+
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Low German (Plattdüütsch)
+ * @author Slomox
+ * @author Siebrand
+ */
+$messages['nds'] = array(
+       'captcha-edit'               => 'In dien Text steiht en nee Lenk na buten dat Wiki. Dat hier keen automaatsch instellten Spam rinkummt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount'      => 'Dat hier nich Brukers automaatsch anleggt warrt, musst du disse lütte Rekenopgaav lösen ([[Special:Captcha/help|mehr dorto]]):',
+       'captcha-createaccount-fail' => 'Kood to’n Bestätigen is verkehrt oder fehlt.',
+       'captchahelp-title'          => 'Help to Captchas',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Op disse Siet staht de Websteden, bi de en Bruker,
+# de nich anmellt is un en ne’en Lenk in de Siet infögen deit,
+# keen Captcha utfüllen mutt.
+#
+# Syntax is disse:
+#  * Allens vun en „#“-Teken bet na’t Enn vun de Reeg is en Kommentar
+#  * All de annern Regen, de nich leddig sünd, warrt as regulären Utdruck bekeken,
+#    de för Delen vun de Domään steiht.
+
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Dutch (Nederlands)
+ * @author Siebrand
+ * @author SPQRobin
+ */
+$messages['nl'] = array(
+       'captcha-edit'               => 'U wilt deze pagina bewerken. Voer alstublieft het antwoord op de onderstaande eenvoudige som in het invoervenster in ([[Special:Captcha/help|meer informatie]]):',
+       'captcha-addurl'             => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam alstublieft het antwoord op de onderstaande eenvoudige som in in het invoerveld ([[Special:Captcha/help|meer informatie]]):",
+       'captcha-badlogin'           => 'Los alstublieft de onderstaande eenvoudige som op en voer het antwoord in het invoervenster in ter bescherming tegen het automatisch kraken van wachtwoorden ([[Special:Captcha/help|meer informatie]]):',
+       'captcha-createaccount'      => 'Voer ter bescherming tegen geautomatiseerde spam het antwoord op de onderstaande eenvoudige som in het invoervenster in ([[Special:Captcha/help|meer informatie]]):',
+       'captcha-createaccount-fail' => 'De bevestigingscode ontbreekt of is onjuist.',
+       'captcha-create'             => 'U wilt een nieuwe pagina aanmaken. Voer alstublieft het antwoord op de onderstaande eenvoudige som in het invoervenster in ([[Special:Captcha/help|meer informatie]]):',
+       'captchahelp-title'          => 'Captcha-hulp',
+       'captchahelp-cookies-needed' => 'U dient in uw browser cookies ingeschakeld te hebben om dit te laten werken.',
+       'captchahelp-text'           => "Websites die vrij te bewerken zijn, zoals deze wiki, worden vaak misbruikt door spammers die er met hun programma's automatisch links op zetten naar vele websites. Hoewel deze externe links weer verwijderd kunnen worden, leveren ze wel veel hinder en administratief werk op.
+
+Soms, en in het bijzonder bij het toevoegen van externe links op pagina's, toont de wiki u een afbeelding met gekleurde of vervormde tekst en wordt u gevraagd de getoonde tekst in te voeren. Omdat dit proces lastig te automatiseren is, zijn vrijwel alleen mensen in staat dit proces succesvol te doorlopen en worden hiermee spammers en andere geautomatiseerde aanvallen geweerd.
+
+Helaas levert deze bevestiging voor gebruikers met een visuele handicap of een tekst- of spraakgebaseerde browser problemen op. Op het moment is er geen alternatief met geluid beschikbaar. Vraag alstublieft assistentie van de sitebeheerders als dit proces u verhindert een nuttige bijdrage te leveren.
+
+Klik op de knop 'terug' in uw browser om terug te gaan naar het tekstbewerkingsscherm.",
+       'captcha-addurl-whitelist'   => ' #<!-- laat deze regel zoals hij is --> <pre> 
+# De syntaxis is als volgt: 
+#   * Alle tekst vanaf het karakter "#" tot het einde van de regels wordt gezien als opmerking
+#   * Iedere niet-lege regel is een fragment van een reguliere uitdrukking die alleen van toepassing is op hosts binnen URL\'s
+ #</pre> <!-- laat deze regel zoals hij is -->',
+);
+
+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+ * @author Eirik
+ */
+$messages['nn'] = array(
+       'captcha-edit'               => 'For å endre denne sida, ver venleg og løys det enkle reknestykket nedanfor og skriv svaret i ruta ([[Special:Captcha/help|Kva er dette?]]):',
+       'captcha-addurl'             => 'Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])',
+       'captcha-badlogin'           => 'For å sikra oss mot automatisk passordtjuveri, ver venleg og skriv inn svaret på det enkle reknestykket i boksen nedanfor ([[Special:Captcha/help|meir informasjon]]):',
+       'captcha-createaccount'      => 'For å verne Wikipedia mot reklame (spam) må du skrive inn orda i biletet for å registrere ein konto. <br />([[Special:Captcha/help|Kva er dette?]])',
+       'captcha-createaccount-fail' => 'Feil eller manglande godkjenningskode.',
+       'captcha-create'             => 'For å opprette denne sida, ver venleg og løys det enkle reknestykket nedanfor og skriv svaret i ruta ([[Special:Captcha/help|Kva er dette?]]):',
+       'captchahelp-title'          => 'Captcha-hjelp',
+       'captchahelp-cookies-needed' => 'Du må ha informasjonskapslar aktivert i nettlesaren din for at dette skal verke.',
+       'captchahelp-text'           => 'Internettsider som kan verte endra av alle, som denne wikien, vert ofte misbrukte av reklameinnleggjarar (spammarar) som nyttar bottar til å poste mange lenkjer om gongen. Sjølv om slike reklamelenkjer kan verte fjerna er dei til stor irritasjon. 
+
+Nokre gonger, særleg viss du vil leggje til nye internettlenker til ei side, kan wikien vise deg eit bilete av ein farga eller ujamn tekst og be deg skrive inn orda som vert viste. Sidan det er vanskeleg å automatisere denne oppgåva, vil funksjonen sleppe dei fleste verkelege menneska gjennom, men stoppe reklamerobotar.
+
+Diverre finst det i augeblikket ikkje noko lydalternativ for brukarar med nedsett syn som brukar tekst- eller talebaserte nettlesarar. Ver venleg å kontakte administratorane viss denne funksjonen hindrar deg i å gjere skikkelege endringar. Trykk på «attende»-knappen for å kome tilbake til endringssida.',
+       'captcha-addurl-whitelist'   => '  #<!-- la denne lina vere akkurat som ho er --> <pre>  
+# Syntaksen er slik:  
+#  * Alt frå teiknet «#» til enden av lina er ein kommentar
+#  * Alle liner som ikkje er tomme er fragment av regulære uttrykk som sjekkar vertar i URL-ar
+  #</pre> <!-- la denne lina vere akkurat som ho er -->',
+);
+
+/** Norwegian (‪Norsk (bokmål)‬)
+ * @author Jon Harald Søby
+ * @author Siebrand
+ */
+$messages['no'] = array(
+       'captcha-edit'               => 'For å redigere denne artikkelen, vennligst skriv inn summen nedenfor i boksen ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-addurl'             => 'Din redigering inneholder nye eksterne lenker. For å hjelpe oss å beskytte oss mot automatisk spam, vennligst skriv inn summen av dette enkle regnestykket i boksen nedenfor ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-badlogin'           => 'For å hjelpe oss med å beskytte oss mot automatisk passordtyveri, vennligst løs det enkle regnestykket nedenfor og skriv inn svaret i bosken ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-createaccount'      => 'For å hjelpe oss med å beskytte oss mot automatisk kontoopprettelse, vennligst skriv inn summen av det enkle regnestykket i boksen nedenfor ([[Special:Captcha/help|mer informasjon]]):',
+       'captcha-createaccount-fail' => 'Ukorrekt eller manglende bekreftelseskode.',
+       'captcha-create'             => 'For å opprette siden, vennligst skriv inn summen av det enkle regnestyket i boksen nedenfor ([[Special:Captcha/help|mer informasjon]]):',
+       'captchahelp-title'          => 'Captcha-hjelp',
+       'captchahelp-cookies-needed' => 'Du må slå på informasjonskapsler for at dette skal fungere.',
+       'captchahelp-text'           => 'Internettsider som kan redigeres av alle, som denne wikien, blir ofte misbrukt av spammere som bruker roboter for å poste massive antall lenker. Selv om slike spamlenker kan fjernes er de til betydelig irritasjon.
+
+Noen ganger, særlig hvis du vil legge til nye internettlenker til en side, kan wikien vise deg et bilde av en farvet eller ujevn tekst og be deg skrive inn ordene som vises. Siden det er vanskelig å automatisere denne oppgaven, vil funksjonen slippe de fleste virkelige mennesker igjennom, men stoppe spammere.
+
+Dessverre finnes det i øyeblikket ikke noe audioalternativ for brukere med begrenset syn som som bruker tekst- eller talebaserte nettlesere. Vennlig kontakt administratorene hvis denne funksjonen forhindrer deg i å foreta legitime endringer.
+
+Trykk på «tilbake»-knappen for å komme tilbake til redigeringssiden.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Syntaksen er som følger:
+#  * Alle linjer som begynner med «#» er kommentarer
+#  * Alle linjer som ikke er blanke er fragmenter av regulære uttrykk som sjekker verter i URL-er
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Occitan (Occitan)
+ * @author Cedric31
+ */
+$messages['oc'] = array(
+       'captcha-edit'               => "Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : ([[Special:Captcha/help|Qu'es aquò?]])",
+       'captcha-addurl'             => "Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu'es aquò?]])",
+       'captcha-badlogin'           => "Per ensajar de contornar las temptativas de cracatge de senhals automatizadas per de robòts, recopiatz lo tèxt çaijós dins la boita de tèxt plaçada al dejos d'aqueste. ([[Special:Captcha/help|Mai d’entre-senhas]])",
+       'captcha-createaccount'      => 'Coma proteccion contra las creacions de compte abusivas, entratz lo resultat de l’addicion dins la boita çaijós:<br />
+([[Special:Captcha/help|mai d’informacions]])',
+       'captcha-createaccount-fail' => 'Còde de confirmacion mancant o erronèu.',
+       'captcha-create'             => "Per modificar la pagina, vos cal de resòldre l'operacion çaijós e n'inscriure lo resultat dins lo camp ([[Special:Captcha/help|Mai d'infòs]]) :",
+       'captchahelp-title'          => 'Ajuda suls Captcha',
+       'captchahelp-cookies-needed' => "Devètz aver los cookies activats dins vòstre navegaire per qu'aquò foncione.",
+       'captchahelp-text'           => "Los sites webs que permeton al mai grand nombre de participar, coma aqueste wiki, son sovent atacats per de spammers qu'utilizan d'espleches automatizas per mandar lor ligams sus de fòrça sites sulcòp. Son fòrt aisits de suprimir mas avèm francament de causas mai risolièras de far. De còps quand ajustatz de ligams novèls vèrs lo web, lo wiki pòt vos mostrar un imatge amb un tèxt coloriat o torçut e vos demandar de lo picar. Es una tasca relativament complicada d'automatizar, çò que permet de diferenciar un uman real d'un logicial automatic malvolent. Malaürosament, aqueste sistèma es pas adaptat a d'utilizaires mal-vesents o utilizant de navigaires textuals o audiò. Actualament, prepausem pas d'alternativas adaptadas. Se avètz besonh d'ajuda esitetz pas a contactar los administrators del sit. Clicatz sul boton 'precedent' de vòstre navegaire per tornar a l'editor.",
+       'captcha-addurl-whitelist'   => '#<!-- daissatz aquesta linha exactament tala coma es --> <pre> # La sintaxi es la seguenta: # * Tot caractèr seguissent "#" fins a la fin de la linha serà interpretat coma un comentari # * Tota linha non voida es un còde regex que serà utilizat unicament a l\'interior dels ligams hypertext. #</pre> <!-- daissatz aquesta linha exactament tala coma es -->',
+);
+
+/** Polish (Polski)
+ * @author Sp5uhe
+ * @author Derbeth
+ */
+$messages['pl'] = array(
+       'captcha-edit'               => 'Edytowanie tej strony jest możliwe dopiero po rozwiązaniu poniższego prostego działanie matematycznego i wpisaniu wyniku do pola obok ([[Special:Captcha/help|wyjaśnienie]]):',
+       'captcha-addurl'             => 'Dodałeś nowe linki zewnętrzne. Ze względu na ochronę przed zautomatyzowanym spamem musisz wykonać proste działanie matematyczne i wpisać wynik w pole obok ([[Special:Captcha/help|więcej informacji]]):',
+       'captcha-badlogin'           => 'Ze względu na zabezpieczenie przed automatycznym łamaniem haseł prosimy o rozwiązanie tego prostego zadania i wpisanie odwiedzi w pole obok ([[Special:Captcha/help|więcej informacji]])',
+       'captcha-createaccount'      => 'Ze względu na ochronę przed automatycznym [[wikipedia:pl:spam|spamem]], aby się zarejestrować musisz wpisać w pole poniżej wynik prostego działania matematycznego ([[Special:Captcha/help|wyjaśnienie]]):',
+       'captcha-createaccount-fail' => 'Niepoprawny kod lub brak kodu potwierdzajacego.',
+       'captcha-create'             => 'Aby utworzyć stronę wykonaj proste działanie i wpisz wynik w pole tekstowe ([[Special:Captcha/help|więcej informacji]]):',
+       'captchahelp-title'          => 'Pomoc dla ochrony antyspamowej',
+       'captchahelp-cookies-needed' => 'Musisz mieć włączone w przeglądarce ciasteczka (cookies), aby ta opcja działała.',
+       'captchahelp-text'           => 'Strony internetowe akceptujące edycje dokonywane przez każdego, jak to wiki, są często atakowane przez [[wikipedia:pl:spam|spammerów]], którzy używają automatycznych narzędzi, by dodawać linki do swoich stron. Chociaż te linki mogą być usunięte, jest to uciążliwe. 
+
+Czasami, zwłaszcza przy dodawaniu nowych linków do strony albo przy rejestracji, wiki może pokazać obrazek z kolorowym lub zniekształconym tekstem i poprosić Cię o przepisanie zamieszczonego na nim wyrazu. Może pojawić się też prośba o wpisanie wyniku prostego działania matematycznego. Ponieważ są to zadania trudne do zautomatyzowania, to zabezpieczenie pozwoli większości ludzi dokonywać edycji, powstrzymując jednocześnie większość spammerów i inne automatyczne ataki. 
+
+Niestety, może być to niewygodne dla użytkowników z wadą wzroku lub używających przeglądarek tekstowych lub głosowych. Obecnie nie mamy alternatywnego rozwiązania audio. Skontaktuj się z administratorami strony by uzyskać pomoc, jeśli nie możesz z tego powodu dokonywać prawidłowych edycji. Zwróć uwagę na to, że musisz mieć włączone ciasteczka (cookies).
+
+Wciśnij przycisk "wstecz" w swojej przeglądarce by powrócić do edycji strony.',
+       'captcha-addurl-whitelist'   => ' #<!-- nie modyfikuj tej linii --> <pre> 
+# Składnia jest następująca: 
+#   * Linie zaczynające się od znaku "#" są komentarzami
+#   * Każda linia, która nie jest pusta, jest wyrażeniem regularnym, które ma pasować do adresu serwera (fragmentu URL)
+ #</pre> <!-- nie modyfikuj tej linii -->',
+);
+
+/** Piemontèis (Piemontèis)
+ * @author Bèrto 'd Sèra
+ * @author Siebrand
+ */
+$messages['pms'] = array(
+       'captcha-edit'               => "Për fe-ie dle modìfiche ansima a st'artìcol-sì, për piasì ch'a fasa ël total ambelessì sota 
+e ch'a buta l'arzulta ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-addurl'             => "Soa modìfica a la gionta dj'anliure esterne. Për giutene a vardesse da la reclam aotomatisà, për piasì ch'a fasa ël total ambelessì sota e ch'a buta l'arzultà ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-badlogin'           => "Për giutene a vardesse da 'nt ij programa ch'a fan ciav fàosse n'aotomàtich, për piasì ch'a fasa ël total ambelessì sota e ch'a buta l'arzultà ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-createaccount'      => "Për giutene a vardesse da ij programa ch'a deurbo dij cont n'aotomàtich, për piasì ch'a fasa ël total ambelessì sota 
+e ch'a buta l'arzultà ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captcha-createaccount-fail' => "Ël còdes ëd verìfica ò ch'a manca d'autut ò ch'a l'é pa bon.",
+       'captcha-create'             => "Për creé d'amblé sta pàgina-sì, për piasì ch'a fasa ël total ambelessì sota e ch'a buta l'arzultà 
+ant ël quadrèt ([[Special:Captcha/help|për savejne dë pì]]):",
+       'captchahelp-title'          => 'Còs é-lo mai ës captcha?',
+       'captchahelp-cookies-needed' => "Për podej dovré sossì a l'ha da manca che sò navigator (browser) a pija ij cookies.",
+       'captchahelp-text'           => "Soèns a-i riva che ij sit dla Ragnà che la gent a peul dovré për ëscrive chèich-còs, coma sta wiki-sì, a resto ambërlifà ëd reclam da màchine che a carìo soa ròba dadsà e dadlà n'aotomàtich. Për tant che sta reclam un a peula peuj gavela, a resta sempe un gran fastudi.
+
+Dle vire, dzortut quand un a caria dj'anliure esterne neuve ansime a na pàgina, la wiki a peul ësmon-je na figurin-a con dël test colora ò pura tut ëstòrt e ciameje d'arbate lòn ch'a-i é scrit andrinta. Da già ch'a l'é grama scrive un programa ch'a lo fasa, a ven che la pì gran part dla gent a-i la fa a scrive, ma la ói part dle màchine a-i la fa pa.
+
+Për maleur sossì a peul fastudié j'uetnt ch'a ës-ciàiro nen tant bin, col ch'a dòvro dij navigator mach a test ò pura dij navigator vocaj. Për adess i l'oma nen n'altërnativa disponibila ch'a fasa lese ël test a vos. Për piasì, ch'a contata j'aministrator dël sit se sossì a dovèissa mai nen lasseje carié dël test ch'a sia legitim (visadì, nen dla reclam).
+
+Ch'a-i bata ansima al boton 'andré' ant sò navigator për torné andré a l'editor dla pàgina.",
+       'captcha-addurl-whitelist'   => "  #<!-- leave this line exactly as it is --> <pre>
+# La sintassi a l'é costa:
+#  * tut lòn ch'a-i ven dapress a un caràter \"#\" (fin-a a la fin dla riga) a l'é mach ëd coment
+#  * minca riga nen veujda a l'é un frament d'espression regolar ch'as dòvra për identifiché j'adrësse dle màchine servente ant j'anliure
+  #</pre> <!-- leave this line exactly as it is -->",
+);
+
+/** Pashto (پښتو)
+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
+ */
+$messages['ps'] = array(
+       'captcha-create'             => 'ددې لپاره چې نوی ليکنه ترسره کړی، لطفاً د همدغه ساده شمېرو ځواب په ورکړ شوي چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):',
+       'captchahelp-cookies-needed' => 'ددې کړنې د ترسره کېدلو لپاره تاسو ته پکار ده چې د خپل کتنمل (browser) کوکيز (cookies) چارن کړی.',
+);
+
+$messages['pt'] = array(
+       'captcha-edit'                => 'Para editar esta página será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captcha-addurl'              => 'Sua edição inclui novas ligações externas; como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captcha-badlogin'             => 'Como prevenção contra formas automatizadas de pesquisa e descoberta de senhas, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captcha-createaccount'       => 'Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem para que possa se cadastrar:<br />
+([[Special:Captcha/help|O que é isto?]])',
+       'captcha-createaccount-fail'  => 'Código incorreto ou não preenchido.',
+       'captcha-create'              => 'Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])',
+       'captchahelp-title'           => 'Ajuda com o Captcha',
+       'captchahelp-cookies-needed'  => 'Você precisará ter cookies habilitados em seu navegador para que possa funcionar',
+       'captchahelp-text'            => 'Sítios abertos a inserções públicas, como é o caso deste wiki, são vulneráveis a spammers que utilizem ferramentas automatizadas para inserir seus links em diversos locais. Remover tais links posteriormente poderá ser um significativo incômodo.
+
+Algumas vezes, especialmente ao adicionar novos links externos em uma página, o sistema exibirá uma imagem com um texto colorido ou distorcido e pedirá que você digite as palavras exibidas. Uma vez que essa é uma tarefa um tanto difícil de ser automatizada, ela possibilita que vários humanos façam as suas inserções ao mesmo tempo que inibe as que forem feitas por spammers e mecanismos automatizados.
+
+Infelizmente, isso pode ser dificultoso a utilizadores com limitações visuais ou que naveguem através de  mecanismos baseados em texto ou baseados em voz. No momento não há uma alternativa em áudio. Por gentileza, contacte os administradores do sítio em casos que seja necessária a assistência de alguém para que você possa fazer as suas inserções legítimas.
+
+Pressione o botão \'voltar\' de seu navegador para retornar à página de edição.',
+);
+
+
+/** Romanian (Română)
+ * @author KlaudiuMihaila
+ */
+$messages['ro'] = array(
+       'captcha-edit'               => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-addurl'             => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-badlogin'           => 'Ca măsură de protecţie împotriva spargerii de parole, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-createaccount'      => 'Pentru a evita crearea automată de conturi, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captcha-createaccount-fail' => 'Cod de confirmare incorect sau lipsă.',
+       'captcha-create'             => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',
+       'captchahelp-title'          => 'Despre „Captcha”',
+       'captchahelp-cookies-needed' => 'Trebuie ca browserul dumneavoastră să accepte cookie-uri pentru ca aceasta să funcţioneze.',
+       'captchahelp-text'           => 'Siturile Web care acceptă postări din partea publicului, precum acest wiki, sunt de obicei abuzate de persoane care folosesc unelte automate pentru a introduce legături către multe situri. Deşi aceste legături de spam pot fi scoase, acest lucru reprezintă o muncă inconvenientă.
+
+Uneori, mai ales la adăugarea de legături web noi într-o pagină, situl wiki vă poate arăta o imagine cu un text colorat sau distorsionat şi ruga să introduceţi cuvintele arătate. Deoarece aceasta este o sarcină greu de automatizat, va permite majorităţii persoanelor reale să posteze şi va opri majoritatea atacatorilor.
+
+Din nefericire, această metodă îi poate deranja pe utilizatorii cu vedere limitată sau care folosesc browsere bazate pe text sau sunet. În acest moment nu avem o alternativă audio disponibilă. Vă rugăm, contactaţi administratorii sitului pentru asistenţă dacă metoda vă opreşte de la a face postări legitime.
+
+Va fi nevoie ca browserul folosit să suporte module cookie.',
+);
+
+/** Russian (Русский)
+ * @author Kalan
+ * @author .:Ajvol:.
+ * @author Siebrand
+ */
+$messages['ru'] = array(
+       'captcha-edit'               => 'Чтобы отредактировать страницу, решите простой пример и введите ответ в текстовое поле ([[{{ns:special}}:Captcha/help|что это?]]):',
+       'captcha-addurl'             => 'Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />
+([[{{ns:special}}:Captcha/help|Что это такое?]])',
+       'captcha-badlogin'           => 'В целях защиты от автоматического взлома пароля, пожалуйста, выполните следующее простое арифметическое действие и введите ответ в текстовое поле ниже ([[Special:Captcha/help|подробнее]]):',
+       'captcha-createaccount'      => 'В качестве меры против автоматического спама, вы должны ввести буквы, изображённые на картинке, чтобы зарегистрироваться в системе:<br />
+([[{{ns:special}}:Captcha/help|Что это такое?]])',
+       'captcha-createaccount-fail' => 'Код подтверждения отсутствует или неверен.',
+       'captcha-create'             => 'Чтобы создать страницу, решите простой пример и введите ответ в текстовое поле ([[{{ns:special}}:Captcha/help|что это?]]):',
+       'captchahelp-title'          => 'Справка о CAPTCHA',
+       'captchahelp-cookies-needed' => 'Вам нужно включить куки в браузере, чтобы эта функция заработала.',
+       'captchahelp-text'           => 'Вебсайты позволяющие добавлять и изменять своё содержимое, в том числе вики, часто становятся целью спамеров, использующих программы для автоматического добавления ссылок. Хотя такие ссылки могут быть удалены, они являются существенной помехой.
+
+Иногда, например при добавлении на страницу новой веб-ссылки, вики может показать вам картинку с цветным или искажённым текстом и предложить ввести текст, который вы видите. Так как подобная задача трудноавтоматизируема, это даёт возможность большинству людей разместить свои изменения, в то время как большинство спамерских и вандальных программ не могут это сделать.
+
+К сожалению, подобная защита может причинить неудобства людям с ограничениями по зрению или тем, кто использует читающие браузеры. В настоящее время у нас нет звуковой альтернативы данной проверке. Пожалуйста, обратитесь за помощью к администраторам, если подобная проверка мешает вам добросовестно работать с сайтом.
+
+Нажмите кнопку «Назад» в ваше браузере, чтобы вернуться к редактированию.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Описание синтаксиса:
+#  * Всё, начиная с символа "#" и до конца строки считается комментарием
+#  * Каждая непустая строка считается фрагментом регулярного выражения соответствующего имени узла в URL
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Yakut (Саха тыла)
+ * @author HalanTul
+ */
+$messages['sah'] = array(
+       'captcha-edit'               => 'Сирэйи уларытыаххын баҕардаххына, манна баар примеры суоттаа уонна эппиэтин аналлаах сиргэ суруй ([[{{ns:special}}:Captcha/help|сиһилии]]):',
+       'captcha-addurl'             => 'Тас саайка ыйынньык туруорбуккун; спаамтан көмүскэнэр соруктаах суолу толор - манна баар буукубалары хатылаа: <br />
+([[{{ns:special}}:Captcha/help|Сиһилии]])',
+       'captcha-badlogin'           => 'Киирии тылы аптамаат алдьаппатын туһугар оҥоһуллубут харыстыыр дьайыыны толор, манна баар примеры суоттаа уонна эппиэтин анал сиргэ суруй ([[Special:Captcha/help|сиһилии]]):',
+       'captcha-createaccount'      => 'Бэлиэтэнэргэр аптамаатынан алдьатыыттан харыстыыр соруктаах дьайыыны оҥор, манна баар буукубалары анал сиргэ киллэр:<br />
+([[{{ns:special}}:Captcha/help|Сиһилии]])',
+       'captcha-createaccount-fail' => 'Бигэргэтии куода суох эбэтэр атын.',
+       'captcha-create'             => 'Сирэйи оҥорорго бу примеры суоттаа ([[{{ns:special}}:Captcha/help|сиһилии]]):',
+       'captchahelp-title'          => 'Captcha көмөтө',
+       'captchahelp-cookies-needed' => 'Бу дьайыы үлэлиирин курдук браузергар куукины холбоо.',
+);
+
+/** Scots (Scots)
+ * @author OchAyeTheNoo
+ */
+$messages['sco'] = array(
+       'captcha-edit' => 'Tae edit this airticle, please dae the eisy sum ablo an put the answer in the box ([[Special:Captcha/help|mair info]])',
+);
+
+/** Slovak (Slovenčina)
+ * @author Helix84
+ * @author Robbot
+ */
+$messages['sk'] = array(
+       'captcha-edit'               => 'Aby ste mohli upravovať tento článok, vyriešte prosím tento jednoduchý súčet a napíšte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',
+       'captcha-addurl'             => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',
+       'captcha-badlogin'           => 'Ako ochranu proti automatizovanému lámaniu hesiel, prosím vyriešte nasledujúci súčet a zadajte ho do poľa pre odpoveď ([[Special:Captcha/help|viac informácií]]):',
+       'captcha-createaccount'      => 'Kvôli ochrane proti automatizovanému spamu je potrebné napísať slová zobrazené na tomto obrázku, až potom bude vytvorený nový účet:
+<br />([[Special:Captcha/help|Čo je toto?]])',
+       'captcha-createaccount-fail' => 'Nesprávny alebo chýbajúci potvrdzovací kód.',
+       'captcha-create'             => 'Aby ste mohli vytvoriť túto stránku, vyriešte prosím tento jednoduchý súčet a napíšte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',
+       'captchahelp-title'          => 'Pomocník ku captcha',
+       'captchahelp-cookies-needed' => 'Aby toto fungovalo, budete si musieť v prehliadači zapnúť koláčiky (cookies).',
+       'captchahelp-text'           => 'Webstránky prijímajúce príspevky od verejnosti ako táto wiki sú často cieľom zneužitia spammermi, ktorí používajú automatizované nástroje na to, aby svoje odkazy umiestnili na množstvo stránok. Hoci je možné tieto odkazy odstrániť, zbytočne to zaťažuje používateľov.
+
+Niekedy, obzvlášť keď pridávate webové odkazy k článkom, wiki vám môže zobraziť obrázok so zafarbeným alebo pokriveným textom a požiadať Vás o prepísanie zobrazených slov. Keďže takúto úlohu je ťažké zautomatizovať a umožní skutočným ľuďom poslať svoje príspevky, zastaví to väčšinu spammerov a iných robotických útočníkov.
+
+Naneštastie, môže to byť prekážkou pre používateľov so zrakovým postihnutím alebo tých, ktorí používajú textové alebo hovoriace prehliadače. Momentálne nemáme dostupnú audio zvukovú alternatívu. Kontaktujte prosím správcov stránok, ak vám to neočakávane komplikuje umiestňovanie oprávnených príspevkov.
+
+Stlačením tlačidla „späť“ vo vašom prehliadači sa vrátite do editora stránky.',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre> 
+# Syntax je nasledovná: 
+#   * Všetko od znaku „#“ do konca riadka je komentár
+#   * Každý neprázdny riadok je fragment regulárneho výrazu, ktorého zhody budú iba stroje v rámci URL
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Slovenian (Slovenščina)
+ */
+$messages['sl'] = array(
+       'captcha-edit'               => 'Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])',
+       'captcha-addurl'             => 'Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])',
+       'captcha-createaccount'      => 'Za registracijo je zaradi zaščite pred neželenimi reklamnimi sporočili treba vpisati prikazane besede: <br />([[{{ns:special}}:Captcha|Kaj je to?]])',
+       'captcha-createaccount-fail' => 'Nepravilna ali manjkajoča potrditvena koda.',
+       'captcha-create'             => 'Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])',
+       'captchahelp-title'          => 'Pomoč za captcha',
+       'captchahelp-text'           => "Spletne strani, ki omogočajo objavljanje širši javnosti, kot na primer ta wiki, pogosto zlorabljajo spamerji, ki za objavo svojih povezav na mnogih straneh uporabljajo avtomatizirana orodja. Čeprav se te neželene povezave da odstraniti, so precejšnja nadloga.
+
+Včasih, zlasti pri dodajanju novih spletnih povezav na stran, vam bo morda wiki prikazal sliko obarvanega ali popačenega besedila in zahteval vpis prikazanih besed. Ker je to opravilo težko avtomatizirati, bo s tem večini ljudi objavljanje dovoljeno, spamerji in druge robotski napadalci pa bodo ustavljeni.
+
+Žal lahko to povzroči nevšečnosti uporabnikom s slabim vidom in tistim, ki uporabljajo besedilne ali govorne brskalnike. Glasovna možnost trenutno še ni na razpolago. Če vam to nepričakovano preprečuje legitimno objavo, se, prosimo, obrnite na administratorje spletišča.
+
+Za vrnitev v urejevalnik izberite gumb 'nazaj' vašega brskalnika.",
+);
+
+/** Albanian (Shqip)
+ */
+$messages['sq'] = array(
+       'captcha-edit'               => 'Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])',
+       'captcha-addurl'             => 'Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])',
+       'captcha-createaccount'      => 'Për mbrojtje kundër regjistrimeve automatike duhet të zgjidhni ekuacionin e mëposhtëm para se të hapni llogarinë:<br />([[Special:Captcha|Çfarë është kjo?]])',
+       'captcha-createaccount-fail' => 'Mesazhi që duhej shtypur mungon ose nuk është shtypur siç duhet.',
+       'captcha-create'             => 'Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])',
+       'captchahelp-title'          => 'Ndihmë rreth sistemit "Captcha"',
+       'captchahelp-text'           => 'Faqet e rrjetit që pranojnë shkrime nga publiku, siç është edhe kjo wiki, shpesh abuzohen nga njerëz që duan të përfitojnë duke reklamuar ose promovuar lidhjet e tyre. Këto lloj abuzimesh mund të hiqen kollaj por janë një bezdi dhe shpenzim kohe i papranueshëm.
+
+Ndonjëherë, sidomos kur po hapni një llogari të re apo kur po shtoni lidhje të reja nëpërmjet redaktimit tuaj, sistemi mund t\'ju shfaqi një figurë që përmban fjalë me gërma ose numra të shtrembruara ose me ngjyra të ndryshme të cilat ju duhet të shtypni para se të mund të kryeni veprimin në fjalë. Kjo bëhet pasi është shumë e vështirë për një robot ose mjet automatik të kryejë të njëjtën punë. Kështu mund të dallohet nëse jeni me të vërtetë një njeri apo një robot. Ky lloj sistemi s\'mund të ndalojë tërë abuzimet por ndalon një pjesë të mirë të tyre, sidomos ato që janë automatike dhe të shumta në numër.
+
+Fatkeqësisht ky lloj sistemi mund të bezdisi përdoruesit me pamje të kufizuar ose ata që përdorin mjete teksti ose shfletues leximi me zë. Tani për tani nuk kemi mundësi për të ofruar një sistem me zë në vend të figurave. Ju lutem lidhuni me administruesit nëse ky sistem po ju ndalon të jepni kontribute të vlefshme.
+
+Shtypni butonin "prapa" ("back") të shfletuesit tuaj për tu kthyer tek faqja e mëparshme.',
+);
+
+/** Seeltersk (Seeltersk)
+ * @author Pyt
+ */
+$messages['stq'] = array(
+       'captcha-edit'               => 'Tou Beoarbaidenge fon ju Siede löös ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captcha-addurl'             => 'Dien Beoarbaidenge änthaalt näie externe Ferbiendengen. Toun Schuts foar automatisierde Spammenge löös ju ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien. Klik dan fonnäien ap „Siede spiekerje“ [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captcha-badlogin'           => 'Toun Schuts foar ne Kompromittierenge fon dien Benutserkonto löös ju ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]]:',
+       'captcha-createaccount'      => 'Toun Schuts foar automatisierden Anloage fon Benutserkonten löös ju ätterfoulgjende Reekenapgoawe un dräch dät Resultoat in dät Fäild hierunner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captcha-createaccount-fail' => 'Falske of failjende Bestäätigengscode.',
+       'captcha-create'             => 'Uum disse Siede tou moakjen, löös juu ätterfoulgjende Reekenapgoawe ap un dräch dät Resultoat in dät Fäild hier unner ien [[{{ns:special}}:Captcha/help|(Froagen of Probleme?)]].',
+       'captchahelp-title'          => 'Captcha-Hälpe',
+       'captchahelp-cookies-needed' => "'''Wichtige Waiwiesenge:''' Der mouten Cookies in dän Browser ferlööwed weese.",
+       'captchahelp-text'           => 'Internetboode, do der foar Biedraage fon praktisk älkuneen eepen sunt - so as dät {{SITENAME}}-Wiki — wäide oafte fon Spammere misbruukt, do hiere Ferbiendengen automatisk ap fuul Websieden platzierje. Disse Spam-Ferbiendengen konnen wier wächhoald wäide, man jo sunt n groot Ferträit.
+
+In fuul Falle, besunners bie dät Bietouföigjen fon näie Webferbiendengen tou ne Siede, kon dät foarkuume, dät dit Wiki ne Bielde mäd n faawigen un fertroalden Text anwiest un deertou apfoardert, do anwiesde Woude ientoutippen. Deer sun Apgoawe man stuur automatisk ouhonneld wäide kon, wäide deertruch do maaste Spammere, do der mäd automatiske Reewen oarbaidje, stopped, wierjuun moanskelke Benutsere hieren Biedraach seende konnen.
+
+Spietelk genouch kon dät tou Meelasje foar Persoone fiere, do der minner goud sjo konnen of text- of sproakbasierde Browsere ferweende. Ne Löösenge is ju reguläre Anmäldenge as Benutser. Die „Tourääch“-Knoop fon dän Browser fiert tourääch in dät Beoarbaidengsfinster.',
+       'captcha-addurl-whitelist'   => ' #<!-- leave this line exactly as it is --> <pre>
+#  Syntax:
+#   * Alles fon n #-Teeken bit tou dän Eend fon ju Riege is n Kommentoar
+#   * Älke nit-loose Riege is n Regex-Fragment, dät juunuur den Hostnoome fon ne URL wröiged wäd
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['su'] = array(
+       'captcha-edit'                => 'Pikeun ngédit artikel ieu, mangga eusian itungan di handap ieu ([[Special:Captcha/help|émbaran lengkep]]):',
+       'captcha-addurl'              => 'Éditan anjeun ngawengku tumbu kaluar anyar. Pikeun nyegah spam, mangga eusian itungan di handap ieu [[Special:Captcha/help|émbaran lengkep]]):',
+       'captcha-createaccount'       => 'Pikeun nyegah dijieunna rekening sacara otomatis, mangga eusian itungan di handap ieu ([[Special:Captcha/help|émbaran lengkep]]):',
+       'captcha-createaccount-fail'  => 'Sandi konfirmasina salah atawa can dieusian.',
+       'captcha-create'              => 'Pikeun nyieun kacana, mangga eusian itungan di handap ieu ([[Special:Captcha/help|émbaran lengkep]]):',
+       'captchahelp-title'           => 'Pitulung Captcha',
+       'captchahelp-text'            => 'Ramatloka nu nampa tulisan ti masarakat umum kawas ieu wiki mindeng diganggu ku spammer nu maké pakakas otomatis pikeun midangkeun tumbu-tumbuna ka loba loka. Najan tumbu spam ieu bisa dihapus, ari loba-loba teuing mah matak nyapékeun.
+
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that\'s hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.
+
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.
+
+You will need to have cookies enabled in your browser for this to work.
+
+Hit the \'back\' button in your browser to return to the page editor.',
+);
+
+$messages['sv'] = array(
+       'captcha-edit' => 'För att redigera den här sidan måste du först skriva svaret på följande
+räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-addurl' => 'Din ändring lägger till nya externa länkar i texten. För att skydda wikin mot
+automatisk spam måste du skriva svaret på följande räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-badlogin' => 'För att skydda mot wikin mot automatiserad lösenordsknäckning måste du skriva
+svaret på följande räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-createaccount' => 'För att skydda wikin mot automatiskt skapade användarkonton måste du
+skriva svaret på följande räkneuppgift i rutan ([[Special:Captcha/help|mer information]]):',
+       'captcha-createaccount-fail' => "Bekräftelsekoden är felaktig eller saknas.",
+       'captcha-create' => 'För att skapa den här sidan måste du skriva svaret på följande räkneuppgift
+i rutan ([[Special:Captcha/help|mer information]]):',
+       'captchahelp-title'          => 'Captchahjälp',
+       'captchahelp-cookies-needed' => "Du måste ha cookies aktiverade i din webbläsare för att det här ska fungera.",
+       'captchahelp-text'           => "Webbplatser som tillåter inlägg från allmänheten, som den här wikin gör, kan
+missbrukas av spammare. De använder ofta automatiserade verktyg för att lägga till länkar på många webbsajter. Även om
+dessa spamlänkar kan tas bort så är de till stort besvär.
+
+Ibland, speciellt då du lägger till nya externa länkar på en sida, visar wikin en bild på en färgad eller förvriden text
+och ber dig skriva texten som visas. Den uppgiften är svår att automatisera, men oftast lätt för en människa att utföra.
+På så sätt stoppas spammare och andra robotattacker, medan riktiga mäniskor kan göra sina redigeringar.
+
+Tyvärr kan det här orsaka problem för användare med nedsatt syn eller som använder text- eller talbaserade webbläsare.
+För tillfället finns inga ljudbaserade alternativ tillgängliga. Om det här hindrar dig från att göra legitima ändringar
+kan du be någon av administratörerna om hjälp.
+
+Tryck på bakåtknappen i din webbläsare för att gå tillbaks till sidredigeringsläget.",
+       'captcha-addurl-whitelist' => '
+ #<!-- leave this line exactly as it is --> <pre>
+# Syntaxen är följande:
+#   * Allting från ett "#" till slutet av en rad är en kommentar
+#   * Varje icketom rad är ett reguljärt uttryck som matchar domänen i en URL
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Telugu (తెలుగు)
+ * @author Mpradeep
+ */
+$messages['te'] = array(
+       'captcha-edit'               => 'ఈ వ్యాసాన్ని దిద్దుబాటు చేయడానికి కింది ఇచ్చిన సమీకరణం విలువను పక్కనున్న పెట్టెలో టైపు చెయ్యాలి ([[ప్రత్యేక:Captcha/help|ఏమిటిది?]]):',
+       'captcha-addurl'             => 'మీ దిద్దుబాటులో కొత్త బయటి లింకులు ఉన్నాయి. ఆటోమేటెడ్ స్పాము నుండి రక్షించేందుకు గాను, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captcha-badlogin'           => 'పాసువోర్డును బాట్ల ద్వారా తెలుసుకోకుండా ఉండేందుకు, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captcha-createaccount'      => 'బాట్ల ద్వారా ఖాతాలను సృష్టించకుండా నిరోధించటానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captcha-createaccount-fail' => 'దృవీకరించుకోవడానికి విలువ ఇవ్వలేదు లేదా దానిని తప్పుగా ఇచ్చారు.',
+       'captcha-create'             => 'కొత్తపేజీని సృష్టించడానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):',
+       'captchahelp-title'          => 'ఆమకవేప సహాయం',
+       'captchahelp-cookies-needed' => 'ఇది పని చెయ్యాలంటే మీ బ్రౌజరులో కూకీలు సశక్తమై ఉండాలి.',
+       'captchahelp-text'           => "''ఆమకవేప'' అంటే '''ఆ'''టోమాటిక్ గా '''మ'''నుష్యులను, '''కం'''ప్యూటర్లను '''వే'''రుచేసే '''ప'''రీక్ష అని అర్థం.
+
+ప్రజలనుండి రచనలను స్వీకరించే ఈ వికీ వంటి వెబ్‌సైట్లు, ఆటోమాటిక్ ప్రోగ్రాములతో తమ స్వంత లింకులను చేర్చే స్పాముష్కరుల దాడులకు గురవడం తరచూ జరుగుతూ ఉంటుంది. ఆ లింకులను తీసేయడం పెద్ద విషయం కాకపోయినప్పటికీ, అవి తలనెప్పి అనేది మాత్రం నిజం.
+
+కొన్నిసార్లు, ముఖ్యంగా ఏదైనా పేజీ నుండి బయటకు లింకులు ఇచ్చేటపుడు, వంకర్లు తిరిగిపోయి ఉన్న పదాల బొమ్మను చూపించి ఆ పదాన్ని టైపు చెయ్యమని వికీ మిమ్మల్ని అడగవచ్చు. దీన్ని ఆటోమాటిక్ టూల్సుతో చెయ్యడం చాలా కష్టం కాబట్టి, స్పాము జిత్తులు చెల్లవు; మనుష్యులు మాత్రం మామూలుగానే చెయ్యగలరు. 
+
+దురదృష్టవశాత్తూ, చూపు సరిగా లేనివారికి, టెక్స్టు బ్రౌజర్లు మాత్రమే వాడేవారికి ఇది అసౌకర్యం కలిగిస్తుంది. ప్రస్తుతానికి శబ్దం వినిపించే వెసులుబాటు మాకు లేదు. మీరు రచనలు చెయ్యకుండా ఇది అడ్డుపడుతుంటే, సహాయం కోసం సైటు నిర్వాహకుణ్ణి సంప్రదించండి.
+
+మీ బ్రౌజర్లోని బ్యాక్(back) మీటను నొక్కి ఇంతకు ముందరి పేజీకి వెళ్ళండి.",
+       'captcha-addurl-whitelist'   => '  #<!-- ఈ వాఖ్యాన్ని మొత్తం ఉన్నదున్నట్లు ఇలాగే వదిలేయండి --> <pre>
+# ఇక్కడ రాయాల్సిన విధానం ఇదీ:
+#  * "#" అనే అక్ధరం తరువా నుండి ఆ వాఖ్యం చివరివరకూ ఒక కామెంటు
+#  * ఖాళీగా లేని ప్రతీ లైను ఒక regex భాగము, ఇవి పేజీలో ఉన్న URLల్ల యొక్క హోష్టుతో మాత్రమే సరిచూడబడుతుంది
+  #</pre> <!-- ఈ వాఖ్యాన్ని మొత్తం ఉన్నదున్నట్లు ఇలాగే వదిలేయండి -->',
+);
+
+/** Turkish (Türkçe)
+ * @author SPQRobin
+ */
+$messages['tr'] = array(
+       'captcha-createaccount'      => 'Otomatik spama karşı bir koruma olarak, hesabınızı kaydetmek için bu resimde gözüken kelimeleri tuşlamanız gerekmektedir ([[Special:Captcha/help|Bu nedir?]]):',
+       'captcha-createaccount-fail' => 'Hatalı ya da eksik onay kodu.',
+       'captchahelp-text'           => "{{SITENAME}} gibi dışarıdan katılıma izin veren internet siteleri, pek çok siteye bağlantılar yaratan otomatik araçlarını çalıştıran ''spam''cilerin saldırılarına sıklıkla maruz kalırlar. Bu spam nitelikli bağlantılar silinebilir, fakat bu temizlik önemli bir sıkıntı yaratacaktır.
+
+Bazen, özellikle bir başka internet sitesine bağ eklerken, bozulmuş ve renklendirilmiş harflerden oluşan bir resim gösterilebilir ve sizden bu harfleri kutucuğa girmenizi istenir. Bu, otomatizasyonu oldukça zor bir iş olduğu için, gerçek insanlar bu işlemi yerine getirebilirken, spam yapmaya yarayan araçlar bunu yapmakta zorlanacaklardır.
+
+Ne var ki bu durum, görme sorunları yaşayan kişiler ve salt yazı-tabanlı veya salt ses tabanlı internet tarayıcı programları kullanan kimseler için rahatsızlık yaratmaktadır. Ne yazık ki, şu an için sesli bir alternatifimiz bulunmamaktadır. Şayet bu sizin yeni hesap açmanızı engelliyorsa, yardım için site yöneticilerinden yardım isteyiniz.
+
+Sayfa düzenleyiciye dönmek için tarayıcınızın 'geri' tuşuna basınız.",
+);
+
+$messages['uk'] = array(
+       'captchahelp-text'           => "Вікіпедія застосовує техніку розрізнення людей від комп'ютерів, яка використовує розпізнавання образів, для захисту від  комп'ютерних  шкідливих програм, які автоматично реєструються  (найчастіше спамлять у статтях).
+
+Для реєстрації у Вікіпедії та іноді й при редагуванні статей користувачеві потрібно ввести вказану контрольну послідовність символів, і яку вони, будучи людьми, а не комп'ютерними програмами, можуть легко розпізнати.
+
+You will need to have cookies enabled in your browser for this to work.
+
+Hit the 'back' button in your browser to return to the page editor.",
+       'captcha-createaccount-fail' => 'Невірний або відсутній код підтвердження.',
+);
+
+/** Vietnamese (Tiếng Việt)
+ * @author Vinhtantran
+ * @author Minh Nguyen
+ */
+$messages['vi'] = array(
+       'captcha-edit'               => 'Để sửa đổi bài viết này, xin hãy giải phép cộng đơn giản dưới đây và gõ câu trả lời
+vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-addurl'             => 'Sửa đổi của bạn có chứa các liên kết ra bên ngoài. Để giúp tránh spam tự động, xin hãy giải phép toán đơn giản ở dưới và gõ kết quả vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-badlogin'           => 'Để giúp tránh hành động bẻ mật khẩu tự động, xin hãy giải phép cộng
+đơn giản ở dưới và gõ kết quả vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-createaccount'      => 'Để giúp tránh việc tạo tài khoản tự động, xin hãy giải phép cộng
+đơn giản ở dưới và gõ kết quả vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captcha-createaccount-fail' => 'Thiếu mã xác nhận hoặc mã xác nhận sai.',
+       'captcha-create'             => 'Để tạo mới trang, xin hãy giải phép cộng đơn giản ở dưới và gõ
+câu trả lời vào ô ([[Special:Captcha/help|thông tin thêm]]):',
+       'captchahelp-title'          => 'Trợ giúp Captcha',
+       'captchahelp-cookies-needed' => 'Bạn sẽ cần phải bật cookie trong trình duyệt của bạn để chức năng này hoạt động',
+       'captchahelp-text'           => '
+Những website cho phép bất kỳ ai cũng có thể gửi thông tin như wiki thường bị các tay spam lạm dụng dùng công cụ tự động gửi các liên kết của họ tới rất nhiều website khác. Tuy chúng ta có thể xóa các liên kết này khỏi trang, chúng vẫn gây nhiều phiền toái.
+
+Đôi khi, nhất là khi bạn bổ sung liên kết mới vào trang, wiki có thể hiển thị một hình có chữ dạng màu mè và méo mó rồi yêu cầu bạn gõ lại các chữ trong hình này. Do các phần mềm tự động khó đọc những hình này, nên mọi người bình thường có thể tiếp tục gửi thông tin, đồng thời chặn được các spam và robot phá hoại.
+
+Tuy vậy, tính năng này có thể bất tiện đối với những độc giả có thị giác yếu hay đang sử dụng trình duyệt bằng văn bản thuần hay trình duyệt bằng tiếng nói. Hiện tại chúng tôi chưa có chức năng phát âm thay thế. Xin hãy liên lạc với người quản trị trang web để được trợ giúp nếu điều này vô tình ngăn cản bạn đóng góp những bài viết tốt.
+
+Nhấn chuột vào nút “Back” của trình duyệt để trở lại trang soạn thảo.',
+       'captcha-addurl-whitelist'   => '  #<!-- xin để dòng này đừng thay đổi --> <pre>
+# Cú pháp như sau:
+#   * Mọi thứ bắt đầu bằng ký tự “#” là lời chú thích
+#   * Mọi hàng không trắng là một đoạn biểu thức chính quy (regex) sẽ chỉ được so trùng với tên máy chủ trong URL
+  #</pre> <!-- xin để dòng này đừng thay đổi -->',
+);
+
+/** Volapük (Volapük)
+ * @author Smeira
+ * @author Malafaya
+ */
+$messages['vo'] = array(
+       'captcha-edit'               => 'Ad redakön yegedi at, dunolös, begö! saedami dono e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-addurl'             => 'Redakam olik keninükon yümis plödik nulik. Ad jelön siti ta peneds itjäfidik, dunolös, begö! saedami sököl, e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-badlogin'           => 'Ad jelön siti ta daget itjäfidik letavödas, dunolös, begö! saedami sököl e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-createaccount'      => 'Ad jelön siti ta kalijafam itjäfidik, dunolös, begö! saedami sököl e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captcha-createaccount-fail' => 'Kot fümükama paneveräton u paseleton.',
+       'captcha-create'             => 'Ad jafön padi, dunolös saedami balugik dono e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):',
+       'captchahelp-title'          => 'Yuf ela Captcha',
+       'captchahelp-cookies-needed' => 'Nedol mögükön „kekilis“ bevüresodanaföme olik ad dunön atosi.',
+       'captcha-addurl-whitelist'   => '  #<!-- leave this line exactly as it is --> <pre>
+# Süntag binon sökölos:
+#  * Valikos de malat: „#“ jü fin liena binon küpet
+#  * Lien no vägik alik binon brekot: „regex“, kel poleigodon te ko vöds ninü els URLs
+  #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Walloon (Walon)
+ */
+$messages['wa'] = array(
+       'captcha-edit'               => "Dins vos candjmints i gn a des novelès hårdêyes (URL); po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captcha-addurl'             => "Dins vos candjmints i gn a des novelès hårdêyes (URL); po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captcha-createaccount'      => "Po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin po-z ahiver vosse conte, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captcha-createaccount-fail' => "Li côde d' acertinaedje est incorek ou mancant.",
+       'captcha-create'             => "Dins vos candjmints i gn a des novelès hårdêyes (URL); po s' mete a houte des robots di spam, nos vs dimandans d' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k' aparexhèt dins l' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])",
+       'captchahelp-title'          => "Aidance passete d' acertinaedje",
+       'captchahelp-text'           => "Les waibes k' acceptèt des messaedjes do publik, come ci wiki chal, sont sovint eployîs pa des må-fjhants spameus, po pleur mete, avou des usteyes otomatikes, des loyéns di rclame viè les sites da zels.
+Bén seur, on pout todi les disfacer al mwin, mins c' est on soyant ovraedje.
+
+Adon, pa côps, copurade cwand vos radjoutez des hårdêyes a ene pådje, ou å moumint d' ahiver on novea conte sol wiki, on eployrè ene passete d' acertinaedje, dj' ô bén k' on vos mostere ene imådje avou on tecse kitoirdou eyet vs dimander di taper les mots so l' imådje. Come li ricnoxhance di ç' tecse la est målåjheye a fé otomaticmint pa on robot, çoula permete di leyî les vraiyès djins fé leus candjmints tot arestant l' plupårt des spameus et des sfwaitès atakes pa robot.
+
+Målureuzmint çoula apoite eto des målåjhminces po les cis k' ont des problinmes po vey, ou k' eployèt des betchteus e môde tecse ou båzés sol vwès. Pol moumint, nos n' avans nén ene alternative odio. S' i vs plait contactez les manaedjeus do site po d' l' aidance si çoula vos espaitche di fé vos candjmints ledjitimes.
+
+Clitchîz sol boton «En erî» di vosse betchteu waibe po rivni al pådje di dvant.",
+);
+
+/** Cantonese (粵語)
+ */
+$messages['yue'] = array(
+       'captcha-edit'               => '要編輯呢一篇文,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-addurl'             => '你編輯嘅內容裏面有新嘅URL連結;為咗避免受到自動垃圾程式的侵擾,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-badlogin'           => '為咗防止程式自動破解密碼,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount'      => '為咗防止程式自動註冊,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount-fail' => '驗證碼錯誤或者唔見咗。',
+       'captcha-create'             => '要開呢一版,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):',
+       'captchahelp-title'          => 'Captcha 幫助',
+       'captchahelp-cookies-needed' => '你需要開咗響瀏覽器度嘅cookies先至可以用呢樣嘢。',
+       'captchahelp-text'           => '就好似呢個wiki咁,對公眾開放編輯嘅網站係會經常受到垃圾連結騷擾。嗰啲人利用自動化垃圾程序將佢哋嘅連結張貼到好多網站。雖然呢啲連結可以被清除,但係呢啲嘢確實令人十分之討厭。
+
+有時,特別係當響一頁添加新嘅網頁連結嗰陣,呢個網站會畀你睇一幅有顏色的或者有變形文字嘅圖像,跟住要你輸入所顯示嘅文字。因為咁係難以自動完成嘅一項任務,它將允許人保存佢哋嘅編輯,同時亦阻止大多數發送垃圾郵件者同其它機械人嘅攻擊。
+
+令人遺憾嘅係,咁會令到視力唔好嘅人,或者利用基於文本或者基於聲音嘅瀏覽器用戶感到不便。而目前我哋仲未能夠提供音頻嘅選擇。如果咁樣咁啱阻止到你進行正常嘅編輯,請同管理員聯繫以獲得幫助。
+
+撳一下響瀏覽器度嘅「後退」掣返去你之前所編輯緊嘅頁面。',
+       'captcha-addurl-whitelist'   => '
+ #<!-- leave this line exactly as it is --> <pre>
+# 語法好似下面噉:
+#   * 所有由 "#" 字元之後嘅嘢到行尾係註解
+#   * 所有非空白行係一個regex部份,只係會同裏面嘅URL主機相符
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Simplified Chinese (‪中文(简体)‬)
+ */
+$messages['zh-hans'] = array(
+       'captcha-edit'               => '要编辑这篇文章,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-addurl'             => '你编辑的内容中含有一个新的URL连结;为了免受自动垃圾程式的侵扰,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-badlogin'           => '为了防止程式自动破解密码,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-createaccount'      => '为了防止程式自动注册,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captcha-createaccount-fail' => '验证码错误或丢失。',
+       'captcha-create'             => '要创建页面,请答出一个简单的加法,然後在框内输入 ([[Special:Captcha/help|更多资料]]):',
+       'captchahelp-title'          => 'Captcha 说明',
+       'captchahelp-cookies-needed' => '您需要开启浏览器上的cookies方可使用这个工具。',
+       'captchahelp-text'           => '像本站一样,对公众开放编辑的网站经常被垃圾连结骚扰。那些人使用自动化垃圾程序将他们的连结张贴到很多网站。虽然这些连结可以被清除,但是这些东西确实令人十分讨厌。
+
+有时,特别是当给一个页面添加新的网页连结时,本站会让你看一幅有颜色的或者有变形文字的图像,并且要你输入所显示的文字。因为这是难以自动完成的一项任务,它将允许人保存他们的编辑,同时阻止大多数发送垃圾邮件者和其他机器人的攻击。
+
+令人遗憾是,这会使得视力不好的人,或者使用基於文本或者基於声音的浏览器的用户感到不便。而目前我们还没有提供的音频的选择。如果这正好阻止你进行正常的编辑,请和管理员联系获得帮助。
+
+点击浏览器中的「後退」按钮返回你所编辑的页面。',
+       'captcha-addurl-whitelist'   => '
+ #<!-- leave this line exactly as it is --> <pre>
+# 语法像下面这样:
+#   * 所有由 "#" 字元之後嘅字元至行尾是注解
+#   * 所有非空白行是一个regex部份,只是跟在里面的URL主机相符
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+/** Traditional Chinese (‪中文(繁體)‬)
+ */
+$messages['zh-hant'] = array(
+       'captcha-edit'               => '要編輯這篇文章,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-addurl'             => '你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-badlogin'           => '為了防止程式自動破解密碼,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount'      => '為了防止程式自動註冊,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captcha-createaccount-fail' => '驗證碼錯誤或丟失。',
+       'captcha-create'             => '要創建頁面,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]):',
+       'captchahelp-title'          => 'Captcha 說明',
+       'captchahelp-cookies-needed' => '您需要開啟瀏覽器上的cookies方可使用這個工具。',
+       'captchahelp-text'           => '像本站一樣,對公眾開放編輯的網站經常被垃圾連結騷擾。那些人使用自動化垃圾程序將他們的連結張貼到很多網站。雖然這些連結可以被清除,但是這些東西確實令人十分討厭。
+
+有時,特別是當給一個頁面添加新的網頁連結時,本站會讓你看一幅有顏色的或者有變形文字的圖像,並且要你輸入所顯示的文字。因為這是難以自動完成的一項任務,它將允許人保存他們的編輯,同時阻止大多數發送垃圾郵件者和其他機器人的攻擊。
+
+令人遺憾是,這會使得視力不好的人,或者使用基於文本或者基於聲音的瀏覽器的用戶感到不便。而目前我們還沒有提供的音頻的選擇。如果這正好阻止你進行正常的編輯,請和管理員聯繫獲得幫助。
+
+點擊瀏覽器中的「後退」按鈕返回你所編輯的頁面。',
+       'captcha-addurl-whitelist'   => '
+ #<!-- leave this line exactly as it is --> <pre>
+# 語法像下面這樣:
+#   * 所有由 "#" 字元之後嘅字元至行尾是註解
+#   * 所有非空白行是一個regex部份,只是跟在裏面的URL主機相符
+ #</pre> <!-- leave this line exactly as it is -->',
+);
+
+$messages['de-formal'] = $messages['de'];
+$messages['kk'] = $messages['kk-cyrl'];
+$messages['kk-cn'] = $messages['kk-arab'];
+$messages['kk-kz'] = $messages['kk-cyrl'];
+$messages['kk-tr'] = $messages['kk-latn'];
+$messages['pt-br'] = $messages['pt'];
+$messages['zh'] = $messages['zh-hans'];
+$messages['zh-cn'] = $messages['zh-hans'];
+$messages['zh-hk'] = $messages['zh-hant'];
+$messages['zh-min-nan'] = $messages['nan'];
+$messages['zh-sg'] = $messages['zh-hans'];
+$messages['zh-tw'] = $messages['zh-hant'];
+$messages['zh-yue'] = $messages['yue'];
diff --git a/oldwiki/extensions/ConfirmEdit/ConfirmEdit.php b/oldwiki/extensions/ConfirmEdit/ConfirmEdit.php
new file mode 100644 (file)
index 0000000..7224f95
--- /dev/null
@@ -0,0 +1,209 @@
+<?php
+
+/**
+ * Experimental captcha plugin framework.
+ * Not intended as a real production captcha system; derived classes
+ * can extend the base to produce their fancy images in place of the
+ * text-based test output here.
+ *
+ * Copyright (C) 2005-2007 Brion Vibber <brion@wikimedia.org>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup Extensions
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+       exit;
+}
+
+global $wgExtensionFunctions, $wgGroupPermissions;
+
+$wgExtensionFunctions[] = 'confirmEditSetup';
+$wgExtensionCredits['other'][] = array(
+       'name' => 'ConfirmEdit',
+       'author' => 'Brion Vibber',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:ConfirmEdit',
+       'description' => 'Simple captcha implementation',
+);
+
+/**
+ * The 'skipcaptcha' permission key can be given out to
+ * let known-good users perform triggering actions without
+ * having to go through the captcha.
+ *
+ * By default, sysops and registered bot accounts will be
+ * able to skip, while others have to go through it.
+ */
+$wgGroupPermissions['*'            ]['skipcaptcha'] = false;
+$wgGroupPermissions['user'         ]['skipcaptcha'] = false;
+$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
+$wgGroupPermissions['bot'          ]['skipcaptcha'] = true; // registered bots
+$wgGroupPermissions['sysop'        ]['skipcaptcha'] = false;
+
+/**
+ * List of IP ranges to allow to skip the captcha, similar to the group setting:
+ * "$wgGroupPermission[...]['skipcaptcha'] = true"
+ *
+ * Specific IP addresses or CIDR-style ranges may be used,
+ * for instance:
+ * $wgCaptchaWhitelistIP = array('192.168.1.0/24', '10.1.0.0/16');
+ */
+$wgCaptchaWhitelistIP = false;
+
+global $wgCaptcha, $wgCaptchaClass, $wgCaptchaTriggers;
+$wgCaptcha = null;
+$wgCaptchaClass = 'SimpleCaptcha';
+
+/**
+ * Actions which can trigger a captcha
+ *
+ * If the 'edit' trigger is on, *every* edit will trigger the captcha.
+ * This may be useful for protecting against vandalbot attacks.
+ *
+ * If using the default 'addurl' trigger, the captcha will trigger on
+ * edits that include URLs that aren't in the current version of the page.
+ * This should catch automated linkspammers without annoying people when
+ * they make more typical edits.
+ *
+ * The captcha code should not use $wgCaptchaTriggers, but CaptchaTriggers()
+ * which also takes into account per namespace triggering.
+ */
+$wgCaptchaTriggers = array();
+$wgCaptchaTriggers['edit']          = true; // Would check on every edit
+$wgCaptchaTriggers['create']           = false; // Check on page creation.
+$wgCaptchaTriggers['addurl']        = true;  // Check on edits that add URLs
+$wgCaptchaTriggers['createaccount'] = true;  // Special:Userlogin&type=signup
+$wgCaptchaTriggers['badlogin']      = true;  // Special:Userlogin after failure
+
+/**
+ * You may wish to apply special rules for captcha triggering on some namespaces.
+ * $wgCaptchaTriggersOnNamespace[<namespace id>][<trigger>] forces an always on / 
+ * always off configuration with that trigger for the given namespace.
+ * Leave unset to use the global options ($wgCaptchaTriggers).
+ *
+ * Shall not be used with 'createaccount' (it is not checked).
+ */
+$wgCaptchaTriggersOnNamespace = array();
+
+#Example:
+#$wgCaptchaTriggersOnNamespace[NS_TALK]['create'] = false; //Allow creation of talk pages without captchas.
+#$wgCaptchaTriggersOnNamespace[NS_PROJECT]['edit'] = true; //Show captcha whenever editing Project pages.
+
+/**
+ * Indicate how to store per-session data required to match up the
+ * internal captcha data with the editor.
+ *
+ * 'CaptchaSessionStore' uses PHP's session storage, which is cookie-based
+ * and may fail for anons with cookies disabled.
+ *
+ * 'CaptchaCacheStore' uses $wgMemc, which avoids the cookie dependency
+ * but may be fragile depending on cache configuration.
+ */
+global $wgCaptchaStorageClass;
+$wgCaptchaStorageClass = 'CaptchaSessionStore';
+
+/**
+ * Number of seconds a captcha session should last in the data cache
+ * before expiring when managing through CaptchaCacheStore class.
+ *
+ * Default is a half hour.
+ */
+global $wgCaptchaSessionExpiration;
+$wgCaptchaSessionExpiration = 30 * 60;
+
+/**
+ * Number of seconds after a bad login that a captcha will be shown to
+ * that client on the login form to slow down password-guessing bots.
+ *
+ * Has no effect if 'badlogin' is disabled in $wgCaptchaTriggers or
+ * if there is not a caching engine enabled.
+ *
+ * Default is five minutes.
+ */
+global $wgCaptchaBadLoginExpiration;
+$wgCaptchaBadLoginExpiration = 5 * 60;
+
+/**
+ * Allow users who have confirmed their e-mail addresses to post
+ * URL links without being harassed by the captcha.
+ */
+global $ceAllowConfirmedEmail;
+$ceAllowConfirmedEmail = false;
+
+/**
+ * Regex to whitelist URLs to known-good sites...
+ * For instance:
+ * $wgCaptchaWhitelist = '#^https?://([a-z0-9-]+\\.)?(wikimedia|wikipedia)\.org/#i';
+ * Local admins can define a whitelist under [[MediaWiki:captcha-addurl-whitelist]]
+ */
+$wgCaptchaWhitelist = false;
+
+/**
+ * Additional regexes to check for. Use full regexes; can match things
+ * other than URLs such as junk edits.
+ *
+ * If the new version matches one and the old version doesn't,
+ * toss up the captcha screen.
+ *
+ * @fixme Add a message for local admins to add items as well.
+ */
+$wgCaptchaRegexes = array();
+
+/** Register special page */
+global $wgSpecialPages;
+$wgSpecialPages['Captcha'] = array( /*class*/'CaptchaSpecialPage', /*name*/'Captcha' );
+
+$wgConfirmEditIP = dirname( __FILE__ );
+$wgExtensionMessagesFiles['ConfirmEdit'] = "$wgConfirmEditIP/ConfirmEdit.i18n.php";
+
+if ( defined( 'MW_SUPPORTS_EDITFILTERMERGED' ) ) {
+       $wgHooks['EditFilterMerged'][] = 'ConfirmEditHooks::confirmEditMerged';
+} else {
+       $wgHooks['EditFilter'][] = 'ConfirmEditHooks::confirmEdit';
+}
+$wgHooks['UserCreateForm'][] = 'ConfirmEditHooks::injectUserCreate';
+$wgHooks['AbortNewAccount'][] = 'ConfirmEditHooks::confirmUserCreate';
+$wgHooks['LoginAuthenticateAudit'][] = 'ConfirmEditHooks::triggerUserLogin';
+$wgHooks['UserLoginForm'][] = 'ConfirmEditHooks::injectUserLogin';
+$wgHooks['AbortLogin'][] = 'ConfirmEditHooks::confirmUserLogin';
+
+$wgAutoloadClasses['ConfirmEditHooks'] 
+       = $wgAutoloadClasses['SimpleCaptcha'] 
+       = $wgAutoloadClasses['CaptchaSessionStore']
+       = $wgAutoloadClasses['CaptchaCacheStore']
+       = $wgAutoloadClasses['CaptchaSpecialPage']
+       = "$wgConfirmEditIP/ConfirmEdit_body.php";
+
+/**
+ * Set up $wgWhitelistRead
+ */
+function confirmEditSetup() {
+       global $wgGroupPermissions, $wgCaptchaTriggers;
+       if( !$wgGroupPermissions['*']['read'] && $wgCaptchaTriggers['badlogin'] ) {
+               // We need to ensure that the captcha interface is accessible
+               // so that unauthenticated users can actually get in after a
+               // mistaken password typing.
+               global $wgWhitelistRead;
+               $image = Title::makeTitle( NS_SPECIAL, 'Captcha/image' );
+               $help = Title::makeTitle( NS_SPECIAL, 'Captcha/help' );
+               $wgWhitelistRead[] = $image->getPrefixedText();
+               $wgWhitelistRead[] = $help->getPrefixedText();
+       }
+}
+
+
diff --git a/oldwiki/extensions/ConfirmEdit/ConfirmEdit_body.php b/oldwiki/extensions/ConfirmEdit/ConfirmEdit_body.php
new file mode 100644 (file)
index 0000000..1755183
--- /dev/null
@@ -0,0 +1,670 @@
+<?php
+
+class ConfirmEditHooks {
+       static function getInstance() {
+               global $wgCaptcha, $wgCaptchaClass, $wgExtensionMessagesFiles;
+               static $done = false;
+               if ( !$done ) {
+                       $done = true;
+                       wfLoadExtensionMessages( 'ConfirmEdit' );
+                       if ( isset( $wgExtensionMessagesFiles[$wgCaptchaClass] ) ) {
+                               wfLoadExtensionMessages( $wgCaptchaClass );
+                       }
+                       $wgCaptcha = new $wgCaptchaClass;
+               }
+               return $wgCaptcha;
+       }
+
+       static function confirmEdit( &$editPage, $newtext, $section ) {
+               return self::getInstance()->confirmEdit( $editPage, $newtext, $section );
+       }
+
+       static function confirmEditMerged( &$editPage, $newtext ) {
+               return self::getInstance()->confirmEditMerged( $editPage, $newtext );
+       }
+
+       static function injectUserCreate( &$template ) {
+               return self::getInstance()->injectUserCreate( $template );
+       }
+
+       static function confirmUserCreate( $u, &$message ) {
+               return self::getInstance()->confirmUserCreate( $u, $message );
+       }
+
+       static function triggerUserLogin( $user, $password, $retval ) {
+               return self::getInstance()->triggerUserLogin( $user, $password, $retval );
+       }
+
+       static function injectUserLogin( &$template ) {
+               return self::getInstance()->injectUserLogin( $template );
+       }
+
+       static function confirmUserLogin( $u, $pass, &$retval ) {
+               return self::getInstance()->confirmUserLogin( $u, $pass, $retval );
+       }
+}
+
+class CaptchaSpecialPage extends UnlistedSpecialPage {
+       function execute( $par ) {
+               $this->setHeaders();
+               $instance = ConfirmEditHooks::getInstance();
+               switch( $par ) {
+               case "image":
+                       return $instance->showImage();
+               case "help":
+               default:
+                       return $instance->showHelp();
+               }
+       }
+}
+
+
+class SimpleCaptcha {
+       function SimpleCaptcha() {
+               global $wgCaptchaStorageClass;
+               $this->storage = new $wgCaptchaStorageClass;
+       }
+       
+       /**
+        * Insert a captcha prompt into the edit form.
+        * This sample implementation generates a simple arithmetic operation;
+        * it would be easy to defeat by machine.
+        *
+        * Override this!
+        *
+        * @return string HTML
+        */
+       function getForm() {
+               $a = mt_rand(0, 100);
+               $b = mt_rand(0, 10);
+               $op = mt_rand(0, 1) ? '+' : '-';
+
+               $test = "$a $op $b";
+               $answer = ($op == '+') ? ($a + $b) : ($a - $b);
+
+               $index = $this->storeCaptcha( array( 'answer' => $answer ) );
+
+               return "<p><label for=\"wpCaptchaWord\">$test</label> = " .
+                       wfElement( 'input', array(
+                               'name' => 'wpCaptchaWord',
+                               'id'   => 'wpCaptchaWord',
+                               'tabindex' => 1 ) ) . // tab in before the edit textarea
+                       "</p>\n" .
+                       wfElement( 'input', array(
+                               'type'  => 'hidden',
+                               'name'  => 'wpCaptchaId',
+                               'id'    => 'wpCaptchaId',
+                               'value' => $index ) );
+       }
+
+       /**
+        * Insert the captcha prompt into an edit form.
+        * @param OutputPage $out
+        */
+       function editCallback( &$out ) {
+               $out->addWikiText( $this->getMessage( $this->action ) );
+               $out->addHTML( $this->getForm() );
+       }
+
+       /**
+        * Show a message asking the user to enter a captcha on edit
+        * The result will be treated as wiki text
+        *
+        * @param $action Action being performed
+        * @return string
+        */
+       function getMessage( $action ) {
+               $name = 'captcha-' . $action;
+               $text = wfMsg( $name );
+               # Obtain a more tailored message, if possible, otherwise, fall back to
+               # the default for edits
+               return wfEmptyMsg( $name, $text ) ? wfMsg( 'captcha-edit' ) : $text;
+       }
+
+       /**
+        * Inject whazawhoo
+        * @fixme if multiple thingies insert a header, could break
+        * @param SimpleTemplate $template
+        * @return bool true to keep running callbacks
+        */
+       function injectUserCreate( &$template ) {
+               global $wgCaptchaTriggers, $wgOut;
+               if( $wgCaptchaTriggers['createaccount'] ) {
+                       $template->set( 'header',
+                               "<div class='captcha'>" .
+                               $wgOut->parse( $this->getMessage( 'createaccount' ) ) .
+                               $this->getForm() .
+                               "</div>\n" );
+               }
+               return true;
+       }
+
+       /**
+        * Inject a captcha into the user login form after a failed
+        * password attempt as a speedbump for mass attacks.
+        * @fixme if multiple thingies insert a header, could break
+        * @param SimpleTemplate $template
+        * @return bool true to keep running callbacks
+        */
+       function injectUserLogin( &$template ) {
+               if( $this->isBadLoginTriggered() ) {
+                       global $wgOut;
+                       $template->set( 'header',
+                               "<div class='captcha'>" .
+                               $wgOut->parse( $this->getMessage( 'badlogin' ) ) .
+                               $this->getForm() .
+                               "</div>\n" );
+               }
+               return true;
+       }
+       
+       /**
+        * When a bad login attempt is made, increment an expiring counter
+        * in the memcache cloud. Later checks for this may trigger a
+        * captcha display to prevent too many hits from the same place.
+        * @param User $user
+        * @param string $password
+        * @param int $retval authentication return value
+        * @return bool true to keep running callbacks
+        */
+       function triggerUserLogin( $user, $password, $retval ) {
+               global $wgCaptchaTriggers, $wgCaptchaBadLoginExpiration, $wgMemc;
+               if( $retval == LoginForm::WRONG_PASS && $wgCaptchaTriggers['badlogin'] ) {
+                       $key = $this->badLoginKey();
+                       $count = $wgMemc->get( $key );
+                       if( !$count ) {
+                               $wgMemc->add( $key, 0, $wgCaptchaBadLoginExpiration );
+                       }
+                       $count = $wgMemc->incr( $key );
+               }
+               return true;
+       }
+       
+       /**
+        * Check if a bad login has already been registered for this
+        * IP address. If so, require a captcha.
+        * @return bool
+        * @access private
+        */
+       function isBadLoginTriggered() {
+               global $wgMemc;
+               return intval( $wgMemc->get( $this->badLoginKey() ) ) > 0;
+       }
+       
+       /**
+        * Internal cache key for badlogin checks.
+        * @return string
+        * @access private
+        */
+       function badLoginKey() {
+               return wfMemcKey( 'captcha', 'badlogin', 'ip', wfGetIP() );
+       }
+       
+       /**
+        * Check if the submitted form matches the captcha session data provided
+        * by the plugin when the form was generated.
+        *
+        * Override this!
+        *
+        * @param string $answer
+        * @param array $info
+        * @return bool
+        */
+       function keyMatch( $answer, $info ) {
+               return $answer == $info['answer'];
+       }
+
+       // ----------------------------------
+
+       /**
+        * @param EditPage $editPage
+        * @param string $action (edit/create/addurl...)
+        * @return bool true if action triggers captcha on editPage's namespace
+        */
+       function captchaTriggers( &$editPage, $action) {
+               global $wgCaptchaTriggers, $wgCaptchaTriggersOnNamespace;       
+               //Special config for this NS?
+               if (isset( $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action] ) )
+                       return $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action];
+
+               return ( !empty( $wgCaptchaTriggers[$action] ) ); //Default
+       }
+
+
+       /**
+        * @param EditPage $editPage
+        * @param string $newtext
+        * @param string $section
+        * @return bool true if the captcha should run
+        */
+       function shouldCheck( &$editPage, $newtext, $section, $merged = false ) {
+               $this->trigger = '';
+               $title = $editPage->mArticle->getTitle();
+
+               global $wgUser;
+               if( $wgUser->isAllowed( 'skipcaptcha' ) ) {
+                       wfDebug( "ConfirmEdit: user group allows skipping captcha\n" );
+                       return false;
+               }
+               global $wgCaptchaWhitelistIP;
+               if( !empty( $wgCaptchaWhitelistIP ) ) {
+                       $ip = wfGetIp();
+                       foreach ( $wgCaptchaWhitelistIP as $range ) {
+                               if ( IP::isInRange( $ip, $range ) ) {
+                                       return false;
+                               }
+                       }
+               }
+
+
+               global $wgEmailAuthentication, $ceAllowConfirmedEmail;
+               if( $wgEmailAuthentication && $ceAllowConfirmedEmail &&
+                       $wgUser->isEmailConfirmed() ) {
+                       wfDebug( "ConfirmEdit: user has confirmed mail, skipping captcha\n" );
+                       return false;
+               }
+
+               if( $this->captchaTriggers( $editPage, 'edit' ) ) {
+                       // Check on all edits
+                       global $wgUser;
+                       $this->trigger = sprintf( "edit trigger by '%s' at [[%s]]",
+                               $wgUser->getName(),
+                               $title->getPrefixedText() );
+                       $this->action = 'edit';
+                       wfDebug( "ConfirmEdit: checking all edits...\n" );
+                       return true;
+               }
+
+               if( $this->captchaTriggers( $editPage, 'create' )  && !$editPage->mTitle->exists() ) {
+                       //Check if creating a page
+                       global $wgUser;
+                       $this->trigger = sprintf( "Create trigger by '%s' at [[%s]]",
+                               $wgUser->getName(),
+                               $title->getPrefixedText() );
+                       $this->action = 'create';
+                       wfDebug( "ConfirmEdit: checking on page creation...\n" );
+                       return true;
+               }
+
+               if( $this->captchaTriggers( $editPage, 'addurl' ) ) {
+                       // Only check edits that add URLs
+                       if ( $merged ) {
+                               // Get links from the database
+                               $oldLinks = $this->getLinksFromTracker( $title );
+                               // Share a parse operation with Article::doEdit()
+                               $editInfo = $editPage->mArticle->prepareTextForEdit( $newtext );
+                               $newLinks = array_keys( $editInfo->output->getExternalLinks() );
+                       } else {
+                               // Get link changes in the slowest way known to man
+                               $oldtext = $this->loadText( $editPage, $section );
+                               $oldLinks = $this->findLinks( $oldtext );
+                               $newLinks = $this->findLinks( $newtext );
+                       }
+
+                       $unknownLinks = array_filter( $newLinks, array( &$this, 'filterLink' ) );
+                       $addedLinks = array_diff( $unknownLinks, $oldLinks );
+                       $numLinks = count( $addedLinks );
+
+                       if( $numLinks > 0 ) {
+                               global $wgUser;
+                               $this->trigger = sprintf( "%dx url trigger by '%s' at [[%s]]: %s",
+                                       $numLinks,
+                                       $wgUser->getName(),
+                                       $title->getPrefixedText(),
+                                       implode( ", ", $addedLinks ) );
+                               $this->action = 'addurl';
+                               return true;
+                       }
+               }
+
+               global $wgCaptchaRegexes;
+               if( !empty( $wgCaptchaRegexes ) ) {
+                       // Custom regex checks
+                       $oldtext = $this->loadText( $editPage, $section );
+
+                       foreach( $wgCaptchaRegexes as $regex ) {
+                               $newMatches = array();
+                               if( preg_match_all( $regex, $newtext, $newMatches ) ) {
+                                       $oldMatches = array();
+                                       preg_match_all( $regex, $oldtext, $oldMatches );
+
+                                       $addedMatches = array_diff( $newMatches[0], $oldMatches[0] );
+
+                                       $numHits = count( $addedMatches );
+                                       if( $numHits > 0 ) {
+                                               global $wgUser;
+                                               $this->trigger = sprintf( "%dx %s at [[%s]]: %s",
+                                                       $numHits,
+                                                       $regex,
+                                                       $wgUser->getName(),
+                                                       $title->getPrefixedText(),
+                                                       implode( ", ", $addedMatches ) );
+                                               $this->action = 'edit';
+                                               return true;
+                                       }
+                               }
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+        * Filter callback function for URL whitelisting
+        * @param string url to check
+        * @return bool true if unknown, false if whitelisted
+        * @access private
+        */
+       function filterLink( $url ) {
+               global $wgCaptchaWhitelist;
+               $source = wfMsgForContent( 'captcha-addurl-whitelist' );
+
+               $whitelist = wfEmptyMsg( 'captcha-addurl-whitelist', $source ) 
+                       ? false
+                       : $this->buildRegexes( explode( "\n", $source ) );
+
+               $cwl = $wgCaptchaWhitelist !== false ? preg_match( $wgCaptchaWhitelist, $url ) : false;
+               $wl  = $whitelist          !== false ? preg_match( $whitelist, $url )          : false;
+
+               return !( $cwl || $wl );
+       }
+
+       /**
+        * Build regex from whitelist
+        * @param string lines from [[MediaWiki:Captcha-addurl-whitelist]]
+        * @return string Regex or bool false if whitelist is empty
+        * @access private
+        */
+       function buildRegexes( $lines ) {
+               # Code duplicated from the SpamBlacklist extension (r19197)
+
+               # Strip comments and whitespace, then remove blanks
+               $lines = array_filter( array_map( 'trim', preg_replace( '/#.*$/', '', $lines ) ) );
+
+               # No lines, don't make a regex which will match everything
+               if ( count( $lines ) == 0 ) {
+                       wfDebug( "No lines\n" );
+                       return false;
+               } else {
+                       # Make regex
+                       # It's faster using the S modifier even though it will usually only be run once
+                       //$regex = 'http://+[a-z0-9_\-.]*(' . implode( '|', $lines ) . ')';
+                       //return '/' . str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $regex) ) . '/Si';
+                       $regexes = '';
+                       $regexStart = '/http:\/\/+[a-z0-9_\-.]*(';
+                       $regexEnd = ')/Si';
+                       $regexMax = 4096;
+                       $build = false;
+                       foreach( $lines as $line ) {
+                               // FIXME: not very robust size check, but should work. :)
+                               if( $build === false ) {
+                                       $build = $line;
+                               } elseif( strlen( $build ) + strlen( $line ) > $regexMax ) {
+                                       $regexes .= $regexStart .
+                                               str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $build) ) .
+                                               $regexEnd;
+                                       $build = $line;
+                               } else {
+                                       $build .= '|' . $line;
+                               }
+                       }
+                       if( $build !== false ) {
+                               $regexes .= $regexStart .
+                                       str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $build) ) .
+                                       $regexEnd;
+                       }
+                       return $regexes;
+               }
+       }
+
+       /**
+        * Load external links from the externallinks table
+        */
+       function getLinksFromTracker( $title ) {
+               $dbr =& wfGetDB( DB_SLAVE );
+               $id = $title->getArticleId(); // should be zero queries
+               $res = $dbr->select( 'externallinks', array( 'el_to' ), 
+                       array( 'el_from' => $id ), __METHOD__ );
+               $links = array();
+               while ( $row = $dbr->fetchObject( $res ) ) {
+                       $links[] = $row->el_to;
+               }
+               return $links;
+       }               
+
+       /**
+        * The main callback run on edit attempts.
+        * @param EditPage $editPage
+        * @param string $newtext
+        * @param string $section
+        * @param bool true to continue saving, false to abort and show a captcha form
+        */
+       function confirmEdit( &$editPage, $newtext, $section, $merged = false ) {
+               if( $this->shouldCheck( $editPage, $newtext, $section, $merged ) ) {
+                       if( $this->passCaptcha() ) {
+                               return true;
+                       } else {
+                               $editPage->showEditForm( array( &$this, 'editCallback' ) );
+                               return false;
+                       }
+               } else {
+                       wfDebug( "ConfirmEdit: no need to show captcha.\n" );
+                       return true;
+               }
+       }
+
+       /**
+        * A more efficient edit filter callback based on the text after section merging
+        * @param EditPage $editPage
+        * @param string $newtext
+        */
+       function confirmEditMerged( &$editPage, $newtext ) {
+               return $this->confirmEdit( $editPage, $newtext, false, true );
+       }
+
+       /**
+        * Hook for user creation form submissions.
+        * @param User $u
+        * @param string $message
+        * @return bool true to continue, false to abort user creation
+        */
+       function confirmUserCreate( $u, &$message ) {
+               global $wgCaptchaTriggers;
+               if( $wgCaptchaTriggers['createaccount'] ) {
+                       $this->trigger = "new account '" . $u->getName() . "'";
+                       if( !$this->passCaptcha() ) {
+                               $message = wfMsg( 'captcha-createaccount-fail' );
+                               return false;
+                       }
+               }
+               return true;
+       }
+       
+       /**
+        * Hook for user login form submissions.
+        * @param User $u
+        * @param string $message
+        * @return bool true to continue, false to abort user creation
+        */
+       function confirmUserLogin( $u, $pass, &$retval ) {
+               if( $this->isBadLoginTriggered() ) {
+                       $this->trigger = "post-badlogin login '" . $u->getName() . "'";
+                       if( !$this->passCaptcha() ) {
+                               $message = wfMsg( 'captcha-badlogin-fail' );
+                               // Emulate a bad-password return to confuse the shit out of attackers
+                               $retval = LoginForm::WRONG_PASS;
+                               return false;
+                       }
+               }
+               return true;
+       }
+
+       /**
+        * Given a required captcha run, test form input for correct
+        * input on the open session.
+        * @return bool if passed, false if failed or new session
+        */
+       function passCaptcha() {
+               $info = $this->retrieveCaptcha();
+               if( $info ) {
+                       global $wgRequest;
+                       if( $this->keyMatch( $wgRequest->getVal('wpCaptchaWord'), $info ) ) {
+                               $this->log( "passed" );
+                               $this->clearCaptcha( $info );
+                               return true;
+                       } else {
+                               $this->clearCaptcha( $info );
+                               $this->log( "bad form input" );
+                               return false;
+                       }
+               } else {
+                       $this->log( "new captcha session" );
+                       return false;
+               }
+       }
+
+       /**
+        * Log the status and any triggering info for debugging or statistics
+        * @param string $message
+        */
+       function log( $message ) {
+               wfDebugLog( 'captcha', 'ConfirmEdit: ' . $message . '; ' .  $this->trigger );
+       }
+
+       /**
+        * Generate a captcha session ID and save the info in PHP's session storage.
+        * (Requires the user to have cookies enabled to get through the captcha.)
+        *
+        * A random ID is used so legit users can make edits in multiple tabs or
+        * windows without being unnecessarily hobbled by a serial order requirement.
+        * Pass the returned id value into the edit form as wpCaptchaId.
+        *
+        * @param array $info data to store
+        * @return string captcha ID key
+        */
+       function storeCaptcha( $info ) {
+               if( !isset( $info['index'] ) ) {
+                       // Assign random index if we're not udpating
+                       $info['index'] = strval( mt_rand() );
+               }
+               $this->storage->store( $info['index'], $info );
+               return $info['index'];
+       }
+
+       /**
+        * Fetch this session's captcha info.
+        * @return mixed array of info, or false if missing
+        */
+       function retrieveCaptcha() {
+               global $wgRequest;
+               $index = $wgRequest->getVal( 'wpCaptchaId' );
+               return $this->storage->retrieve( $index );
+       }
+
+       /**
+        * Clear out existing captcha info from the session, to ensure
+        * it can't be reused.
+        */
+       function clearCaptcha( $info ) {
+               $this->storage->clear( $info['index'] );
+       }
+
+       /**
+        * Retrieve the current version of the page or section being edited...
+        * @param EditPage $editPage
+        * @param string $section
+        * @return string
+        * @access private
+        */
+       function loadText( $editPage, $section ) {
+               $rev = Revision::newFromTitle( $editPage->mTitle );
+               if( is_null( $rev ) ) {
+                       return "";
+               } else {
+                       $text = $rev->getText();
+                       if( $section != '' ) {
+                               return Article::getSection( $text, $section );
+                       } else {
+                               return $text;
+                       }
+               }
+       }
+
+       /**
+        * Extract a list of all recognized HTTP links in the text.
+        * @param string $text
+        * @return array of strings
+        */
+       function findLinks( $text ) {
+               global $wgParser, $wgTitle, $wgUser;
+
+               $options = new ParserOptions();
+               $text = $wgParser->preSaveTransform( $text, $wgTitle, $wgUser, $options );
+               $out = $wgParser->parse( $text, $wgTitle, $options );
+
+               return array_keys( $out->getExternalLinks() );
+       }
+
+       /**
+        * Show a page explaining what this wacky thing is.
+        */
+       function showHelp() {
+               global $wgOut, $ceAllowConfirmedEmail;
+               $wgOut->setPageTitle( wfMsg( 'captchahelp-title' ) );
+               $wgOut->addWikiText( wfMsg( 'captchahelp-text' ) );
+               if ( $this->storage->cookiesNeeded() ) {
+                       $wgOut->addWikiText( wfMsg( 'captchahelp-cookies-needed' ) );
+               }
+       }
+
+}
+
+class CaptchaSessionStore {
+       function store( $index, $info ) {
+               $_SESSION['captcha' . $info['index']] = $info;
+       }
+       
+       function retrieve( $index ) {
+               if( isset( $_SESSION['captcha' . $index] ) ) {
+                       return $_SESSION['captcha' . $index];
+               } else {
+                       return false;
+               }
+       }
+       
+       function clear( $index ) {
+               unset( $_SESSION['captcha' . $index] );
+       }
+
+       function cookiesNeeded() {
+               return true;
+       }
+}
+
+class CaptchaCacheStore {
+       function store( $index, $info ) {
+               global $wgMemc, $wgCaptchaSessionExpiration;
+               $wgMemc->set( wfMemcKey( 'captcha', $index ), $info,
+                       $wgCaptchaSessionExpiration );
+       }
+
+       function retrieve( $index ) {
+               global $wgMemc;
+               $info = $wgMemc->get( wfMemcKey( 'captcha', $index ) );
+               if( $info ) {
+                       return $info;
+               } else {
+                       return false;
+               }
+       }
+       
+       function clear( $index ) {
+               global $wgMemc;
+               $wgMemc->delete( wfMemcKey( 'captcha', $index ) );
+       }
+
+       function cookiesNeeded() {
+               return false;
+       }
+}
+
diff --git a/oldwiki/extensions/ExtensionClass.php b/oldwiki/extensions/ExtensionClass.php
new file mode 100644 (file)
index 0000000..4af794d
--- /dev/null
@@ -0,0 +1,482 @@
+<?php
+/*
+ * ExtensionClass.php
+ * 
+ * MediaWiki extension
+ * @author: Jean-Lou Dupont (http://www.bluecortex.com)
+ *
+ * Purpose:  Provides a toolkit for easier Mediawiki
+ *           extension development.
+ *
+ * FEATURES:
+ * - 'singleton' implementation suited for extensions that require single instance
+ * - 'magic word' helper functionality
+ * - limited pollution of global namespace
+ *
+ * Tested Compatibility: MW 1.8.2 (PHP5), 1.9.3, 1.10
+ *
+ * History:
+ * v1.0                Initial availability
+ * v1.01    Small enhancement in processArgList
+ * v1.02    Corrected minor bug
+ * v1.1     Added function 'checkPageEditRestriction'
+ * v1.2     Added 'getArticle' function
+ * ----     Moved to SVN management
+ * v1.3     Added wgExtensionCredits updating upon Special:Version viewing
+ * v1.4     Fixed broken singleton functionality
+ * v1.5                Added automatic registration of hook functions based
+ *          on the definition of an handler in the derived class
+ *          (e.g. if handler 'hArticleSave' exists, then the appropriate
+ *           'ArticleSave' hook is registered)
+ * v1.51    Fixed '$passingStyle' bug (thanks to Joshua C. Lerner)
+ * v1.6     Added 'updateCreditsDescription' helper method.
+ * v1.7                Added 'depth' parameter support: more than 1 class depth can be created.
+ *          Added 'setupTags' method (support for parser tags)
+ *          Enhancement to 'getParam' method
+ *          Added 'formatParams' method
+ * v1.8     Added 'initFirst' parameter
+ * v1.9     Added support for including 'head' scripts and stylesheeets
+ *          in a manner compatible with parser caching functionality.
+ *          (Original idea from [user:Jimbojw]
+ * v1.91    Added check for screening script duplicates in 'addHeadScript'
+ * v1.92    Added optional removal of parameters not listed in template.
+ *
+ */
+$wgExtensionCredits['other'][] = array( 
+       'name'    => 'ExtensionClass',
+       'version' => 'v1.92 $LastChangedRevision: 174 $',
+       'author'  => 'Jean-Lou Dupont', 
+       'url'     => 'http://www.bluecortex.com',
+);
+class ExtensionClass
+{
+       static $gObj; // singleton instance
+// List up-to-date with MW 1.10 SVN 21828
+static $hookList = array(
+'ArticlePageDataBefore', 
+'ArticlePageDataAfter', 
+'ArticleAfterFetchContent',
+'ArticleViewRedirect', 
+'ArticleViewHeader',
+'ArticlePurge',
+'ArticleSave', 
+'ArticleInsertComplete',
+'ArticleSaveComplete',
+'MarkPatrolled', 
+'MarkPatrolledComplete', 
+'WatchArticle', 
+'WatchArticleComplete',
+'UnwatchArticle', 
+'UnwatchArticleComplete', 
+'ArticleProtect', 
+'ArticleProtectComplete',
+'ArticleDelete', 
+'ArticleDeleteComplete', 
+'ArticleEditUpdatesDeleteFromRecentchanges',
+'ArticleEditUpdateNewTalk',
+'DisplayOldSubtitle',
+'IsFileCacheable',
+'CategoryPageView',
+'FetchChangesList',
+'DiffViewHeader',
+'AlternateEdit', 
+'EditFormPreloadText', 
+'EditPage::attemptSave', 
+'EditFilter', 
+'EditPage::showEditForm:initial',
+'EditPage::showEditForm:fields',
+'SiteNoticeBefore',
+'SiteNoticeAfter',
+'FileUpload',
+'BadImage', 
+'MagicWordMagicWords', 
+'MagicWordwgVariableIDs',
+'MathAfterTexvc',
+'MessagesPreLoad',
+'LoadAllMessages',
+'OutputPageParserOutput',
+'OutputPageBeforeHTML',
+'AjaxAddScript', 
+'PageHistoryBeforeList',
+'PageHistoryLineEnding',
+'ParserClearState', 
+'ParserBeforeStrip',
+'ParserAfterStrip',
+'ParserBeforeTidy',
+'ParserAfterTidy',
+'ParserBeforeStrip',
+'ParserAfterStrip', 
+'ParserBeforeStrip',
+'ParserAfterStrip', 
+'ParserBeforeInternalParse',
+'InternalParseBeforeLinks', 
+'ParserGetVariableValueVarCache',
+'ParserGetVariableValueTs', 
+'ParserGetVariableValueSwitch',
+'IsTrustedProxy',
+'wgQueryPages', 
+'RawPageViewBeforeOutput', 
+'RecentChange_save',
+'SearchUpdate', 
+'AuthPluginSetup', 
+'LogPageValidTypes',
+'LogPageLogName', 
+'LogPageLogHeader', 
+'LogPageActionText',
+'SkinTemplateTabs', 
+'BeforePageDisplay', 
+'SkinTemplateOutputPageBeforeExec', 
+'PersonalUrls', 
+'SkinTemplatePreventOtherActiveTabs',
+'SkinTemplateTabs', 
+'SkinTemplateBuildContentActionUrlsAfterSpecialPage',
+'SkinTemplateContentActions', 
+'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink',
+'SkinTemplateSetupPageCss',
+'BlockIp', 
+'BlockIpComplete', 
+'BookInformation', 
+'SpecialContributionsBeforeMainOutput',
+'EmailUser', 
+'EmailUserComplete',
+'SpecialMovepageAfterMove',
+'SpecialMovepageAfterMove',
+'SpecialPage_initList',
+'SpecialPageExecuteBeforeHeader',
+'SpecialPageExecuteBeforePage',
+'SpecialPageExecuteAfterPage',
+'PreferencesUserInformationPanel',
+'SpecialSearchNogomatch',
+'ArticleUndelete',
+'UndeleteShowRevision',
+'UploadForm:BeforeProcessing',
+'UploadVerification',
+'UploadComplete',
+'UploadForm:initial',
+'AddNewAccount',
+'AbortNewAccount',
+'UserLoginComplete',
+'UserCreateForm',
+'UserLoginForm',
+'UserLogout',
+'UserLogoutComplete',
+'UserRights',
+/*'SpecialVersionExtensionTypes',*/ // reserved special treatment
+'UnwatchArticle',
+'AutoAuthenticate', 
+'GetFullURL',
+'GetLocalURL',
+'GetInternalURL',
+'userCan',
+'TitleMoveComplete',
+'isValidPassword',
+'UserToggles',
+'GetBlockedStatus',
+'PingLimiter',
+'UserRetrieveNewTalks',
+'UserClearNewTalkNotification',
+'PageRenderingHash',
+'EmailConfirmed',
+'ArticleFromTitle',
+'CustomEditor',
+'UnknownAction',
+/*'LanguageGetMagic', */ // reserved a special treatment in this class 
+'LangugeGetSpecialPageAliases',
+'MonoBookTemplateToolboxEnd',
+'SkinTemplateSetupPageCss',
+'SkinTemplatePreventOtherActiveTabs'
+);
+       var $className;
+       
+       var $paramPassingStyle;
+       var $ext_mgwords;       
+       
+       // Parameter passing style.
+       const mw_style = 1;
+       const tk_style = 2;
+       
+       public static function &singleton( $mwlist=null ,$globalObjName=null, 
+                                                                               $passingStyle = self::mw_style, $depth = 1,
+                                                                               $initFirst = false )
+       {
+               // Let's first extract the callee's classname
+               $trace = debug_backtrace();
+               $cname = $trace[$depth]['class'];
+               // If no globalObjName was given, create a unique one.
+               if ($globalObjName === null)
+                       $globalObjName = substr(create_function('',''), 1 );
+               
+               // Since there can only be one extension with a given child class name,
+               // Let's store the $globalObjName in a static array.
+               if (!isset(self::$gObj[$cname]) )
+                       self::$gObj[$cname] = $globalObjName; 
+                               
+               if ( !isset( $GLOBALS[self::$gObj[$cname]] ) )
+                       $GLOBALS[self::$gObj[$cname]] = new $cname( $mwlist, $passingStyle, $depth, $initFirst );
+                       
+               return $GLOBALS[self::$gObj[$cname]];
+       }
+       public function ExtensionClass( $mgwords=null, $passingStyle = self::mw_style, 
+                                                                       $depth = 1, $initFirst = false )
+       /*
+        *  $mgwords: array of 'magic words' to subscribe to *if* required.
+        */
+       {
+               global $wgHooks;
+                       
+               if ($passingStyle == null) $passingStyle = self::mw_style; // prevention...
+               $this->paramPassingStyle = $passingStyle;
+               
+               // Let's first extract the callee's classname
+               $trace = debug_backtrace();
+               $this->className= $cname = $trace[$depth]['class'];
+               // And let's retrieve the global object's name
+               $n = self::$gObj[$cname];
+               
+               global $wgExtensionFunctions;
+               
+               // v1.8 feature
+               $initFnc = create_function('',"global $".$n."; $".$n."->setup();");
+               if ($initFirst)
+                        array_unshift( $wgExtensionFunctions, $initFnc );
+               else $wgExtensionFunctions[] = $initFnc;
+               
+               $this->ext_mgwords = $mgwords;          
+               if (is_array($this->ext_mgwords) )
+                       $wgHooks['LanguageGetMagic'][] = array($this, 'getMagic');
+               // v1.3 feature
+               if ( in_array( 'hUpdateExtensionCredits', get_class_methods($this->className) ) )
+                       $wgHooks['SpecialVersionExtensionTypes'][] = array( &$this, 'hUpdateExtensionCredits' );                                
+               // v1.5 feature
+               foreach (self::$hookList as $index => $hookName)
+                       if ( in_array( 'h'.$hookName, get_class_methods($this->className) ) )
+                               $wgHooks[$hookName][] = array( &$this, 'h'.$hookName );
+       }
+       public function getParamPassingStyle() { return $this->passingStyle; }
+       public function setup()
+       {
+               if (is_array($this->ext_mgwords))
+                       $this->setupMagic();
+       }
+       // ================== MAGIC WORD HELPER FUNCTIONS ===========================
+       public function getMagic( &$magicwords, $langCode )
+       {
+               foreach($this->ext_mgwords as $index => $key)
+                       $magicwords [$key] = array( 0, $key );
+               return true;
+       }
+       public function setupMagic( )
+       {
+               global $wgParser;
+               foreach($this->ext_mgwords as $index => $key)
+                       $wgParser->setFunctionHook( "$key", array( $this, "mg_$key" ) );
+       }
+       public function setupTags( $tagList )
+       {
+               global $wgParser;
+               foreach($tagList as $index => $key)
+                       $wgParser->setHook( "$key", array( $this, "tag_$key" ) );
+       }
+       // ================== GENERAL PURPOSE HELPER FUNCTIONS ===========================
+       public function processArgList( $list, $getridoffirstparam=false )
+       /*
+        * The resulting list contains:
+        * - The parameters extracted by 'key=value' whereby (key => value) entries in the list
+        * - The parameters extracted by 'index' whereby ( index = > value) entries in the list
+        */
+       {
+               if ($getridoffirstparam)   
+                       array_shift( $list );
+                       
+               // the parser sometimes includes a boggie
+               // null parameter. get rid of it.
+               if (count($list) >0 )
+                       if (empty( $list[count($list)-1] ))
+                               unset( $list[count($list)-1] );
+               
+               $result = array();
+               foreach ($list as $index => $el )
+               {
+                       $t = explode("=", $el);
+                       if (!isset($t[1])) 
+                               continue;
+                       $result[ "{$t[0]}" ] = $t[1];
+                       unset( $list[$index] );
+               }
+               if (empty($result)) 
+                       return $list;
+               return array_merge( $result, $list );   
+       }
+       public function getParam( &$alist, $key, $index, $default )
+       /*
+        *  Gets a parameter by 'key' if present
+        *  or fallback on getting the value by 'index' and
+        *  ultimately fallback on default if both previous attempts fail.
+        */
+       {
+               if (array_key_exists($key, $alist) )
+                       return $alist[$key];
+               elseif (array_key_exists($index, $alist) && $index!==null )
+                       return $alist[$index];
+               else
+                       return $default;
+       }
+       public function initParams( &$alist, &$templateElements, $removeNotInTemplate = true )
+       {
+                       #var_dump( $alist );
+               // v1.92 feature.
+               if ($removeNotInTemplate)
+                       foreach( $templateElements as $index => &$el )
+                               if ( !isset($alist[ $el['key'] ]) )
+                                       unset( $alist[$el['key']] );
+               
+               foreach( $templateElements as $index => &$el )
+                       $alist[$el['key']] = $this->getParam( $alist, $el['key'], $el['index'], $el['default'] );
+       }
+       public function formatParams( &$alist , &$template )
+       // look at yuiPanel extension for usage example.
+       // $alist = { 'key' => 'value' ... }
+       {
+               foreach ( $alist as $key => $value )
+                       // format the entry.
+                       $this->formatParam( $key, $value, $template );
+       }
+       private function formatParam( &$key, &$value, &$template )
+       {
+               $format = $this->getFormat( $key, $template );
+               if ($format !==null )
+               {
+                       switch ($format)
+                       {
+                               case 'bool':   $value = (bool) $value; break; 
+                               case 'int':    $value = (int) $value; break;
+                               default:
+                               case 'string': $value = (string) $value; break;                                 
+                       }                       
+               }
+       }
+       public function getFormat( &$key, &$template )
+       {
+               $format = null;
+               foreach( $template as $index => &$el )
+                       if ( $el['key'] == $key )
+                               $format  = $el['format'];
+                       
+               return $format;
+       }
+       public function checkPageEditRestriction( &$title )
+       // v1.1 feature
+       // where $title is a Mediawiki Title class object instance
+       {
+               $proceed = false;
+  
+               $state = $title->getRestrictions('edit');
+               foreach ($state as $index => $group )
+                       if ( $group == 'sysop' )
+                               $proceed = true;
+               return $proceed;                
+       } 
+       public function getArticle( $article_title )
+       {
+               $title = Title::newFromText( $article_title );
+                 
+               // Can't load page if title is invalid.
+               if ($title == null)     return null;
+               $article = new Article($title);
+               return $article;        
+       }
+       
+       function isSysop( $user = null ) // v1.5 feature
+       {
+               if ($user == null)
+               {
+                       global $wgUser;
+                       $user = $wgUser;
+               }       
+               return in_array( 'sysop', $user->getGroups() );
+       }
+       
+       function updateCreditsDescription( &$text ) // v1.6 feature.
+       {
+               global $wgExtensionCredits;
+       
+               foreach ( $wgExtensionCredits[self::thisType] as $index => &$el )
+                       if ($el['name']==self::thisName)
+                               $el['description'].=$text;      
+       }
+/*  Add scripts & stylesheets functionality.
+This process must be done in two phases:
+phase 1- encode information related to the required
+         scripts & stylesheets in a 'meta form' in
+                the parser cache text.
+phase 2- when the page is rendered, extract the meta information
+         and include the information appropriately in the 'head' of the page.            
+************************************************************************************/
+       static $scriptList;
+       static $scriptsAdded;
+       static $scriptsListed;
+       function addHeadScript( $st )
+       {
+               if ( !isset($st) ) return;
+               
+               if ( !isset(self::$scriptList) )
+                       self::$scriptList[] = $st;
+               elseif  (!in_array($st, self::$scriptList)) 
+                       self::$scriptList[] = $st;
+                        
+               self::$scriptsAdded = false;
+               self::$scriptsListed = false;
+       }
+       
+       function hParserAfterTidy( &$parser, &$text )
+       // set the meta information in the parsed 'wikitext'.
+       {
+               if (self::$scriptsListed) return true;
+               self::$scriptsListed = true;
+               if (!empty(self::$scriptList))
+                       foreach(self::$scriptList as $sc)
+                               $text .= '<!-- META_KEYWORDS '.base64_encode($sc).' -->'; 
+               return true;
+       }       
+       function hOutputPageBeforeHTML( &$op, &$text )
+       // This function sifts through 'meta tags' embedded in html comments
+       // and picks out scripts & stylesheet references that need to be put
+       // in the page's HEAD.
+       {
+               // some hooks get called more than once...
+               // In this case, since ExtensionClass provides a 
+               // base class for numerous extensions, then it is very
+               // likely this method will be called more than once;
+               // so, we want to make sure we include the head scripts just once.
+               if (self::$scriptsAdded) return true;
+               self::$scriptsAdded = true;
+               
+               if (preg_match_all(
+               '/<!-- META_KEYWORDS ([0-9a-zA-Z\\+\\/]+=*) -->/m', 
+               $text, 
+               $matches)===false) return true;
+                       
+       $data = $matches[1];
+           foreach ($data AS $item) 
+               {
+               $content = @base64_decode($item);
+               if ($content) $op->addScript( $content );
+           }
+           return true;
+       }
+} // end class definition.
+?>
\ No newline at end of file
diff --git a/oldwiki/extensions/README b/oldwiki/extensions/README
new file mode 100644 (file)
index 0000000..85f4943
--- /dev/null
@@ -0,0 +1,14 @@
+Extensions (such as the hieroglyphic module WikiHiero) are distributed
+separately. Drop them into this extensions directory and enable as
+per the extension's directions.
+
+If you are a developer, you want to fetch the extension tree in another
+directory and make a symbolic link:
+
+ mediawiki/extensions$ ln -s ../../extensions-trunk/FooBarExt
+
+The extensions are available through svn at:
+    http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/
+
+You can find documentation and additional extensions on MediaWiki website:
+    http://www.mediawiki.org/wiki/Category:Extensions
diff --git a/oldwiki/extensions/SimpleFeed.php b/oldwiki/extensions/SimpleFeed.php
new file mode 100644 (file)
index 0000000..fc99f77
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+/* 
+* SimpleFeed MediaWiki extension
+* 
+* Copyright (C) 2007 Jonny Lamb
+* http://jonnylamb.com/
+* 
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or 
+* (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* http://www.gnu.org/copyleft/gpl.html
+*/
+
+// Check to make sure we're actually in MediaWiki.
+if (!defined('MEDIAWIKI'))
+{
+       echo 'This file is part of MediaWiki. It is not a valid entry point.';
+       exit(1);
+}
+
+// Path to simplepie.inc (including leading slash).
+$simplepie_path = 'extensions/';
+
+if ( ! @include($simplepie_path.'simplepie.inc') )
+{
+       define('SIMPLEPIE_NOT_FOUND', true);
+}
+
+$wgExtensionFunctions[] = 'wfSimpleFeed';
+$wgExtensionCredits['parserhook'][] = array(
+       'name' => 'SimpleFeed',
+       'description' => 'Uses SimplePie to output RSS/atom feeds',
+       'author' => 'Jonny Lamb',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:SimpleFeed'
+);
+
+function wfSimpleFeed()
+{
+       global $wgParser;
+       $wgParser->setHook('feed', 'parseFeed');
+}
+
+function parseFeed($input, $args, &$parser)
+{
+       // Disable page caching.
+       $parser->disableCache();
+       
+       // Check to see whether SimplePie was actually included.
+       if (defined('SIMPLEPIE_NOT_FOUND'))
+       {
+               return '<strong>Error</strong>: <tt>simplepie.inc</tt> was not found in the path. Please edit the path (beginning of extensions/SimpleFeed.php) or add <tt>simplefeed.inc</tt> to the current path.';
+       }
+       
+       // Must have a feed URL and a template to go by outputting items.
+       if (!isset($args['url']) or !isset($input))
+       {
+               return 0;
+       }
+
+       $feed = new SimplePie();
+       $feed->feed_url($args['url']);
+
+       // Get the feed information!
+       $feed->init();
+
+       $feed->handle_content_type();
+
+       // Either use default date format (j F Y), or the $date(string) argument.
+       // The date argument should conform to PHP's date function, nicely documented
+       // at http://php.net/date.
+       $date = (isset($args['date'])) ? $args['date'] : 'j F Y';
+
+       $output = '';
+
+       // Use the $entries(int) argument to determine how many entries to show.
+       // Defaults to 5, and 0 is unlimited.
+       if (isset($args['entries']))
+       {
+               $max = ($args['entries'] == 0) ? $feed->get_item_quantity() : $feed->get_item_quantity($args['entries']);
+       }
+       else
+       {
+               $max = $feed->get_item_quantity(5);
+       }
+       
+       // Loop through each item.
+       for ($i = 0; $i < $max; $i++)
+       {
+               $item = $feed->get_item($i);
+
+               $itemwikitext = $input;
+
+               // {PERMALINK} -> Link to the URL of the post.
+               $itemwikitext = str_replace('{PERMALINK}', $item->get_permalink(), $itemwikitext);
+
+               // {DATE} -> The posting date of the post, formatted in the aforementioned way.
+               $itemwikitext = str_replace('{DATE}', $item->get_date($date), $itemwikitext);
+
+               // {DESCRIPTION} -> The actual post (or post description if there's a tear).
+               $itemwikitext = str_replace('{DESCRIPTION}', $item->get_description(), $itemwikitext);
+
+               // If $type="planet" is used, the author is got from the post title.
+               // e.g. title = "Joe Bloggs: I love Mediawiki"
+               // This will make: {AUTHOR} -> "Joe Bloggs"
+               //                 {TITLE} -> "I love Mediawiki"
+               // If this is not set however, the title and author are received the usual way.
+               if ($args['type'] == 'planet')
+               {
+                       $title = preg_replace('/(.*): (.*)/sU', '\\2', $item->get_title());
+                       preg_match('/(.+?): (.+)/sU', $item->get_title(), $matches);
+                       $author = $matches[1];
+               }
+               else
+               {
+                       $title = $item->get_title();
+                       // Often the author is hard to recieve. Maybe it's not a very important
+                       // thing to output into RSS...?
+                       $itemauthor = $item->get_author();
+                       $author = ($itemauthor != null) ? $itemauthor->get_name() : '';
+               }
+
+               // {TITLE} -> Title of the post.
+               $itemwikitext = str_replace('{TITLE}', $title, $itemwikitext);
+
+               // {AUTHOR} -> Author of the post.
+               $itemwikitext = str_replace('{AUTHOR}', $author, $itemwikitext);
+
+               // Add to the overall output the post just done.
+               $output .= $itemwikitext;
+       }
+
+       // Parse the text into HTML between the <feed>[...]</feed> tags, with arguments replaced.
+       $parserObject = $parser->parse($output, $parser->mTitle, $parser->mOptions, false, false);
+       
+       // Output formatted text.
+       return $parserObject->getText();
+}
+
+?>
diff --git a/oldwiki/extensions/addHtml.php b/oldwiki/extensions/addHtml.php
new file mode 100644 (file)
index 0000000..f9b6a05
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/*
+ * addHTML.php
+ * 
+ * MediaWiki extension
+ * @author: Jean-Lou Dupont (http://www.bluecortex.com)
+ *
+ * Purpose:  Inserts <html> section(s) in the output page.
+ *
+ * Features:
+ * *********
+ * - Security: only page protected on edit with 'sysop' restriction
+ *             can use this extension.
+ *
+ * <addhtml id=xyz /> : meant to be used in conjunction
+ *                      with some PHP code using the 'addHtml' method
+ *                      of this class. The 'tag' is used to position 
+ *                      the HTML code in the page.
+ *                      An extension which can execute PHP code, such
+ *                      as 'Runphp page' can be used to prepare the
+ *                      HTML code and inserts through the 'addHtml'
+ *                      method.
+ *
+ * <addhtml [id=xyz] > html code </addhtml>
+ *
+ * DEPENDANCY:  ExtensionClass >= v1.1
+ * 
+ * Tested Compatibility:  MW 1.8.2, 1.9.3
+ *
+ * History:
+ * - v1.0
+ * - v1.1 : changed hook method for better parser cache integration.
+ */
+$wgExtensionCredits['other'][] = array( 
+       'name'    => 'addHTML Extension', 
+       'version' => '1.1',
+       'author'  => 'Jean-Lou Dupont', 
+       'url'     => 'http://www.bluecortex.com',
+);
+addHTMLclass::singleton();
+class addHTMLclass extends ExtensionClass
+{
+       const tag = 'addhtml';
+       
+       var $hlist;
+       var $hookInPlace;
+       public static function &singleton( ) // required by ExtensionClass
+       { return parent::singleton( ); }
+       
+       function addHTMLclass()
+       {
+               parent::__construct(); // required by ExtensionClass
+               $this->hookInPlace = false;
+       }
+       public function setup()
+       {
+               global $wgParser;
+               $wgParser->setHook( self::tag, array( $this, 'hAddHtmlTag' ) );
+       }
+       public function hAddHtmlTag( $input, $argv, &$parser )
+       {
+               // check page protection status
+               if (!$this->checkPageEditRestriction( $parser->mTitle ))
+                       return "unauthorized usage of <b>addHtml</b> extension.";
+               
+               $id = 0;
+               if ( isset($argv['id']) )               
+                       $id = $argv['id'];
+               
+               // just place the hook when we really need it.          
+               if (!$this->hookInPlace)
+               {
+                       global $wgHooks;        
+                       $wgHooks['ParserAfterTidy'][]= array($this, 'feedHtml');
+                       $this->hookInPlace = true;
+               }                       
+               $input = trim( $input );
+               if ( !empty( $input ) )
+                       $this->hlist[ $id ] = $input; 
+               
+               // let's put an easy marker that we can 'safely' find once we need to render the HTML
+               $marker = "<".self::tag." id={$id} />";
+               return $marker;
+       }
+       public function feedHtml( $parser, &$text )
+       {
+               // Some substitution to do?
+               if (empty($this->hlist)) return;
+               foreach($this->hlist as $index => $html)
+               {
+                       $marker = "<".self::tag." id={$index} />";
+                       $text = str_ireplace($marker, $html, $text);
+               }
+               return true; // continue hook chain.
+       }
+       public function addHtml( $id, $html ) { $this->hlist[ $id ] = $html; }
+       
+} // END CLASS DEFINITION
+?>
\ No newline at end of file
diff --git a/oldwiki/extensions/firestats-mediawiki.php b/oldwiki/extensions/firestats-mediawiki.php
new file mode 100644 (file)
index 0000000..9c46614
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+// Edit this line to match your FireStats directory.
+define('FS_PATH','/webspace/projects/openbox/firestats');
+
+// This is the site ID of your MediaWiki site inside FireStats sites table.
+// You need to add a MediaWiki site in the Sites tab in FireStats and then change the
+// value here to match the ID.
+// this will allow FireStats to show the statistics of your MediaWiki site seperated from your other sites.
+//
+// Note: This is optional, the default value will also work.
+define('FS_SITE_ID',0);
+
+
+
+require_once(FS_PATH.'/php/db-hit.php');
+$wgHooks['LogPageLogHeader'][] = 'fs_mediawiki_hit';
+
+function fs_mediawiki_hit($wiki_object)
+{
+       if (isset($_REQUEST['gen']) || isset($_REQUEST['ctype'])) 
+       {
+               return;
+       }
+       fs_add_site_hit(FS_SITE_ID);
+}
+
+?>
diff --git a/oldwiki/extensions/recaptcha/AUTHORS b/oldwiki/extensions/recaptcha/AUTHORS
new file mode 100644 (file)
index 0000000..8f93111
--- /dev/null
@@ -0,0 +1,6 @@
+Mike Crawford <mike.crawford@gmail.com>
+     Research Programmer, Carnegie Mellon University
+Ben Maurer <http://bmaurer.blogspot.com/>
+     Chief Software Architect, reCAPTCHA
+Brion Vibber <brion@pobox.com>
+     Author of ConfirmEdit, which this extension is built on.
diff --git a/oldwiki/extensions/recaptcha/ConfirmEdit.i18n.php b/oldwiki/extensions/recaptcha/ConfirmEdit.i18n.php
new file mode 100644 (file)
index 0000000..033b56e
--- /dev/null
@@ -0,0 +1,669 @@
+<?php\r
+/**\r
+ * Internationalisation file for ConfirmEdit extension.\r
+ *\r
+ * @addtogroup Extensions\r
+*/\r
+\r
+$wgConfirmEditMessages = array();\r
+\r
+$wgConfirmEditMessages['en'] = array(\r
+       'captcha-edit' => 'To edit this article, please solve the simple sum below and enter the answer in \r
+the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-addurl' => 'Your edit includes new external links. To help protect against automated\r
+spam, please solve the simple sum below and enter the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-badpass' => 'To help protect against automated password cracking, please solve the simple sum\r
+below and enter the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-createaccount' => 'To help protect against automated account creation, please solve the simple sum\r
+       below and enter the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captcha-createaccount-fail' => "Incorrect or missing confirmation code.",\r
+       'captcha-create' => 'To create the page, please solve the simple sum below and enter \r
+the answer in the box ([[Special:Captcha/help|more info]]):',\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-cookies-needed' => "You will need to have cookies enabled in your browser for this to work.",\r
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.\r
+\r
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.\r
+\r
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+);\r
+\r
+$wgConfirmEditMessages['af'] = array(\r
+       'captcha-edit'               => "U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])",\r
+       'captcha-addurl'               => "U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])",\r
+       'captcha-create'               => "U wysiging bevat nuwe webskakels. Neem kennis dat blote reklame van u werf, produk of besigheid as vandalisme beskou kan word. As beskerming teen outomatiese gemorsbydraes, sal u die woorde wat onder verskyn in die prentjie moet intik: <br />([[Spesiaal:Captcha/help|Wat is hierdie?]])",\r
+       'captchahelp-title'          => 'Captcha-hulp',\r
+       'captchahelp-text'           => "Webwerwe wat bydraes van die publiek aanvaar (soos hierdie wiki) word soms lastig geval deur kwaaddoeners met programme wat outomaties klomp skakels plak in die werf. Alhoewel hierdie gemors verwyder kan word, is dit lastig. In party gevalle, veral as u webskakels by 'n blad voeg, sal die wiki dalk 'n beeld met verwronge teks vertoon en vra dat u die woorde daarin intik. Omdat hierdie taak moeilik geoutomatiseer word, laat dit meeste regte mense toe om bydraes te maak terwyl dit meeste kwaaddoeners stop. Hierdie kan ongelukkig lastig wees vir mense met beperkte sig, of diegene wat teks- of spraakgebaseerde blaaiers gebruik. Tans is daar nog nie 'n klankalternatief beskikbaar nie. Kontak asseblief die werfadministrateurs vir hulp as hierdie u onverwags belemmer om legitieme bydraes te maak. Gebruik die \"terug\"-knoppie van u blaaier om na die vorige blad terug te keer.",\r
+       'captcha-createaccount'      => "As 'n beskerming teen geoutomatiseerde gemors, tik asseblief die woorde wat in die beeld verskyn in om 'n rekening te skep: <br />([[Special:Captcha/help|Wat is hierdie?]])",\r
+       'captcha-createaccount-fail' => "Verkeerde of geen bevestigingkode.",\r
+);\r
+$wgConfirmEditMessages['ar'] = array(\r
+       'captcha-edit'                => 'يحتوي تعديلك هذا على وصلات خارجية. للحماية من السخام الأوتوماتيكي، قم من فضلك بحل المسألة الرياضية البسيطة أدناه وأدخل الحل في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):',\r
+       'captcha-createaccount'       => 'كحماية ضد العمليات التخريبية، يجب أن تدخل ناتج العملية الحسابية التالية لكي تنشأ حسابا: <br />([[Special:Captcha/help|ما هذا؟]])',\r
+       'captcha-createaccount-fail'  => 'كود غير مطابق أو لم تقم بإدخاله.',\r
+       'captcha-create'              => 'من فضلك قم بحل المسألة الرياضية التالية لإنشاء هذه الصفحة وأدخل\r
+الجواب في الصندوق ([[Special:Captcha/help|ما هذا؟]]):',\r
+       'captchahelp-title'           => 'مساعدة الكابتشا',\r
+       'captchahelp-text'            => 'عادة ما يتم في المواقع التي تقبل الردود والرسائل من العامة، كهذا الويكي، تخريب الموقع عن طريق الأشخاص الذين يستعملون آليات معينة لإرسال وصلاتهم لمواقع متعددة بصورة آلية. وعلى الرغم من أن هذا يمكن إزالته ولكنه مزعج للغاية.\r
+\r
+في بعض الأحيان، خصوصا عند إضافة وصلات لصفحة، ربما يعرض الويكي صورة ملونة أو مشوشة ويطلب منك إدخال كلمات موجودة بالصورة أو يعرض عليك مسألة رياضية عشوائية ويطلب منك حلها. ولأن هذه المهمة صعبة للغاية لأن يقوم بها برنامج، سيسمح هذا للأشخاص الآدميين بإضافة تحريراتهم بينما ستوقف البرامج التخريبية والهجمات الآلية الأخرى.\r
+\r
+للأسف سيكون هذا صعبا بالنسبة لمستخدمي المتصفحات المحدودة أو التي تعتمد على النصوص فقط أو قراءة النصوص. في الوقت الحالي لا يوجد لدينا بديل سمعي. من فضلك راسل مديري الموقع للمساعدة إذا كان هذا الأمر يمنعك من التعديل ووضع وصلات قانونية.\r
+\r
+إذا كنت تحرر صفحة معينة: اضغط زر \'العودة\' في متصفحك للعودة إلى التحرير.',\r
+);\r
+$wgConfirmEditMessages['br'] = array(\r
+       'captcha-edit'                => 'Liammoù diavaez nevez zo bet ouzhpennet ganeoc\'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc\'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-addurl'                => 'Liammoù diavaez nevez zo bet ouzhpennet ganeoc\'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc\'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-create'                => 'Liammoù diavaez nevez zo bet ouzhpennet ganeoc\'h. A-benn en em wareziñ diouzh ar spam emgefre skrivit disoc\'h ar jedadennig eeun-mañ er stern : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-createaccount'       => 'A-benn hor skoazellañ d\'en em wareziñ diouzh ar c\'hrouiñ kontoù emgefre, skrivit ar gerioù a zeu war wel er stern-mañ evit enrollañ ho kont : <br />([[Special:Captcha/help|Petra eo se?]])',\r
+       'captcha-createaccount-fail'  => 'Mankout a ra ar c\'hod kadarnaat pe fall eo.',\r
+       'captchahelp-title'           => 'Skoazell Capcha',\r
+       'captchahelp-text'            => 'Alies e vez taget al lec\'hiennoù a zegemer kemennadennoù a-berzh an holl, evel ar wiki-mañ, gant ar spamerien a implij ostilhoù emgefre evit postañ o liammoù war lec\'hiennoù a bep seurt. Diverket e c\'hallont bezañ, gwir eo, kazus-mat ez int memes tra. A-wechoù, dreist-holl pa vez ouzhpennet liammoù Web nevez war ur bajenn, e c\'hallo ar wiki-mañ diskouez deoc\'h ur skeudenn warni un tamm testenn liv pe a-dreuz. Goulennet e vo diganeoc\'h skrivañ ar gerioù deuet war wel. Un trevell start da emgefrekaat eo hemañ. Gant se e c\'hallo an implijerien wirion postañ ar pezh a fel ldezho tra ma vo lakaet un harz d\'an darn vrasañ eus ar spamerien pe d\'an dagerien robotek all. Koulskoude e c\'hallo an implijerien berr o gweled pe ar re a implij merdeerioù diazezet war ar skrid pe war ar vouezh bezañ strafuilhet gant se. N\'omp ket evit kinnig un diskoulm dre glevet evit c\'hoazh. Kit e darempred gant merourien al lec\'hienn m\'hoc\'h eus diaesterioù evit kemer perzh abalamour d\'an teknik-se. Pouezit war bouton \'kent\' ho merdeer evit distreiñ d\'ar bajenn gemmañ.',\r
+);\r
+$wgConfirmEditMessages['bs'] = array(\r
+       'captcha-edit'  => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captcha-addurl'  => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captcha-create'  => 'Vaša izmjena uključuje nove URL poveznice; kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje su prikazane u slici:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captchahelp-text' => 'Vebsajtovi koji podržavaju slanje sadržaja iz javnosti, kao što je ovaj viki, često zloupotrebljavaju vandali koji koriste automatizovane alate da šalju svoje poveznice ka mnogim sajtovima.  Iako se ove neželjene poveznice mogu ukloniti, one ipak zadaju veliku muku.\r
+\r
+Ponekad, pogotovo kad se dodaju nove internet poveznice na stranicu, viki softver Vam može pokazati sliku obojenog i izvrnutog teksta i tražiti da ukucate traženu riječ.  Pošto je teško automatizovati ovakav zadatak, on omogućuje svim pravim ljudima da vrše svoje izmjene, ali će zato spriječiti vandale i ostale robotske napadače.\r
+\r
+Nažalost, ovo može da bude nepovoljno za korisnike sa ograničenim vidom i za one koji koriste brauzere bazirane na tekstu ili govoru.  U ovom trenutku, audio alternativa nije dostupna.  Molimo Vas da kontaktirate administratore sajta radi pomoći ako Vas ovo neočekivano ometa u pravljenju dobrih izmjena.\r
+\r
+Kliknite \'nazad\' (\'back\') dugme vašeg brauzera da se vratite na polje za unos teksta.',\r
+       'captcha-createaccount' => 'Kao zaštita od automatizovanog vandalizma, moraćete da ukucate riječi koje se nalaze na slici da biste registrovali nalog:\r
+<br />([[{{ns:special}}:Captcha/help|Šta je ovo?]])',\r
+       'captcha-createaccount-fail' => 'Netačan unos ili nedostatak šifre za potvrđivanje.',\r
+);\r
+$wgConfirmEditMessages['ca'] = array(\r
+       'captcha-edit'                => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-addurl'                => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-create'                => 'La vostra edició conté enllaços externs nous. Com a protecció contra la brossa de propaganda automàtica, cal que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-createaccount'       => 'Com a protecció contra la creació automàtica de comptes d\'usuari necessitem que resolgueu aquesta simple suma i introduïu el resultat en el quadre a continuació ([[Special:Captcha/help|més informació]]):',\r
+       'captcha-createaccount-fail'  => 'Manca el codi de confirmació, o bé és incorrecte.',\r
+       'captchahelp-title'           => 'Ajuda amb el sistema captcha',\r
+       'captchahelp-text'            => 'Els webs que accepten la publicació de missatges per part del seu públic, com aquesta wiki, són sovint víctimes de spam per part de robots automàtics que hi posen enllaços cap als seus webs. Aquests enllaços poden anar essent esborrats, però són un important destorb.\r
+\r
+Quan creeu nous comptes d\'usuari o voleu afegir enllaços a una pàgina se us pot demanar que respongueu una pregunta fàcil, una suma o que digueu quina paraula apareix en una imatge distorsionada. Aquestes tasques són molt difícils de fer per a un programa automàtic i per tant permet que la majoria d\'usuaris humans puguin introduir la informació que creguin i alhora atura la majoria d\'atacants robots.\r
+\r
+Malauradament, aquest sistema pot suposar un inconvenient per a usuaris amb problemes de visió o que utilitzin navegadors de text simple o de veu. Actualment no disposem de cap alternativa auditiva disponible. Contacteu els administradors del web si aquests sistema us impedeix de fer edicions legítimes.\r
+\r
+Necessitareu tenir les galetes activades en el vostre navegador per a que funcioni.\r
+\r
+Cliqueu el botó de retrocedir del vostre navegador per a tornar al formulari.',\r
+);\r
+$wgConfirmEditMessages['cs'] = array(\r
+       'captcha-edit'               => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captcha-addurl'               => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captcha-create'               => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captchahelp-title'          => 'Nápověda ke captcha',\r
+       'captchahelp-text'           => "Webové stránky, do kterých mohou přispívat jejich návštěvníci (jako například tato wiki), jsou často terčem spammerů, kteří pomocí automatických nástrojů vkládají své odkazy na velké množství stránek. Přestože lze tento spam odstranit, představuje nepříjemné obtěžování.\r
+\r
+Někdy, zvláště při přidávání nových webových odkazů, vám může wiki ukázat obrázek barevného či pokrouceného textu a požádat vás o opsání zobrazených znaků. Jelikož takovou úlohu lze jen těžko automatizovat, skuteční lidé mohou dále přispívat, zatímco většina spammerů a jiných robotických útočníků to zastaví.\r
+\r
+Bohužel to však může představovat nepříjemný problém pro uživatele se zrakovým postižením či uživatele používající textové prohlížeče či hlasové čtečky. V současné době nemáme alternativní zvukovou verzi. Kontaktujte laskavě správce serveru, pokud vám to brání v užitečných příspěvcích a potřebujete pomoc.\r
+\r
+Pro návrat na předchozí stránku stiskněte ve svém prohlížeči tlačítko „zpět“.",\r
+       'captcha-createaccount'      => 'V rámci ochrany před automatickým spamováním musíte pro provedení registrace opsat text z následujícího obrázku:<br />([[Special:Captcha/help|Co tohle znamená?]])',\r
+       'captcha-createaccount-fail' => 'Chybějící či neplatný potvrzovací kód.',\r
+);\r
+$wgConfirmEditMessages['cy'] = array(\r
+       'captcha-edit'               => "Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captcha-addurl'               => "Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captcha-create'               => "Mae eich golygiad yn cynnwys cysylltiadau URL newydd. Er mwyn profi nad ydych yn beiriant sbam, teipiwch y geiriau canlynol yn y blwch isod os gwelwch yn dda. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captchahelp-title'          => 'Cymorth "captcha"',\r
+       'captchahelp-text'           => "Yn anffodus, mae safleoedd gwe fel Wicipedia, sy'n caniatau i'r cyhoedd ysgrifennu iddi, yn darged beunyddiol i sbamwyr sy'n defnyddio rhaglenni arbennig i bostio eu cysylltiadau. Gellir dileu'r dolenni o'r dudalen, ond mae hyn yn drafferth mawr. O dro i dro, fe fydd y safle hon yn dangos delwedd o destun, ac fe fydd yn rhaid i chi deipio'r geiriau a ddangosir. Mae hyn yn dasg anodd iawn i ragenni cyfrifiadurol, felly dylai golygwyr go iawn gyflawni'r dasg yn di-drafferth, yn wahanol i'r rhaglenni sbam. Mae hyn yn amlwg yn creu trafferthion i'r sawl sydd yn defnyddio porwyr testun neu sydd yn colli eu golwg. Ar hyn o bryd nid oes fersiwn sain ar gael. Cysylltwch â gweinyddwyr y safle os ydi'r nodwedd hon yn eich rhwystro rhag ychwanegu golygiadau dilys. Gwasgwch botwm 'nôl' eich porwr er mwyn dychwelyd.",\r
+       'captcha-createaccount'      => "Teipiwch y geiriau sy'n ymddangos yn y ddelwedd isod os gwelwch yn dda. Mae'r nodwedd hon yn rhwystro rhaglenni sbam rhag creu cyfrifon i'w hunain. <br />([[Arbennig:Captcha/help|Mwy o wybodaeth]])",\r
+       'captcha-createaccount-fail' => "Côd cadarnhau ar goll neu'n anghywir.",\r
+);\r
+$wgConfirmEditMessages['de'] = array(\r
+       'captcha-edit'               => "Zur Bearbeitung der Seite ist es nötig, dass Sie die nachfolgende Rechenaufgabe lösen und das Ergebnis eintragen [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captcha-addurl'             => "Ihre Bearbeitung enthält neue externe Links. Zum Schutz vor automatisiertem Spamming ist es nötig, dass Sie die nachfolgende Rechenaufgabe lösen und das Ergebnis eintragen. Klicken Sie dann erneut auf „Seite speichern“ [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captcha-badpass'            => 'Zum Schutz vor einer Kompromittierung Ihres Benutzerkontos Sie die Summe der nachfolgende Zahlen in das darunter erscheinende Feld ein [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]]:',\r
+       'captcha-createaccount'      => "Zum Schutz vor automatisierter Anlage von Benutzerkonten müssen Sie einmalig die nebenstehende Rechenaufgabe lösen [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captcha-createaccount-fail' => "Falscher oder fehlender Bestätigungscode.",\r
+       'captcha-create'             => "Zur Erstellung der Seite ist es nötig, dass Sie die nachfolgende Rechenaufgabe lösen und das Ergebnis eintragen [[{{ns:special}}:Captcha/help|(Fragen oder Probleme?)]].",\r
+       'captchahelp-title'          => 'Captcha-Hilfe',\r
+       'captchahelp-cookies-needed' => "'''Wichtiger Hinweis:''' Es müssen Cookies im Browser erlaubt sein.",\r
+       'captchahelp-text'           => "Internetangebote, die für Beiträge von praktisch jedem offen sind — so wie das {{SITENAME}}-Wiki — werden oft von Spammern missbraucht, die ihre Links automatisch auf vielen Webseiten platzieren. Diese Spam-Links können wieder entfernt werden, sie sind aber ein erhebliches Ärgernis. In manchen Fällen, insbesondere beim Hinzufügen von neuen Weblinks zu einer Seite, kann es vorkommen, dass dieses Wiki ein Bild mit einem farbigen und verzerrten Text anzeigt und dazu auffordert, die angezeigten Wörter einzutippen. Da eine solche Aufgabe nur schwer automatisch erledigt werden kann, werden dadurch die meisten Spammer, die mit automatischen Werkzeugen arbeiten, gestoppt, wogegen menschliche Benutzer ihren Beitrag absenden können. Leider kann dies zu Schwierigkeiten für Personen führen, die über eine eingeschränkte Sehfähigkeit verfügen oder text- oder sprachbasierte Browser verwenden. Eine Lösung ist die reguläre Anmeldung als Benutzer. Der „Zurück“-Knopf des Browsers führt zurück in das Bearbeitungsfenster.",\r
+);\r
+\r
+$wgConfirmEditMessages['es'] = array(\r
+       'captcha-edit'                   => "La edición incluye nuevos enlaces. Como protección contra spam automatizado, es necesario que resuelva la suma e indique la solución en la casilla ([[Special:Captcha/help|más info]]):",\r
+       'captchahelp-title'          => 'Información sobre el captcha',\r
+       'captchahelp-cookies-needed' => "Debe tener las cookies activadas en el navegador para que el sistema funcione.",\r
+       'captchahelp-text'           => "Los webs que aceptan mensajes del público, como esta wiki, son abusados a menudo por spammers que utilizan programas para incluir automáticamente sus enlaces. Si bien estos enlaces pueden retirarse, son una gran molestia.\n\nEn ocasiones, especialmente cuando añada nuevos enlaces a una página, la wiki le mostrará una imagen de texto coloreado o distorsionado y le pedirá que escriba las palabras que muestra. Dado que esta es una tarea difícil de automatizar, permite a la mayoría de las personas enviar sus textos, a la vez que detiene spammers y otros atacantes automáticos.\n\nDesgraciadamente, esto puede ser un inconveniente para usuarios con visibilidad limitada o que usen navegadores de texto / de voz. No tenemos por el momento una alternativa sonora disponible. Por favor, solicite asistencia de los administradores si esto le impide realizar ediciones legítimas. Presione el botón atrás de su navegador para volver a la edición.",\r
+       'captcha-createaccount'      => "Como protección contra creaciones automatizadas de cuentas, es necesario que resuelva la suma y de la solución en la casilla ([[Special:Captcha/help|más info]]):",\r
+       'captcha-createaccount-fail' => "C&oacute;digo de confirmación incorrecto.",\r
+);\r
+\r
+$wgConfirmEditMessages['et'] = array(\r
+       'captcha-edit'               => "Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captcha-addurl'               => "Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captcha-create'               => "Teie muudatuses on uusi linke; kaitseks spämmi vastu peate sisestama järgneval pildil olevad sõnad:<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captchahelp-title'          => 'Mis on Captcha?',\r
+       'captchahelp-text'           => "Internetisaite, mis lubavad külastajatel sisu muuta (nagu ka see Viki), kasutavad sageli spämmerid ära, postitades reklaamlinke - spämmi. Kuigi neid linke saab alati ära võtta, on nad ikkagi üpris tülikad. Omale kasutajakontot registreerides või mõnele lehele uusi internetiaadresse postitades näidatakse teile moonutatud tekstiga pilti ning palutakse teil sisestada seal näidatud sõnad. Kuna selliselt pildilt on arvutil raske teksti välja lugeda, on see efektiivseks kaitseks spämmirobotite vastu, samas lubades tavainimestel oma muudatusi rahus teha. Kahjuks võib see tekitada ebamugavusi nägemisraskustega inimestele või neile, kes kasutavad kõnesüntesaatorit või tekstipõhist brauserit. Hetkel pole meil helipõhist alternatiivi. Kui teil tekib ootamatult raskusi oma muudatuste tegemisel, siis kirjutage sellest [[Vikipeedia:Üldine arutelu|üldise arutelu]] lehele. Konto registreerimise lehele või lehe redigeerimisele tagasi jõudmiseks vajutage oma brauseri tagasi-nuppu.",\r
+       'captcha-createaccount'      => "Kaitsena spämmi vastu peate konto registreerimiseks lahtrisse kirjutama järgneva tehte tulemuse.<br /> ([[Special:Captcha/help|Mis see on?]])",\r
+       'captcha-createaccount-fail' => "Puuduv või valesti sisestatud kinnituskood.",\r
+);\r
+$wgConfirmEditMessages['eu'] = array(\r
+       'captcha-edit'               => "Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captcha-addurl'               => "Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captcha-create'               => "Zure aldaketan URL lotura berriak daude; spam-a saihesteko, jarraian dagoen irudiko hitzak idaztea beharrezkoa da:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captchahelp-title'          => 'Captcha laguntza',\r
+       'captchahelp-text'           => "Publikoki aldaketak egiteko aukerak dituzten webguneetan, wiki honetan bezalaxe, spam testuak gehitzen dira sarritan tresna automatikoak erabiliz. Lotura horiek ezabatu egin daitezkeen arren, traba dira. Batzutan, eta bereziki webgune berri bateko loturak gehitzen dituzunean, hitz batzuk dituen irudi bat agertuko zaizu, eta bertan ageri den testua idazteko eskatuko zaizu. Lan hori automatizatzeko zaila da, eta pertsonei ezer kostatzen ez zaigunez, spam testuak saihesteko lagungarria da. Zoritxarrez, ikusmen mugatua edo testu bidezko nabigatzaileak erabiltzen dituzten erabiltzeek arazoak izan ditzakete. Horrelako zerbait gertatzen bazaizu, mesedez, jarri administratzaileekin harremanetan. Zure nabigatzaileko 'atzera' lotura erabili aldaketen orrialdera itzultzeko.",\r
+       'captcha-createaccount'      => "Spam-a saihesteko, mesedez, irudian agertzen den hizki edo zenbaki kodea, beheko laukian idatzi zure kontua sortzeko:<br /> ([[Special:Captcha/help|Zer da hau?]])",\r
+       'captcha-createaccount-fail' => "Baieztatze kode ezegokia.",\r
+);\r
+\r
+$wgConfirmEditMessages['fi'] = array(\r
+       'captcha-edit'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-addurl'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-create'               => 'Muokkauksesi sisältää uusia linkkejä muille sivuille. Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-createaccount'      => 'Ratkaise alla oleva summa jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):',\r
+       'captcha-createaccount-fail' => 'Väärä tai puuttuva varmistuskoodi.',\r
+       'captchahelp-title'          => 'Captcha-ohje',\r
+       'captchahelp-text'           => "Verkkosivut, jotka sallivat ulkopuolisten lisätä sisältöä, joutuvat usein spam-hyökkäysten kohteeksi. Spam-hyökkäyksessä spammerit käyttävät työkaluja, jotka automaattisesti lisäävät linkkejä monille sivuille. Vaikka nämä linkit voidaan poistaa, aiheutuu niistä silti merkittävä haitta.\r
+\r
+Joskus, erityisesti kun lisäät uusia linkkejä, saatat nähdä kuvan, jossa on värillistä ja vääristynyttä tekstiä, ja sinua pyydetään kirjoittamaan sen sisältämät sanat. Koska tätä tehtävää on vaikea automatisoida, se sallii melkein kaikkien oikeiden ihmisten tehdä muutoksensa, mutta estää automaattiset lisäykset.\r
+\r
+Valitettavasti tämä saattaa estää käyttäjiä, joilla on rajoittunut näkökyky tai käyttäjiä, jotka käyttävät teksti- tai puhepohjaisia selaimia. Ota yhteyttä sivuston ylläpitäjään, jos et pysty tekemään kunnollisia muutoksia.\r
+\r
+Varmistus ei toimi, jos evästeet eivät ole käytössä.\r
+\r
+Voit palata muokkaustilaan selaimen paluutoiminnolla.",\r
+);\r
+$wgConfirmEditMessages['fr'] = array(\r
+       'captcha-edit' => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le spam automatique,\r
+       veuillez entrer le résultat de l’addition ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-addurl' => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le spam automatique,\r
+       veuillez entrer le résultat de l’addition ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-create' => 'Votre édition inclut de nouveaux liens externes. Comme protection contre le spam automatique,\r
+       veuillez entrer le résultat de l’addition ci-dessous dans la boîte ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-createaccount' => 'Comme protection contre les créations de compte abusives, veuillez entrer le résultat de\r
+       l’addition dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :',\r
+       'captcha-createaccount-fail' => "Code de confirmation erroné ou manquant.",\r
+       'captchahelp-title'          => 'Aide sur les captcha',\r
+       'captchahelp-cookies-needed' => "Vous devez avoir les cookies activés dans votre navigateur pour que cela fonctionne.",\r
+       'captchahelp-text'           => "Les site Web acceptant des contributions du public, comme ce wiki, sont souvent utilisés par des spammeurs qui utilisent des outils automatiques pour placer de nombreux liens vers leurs sites. Même si ces liens de « spam » peuvent être enlevés, ils représentent une nuisance.\r
+\r
+Parfois, en particulier lors de l’ajout de nouveaux liens externes à une page, le wiki peut vous montrer une image représentant un texte coloré ou tordu et vous demander de taper les mots montrés. Cette tâche est difficile à automatiser, et permet aux humains de faire leurs contributions tout en stoppant la plupart des spammeurs.\r
+\r
+Malheureusement, cette solution peut gêner les utilisateurs malvoyants ou utilisant un navigateur en texte seul. Nous ne disposons pas d’alternative audio pour l'instant. Veuillez contacter un administrateur du site si vous n’arrivez pas à faire vos contributions.\r
+\r
+Cliquez sur le bouton « Précédent » de votre navigateur pour revenir à la page d’édition.",\r
+);\r
+$wgConfirmEditMessages['ga'] = array(\r
+       'captcha-edit'               => "Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captcha-addurl'               => "Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captcha-create'               => "Tá naisc URL nua san athrú seo atá tú ar tí a dhéanamh; mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.\r
+\r
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.\r
+\r
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+       'captcha-createaccount'      => "Mar chosaint in éadan turscair uathoibrithe, caithfidh tú na focail san íomhá seo a ionchur chun cuntas a chlárú: <br />([[Speisialta:Captcha/help|Céard é seo?]])",\r
+       'captcha-createaccount-fail' => "Ní raibh an cód deimhnithe ceart sa bhosca, nó ní raibh aon chód ann ar chor ar bith.",\r
+);\r
+$wgConfirmEditMessages['gl'] = array(\r
+       'captcha-edit'               => "A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de enlaces publicitarios necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captcha-addurl'               => "A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de enlaces publicitarios necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captcha-create'               => "A súa edición inclúe novos enderezos URL; como protección contra as ferramentas de publicación automática de enlaces publicitarios necesita teclear as palabras que aparecen nesta imaxe:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captchahelp-title'          => 'Captcha axuda',\r
+       'captchahelp-text'           => "'''CAPTCHA''' (acrónimo de \"'''C'''ompletely '''A'''utomated '''P'''ublic '''T'''uring test to tell '''C'''omputers and '''H'''umans '''A'''part\") é un test de autentificación do tipo desafío-resposta usado nos contornos informáticos para distinguir usuarios humanos de máquinas. Os sitios web que aceptan publicar as contribucións dos usuarios coma este wiki sofren, con frecuencia, o abuso por parte de ''spammers'' que usan ferramentas que automatizan a inclusión de lixo en forma de enlaces publicitarios nunha chea páxinas en pouco tempo. Mentres ditas ligazóns non son eliminadas supoñen unha molestia e unha perda de tempo. En ocasións, en particular cando engada algún novo vínculo externo, o wiki pode mostrar unha imaxe dun texto coloreado e distorsionado e pedíralle que teclee as palabras mostradas. Como esta tarefa é difícil de automatizar permite distinguir entre persoas e robots, e dificulta os ataques automatizados dos ''spammers''. Por desgraza pode causar problemas a aqueles usuarios con dificultades de visión, ou os que utilicen navegadores de texto ou navegadores baseados en sistemas de voz. Polo de agora non dispoñemos dunha alternativa de audio. Por favor contacte cun [[Special:Listusers/sysop|administrador]] do wiki para solicitar axuda se o sistema lle impide rexistrase para facer contribucións lexítimas. Prema no botón 'atrás' ou equivalente do seu navegador para volver á páxina na que estaba.",\r
+       'captcha-createaccount'      => "Como protección fronte a sistemas de creación automática de contas de usuario usados polos ''spamers'', ten que teclear as palabras que aparecen na imaxe para rexistrar unha conta:<br /> ([[Special:Captcha/help|Qué é isto?]])",\r
+       'captcha-createaccount-fail' => "Falta o código de confirmación ou é incorrecto.",\r
+);\r
+$wgConfirmEditMessages['he'] = array(\r
+       'captcha-edit'               => 'כדי לערוך את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-addurl'             => 'עריכתכם כוללת קישורים חיצוניים חדשים. כהגנה מפני ספאם אוטומטי, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-badpass'            => 'כהגנה מפני פריצת סיסמאות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-createaccount'      => 'כהגנה מפני יצירת חשבונות אוטומטית, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captcha-createaccount-fail' => 'לא הקלדתם קוד אישור, או שהוא שגוי.',\r
+       'captcha-create'             => 'כדי ליצור את הדף, אנא פיתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[{{ns:special}}:Captcha/help|מידע נוסף]]):',\r
+       'captchahelp-cookies-needed' => "עליכם להפעיל את תכונת העוגיות (Cookies) בדפדפן שלכם כדי שזה יעבוד.",\r
+       'captchahelp-title'          => 'עזרה במערכת הגנת הספאם',\r
+       'captchahelp-text'           => "פעמים רבות מנצלים ספאמרים אתרים שמקבלים תוכן מהציבור, כמו הוויקי הזה, כדי לפרסם את הקישורים שלהם לאתרים רבים באינטרנט, באמצעות כלים אוטומטיים. אמנם ניתן להסיר את קישורי הספאם הללו, אך זהו מטרד משמעותי.\r
+\r
+לעיתים, בעיקר כשאתם מכניסים קישורי אינטרנט חדשים לתוך עמוד, הוויקי עשוי להראות תמונה של טקסט צבעוני או מעוקם ויבקש מכם להקליד את המילים המוצגות. כיוון שזו משימה שקשה לבצעה בצורה אוטומטית, הדבר יאפשר לבני־אדם אמיתיים לשלוח את הדפים, אך יעצור את רוב הספאמרים והמתקיפים הרובוטיים.\r
+\r
+לרוע המזל, הדבר עשוי לגרום לאי נוחות למשתמשים עם דפדפן בגרסה מוגבלת, או שמשתמשים בדפדפנים מבוססי טקסט או דיבור. כרגע, אין לנו חלופה קולית זמינה. אנא צרו קשר עם מנהלי האתר לעזרה אם המערכת מונעת מכם באופן בלתי צפוי לבצע עריכות לגיטימיות.\r
+\r
+אנא לחצו על הכפתור 'Back' בדפדפן שלכם כדי לחזור לדף העריכה.",\r
+);\r
+$wgConfirmEditMessages['hr'] = array(\r
+       'captcha-edit'               => "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])",\r
+       'captcha-addurl'               => "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])",\r
+       'captcha-create'               => "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć?]])",\r
+       'captchahelp-title'          => 'Antispam pomoć',\r
+       'captchahelp-text'           => "Web poslužitelje koji rade na temelju javnih doprinosa, poput wiki, često zloupotrebljavaju spameri. Oni koriste automatske alate pomoću kojih generiraju poveznice od vlastitog interesa. Iako se te poveznice najčešće uklanjaju, mogu predstavljati neugodnost pri radu. Ponekad se dogodi da wiki prikaže sliku čudnog tekstualnog sadržaja uz koju morate unijeti prikazana slova. Budući da je takvu radnju teško automatizirati, većina se napadača obeshrabri, a pravi suradnici bez većih smetnji nastavljaju pridonositi. Ukoliko ste suradnik koji koristi tekstualni klijent te vas česte ovakve provjere ometaju pri dodavanju važećih sadržaja, molimo da se obratite [[Special:Listusers/sysop|administratorima]].",\r
+       'captcha-createaccount'      => "Kao zaštitu od automatskog spama, pri otvaranju računa trebate unijeti slova koja vidite na slici: <br />([[Posebno:Captcha/help|Pomoć]])",\r
+       'captcha-createaccount-fail' => "Potvrdni kod je nepotpun ili netočan.",\r
+);\r
+$wgConfirmEditMessages['hsb'] = array(\r
+       'captcha-edit'                => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',\r
+       'captcha-addurl'                => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',\r
+       'captcha-create'                => 'W twojej změnje su nowe eksterne wotkazy. Jako škitna naprawa přećiwo spamej dyrbiš slědowacy nadawk wuličeć a wuslědk do kašćika zapisować. Klikń potom znowa na „Składować”.<br /> [[{{ns:special}}:Captcha/help|(Čehodla?)]]',\r
+       'captcha-createaccount'       => 'Jako škitna naprawa přećiwo awtomatiskemu wutworjenju wužiwarskich kontow dyrbiš slědowacy nadawk wuličeć. [[{{ns:special}}:Captcha/help|(Prašenja abo problemy?)]]',\r
+       'captcha-createaccount-fail'  => 'Wopačny abo pobrachowacy wuslědk.',\r
+       'captchahelp-title'           => 'Pomoc z captcha',\r
+       'captchahelp-text'            => 'Sydła kaž {{SITENAME}}, kotrež móža so swobodnje wot kóždeho wobdźěłować su často z woporom spamarjow, kotřiž swoje wotkazy awtomatisce we wjele sydłach broja. Tute spam-wotkazy móža so zaso wotstronjeć, wubudźa pak njesnadne mjerzanje. W někotrych padach, wosebje při přidawanju nowych eksternych wotkazow, móže so stać, zo pokazuje tutón wiki wobraz z pisanym abo skomolenym tekstom abo kaza jednory ličenski nadawk wuličeć, kotrehož wuslědk dyrbi so potom do zapodawanskeho kašćika zapisować. Dokelž hodźi so tajki nadawk jenož ćežko z awtomatiskimi srědkami spamarjow spjelnić, móža so tajcy wotdźeržować, druzy wužiwarjo pak móža swoje změny składować. Bohužel móže to k wobćežnosćam za tutych wužiwarjow dowjesć, kotrychž kmanosć widźenja je wobmjezowana abo kotřiž dźěłaja z wobhladowakami kiž su na tekstowe abo rěčne wudawanje wusměrjene. Móžne rozrisanje tutoho problema je přizjewjenje jako wužiwar. Tłóčatko „Wróćo” swojeho wobhladowaka dowjedźe tebje zaso do wobdźěłowanskeho pola.',\r
+);\r
+$wgConfirmEditMessages['id'] = array(\r
+       'captcha-edit'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captcha-addurl'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captcha-create'               => "Suntingan Anda menyertakan pralana luar baru. Sebagai perlindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captchahelp-title'          => 'Mengenai Captcha',\r
+       'captchahelp-cookies-needed' => "Anda perlu mengaktifkan cookie pada penjelajah web Anda untuk menggunakan fitur ini.",\r
+       'captchahelp-text'           => "Situs-situs web yang menerima masukan data dari publik, seperti {{ns:project}} ini, kerapkali disalahgunakan oleh pengguna-pengguna yang tidak bertanggungjawab untuk mengirimkan spam dengan menggunakan program-program otomatis. Walaupun spam-spam tersebut dapat dibuang, tetapi tetap saja menimbulkan gangguan berarti.\r
+\r
+Ketika menambahkan pranala web baru ke suatu halaman, {{ns:project}} akan menampilkan sebuah gambar tulisan yang terdistorsi atau suatu perhitungan sederhana dan meminta Anda untuk mengetikkan kata atau hasil dimaksud. Karena ini merupakan suatu pekerjaan yang sulit diotomatisasi, pembatasan ini akan mengizinkan hampir semua manusia untuk melakukannya, tapi di sisi lain akan menghentikan kebanyakan aksi spam dan penyerangan yang dilakukan oleh bot otomatis.\r
+\r
+Sayangnya, hal ini dapat menimbulkan kesulitan bagi pengguna dengan keterbatasan penglihatan atau pengguna yang menggunakan penjelajah basis teks atau suara. Saat ini, kami tidak memiliki suatu alternatif suara untuk hal ini. Silakan minta bantuan dari pengurus situs jika hal ini menghambat Anda untuk mengirimkan suntingan yang layak.\r
+\r
+Tekan tombol 'back' di penjelajah web Anda untuk kembali ke halaman penyuntingan.",\r
+       'captcha-createaccount'      => "Sebagai perlindungan melawan spam, Anda diharuskan untuk mengetikkan kata atau hasil perhitungan di bawah ini di kotak yang tersedia untuk dapat mendaftarkan pengguna baru:<br />\r
+([[Special:Captcha/help|Apa ini?]])",\r
+       'captcha-createaccount-fail' => "Kode konfirmasi salah atau belum diisi.",\r
+);\r
+$wgConfirmEditMessages['is'] = array(\r
+       'captcha-edit'               => "Breyting þín fól í sér nýja tengla á aðrar vefsíður. Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captcha-addurl'               => "Breyting þín fól í sér nýja tengla á aðrar vefsíður. Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captcha-create'               => "Breyting þín fól í sér nýja tengla á aðrar vefsíður. Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captchahelp-title'          => 'Captcha-hjálp',\r
+       'captchahelp-text'           => "Vefsíður sem að leyfa framlög frá frá almenningi, líkt og þessi wiki-vefur, eru oft misnotaðar af svokölluðum „spömmurum“ sem nota sjálfvirk tól til þess að setja inn tengla á aðrar vefsíður. Aðrir notendur geta fjarlægt þessa tengla en töluverð truflun er af þeim.\r
+\r
+Stundum þegar þú breytir síðum, sérstaklega ef breytingin felur í sér nýja tengla á aðra vefi, getur gerst að þú sért beðin(n) um að skrifa inn orð sem birtast á lituðum eða óskýrum myndum. Fyrir flesta notendur af holdi og blóði er þetta lítið mál en sjálfvirk tól ráða ekki við þetta.\r
+\r
+Því miður kann þetta að valda notendum óþægindum sem hafa skerta sjón eða notast við talmálsvafra. Enn sem komið er eru ekki til aðrir valkostir fyrir þau tilvik. Ef þetta kemur í veg fyrir lögmætar breytingar af þinni hálfu getur þú leitað aðstoðar hjá stjórnendum vefsins.\r
+\r
+Notaðu „back“-hnapp vafrans til að halda áfram.",\r
+       'captcha-createaccount'      => "Til þess að verjast sjálfvirku auglýsingarusli verðum við að biðja þig um að skrifa inn orðin sem sjást á þessari mynd áður en þú skráir notandanafn: <br />([[Special:Captcha/help|Hvað er þetta?]])",\r
+       'captcha-createaccount-fail' => "Staðfestingarkóðinn var rangur eða ekki til staðar.",\r
+);\r
+$wgConfirmEditMessages['it'] = array(\r
+       'captcha-edit'               => "La modifica richiesta aggiunge dei nuovi collegamenti (URL) alla pagina; come misura precauzionale contro l'inserimento automatico di spam, per confermarla è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Special:Captcha/help|Cosa vuol dire?]])",\r
+       'captcha-addurl'               => "La modifica richiesta aggiunge dei nuovi collegamenti (URL) alla pagina; come misura precauzionale contro l'inserimento automatico di spam, per confermarla è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Special:Captcha/help|Cosa vuol dire?]])",\r
+       'captcha-create'               => "La modifica richiesta aggiunge dei nuovi collegamenti (URL) alla pagina; come misura precauzionale contro l'inserimento automatico di spam, per confermarla è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Special:Captcha/help|Cosa vuol dire?]])",\r
+       'captchahelp-title'          => "Cos'è il captcha?",\r
+       'captchahelp-text'           => "Capita spesso che i siti Web che accettano messaggi pubblici, come questo wiki, siano presi di mira da spammer che usano strumenti automatici per inserire collegamenti pubblicitari verso un gran numero di siti. Per quanto i collegamenti indesiderati si possano rimuovere, si tratta comunque di una seccatura non indifferente.\r
+\r
+In alcuni casi, ad esempio quando si tenta di aggiungere nuovi collegamenti Web in una pagina, il software wiki può mostrare una immagine con un breve testo colorato e/o distorto chiedendo di riscriverlo in un'apposita finestrella. Poiché si tratta di un'azione difficile da replicare da parte di un computer, questo meccanismo consente a (quasi tutti) gli utenti reali di completare l'inserimento desiderato, impedendo l'accesso alla maggior parte degli spammer e degli altri attacchi automatizzati.\r
+\r
+Sfortunatamente, queste misure di sicurezza possono mettere in difficoltà gli utenti con problemi visivi o coloro che utilizzano browser testuali o basati sulla sintesi vocale. Purtroppo al momento non è disponibile un meccanismo alternativo basato su messaggi audio; se queste procedure impediscono l'inserimento informazioni che si ritengono legittime, si prega di contattare gli amministratori del sito e chiedere loro assistenza.\r
+\r
+Fare clic sul pulsante 'back' del browser per tornare alla pagina di modifica.",\r
+       'captcha-createaccount'      => "Come misura di sicurezza nei confronti dei messaggi di spam automatici, per registrarsi è necessario inserire le parole che appaiono nell'immagine:<br />\r
+([[Speciale:Captcha/help|Cosa vuol dire?]])",\r
+       'captcha-createaccount-fail' => "Codice di verifica errato o mancante.",\r
+);\r
+\r
+$wgConfirmEditMessages['ja'] = array(\r
+       'captcha-edit'                => 'このページを編集するには下記に現れる数式の答えを入力してください。<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captcha-addurl'              => 'あなたの編集には新たに外部リンクが追加されています。スパム防止のため、下記の数式の答えを入力してください<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captcha-createaccount'       => 'スパム防止のため、アカウントを登録するには、下記に現れる数式の答えを入力してください<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captcha-createaccount-fail'  => '確認コードの入力がないか、間違っています。',\r
+       'captcha-create'              => 'あなたの編集は新たに外部リンクが追加されています。スパム防止のため、下記に現れる数式の答えを入力してください<br />\r
+([[Special:Captcha/help|詳細]])',\r
+       'captchahelp-title'           => 'Captcha ヘルプ',\r
+       'captchahelp-text'            => '当Wikiのような、投稿が公開されているウェブサイトは、多くのサイトに自分たちへのリンクを自動投稿するツールを用いるスパマーにより荒らされます。これらのスパムは除去できるものの、その作業大変うっとうしいものです。\r
+\r
+時々、特に新しいリンクをページに追加したとき、Wikiは色の付いた、もしくは、ゆがめられた文字を提示し、その入力をお願いすることがあります。この作業は自動化が難しいため、本当の人間の投稿を可能にしつつ、多くのスパマーやロボットの攻撃を防ぐことが出来ます。\r
+\r
+しかし、残念なことに、テキストベースやスピーチベースのブラウザを使っている、視覚障害者に不便をおかけする場合があります。現時点では、音声版の代替物がありません。正当な投稿をするにあたって、これが障害となっている場合、サイト管理者に連絡し、協力を求めてください。\r
+\r
+編集ページに戻るには、ブラウザの戻るボタンを押してください。',\r
+);\r
+\r
+$wgConfirmEditMessages['kk-kz'] = array(\r
+       'captcha-edit'              => "Бұл бетті өңдеу үшін, \r
+төмендегі қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-addurl'              => "Түзетуіңізде жаңа сыртқы сілтемелер бар екен. Өздік түрде «спам» жасалуынан қорғану үшін,\r
+төмендегі қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-create'              => "Жаңа бетті бастау үшін,\r
+төмендегі қосындылауды шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-createaccount'      => "Жаңа тіркелгі өздік түрде жасалуынан қорғану үшін, төмендегі қосындылауды \r
+шешіңіз де, нәтижесін аумаққа енгізіңіз ([[{{ns:special}}:Captcha/help|көбірек ақпарат]]):",\r
+       'captcha-createaccount-fail' => "Куәландыру коды дұрыс емес немесе жоқ.",\r
+       'captchahelp-cookies-needed' => "Бұл жұмысты істеу үшін, шолғышыңызда  «cookies»  дегенді ендіріңіз.",\r
+       'captchahelp-title'          => 'CAPTCHA анықтамасы',\r
+       'captchahelp-text'           => "Өздік құралдары бар «спаммерлер», баршадан жіберілген хабарды қабылдайтын, бұл уики сияқты, веб-тораптарға сілтемелерімен жиі жаудырады. Осындай «спам» сілтемелерін аластау болғанда да, бұл мәнді ыза келтіреді.\r
+\r
+Кейде, әсіресе бетке жаңа веб сілтемесін қосқанда, уики өңі өзгерген не қисайған мәтінді көрсетіп және сол сөздерді енгізу сұрауы мүмкін. Бұл тапсырыс өздік түрде атқару өте қиын, сондықтан бұл иманды адам көпшілігіне кедергі болмайды, бірақ «спаммерлерді» және бұзақы ботпен басқа шабуыл жасағандарды тоқтатады.\r
+\r
+Өкінішке орай, бұл көруі төмендеген, немесе мәтін не дауыс негізіндегі шолғышты қолданатын пайдаланушыға ыңғайсыздық келтіруге мүмкін. Осы қазір бізде дыбысты балама жоқ. Егер бұл адал жазуыңызға кедергілесе, торап бақылаушыларына қатынасыңыз.\r
+\r
+Бұл жұмысты істеу үшін шолғышыңызда «cookies» дегенді ендіру қажет.\r
+\r
+Бет өңдеуіне қайту бару үшін «Артқа» деген түймесін басыңыз.",\r
+);\r
+$wgConfirmEditMessages['kk-tr'] = array(\r
+       'captcha-edit'              => "Bul betti öñdew üşin, \r
+tömendegi qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-addurl'              => "Tüzetwiñizde jaña sırtqı siltemeler bar eken. Özdik türde «spam» jasalwınan qorğanw üşin,\r
+tömendegi qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-create'              => "Jaña betti bastaw üşin,\r
+tömendegi qosındılawdı şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-createaccount'      => "Jaña tirkelgi özdik türde jasalwınan qorğanw üşin, tömendegi qosındılawdı \r
+şeşiñiz de, nätïjesin awmaqqa engiziñiz ([[{{ns:special}}:Captcha/help|köbirek aqparat]]):",\r
+       'captcha-createaccount-fail' => "Kwälandırw kodı durıs emes nemese joq.",\r
+       'captchahelp-cookies-needed' => "Bul jumıstı istew üşin, şolğışıñızda  «cookies»  degendi endiriñiz.",\r
+       'captchahelp-title'          => 'CAPTCHA anıqtaması',\r
+       'captchahelp-text'           => "Özdik quraldarı bar «spammerler», barşadan jiberilgen xabardı qabıldaýtın, bul wïkï sïyaqtı, veb-toraptarğa siltemelerimen jïi jawdıradı. Osındaý «spam» siltemelerin alastaw bolğanda da, bul mändi ıza keltiredi.\r
+\r
+Keýde, äsirese betke jaña veb siltemesin qosqanda, wïkï öñi özgergen ne qïsaýğan mätindi körsetip jäne sol sözderdi engizw surawı mümkin. Bul tapsırıs özdik türde atqarw öte qïın, sondıqtan bul ïmandı adam köpşiligine kedergi bolmaýdı, biraq «spammerlerdi» jäne buzaqı botpen basqa şabwıl jasağandardı toqtatadı.\r
+\r
+Ökinişke oraý, bul körwi tömendegen, nemese mätin ne dawıs negizindegi şolğıştı qoldanatın paýdalanwşığa ıñğaýsızdıq keltirwge mümkin. Osı qazir bizde dıbıstı balama joq. Eger bul adal jazwıñızğa kedergilese, torap baqılawşılarına qatınasıñız.\r
+\r
+Bul jumıstı istew üşin şolğışıñızda «cookies» degendi endirw qajet.\r
+\r
+Bet öñdewine qaýtw barw üşin «Artqa» degen tüýmesin basıñız.",\r
+);\r
+$wgConfirmEditMessages['kk-cn'] = array(\r
+       'captcha-edit'              => "بۇل بەتتٴى ٴوڭدەۋ ٴۇشٴىن, \r
+تٴومەندەگٴى قوسىندىلاۋدى شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-addurl'              => "تٴۇزەتۋٴىڭٴىزدە جاڭا سىرتقى سٴىلتەمەلەر بار ەكەن. ٴوزدٴىك تٴۇردە «سپام» جاسالۋىنان قورعانۋ ٴۇشٴىن,\r
+تٴومەندەگٴى قوسىندىلاۋدى شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-create'              => "جاڭا بەتتٴى باستاۋ ٴۇشٴىن,\r
+تٴومەندەگٴى قوسىندىلاۋدى شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-createaccount'      => "جاڭا تٴىركەلگٴى ٴوزدٴىك تٴۇردە جاسالۋىنان قورعانۋ ٴۇشٴىن, تٴومەندەگٴى قوسىندىلاۋدى \r
+شەشٴىڭٴىز دە, نٴاتيجەسٴىن اۋماققا ەنگٴىزٴىڭٴىز ([[{{ns:special}}:Captcha/help|كٴوبٴىرەك اقپارات]]):",\r
+       'captcha-createaccount-fail' => "كۋٴالاندىرۋ كودى دۇرىس ەمەس نەمەسە جوق.",\r
+       'captchahelp-cookies-needed' => "بۇل جۇمىستى ٴىستەۋ ٴۇشٴىن, شولعىشىڭىزدا  «cookies»  دەگەندٴى ەندٴىرٴىڭٴىز.",\r
+       'captchahelp-title'          => 'CAPTCHA انىقتاماسى',\r
+       'captchahelp-text'           => "ٴوزدٴىك قۇرالدارى بار «سپاممەرلەر», بارشادان جٴىبەرٴىلگەن حاباردى قابىلدايتىن, بۇل ۋيكي سيياقتى, ۆەب-توراپتارعا سٴىلتەمەلەرٴىمەن جيٴى جاۋدىرادى. وسىنداي «سپام» سٴىلتەمەلەرٴىن الاستاۋ بولعاندا دا, بۇل مٴاندٴى ىزا كەلتٴىرەدٴى.\r
+\r
+كەيدە, ٴاسٴىرەسە بەتكە جاڭا ۆەب سٴىلتەمەسٴىن قوسقاندا, ۋيكي ٴوڭٴى ٴوزگەرگەن نە قيسايعان مٴاتٴىندٴى كٴورسەتٴىپ جٴانە سول سٴوزدەردٴى ەنگٴىزۋ سۇراۋى مٴۇمكٴىن. بۇل تاپسىرىس ٴوزدٴىك تٴۇردە اتقارۋ ٴوتە قيىن, سوندىقتان بۇل يماندى ادام كٴوپشٴىلٴىگٴىنە كەدەرگٴى بولمايدى, بٴىراق «سپاممەرلەردٴى» جٴانە بۇزاقى بوتپەن باسقا شابۋىل جاساعانداردى توقتاتادى.\r
+\r
+ٴوكٴىنٴىشكە وراي, بۇل كٴورۋٴى تٴومەندەگەن, نەمەسە مٴاتٴىن نە داۋىس نەگٴىزٴىندەگٴى شولعىشتى قولداناتىن پايدالانۋشىعا ىڭعايسىزدىق كەلتٴىرۋگە مٴۇمكٴىن. وسى قازٴىر بٴىزدە دىبىستى بالاما جوق. ەگەر بۇل ادال جازۋىڭىزعا كەدەرگٴىلەسە, توراپ باقىلاۋشىلارىنا قاتىناسىڭىز.\r
+\r
+بۇل جۇمىستى ٴىستەۋ ٴۇشٴىن شولعىشىڭىزدا «cookies» دەگەندٴى ەندٴىرۋ قاجەت.\r
+\r
+بەت ٴوڭدەۋٴىنە قايتۋ بارۋ ٴۇشٴىن «ارتقا» دەگەن تٴۇيمەسٴىن باسىڭىز.",\r
+);\r
+$wgConfirmEditMessages['kk'] = $wgConfirmEditMessages['kk-kz'];\r
+$wgConfirmEditMessages['la'] = array(\r
+       'captcha-edit'               => "Emendatione tua insunt nexus URL; ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captcha-addurl'               => "Emendatione tua insunt nexus URL; ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captcha-create'               => "Emendatione tua insunt nexus URL; ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captchahelp-title'          => 'Captcha auxilium',\r
+       'captchahelp-text'           => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. While these spam links can be removed, they are a significant nuisance.\r
+\r
+Sometimes, especially when adding new web links to a page, the wiki may show you an image of colored or distorted text and ask you to type the words shown. Since this is a task that's hard to automate, it will allow most real humans to make their posts while stopping most spammers and other robotic attackers.\r
+\r
+Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. Please contact the site administrators for assistance if this is unexpectedly preventing you from making legitimate posts.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+       'captcha-createaccount'      => "Ut spam automaticum vitemus, necesse est tibi inscribere verba, quae in hac imagine videntur, priusquam rationem possis creare. <br /> ([[Specialis:Captcha/Auxilium|Quidst illud?]])",\r
+       'captcha-createaccount-fail' => "Codex affirmationis aut non scriptus est aut male.",\r
+);\r
+$wgConfirmEditMessages['lv'] = array(\r
+       'captcha-edit'               => "Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captcha-addurl'               => "Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captcha-create'               => "Tavas izmaiņas ietver jaunu URL saiti. Lai pasargātos no automātiskas mēstuļošanas, Tev ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Interneta lapas, kurās iespējams pievienot tekstu, kā šajā wiki, bieži cieš no mēstuļotājiem, kuri izmanto automatizētus līdzekļus, lai pievienotu savus saites daudzās jo daudzās interneta lapās. Kaut arī šīs saites var viegli dzēst, tomēr tās ir nozīmīgs traucēklis. Reizēm, jo īpaši pievienojot jaunas interneta saites, wiki programmatūra var parādīt Tev attēlu, kurā ir krāsains vai sagrozīts teksts. Šis teksts ir jāpārraksta un to ir ļoti grūti izdarīt automātiski, tā apgrūtinot lielāko daļu mēstuļotāju, savukārt gandrīz visi parastie lietotāji to var izdarīt bez grūtībām. Diemžēl tas var apgrūtināt lietotājus, kuriem ir redzes traucējumi vai kuri izmanto teksta pārlūkus vai dzirdes pārlūkus. Šobrīd nav pieejama audio alternatīva, bet sazinies ar wiki administratoriem, ja tas liedz Tev veikt labi domātus papildinājumus. Spied pārlūka pogu \"Atpakaļ\" (''Back''), lai atgrieztos iepriekšējā lapā.",\r
+       'captcha-createaccount'      => "Lai pasargātos no automātiskas mēstuļošanas, Tev reģistrējoties ir jāieraksta vārds, kas redzams šajā attēlā: <br />([[Special:Captcha/help|Kāpēc tā?]])",\r
+       'captcha-createaccount-fail' => "Nepareizs apstiprinājuma kods vai arī tas nav ievadīts.",\r
+);\r
+$wgConfirmEditMessages['nl'] = array(\r
+       'captcha-edit'               => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captcha-addurl'               => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captcha-create'               => "Uw bewerking bevat nieuwe externe links (URL's). Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Websites die vrij te bewerken zijn, zoals deze wiki, worden vaak misbruikt door spammers die er met hun programma's automatisch links op zetten naar vele websites. Hoewel deze externe links weer verwijderd kunnen worden, leveren ze wel veel hinder en administratief werk op.\r
+\r
+Soms, en in het bijzonder bij het toevoegen van externe links op pagina's, toont de wiki u een afbeelding met gekleurde of vervormde tekst en wordt u gevraagd de getoonde tekst in te voeren. Omdat dit proces lastig te automatiseren is, zijn vrijwel alleen mensen in staat dit proces succesvol te doorlopen en worden hiermee spammers en andere geautomatiseerde aanvallen geweerd.\r
+\r
+Helaas levert deze bevestiging voor gebruikers met een visuele handicap of een tekst- of spraakgebaseerde browser problemen op. Op het moment is er geen alternatief met geluid beschikbaar. Vraag alstublieft assistentie van de sitebeheerders als dit proces u verhindert een nuttige bijdrage te leveren.\r
+\r
+Klik op de knop 'terug' in uw browser om terug te gaan naar het tekstbewerkingsscherm.",\r
+       'captcha-createaccount'      => "Voer ter bescherming tegen geautomatiseerde spam de woorden in die in de volgende afbeelding te zien zijn om uw gebruiker aan te maken:<br />\r
+([[Special:Captcha/help|Wat is dit?]])",\r
+       'captcha-createaccount-fail' => "Onjuiste bevestigingscode of niet ingevuld.",\r
+);\r
+$wgConfirmEditMessages['no'] = array(\r
+       'captcha-edit'               => "Din redigering inkluderer nye lenker; som en beskyttelse mot automatisert spam er du nødt til skrive inn ordene i dette bildet:\r
+<br />([[Special:Captcha/help|Hva er dette?]])",\r
+       'captcha-addurl'               => "Din redigering inkluderer nye lenker; som en beskyttelse mot automatisert spam er du nødt til skrive inn ordene i dette bildet:\r
+<br />([[Special:Captcha/help|Hva er dette?]])",\r
+       'captcha-create'               => "Din redigering inkluderer nye lenker; som en beskyttelse mot automatisert spam er du nødt til skrive inn ordene i dette bildet:\r
+<br />([[Special:Captcha/help|Hva er dette?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Internettsider som kan redigeres av alle, som denne wikien, blir ofte misbrukt av spammere som bruker roboter for å poste massive antall lenker. Selv om slike spamlenker kan fjernes er de til betydelig irritasjon.\r
+\r
+Noen ganger, særlig hvis du vil legge til nye internettlenker til en side, kan wikien vise deg et bilde av en farvet eller ujevn tekst og be deg skrive inn ordene som vises. Siden det er vanskelig å automatisere denne oppgaven, vil funksjonen slippe de fleste virkelige mennesker igjennom, men stoppe spammere.\r
+\r
+Dessverre finnes det i øyeblikket ikke noe audioalternativ for brukere med begrenset syn som som bruker tekst- eller talebaserte nettlesere. Vennlig kontakt administratorene hvis denne funksjonen forhindrer deg i å foreta legitime endringer.\r
+\r
+Trykk på «tilbake»-knappen for å komme tilbake til redigeringssiden.",\r
+       'captcha-createaccount'      => "For å beskytte Wikipedia mot spam må du skrive inn ordene i bildet for å registrere en konto.\r
+<br />([[Special:Captcha/help|Hva er dette?]])\r
+",\r
+       'captcha-createaccount-fail' => "Feil eller manglende bekreftelseskode.",\r
+);\r
+$wgConfirmEditMessages['nn'] = array(\r
+       'captcha-edit'               => "Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captcha-addurl'               => "Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captcha-create'               => "Endringa di inkluderer nye lenkjer; som eit vern mot automatisert reklame (spam) er du nøydd til skrive inn orda i dette bildet: <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Internettsider som kan bli endra av alle, som denne wikien, blir ofte misbruka av reklameinnleggjarar (spammarar) som nyttar robotar til å poste store tal lenkjer. Sjølv om slike reklamelenkjer kan bli fjerna er dei til betydelig irritasjon. Nokon gonger, særleg viss du vil leggje til nye internettlenker til ei side, kan wikien vise deg eit bilete av ein farga eller ujamn tekst og be deg skrive inn orda som blir visa. Sidan det er vanskeleg å automatisere denne oppgåva, vil funksjonen slippe dei fleste verkelege menneska gjennom, men stoppe reklamerobotar. Diverre finst det i augeblikket ikkje noko lydalternativ for brukarar med nedsett syn som brukar tekst- eller talebaserte nettlesarar. Ver venleg å kontakte administratorane viss denne funksjonen hindrar deg i å foreta legitime endringar. Trykk på «tilbake»-knappen for å komma tilbake til redigeringssida.",\r
+       'captcha-createaccount'      => "For å verne Wikipedia mot reklame (spam) må du skrive inn orda i biletet for å registrere ein konto. <br />([[Special:Captcha/help|Kva er dette?]])",\r
+       'captcha-createaccount-fail' => "Feil eller manglande godkjenningskode.",\r
+);\r
+$wgConfirmEditMessages['oc'] = array(\r
+       'captcha-edit'                => 'Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu\'es aquò?]])',\r
+       'captcha-addurl'                => 'Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu\'es aquò?]])',\r
+       'captcha-create'                => 'Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, devètz picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu\'es aquò?]])',\r
+       'captcha-createaccount'       => 'Coma proteccion contra las creacions de compte abusivas, entratz lo resultat de l’addicion dins la boita çai jos:<br />\r
+([[Special:Captcha/help|mai d’informacions]])',\r
+       'captcha-createaccount-fail'  => 'Còde de confirmacion mancant o erronèu.',\r
+       'captchahelp-title'           => 'Ajuda suls Captcha',\r
+       'captchahelp-text'            => 'Los sites webs que permeton al mai grand nombre de participar, coma aqueste wiki, son sovent atacats per de spammers qu\'utilizan d\'espleches automatizas per mandar lor ligams sus de fòrça sites sulcòp. Son fòrt aisits de suprimir mas avèm francament de causas mai risolièras de far. De còps quand ajustatz de ligams novèls vèrs lo web, lo wiki pòt vos mostrar un imatge amb un tèxt coloriat o torçut e vos demandar de lo picar. Es una tasca relativament complicada d\'automatizar, çò que permet de diferenciar un uman real d\'un logicial automatic malvolent. Malaürosament, aqueste sistèma es pas adaptat a d\'utilizaires mal-vesents o utilizant de navigaires textuals o audiò. Actualament, prepausem pas d\'alternativas adaptadas. Se avètz besonh d\'ajuda esitetz pas a contactar los administrators del sit. Clicatz sul boton \'precedent\' de vòstre navegaire per tornar a l\'editor.',\r
+);\r
+$wgConfirmEditMessages['pt'] = array(\r
+       'captcha-edit'               => "Para editar esta página será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])",\r
+       'captcha-addurl'             => "Sua edição inclui novas ligações externas; como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])",\r
+       'captcha-badpass'            => 'Como prevenção contra formas automatizadas de pesquisa e descoberta de senhas, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]]',\r
+       'captcha-create'             => "Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem no box apropriado ([[Special:Captcha/help|o que é isto?]])",\r
+       'captchahelp-title'          => 'Ajuda com o Captcha',\r
+       'captchahelp-cookies-needed' => "Você precisará ter cookies habilitados em seu navegador para que possa funcionar",\r
+       'captchahelp-text'           => "Sítios abertos a inserções públicas, como é o caso deste wiki, são vulneráveis a spammers que utilizem ferramentas automatizadas para inserir seus links em diversos locais. Remover tais links posteriormente poderá ser um significativo incômodo.\r
+\r
+Algumas vezes, especialmente ao adicionar novos links externos em uma página, o sistema exibirá uma imagem com um texto colorido ou distorcido e pedirá que você digite as palavras exibidas. Uma vez que essa é uma tarefa um tanto difícil de ser automatizada, ela possibilita que vários humanos façam as suas inserções ao mesmo tempo que inibe as que forem feitas por spammers e mecanismos automatizados.\r
+\r
+Infelizmente, isso pode ser dificultoso a utilizadores com limitações visuais ou que naveguem através de  mecanismos baseados em texto ou baseados em voz. No momento não há uma alternativa em áudio. Por gentileza, contacte os administradores do sítio em casos que seja necessária a assistência de alguém para que você possa fazer as suas inserções legítimas.\r
+\r
+Pressione o botão 'voltar' de seu navegador para retornar à página de edição.",\r
+       'captcha-createaccount'      => "Como prevenção contra sistemas automatizados que inserem spam, será necessário que você digite as palavras exibidas na seguinte imagem para que possa se cadastrar:<br />\r
+([[Special:Captcha/help|O que é isto?]])",\r
+       'captcha-createaccount-fail' => "Código incorreto ou não preenchido.",\r
+);\r
+$wgConfirmEditMessages['pt-br'] = $wgConfirmEditMessages['pt'];\r
+$wgConfirmEditMessages['ro'] = array(\r
+       'captcha-edit'                => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-addurl'                => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-create'                => 'Editarea include legături externe noi. Pentru a evita spam-ul automat, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-createaccount'       => 'Pentru a evita crearea automată de conturi, vă rugăm să rezolvaţi adunarea de mai jos şi introduceţi rezultatul în căsuţă ([[Special:Captcha/help|detalii]]):',\r
+       'captcha-createaccount-fail'  => 'Cod de confirmare incorect sau lipsă.',\r
+       'captchahelp-title'           => 'Despre „Captcha”',\r
+       'captchahelp-text'            => 'Siturile Web care acceptă postări din partea publicului, precum acest wiki, sunt de obicei abuzate de persoane care folosesc unelte automate pentru a introduce legături către multe situri. Deşi aceste legături de spam pot fi scoase, acest lucru reprezintă o muncă inconvenientă.\r
+\r
+Uneori, mai ales la adăugarea de legături web noi într-o pagină, situl wiki vă poate arăta o imagine cu un text colorat sau distorsionat şi ruga să introduceţi cuvintele arătate. Deoarece aceasta este o sarcină greu de automatizat, va permite majorităţii persoanelor reale să posteze şi va opri majoritatea atacatorilor.\r
+\r
+Din nefericire, această metodă îi poate deranja pe utilizatorii cu vedere limitată sau care folosesc browsere bazate pe text sau sunet. În acest moment nu avem o alternativă audio disponibilă. Vă rugăm, contactaţi administratorii sitului pentru asistenţă dacă metoda vă opreşte de la a face postări legitime.\r
+\r
+Va fi nevoie ca browserul folosit să suporte module cookie.',\r
+);\r
+$wgConfirmEditMessages['ru'] = array(\r
+       'captcha-edit'               => "Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captcha-addurl'               => "Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captcha-create'               => "Вы добавили ссылку на внешний сайт; в целях защиты от автоматического спама, введите буквы изображённые на картинке:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captchahelp-title'          => 'Справка о CAPTCHA',\r
+       'captchahelp-text'           => "Вебсайты позволяющие добавлять и изменять своё содержимое, в том числе вики, часто становятся целью спамеров, использующих программы для автоматического добавления ссылок. Хотя такие ссылки могут быть удалены, они являются существенной помехой.\r
+\r
+Иногда, например при добавлении на страницу новой веб-ссылки, вики может показать вам картинку с цветным или искажённым текстом и предложить ввести текст, который вы видите. Так как подобная задача трудноавтоматизируема, это даёт возможность большинству людей разместить свои изменения, в то время как большинство спамерских и вандальных программ не могут это сделать.\r
+\r
+К сожалению, подобная защита может причинить неудобства людям с ограничениями по зрению или тем, кто использует читающие браузеры. В настоящее время у нас нет звуковой альтернативы данной проверке. Пожалуйста, обратитесь за помощью к администраторам, если подобная проверка мешает вам добросовестно работать с сайтом.\r
+\r
+Нажмите кнопку «Назад» в ваше браузере, чтобы вернуться к редактированию.",\r
+       'captcha-createaccount'      => "В качестве меры против автоматического спама, вы должны ввести буквы, изображённые на картинке, чтобы зарегистрироваться в системе:<br />\r
+([[{{ns:special}}:Captcha/help|Что это такое?]])",\r
+       'captcha-createaccount-fail' => "Код подтверждения отсутствует или неверен.",\r
+);\r
+$wgConfirmEditMessages['sk'] = array(\r
+       'captcha-edit'                => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',\r
+       'captcha-addurl'                => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',\r
+       'captcha-create'                => 'Vaša úprava obsahuje nové externé odkazy. Ako pomoc pri ochrane pred automatickým spamom vyriešte prosím tento jednoduchý súčet a zadajte výsledok do poľa ([[Special:Captcha/help|viac informácií]]):',\r
+       'captcha-createaccount'       => 'Kvôli ochrane proti automatizovanému spamu je potrebné napísať slová zobrazené na tomto obrázku, až potom bude vytvorený nový účet:\r
+<br />([[Special:Captcha/help|Čo je toto?]])',\r
+       'captcha-createaccount-fail'  => 'Nesprávny alebo chýbajúci potvrdzovací kód.',\r
+       'captchahelp-title'           => 'Pomocník ku captcha',\r
+       'captchahelp-text'            => 'Webstránky prijímajúce príspevky od verejnosti ako táto wiki sú často cieľom zneužitia spammemi, ktorí používajú automatizované nástroje na to, aby svoje odkazy umiestnili na množstvo stránok. Hoci je možné tieto odkazy odstrániť, zbytočne to zaťažuje používateľov.\r
+\r
+Niekedy, obzvlášť keď pridávate webové odkazy k článkom, wiki Vám môže zobraziť obrázok so zafarbeným alebo pokriveným textom a požiadať Vás o prepísanie zobrazených slov. Keďže takúto úlohu je ťažké zautomatizovať a umožní skutočným ľuďom poslať svoje príspevky, zastaví to väčšinu spammerov a iných robotických útočníkov.\r
+\r
+Naneštastie, môže to byť prekážkou pre používateľov so zrakovým postihnutím alebo tých, ktorí používajú textové alebo hovoriace prehliadače. Momentálne nemáme dostupnú audio zvukovú alternatívu. Kontaktujte prosím administratorov stránok, ak Vám to neočakávane komplikuje umiestňovanie oprávnených príspevkov.\r
+\r
+Stlačením tlačidla "späť" vo Vašom prehliadači sa vrátite do editora stránky.',\r
+);\r
+$wgConfirmEditMessages['sl'] = array(\r
+       'captcha-edit'               => "Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])",\r
+       'captcha-addurl'               => "Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])",\r
+       'captcha-create'               => "Vaše urejanje vključuje nove URL-povezave; zaradi zaščite pred avtomatizirano navlako boste morali vpisati besede, ki se pojavijo v okencu: <br />([[{{ns:Special}}:Captcha/help|Kaj je to?]])",\r
+       'captchahelp-title'          => 'Pomoč za captcha',\r
+       'captchahelp-text'           => "Spletne strani, ki omogočajo objavljanje širši javnosti, kot na primer ta wiki, pogosto zlorabljajo spamerji, ki za objavo svojih povezav na mnogih straneh uporabljajo avtomatizirana orodja. Čeprav se te neželene povezave da odstraniti, so precejšnja nadloga.\r
+\r
+Včasih, zlasti pri dodajanju novih spletnih povezav na stran, vam bo morda wiki prikazal sliko obarvanega ali popačenega besedila in zahteval vpis prikazanih besed. Ker je to opravilo težko avtomatizirati, bo s tem večini ljudi objavljanje dovoljeno, spamerji in druge robotski napadalci pa bodo ustavljeni.\r
+\r
+Žal lahko to povzroči nevšečnosti uporabnikom s slabim vidom in tistim, ki uporabljajo besedilne ali govorne brskalnike. Glasovna možnost trenutno še ni na razpolago. Če vam to nepričakovano preprečuje legitimno objavo, se, prosimo, obrnite na administratorje spletišča.\r
+\r
+Za vrnitev v urejevalnik izberite gumb 'nazaj' vašega brskalnika.",\r
+       'captcha-createaccount'      => "Za registracijo je zaradi zaščite pred neželenimi reklamnimi sporočili treba vpisati prikazane besede: <br />([[{{ns:special}}:Captcha|Kaj je to?]])",\r
+       'captcha-createaccount-fail' => "Nepravilna ali manjkajoča potrditvena koda.",\r
+);\r
+$wgConfirmEditMessages['sq'] = array(\r
+       'captcha-edit'               => "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captcha-addurl'               => "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captcha-create'               => "Redaktimi juaj ka lidhje URL të reja dhe si mbrojtje kundër abuzimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captchahelp-title'          => 'Captcha help',\r
+       'captchahelp-text'           => "Faqet e rrjetit që pranojnë shkrime nga publiku, siç është edhe kjo wiki, shpesh abuzohen nga njerëz që duan të përfitojnë duke reklamuar ose promovuar lidhjet e tyre. Këto lloj abuzimesh mund të hiqen kollaj por janë një bezdi dhe shpenzim kohe i papranueshëm.\r
+\r
+Ndonjëherë, sidomos kur po hapni një llogari të re apo kur po shtoni lidhje të reja nëpërmjet redaktimit tuaj, sistemi mund t'ju shfaqi një figurë që përmban fjalë me gërma ose numra të shtrembruara ose me ngjyra të ndryshme të cilat ju duhet të shtypni para se të mund të kryeni veprimin në fjalë. Kjo bëhet pasi është shumë e vështirë për një robot ose mjet automatik të kryejë të njëjtën punë. Kështu mund të dallohet nëse jeni me të vërtetë një njeri apo një robot. Ky lloj sistemi s'mund të ndalojë tërë abuzimet por ndalon një pjesë të mirë të tyre, sidomos ato që janë automatike dhe të shumta në numër.\r
+\r
+Fatkeqësisht ky lloj sistemi mund të bezdisi përdoruesit me pamje të kufizuar ose ata që përdorin mjete teksti ose shfletues leximi me zë. Tani për tani nuk kemi mundësi për të ofruar një sistem me zë në vend të figurave. Ju lutem lidhuni me administruesit nëse ky sistem po ju ndalon të jepni kontribute të vlefshme.\r
+\r
+Shtypni butonin \"prapa\" (\"back\") të shfletuesit tuaj për tu kthyer tek faqja e mëparshme.",\r
+       'captcha-createaccount'      => "Për mbrojtje kundër regjistrimeve automatike duhet të shtypni çfarë shfaqet tek figura e mëposhtme para se të hapni llogarinë:<br /> ([[Special:Captcha|Çfarë është kjo?]])",\r
+       'captcha-createaccount-fail' => "Mesazhi që duhej shtypur mungon ose nuk është shtypur siç duhet.",\r
+);\r
+$wgConfirmEditMessages['uk'] = array(\r
+       'captchahelp-text'           => "Вікіпедія застосовує техніку розрізнення людей від комп'ютерів, яка використовує розпізнавання образів, для захисту від  комп'ютерних  шкідливих програм, які автоматично реєструються  (найчастіше спамлять у статтях).\r
+\r
+Для реєстрації у Вікіпедії та іноді й при редагуванні статей користувачеві потрібно ввести вказану контрольну послідовність символів, і яку вони, будучи людьми, а не комп'ютерними програмами, можуть легко розпізнати.\r
+\r
+You will need to have cookies enabled in your browser for this to work.\r
+\r
+Hit the 'back' button in your browser to return to the page editor.",\r
+       'captcha-createaccount-fail' => 'Невірний або відсутній код підтвердження.',\r
+);\r
+$wgConfirmEditMessages['wa'] = array(\r
+       'captcha-edit'  => 'Dins vos candjmints i gn a des novelès hårdêyes (URL); po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captcha-addurl'  => 'Dins vos candjmints i gn a des novelès hårdêyes (URL); po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captcha-create'  => 'Dins vos candjmints i gn a des novelès hårdêyes (URL); po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captchahelp-title' => 'Aidance passete d\' acertinaedje',\r
+       'captchahelp-text' => 'Les waibes k\' acceptèt des messaedjes do publik, come ci wiki chal, sont sovint eployîs pa des må-fjhants spameus, po pleur mete, avou des usteyes otomatikes, des loyéns di rclame viè les sites da zels.\r
+Bén seur, on pout todi les disfacer al mwin, mins c\' est on soyant ovraedje.\r
+\r
+Adon, pa côps, copurade cwand vos radjoutez des hårdêyes a ene pådje, ou å moumint d\' ahiver on novea conte sol wiki, on eployrè ene passete d\' acertinaedje, dj\' ô bén k\' on vos mostere ene imådje avou on tecse kitoirdou eyet vs dimander di taper les mots so l\' imådje. Come li ricnoxhance di ç\' tecse la est målåjheye a fé otomaticmint pa on robot, çoula permete di leyî les vraiyès djins fé leus candjmints tot arestant l\' plupårt des spameus et des sfwaitès atakes pa robot.\r
+\r
+Målureuzmint çoula apoite eto des målåjhminces po les cis k\' ont des problinmes po vey, ou k\' eployèt des betchteus e môde tecse ou båzés sol vwès. Pol moumint, nos n\' avans nén ene alternative odio. S\' i vs plait contactez les manaedjeus do site po d\' l\' aidance si çoula vos espaitche di fé vos candjmints ledjitimes.\r
+\r
+Clitchîz sol boton «En erî» di vosse betchteu waibe po rivni al pådje di dvant.',\r
+       'captcha-createaccount' => 'Po s\' mete a houte des robots di spam, nos vs dimandans d\' acertiner ki vos estoz bén ene djin po-z ahiver vosse conte, po çoula, tapez les mots k\' aparexhèt dins l\' imådje chal pa dzo:<br />([[{{ns:special}}:Captcha/help|Pocwè fjhans ns çoula?]])',\r
+       'captcha-createaccount-fail' => 'Li côde d\' acertinaedje est incorek ou mancant.',\r
+);\r
+$wgConfirmEditMessages['zh-cn'] = array(\r
+       'captcha-edit'               => "你编辑的内容中含有一个新的URL链接;为了免受自动垃圾程序的侵扰,你需要输入显示在下面图片中的文字:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captcha-addurl'               => "你编辑的内容中含有一个新的URL链接;为了免受自动垃圾程序的侵扰,你需要输入显示在下面图片中的文字:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captcha-create'               => "你编辑的内容中含有一个新的URL链接;为了免受自动垃圾程序的侵扰,你需要输入显示在下面图片中的文字:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captchahelp-title'          => 'Captcha 帮助',\r
+       'captchahelp-text'           => "象本站一样,对公众开放编辑的站点经常被垃圾链接骚扰。那些人使用自动化垃圾程序将他们的链接张贴到很多站点。虽然这些链接可以被清除,但是这些东西确实令人十分讨厌。\r
+\r
+有时,特别是当给一个页面添加新的网页链接时,本站会让你看一幅有颜色的或者有变形文字的图像,并且要你输入所显示的文字。因为这是难以自动完成的一项任务,它将允许人保存他们的编辑,同时阻止大多数发送垃圾邮件者和其他机器人的攻击。\r
+\r
+令人遗憾是,这会使得视力不好的人,或者使用基于文本或者基于声音的浏览器的用户感到不便。而目前我们还没有提供的音频的选择。如果这正好阻止你进行正常的编辑,请和管理员联系获得帮助。\r
+\r
+单击你浏览器中的“后退”按钮返回你所编辑的页面。",\r
+       'captcha-createaccount'      => "为了防止程序自动注册,你需要输入以下图片中显示的文字才能注册帐户:<br />\r
+([[Special:Captcha/help|这是什么?]])",\r
+       'captcha-createaccount-fail' => "验证码错误或丢失。",\r
+);\r
+$wgConfirmEditMessages['zh-tw'] = array(\r
+       'captcha-edit'               => "你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,你需要輸入顯示在下面圖片中的文字:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captcha-addurl'               => "你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,你需要輸入顯示在下面圖片中的文字:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captcha-create'               => "你編輯的內容中含有一個新的URL連結;為了免受自動垃圾程式的侵擾,你需要輸入顯示在下面圖片中的文字:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captchahelp-title'          => 'Captcha 說明',\r
+       'captchahelp-text'           => "像本站一樣,對公眾開放編輯的網站經常被垃圾連結騷擾。那些人使用自動化垃圾程序將他們的連結張貼到很多網站。雖然這些連結可以被清除,但是這些東西確實令人十分討厭。\r
+\r
+有時,特別是當給一個頁面添加新的網頁連結時,本站會讓你看一幅有顏色的或者有變形文字的圖像,並且要你輸入所顯示的文字。因為這是難以自動完成的一項任務,它將允許人保存他們的編輯,同時阻止大多數發送垃圾郵件者和其他機器人的攻擊。\r
+\r
+令人遺憾是,這會使得視力不好的人,或者使用基於文本或者基於聲音的瀏覽器的用戶感到不便。而目前我們還沒有提供的音頻的選擇。如果這正好阻止你進行正常的編輯,請和管理員聯繫獲得幫助。\r
+\r
+點擊瀏覽器中的「後退」按鈕返回你所編輯的頁面。",\r
+       'captcha-createaccount'      => "為了防止程式自動註冊,你需要輸入以下圖片中顯示的文字才能註冊帳戶:<br />\r
+([[Special:Captcha/help|這是什麼?]])",\r
+       'captcha-createaccount-fail' => "驗證碼錯誤或丟失。",\r
+);\r
+$wgConfirmEditMessages['zh-yue'] = array(\r
+       'captcha-edit'               => "你編輯的內容中含有新的URL連結;為咗避免受到自動垃圾程式的侵擾,你需要輸入顯示喺下面圖片度嘅文字:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captcha-addurl'               => "你編輯的內容中含有新的URL連結;為咗避免受到自動垃圾程式的侵擾,你需要輸入顯示喺下面圖片度嘅文字:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captcha-create'               => "你編輯的內容中含有新的URL連結;為咗避免受到自動垃圾程式的侵擾,你需要輸入顯示喺下面圖片度嘅文字:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captchahelp-title'          => 'Captcha 幫助',\r
+       'captchahelp-text'           => "就好似呢個wiki咁,對公眾開放編輯嘅網站係會經常受到垃圾連結騷擾。嗰啲人利用自動化垃圾程序將佢哋嘅連結張貼到好多網站。雖然呢啲連結可以被清除,但係呢啲嘢確實令人十分之討厭。\r
+\r
+有時,特別係當響一頁添加新嘅網頁連結嗰陣,呢個網站會畀你睇一幅有顏色的或者有變形文字嘅圖像,跟住要你輸入所顯示嘅文字。因為咁係難以自動完成嘅一項任務,它將允許人保存佢哋嘅編輯,同時亦阻止大多數發送垃圾郵件者同其它機械人嘅攻擊。\r
+\r
+令人遺憾嘅係,咁會令到視力唔好嘅人,或者利用基於文本或者基於聲音嘅瀏覽器用戶感到不便。而目前我哋仲未能夠提供音頻嘅選擇。如果咁樣咁啱阻止到你進行正常嘅編輯,請同管理員聯繫以獲得幫助。\r
+\r
+撳一下響瀏覽器度嘅「後退」掣返去你之前所編輯緊嘅頁面。",\r
+       'captcha-createaccount'      => "為咗防止程式自動註冊,你需要輸入以下圖片中顯示的文字先至能夠註冊得到個戶口:<br />\r
+([[Special:Captcha/help|呢個係乜嘢嚟?]])",\r
+       'captcha-createaccount-fail' => "驗證碼錯誤或者唔見咗。",\r
+);\r
+$wgConfirmEditMessages['zh-hk'] = $wgConfirmEditMessages['zh-tw'];\r
+$wgConfirmEditMessages['zh-sg'] = $wgConfirmEditMessages['zh-cn'];\r
+?>\r
diff --git a/oldwiki/extensions/recaptcha/ConfirmEdit.php b/oldwiki/extensions/recaptcha/ConfirmEdit.php
new file mode 100644 (file)
index 0000000..389e006
--- /dev/null
@@ -0,0 +1,708 @@
+<?php\r
+\r
+/**\r
+ * Experimental captcha plugin framework.\r
+ * Not intended as a real production captcha system; derived classes\r
+ * can extend the base to produce their fancy images in place of the\r
+ * text-based test output here.\r
+ *\r
+ * Copyright (C) 2005, 2006 Brion Vibber <brion@pobox.com>\r
+ * http://www.mediawiki.org/\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along\r
+ * with this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+ * http://www.gnu.org/copyleft/gpl.html\r
+ *\r
+ * @addtogroup Extensions\r
+ */\r
+\r
+if ( defined( 'MEDIAWIKI' ) ) {\r
+\r
+global $wgExtensionFunctions, $wgGroupPermissions;\r
+\r
+$wgExtensionFunctions[] = 'ceSetup';\r
+$wgExtensionCredits['other'][] = array(\r
+       'name' => 'ConfirmEdit',\r
+       'author' => 'Brion Vibber',\r
+       'url' => 'http://www.mediawiki.org/wiki/Extension:ConfirmEdit',\r
+       'description' => 'Simple captcha implementation',\r
+);\r
+\r
+# Internationalisation file\r
+require_once( 'ConfirmEdit.i18n.php' );\r
+\r
+/**\r
+ * The 'skipcaptcha' permission key can be given out to\r
+ * let known-good users perform triggering actions without\r
+ * having to go through the captcha.\r
+ *\r
+ * By default, sysops and registered bot accounts will be\r
+ * able to skip, while others have to go through it.\r
+ */\r
+$wgGroupPermissions['*'            ]['skipcaptcha'] = false;\r
+$wgGroupPermissions['user'         ]['skipcaptcha'] = false;\r
+$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;\r
+$wgGroupPermissions['bot'          ]['skipcaptcha'] = true; // registered bots\r
+$wgGroupPermissions['sysop'        ]['skipcaptcha'] = true;\r
+\r
+global $wgCaptcha, $wgCaptchaClass, $wgCaptchaTriggers;\r
+$wgCaptcha = null;\r
+$wgCaptchaClass = 'SimpleCaptcha';\r
+\r
+/**\r
+ * Actions which can trigger a captcha\r
+ *\r
+ * If the 'edit' trigger is on, *every* edit will trigger the captcha.\r
+ * This may be useful for protecting against vandalbot attacks.\r
+ *\r
+ * If using the default 'addurl' trigger, the captcha will trigger on\r
+ * edits that include URLs that aren't in the current version of the page.\r
+ * This should catch automated linkspammers without annoying people when\r
+ * they make more typical edits.\r
+ *\r
+ * The captcha code should not use $wgCaptchaTriggers, but CaptchaTriggers()\r
+ * which also takes into account per namespace triggering.\r
+ */\r
+$wgCaptchaTriggers = array();\r
+$wgCaptchaTriggers['edit']          = false; // Would check on every edit\r
+$wgCaptchaTriggers['create']           = false; // Check on page creation.\r
+$wgCaptchaTriggers['addurl']        = true;  // Check on edits that add URLs\r
+$wgCaptchaTriggers['createaccount'] = true;  // Special:Userlogin&type=signup\r
+$wgCaptchaTriggers['badlogin']      = true;  // Special:Userlogin after failure\r
+\r
+/**\r
+ * You may wish to apply special rules for captcha triggering on some namespaces.\r
+ * $wgCaptchaTriggersOnNamespace[<namespace id>][<trigger>] forces an always on / \r
+ * always off configuration with that trigger for the given namespace.\r
+ * Leave unset to use the global options ($wgCaptchaTriggers).\r
+ *\r
+ * Shall not be used with 'createaccount' (it is not checked).\r
+ */\r
+$wgCaptchaTriggersOnNamespace = array();\r
+\r
+#Example:\r
+#$wgCaptchaTriggersOnNamespace[NS_TALK]['create'] = false; //Allow creation of talk pages without captchas.\r
+#$wgCaptchaTriggersOnNamespace[NS_PROJECT]['edit'] = true; //Show captcha whenever editing Project pages.\r
+\r
+/**\r
+ * Indicate how to store per-session data required to match up the\r
+ * internal captcha data with the editor.\r
+ *\r
+ * 'CaptchaSessionStore' uses PHP's session storage, which is cookie-based\r
+ * and may fail for anons with cookies disabled.\r
+ *\r
+ * 'CaptchaCacheStore' uses $wgMemc, which avoids the cookie dependency\r
+ * but may be fragile depending on cache configuration.\r
+ */\r
+global $wgCaptchaStorageClass;\r
+$wgCaptchaStorageClass = 'CaptchaSessionStore';\r
+\r
+/**\r
+ * Number of seconds a captcha session should last in the data cache\r
+ * before expiring when managing through CaptchaCacheStore class.\r
+ *\r
+ * Default is a half hour.\r
+ */\r
+global $wgCaptchaSessionExpiration;\r
+$wgCaptchaSessionExpiration = 30 * 60;\r
+\r
+/**\r
+ * Number of seconds after a bad login that a captcha will be shown to\r
+ * that client on the login form to slow down password-guessing bots.\r
+ *\r
+ * Has no effect if 'badlogin' is disabled in $wgCaptchaTriggers or\r
+ * if there is not a caching engine enabled.\r
+ *\r
+ * Default is five minutes.\r
+ */\r
+global $wgCaptchaBadLoginExpiration;\r
+$wgCaptchaBadLoginExpiration = 5 * 60;\r
+\r
+/**\r
+ * Allow users who have confirmed their e-mail addresses to post\r
+ * URL links without being harassed by the captcha.\r
+ */\r
+global $ceAllowConfirmedEmail;\r
+$ceAllowConfirmedEmail = false;\r
+\r
+/**\r
+ * Regex to whitelist URLs to known-good sites...\r
+ * For instance:\r
+ * $wgCaptchaWhitelist = '#^https?://([a-z0-9-]+\\.)?(wikimedia|wikipedia)\.org/#i';\r
+ * @fixme Use the 'spam-whitelist' thingy instead?\r
+ */\r
+$wgCaptchaWhitelist = false;\r
+\r
+/**\r
+ * Additional regexes to check for. Use full regexes; can match things\r
+ * other than URLs such as junk edits.\r
+ *\r
+ * If the new version matches one and the old version doesn't,\r
+ * toss up the captcha screen.\r
+ *\r
+ * @fixme Add a message for local admins to add items as well.\r
+ */\r
+$wgCaptchaRegexes = array();\r
+\r
+/** Register special page */\r
+global $wgSpecialPages;\r
+$wgSpecialPages['Captcha'] = array( /*class*/ 'SpecialPage', /*name*/'Captcha', /*restriction*/ '',\r
+       /*listed*/ false, /*function*/ false, /*file*/ false );\r
+\r
+/**\r
+ * Set up message strings for captcha utilities.\r
+ */\r
+function ceSetup() {\r
+       # Add messages\r
+       global $wgMessageCache, $wgConfirmEditMessages;\r
+       foreach( $wgConfirmEditMessages as $lang => $messages )\r
+               $wgMessageCache->addMessages( $messages, $lang );\r
+\r
+       global $wgHooks, $wgCaptcha, $wgCaptchaClass, $wgSpecialPages;\r
+       $wgCaptcha = new $wgCaptchaClass();\r
+       $wgHooks['EditFilter'][] = array( &$wgCaptcha, 'confirmEdit' );\r
+\r
+       $wgHooks['UserCreateForm'][] = array( &$wgCaptcha, 'injectUserCreate' );\r
+       $wgHooks['AbortNewAccount'][] = array( &$wgCaptcha, 'confirmUserCreate' );\r
+       \r
+       $wgHooks['LoginAuthenticateAudit'][] = array( &$wgCaptcha, 'triggerUserLogin' );\r
+       $wgHooks['UserLoginForm'][] = array( &$wgCaptcha, 'injectUserLogin' );\r
+       $wgHooks['AbortLogin'][] = array( &$wgCaptcha, 'confirmUserLogin' );\r
+}\r
+\r
+/**\r
+ * Entry point for Special:Captcha\r
+ */\r
+function wfSpecialCaptcha( $par = null ) {\r
+       global $wgCaptcha;\r
+       switch( $par ) {\r
+       case "image":\r
+               return $wgCaptcha->showImage();\r
+       case "help":\r
+       default:\r
+               return $wgCaptcha->showHelp();\r
+       }\r
+}\r
+\r
+class SimpleCaptcha {\r
+       function SimpleCaptcha() {\r
+               global $wgCaptchaStorageClass;\r
+               $this->storage = new $wgCaptchaStorageClass;\r
+       }\r
+       \r
+       /**\r
+        * Insert a captcha prompt into the edit form.\r
+        * This sample implementation generates a simple arithmetic operation;\r
+        * it would be easy to defeat by machine.\r
+        *\r
+        * Override this!\r
+        *\r
+        * @return string HTML\r
+        */\r
+       function getForm() {\r
+               $a = mt_rand(0, 100);\r
+               $b = mt_rand(0, 10);\r
+               $op = mt_rand(0, 1) ? '+' : '-';\r
+\r
+               $test = "$a $op $b";\r
+               $answer = ($op == '+') ? ($a + $b) : ($a - $b);\r
+\r
+               $index = $this->storeCaptcha( array( 'answer' => $answer ) );\r
+\r
+               return "<p><label for=\"wpCaptchaWord\">$test</label> = " .\r
+                       wfElement( 'input', array(\r
+                               'name' => 'wpCaptchaWord',\r
+                               'id'   => 'wpCaptchaWord',\r
+                               'tabindex' => 1 ) ) . // tab in before the edit textarea\r
+                       "</p>\n" .\r
+                       wfElement( 'input', array(\r
+                               'type'  => 'hidden',\r
+                               'name'  => 'wpCaptchaId',\r
+                               'id'    => 'wpCaptchaId',\r
+                               'value' => $index ) );\r
+       }\r
+\r
+       /**\r
+        * Insert the captcha prompt into an edit form.\r
+        * @param OutputPage $out\r
+        */\r
+       function editCallback( &$out ) {\r
+               $out->addWikiText( $this->getMessage( $this->action ) );\r
+               $out->addHTML( $this->getForm() );\r
+       }\r
+\r
+       /**\r
+        * Show a message asking the user to enter a captcha on edit\r
+        * The result will be treated as wiki text\r
+        *\r
+        * @param $action Action being performed\r
+        * @return string\r
+        */\r
+       function getMessage( $action ) {\r
+               $name = 'captcha-' . $action;\r
+               $text = wfMsg( $name );\r
+               # Obtain a more tailored message, if possible, otherwise, fall back to\r
+               # the default for edits\r
+               return wfEmptyMsg( $name, $text ) ? wfMsg( 'captcha-edit' ) : $text;\r
+       }\r
+\r
+       /**\r
+        * Inject whazawhoo\r
+        * @fixme if multiple thingies insert a header, could break\r
+        * @param SimpleTemplate $template\r
+        * @return bool true to keep running callbacks\r
+        */\r
+       function injectUserCreate( &$template ) {\r
+               global $wgCaptchaTriggers, $wgOut;\r
+               if( $wgCaptchaTriggers['createaccount'] ) {\r
+                       $template->set( 'header',\r
+                               "<div class='captcha'>" .\r
+                               $wgOut->parse( $this->getMessage( 'createaccount' ) ) .\r
+                               $this->getForm() .\r
+                               "</div>\n" );\r
+               }\r
+               return true;\r
+       }\r
+\r
+       /**\r
+        * Inject a captcha into the user login form after a failed\r
+        * password attempt as a speedbump for mass attacks.\r
+        * @fixme if multiple thingies insert a header, could break\r
+        * @param SimpleTemplate $template\r
+        * @return bool true to keep running callbacks\r
+        */\r
+       function injectUserLogin( &$template ) {\r
+               if( $this->isBadLoginTriggered() ) {\r
+                       global $wgOut;\r
+                       $template->set( 'header',\r
+                               "<div class='captcha'>" .\r
+                               $wgOut->parse( $this->getMessage( 'badlogin' ) ) .\r
+                               $this->getForm() .\r
+                               "</div>\n" );\r
+               }\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * When a bad login attempt is made, increment an expiring counter\r
+        * in the memcache cloud. Later checks for this may trigger a\r
+        * captcha display to prevent too many hits from the same place.\r
+        * @param User $user\r
+        * @param string $password\r
+        * @param int $retval authentication return value\r
+        * @return bool true to keep running callbacks\r
+        */\r
+       function triggerUserLogin( $user, $password, $retval ) {\r
+               global $wgCaptchaTriggers, $wgCaptchaBadLoginExpiration, $wgMemc;\r
+               if( $retval == LoginForm::WRONG_PASS && $wgCaptchaTriggers['badlogin'] ) {\r
+                       $key = $this->badLoginKey();\r
+                       $count = $wgMemc->get( $key );\r
+                       if( !$count ) {\r
+                               $wgMemc->add( $key, 0, $wgCaptchaBadLoginExpiration );\r
+                       }\r
+                       $count = $wgMemc->incr( $key );\r
+               }\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * Check if a bad login has already been registered for this\r
+        * IP address. If so, require a captcha.\r
+        * @return bool\r
+        * @access private\r
+        */\r
+       function isBadLoginTriggered() {\r
+               global $wgMemc;\r
+               return intval( $wgMemc->get( $this->badLoginKey() ) ) > 0;\r
+       }\r
+       \r
+       /**\r
+        * Internal cache key for badlogin checks.\r
+        * @return string\r
+        * @access private\r
+        */\r
+       function badLoginKey() {\r
+               return wfMemcKey( 'captcha', 'badlogin', 'ip', wfGetIP() );\r
+       }\r
+       \r
+       /**\r
+        * Check if the submitted form matches the captcha session data provided\r
+        * by the plugin when the form was generated.\r
+        *\r
+        * Override this!\r
+        *\r
+        * @param WebRequest $request\r
+        * @param array $info\r
+        * @return bool\r
+        */\r
+       function keyMatch( $request, $info ) {\r
+               return $request->getVal( 'wpCaptchaWord' ) == $info['answer'];\r
+       }\r
+\r
+       // ----------------------------------\r
+\r
+       /**\r
+        * @param EditPage $editPage\r
+        * @param string $action (edit/create/addurl...)\r
+        * @return bool true if action triggers captcha on editPage's namespace\r
+        */\r
+       function captchaTriggers( &$editPage, $action) {\r
+               global $wgCaptchaTriggers, $wgCaptchaTriggersOnNamespace;       \r
+               //Special config for this NS?\r
+               if (isset( $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action] ) )\r
+                       return $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action];\r
+\r
+               return ( !empty( $wgCaptchaTriggers[$action] ) ); //Default\r
+       }\r
+\r
+\r
+       /**\r
+        * @param EditPage $editPage\r
+        * @param string $newtext\r
+        * @param string $section\r
+        * @return bool true if the captcha should run\r
+        */\r
+       function shouldCheck( &$editPage, $newtext, $section ) {\r
+               $this->trigger = '';\r
+\r
+               global $wgUser;\r
+               if( $wgUser->isAllowed( 'skipcaptcha' ) ) {\r
+                       wfDebug( "ConfirmEdit: user group allows skipping captcha\n" );\r
+                       return false;\r
+               }\r
+\r
+               global $wgEmailAuthentication, $ceAllowConfirmedEmail;\r
+               if( $wgEmailAuthentication && $ceAllowConfirmedEmail &&\r
+                       $wgUser->isEmailConfirmed() ) {\r
+                       wfDebug( "ConfirmEdit: user has confirmed mail, skipping captcha\n" );\r
+                       return false;\r
+               }\r
+\r
+               if( $this->captchaTriggers( $editPage, 'edit' ) ) {\r
+                       // Check on all edits\r
+                       global $wgUser, $wgTitle;\r
+                       $this->trigger = sprintf( "edit trigger by '%s' at [[%s]]",\r
+                               $wgUser->getName(),\r
+                               $wgTitle->getPrefixedText() );\r
+                       $this->action = 'edit';\r
+                       wfDebug( "ConfirmEdit: checking all edits...\n" );\r
+                       return true;\r
+               }\r
+\r
+               if( $this->captchaTriggers( $editPage, 'create' )  && !$editPage->mTitle->exists() ) {\r
+                       //Check if creating a page\r
+                       global $wgUser, $wgTitle;\r
+                       $this->trigger = sprintf( "Create trigger by '%s' at [[%s]]",\r
+                               $wgUser->getName(),\r
+                               $wgTitle->getPrefixedText() );\r
+                       $this->action = 'create';\r
+                       wfDebug( "ConfirmEdit: checking on page creation...\n" );\r
+                       return true;\r
+               }\r
+\r
+               if( $this->captchaTriggers( $editPage, 'addurl' ) ) {\r
+                       // Only check edits that add URLs\r
+                       $oldtext = $this->loadText( $editPage, $section );\r
+\r
+                       $oldLinks = $this->findLinks( $oldtext );\r
+                       $newLinks = $this->findLinks( $newtext );\r
+                       $unknownLinks = array_filter( $newLinks, array( &$this, 'filterLink' ) );\r
+\r
+                       $addedLinks = array_diff( $unknownLinks, $oldLinks );\r
+                       $numLinks = count( $addedLinks );\r
+\r
+                       if( $numLinks > 0 ) {\r
+                               global $wgUser, $wgTitle;\r
+                               $this->trigger = sprintf( "%dx url trigger by '%s' at [[%s]]: %s",\r
+                                       $numLinks,\r
+                                       $wgUser->getName(),\r
+                                       $wgTitle->getPrefixedText(),\r
+                                       implode( ", ", $addedLinks ) );\r
+                               $this->action = 'addurl';\r
+                               return true;\r
+                       }\r
+               }\r
+\r
+               global $wgCaptchaRegexes;\r
+               if( !empty( $wgCaptchaRegexes ) ) {\r
+                       // Custom regex checks\r
+                       $oldtext = $this->loadText( $editPage, $section );\r
+\r
+                       foreach( $wgCaptchaRegexes as $regex ) {\r
+                               $newMatches = array();\r
+                               if( preg_match_all( $regex, $newtext, $newMatches ) ) {\r
+                                       $oldMatches = array();\r
+                                       preg_match_all( $regex, $oldtext, $oldMatches );\r
+\r
+                                       $addedMatches = array_diff( $newMatches[0], $oldMatches[0] );\r
+\r
+                                       $numHits = count( $addedMatches );\r
+                                       if( $numHits > 0 ) {\r
+                                               global $wgUser, $wgTitle;\r
+                                               $this->trigger = sprintf( "%dx %s at [[%s]]: %s",\r
+                                                       $numHits,\r
+                                                       $regex,\r
+                                                       $wgUser->getName(),\r
+                                                       $wgTitle->getPrefixedText(),\r
+                                                       implode( ", ", $addedMatches ) );\r
+                                               $this->action = 'edit';\r
+                                               return true;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               return false;\r
+       }\r
+\r
+       /**\r
+        * Filter callback function for URL whitelisting\r
+        * @return bool true if unknown, false if whitelisted\r
+        * @access private\r
+        */\r
+       function filterLink( $url ) {\r
+               global $wgCaptchaWhitelist;\r
+               return !( $wgCaptchaWhitelist && preg_match( $wgCaptchaWhitelist, $url ) );\r
+       }\r
+\r
+       /**\r
+        * The main callback run on edit attempts.\r
+        * @param EditPage $editPage\r
+        * @param string $newtext\r
+        * @param string $section\r
+        * @param bool true to continue saving, false to abort and show a captcha form\r
+        */\r
+       function confirmEdit( &$editPage, $newtext, $section ) {\r
+               if( $this->shouldCheck( $editPage, $newtext, $section ) ) {\r
+                       if( $this->passCaptcha() ) {\r
+                               return true;\r
+                       } else {\r
+                               $editPage->showEditForm( array( &$this, 'editCallback' ) );\r
+                               return false;\r
+                       }\r
+               } else {\r
+                       wfDebug( "ConfirmEdit: no need to show captcha.\n" );\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Hook for user creation form submissions.\r
+        * @param User $u\r
+        * @param string $message\r
+        * @return bool true to continue, false to abort user creation\r
+        */\r
+       function confirmUserCreate( $u, &$message ) {\r
+               global $wgCaptchaTriggers;\r
+               if( $wgCaptchaTriggers['createaccount'] ) {\r
+                       $this->trigger = "new account '" . $u->getName() . "'";\r
+                       if( !$this->passCaptcha() ) {\r
+                               $message = wfMsg( 'captcha-createaccount-fail' );\r
+                               return false;\r
+                       }\r
+               }\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * Hook for user login form submissions.\r
+        * @param User $u\r
+        * @param string $message\r
+        * @return bool true to continue, false to abort user creation\r
+        */\r
+       function confirmUserLogin( $u, $pass, &$retval ) {\r
+               if( $this->isBadLoginTriggered() ) {\r
+                       $this->trigger = "post-badlogin login '" . $u->getName() . "'";\r
+                       if( !$this->passCaptcha() ) {\r
+                               $message = wfMsg( 'captcha-badlogin-fail' );\r
+                               // Emulate a bad-password return to confuse the shit out of attackers\r
+                               $retval = LoginForm::WRONG_PASS;\r
+                               return false;\r
+                       }\r
+               }\r
+               return true;\r
+       }\r
+\r
+       /**\r
+        * Given a required captcha run, test form input for correct\r
+        * input on the open session.\r
+        * @return bool if passed, false if failed or new session\r
+        */\r
+       function passCaptcha() {\r
+               $info = $this->retrieveCaptcha();\r
+               if( $info ) {\r
+                       global $wgRequest;\r
+                       if( $this->keyMatch( $wgRequest, $info ) ) {\r
+                               $this->log( "passed" );\r
+                               $this->clearCaptcha( $info );\r
+                               return true;\r
+                       } else {\r
+                               $this->clearCaptcha( $info );\r
+                               $this->log( "bad form input" );\r
+                               return false;\r
+                       }\r
+               } else {\r
+                       $this->log( "new captcha session" );\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Log the status and any triggering info for debugging or statistics\r
+        * @param string $message\r
+        */\r
+       function log( $message ) {\r
+               wfDebugLog( 'captcha', 'ConfirmEdit: ' . $message . '; ' .  $this->trigger );\r
+       }\r
+\r
+       /**\r
+        * Generate a captcha session ID and save the info in PHP's session storage.\r
+        * (Requires the user to have cookies enabled to get through the captcha.)\r
+        *\r
+        * A random ID is used so legit users can make edits in multiple tabs or\r
+        * windows without being unnecessarily hobbled by a serial order requirement.\r
+        * Pass the returned id value into the edit form as wpCaptchaId.\r
+        *\r
+        * @param array $info data to store\r
+        * @return string captcha ID key\r
+        */\r
+       function storeCaptcha( $info ) {\r
+               if( !isset( $info['index'] ) ) {\r
+                       // Assign random index if we're not udpating\r
+                       $info['index'] = strval( mt_rand() );\r
+               }\r
+               $this->storage->store( $info['index'], $info );\r
+               return $info['index'];\r
+       }\r
+\r
+       /**\r
+        * Fetch this session's captcha info.\r
+        * @return mixed array of info, or false if missing\r
+        */\r
+       function retrieveCaptcha() {\r
+               global $wgRequest;\r
+               $index = $wgRequest->getVal( 'wpCaptchaId' );\r
+               return $this->storage->retrieve( $index );\r
+       }\r
+\r
+       /**\r
+        * Clear out existing captcha info from the session, to ensure\r
+        * it can't be reused.\r
+        */\r
+       function clearCaptcha( $info ) {\r
+               $this->storage->clear( $info['index'] );\r
+       }\r
+\r
+       /**\r
+        * Retrieve the current version of the page or section being edited...\r
+        * @param EditPage $editPage\r
+        * @param string $section\r
+        * @return string\r
+        * @access private\r
+        */\r
+       function loadText( $editPage, $section ) {\r
+               $rev = Revision::newFromTitle( $editPage->mTitle );\r
+               if( is_null( $rev ) ) {\r
+                       return "";\r
+               } else {\r
+                       $text = $rev->getText();\r
+                       if( $section != '' ) {\r
+                               return Article::getSection( $text, $section );\r
+                       } else {\r
+                               return $text;\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Extract a list of all recognized HTTP links in the text.\r
+        * @param string $text\r
+        * @return array of strings\r
+        */\r
+       function findLinks( $text ) {\r
+               global $wgParser, $wgTitle, $wgUser;\r
+\r
+               $options = new ParserOptions();\r
+               $text = $wgParser->preSaveTransform( $text, $wgTitle, $wgUser, $options );\r
+               $out = $wgParser->parse( $text, $wgTitle, $options );\r
+\r
+               return array_keys( $out->getExternalLinks() );\r
+       }\r
+\r
+       /**\r
+        * Show a page explaining what this wacky thing is.\r
+        */\r
+       function showHelp() {\r
+               global $wgOut, $ceAllowConfirmedEmail;\r
+               $wgOut->setPageTitle( wfMsg( 'captchahelp-title' ) );\r
+               $wgOut->addWikiText( wfMsg( 'captchahelp-text' ) );\r
+               if ( $this->storage->cookiesNeeded() ) {\r
+                       $wgOut->addWikiText( wfMsg( 'captchahelp-cookies-needed' ) );\r
+               }\r
+       }\r
+\r
+}\r
+\r
+class CaptchaSessionStore {\r
+       function store( $index, $info ) {\r
+               $_SESSION['captcha' . $info['index']] = $info;\r
+       }\r
+       \r
+       function retrieve( $index ) {\r
+               if( isset( $_SESSION['captcha' . $index] ) ) {\r
+                       return $_SESSION['captcha' . $index];\r
+               } else {\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       function clear( $index ) {\r
+               unset( $_SESSION['captcha' . $index] );\r
+       }\r
+\r
+       function cookiesNeeded() {\r
+               return true;\r
+       }\r
+}\r
+\r
+class CaptchaCacheStore {\r
+       function store( $index, $info ) {\r
+               global $wgMemc, $wgCaptchaSessionExpiration;\r
+               $wgMemc->set( wfMemcKey( 'captcha', $index ), $info,\r
+                       $wgCaptchaSessionExpiration );\r
+       }\r
+\r
+       function retrieve( $index ) {\r
+               global $wgMemc;\r
+               $info = $wgMemc->get( wfMemcKey( 'captcha', $index ) );\r
+               if( $info ) {\r
+                       return $info;\r
+               } else {\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       function clear( $index ) {\r
+               global $wgMemc;\r
+               $wgMemc->delete( wfMemcKey( 'captcha', $index ) );\r
+       }\r
+\r
+       function cookiesNeeded() {\r
+               return false;\r
+       }\r
+}\r
+\r
+} # End invocation guard\r
+\r
+?>\r
diff --git a/oldwiki/extensions/recaptcha/README b/oldwiki/extensions/recaptcha/README
new file mode 100644 (file)
index 0000000..91604b1
--- /dev/null
@@ -0,0 +1,4 @@
+The reCAPTCH MediaWiki plugin stops spam and password cracking
+attempts. For instructions on installing the plugin, see:
+
+         http://recaptcha.net/plugins/mediawiki
diff --git a/oldwiki/extensions/recaptcha/ReCaptcha.i18n.php b/oldwiki/extensions/recaptcha/ReCaptcha.i18n.php
new file mode 100644 (file)
index 0000000..d73d07f
--- /dev/null
@@ -0,0 +1,28 @@
+<?php\r
+/**\r
+ * Internationalisation file for the reCAPTCHA extension.\r
+ *\r
+ * @addtogroup Extensions\r
+*/\r
+\r
+function efReCaptchaMessages() {\r
+       return array(\r
+\r
+/* English */\r
+'en' => array(\r
+        'recaptcha-edit' => 'To help protect against automated edit spam, please type the two words you see in the box below:', \r
+        'recaptcha-addurl' => 'Your edit includes new external links. To help protect against automated\r
+spam, please type the two words you see in the box below:',\r
+    'recaptcha-badpass' => 'To help protect against automated password cracking, please type the two words you see in the box below:',\r
+       'recaptcha-createaccount' => 'To help protect against automated account creation, please type the two words you see in the box below:',\r
+       'recaptcha-createaccount-fail' => "Incorrect or missing reCAPTCHA answer.",\r
+       'recaptcha-create' => 'To help protect against automated page creation, please type the two words you see in the box below:', \r
+\r
+),\r
+\r
+/* TODO - more languages */\r
+\r
+       );\r
+\r
+}\r
+?>\r
diff --git a/oldwiki/extensions/recaptcha/ReCaptcha.php b/oldwiki/extensions/recaptcha/ReCaptcha.php
new file mode 100644 (file)
index 0000000..e0d51c3
--- /dev/null
@@ -0,0 +1,147 @@
+<?php\r
+\r
+/**\r
+ * Captcha class using the reCAPTCHA widget. \r
+ * Stop Spam. Read Books.  \r
+ *\r
+ * @addtogroup Extensions\r
+ * @author Mike Crawford <mike.crawford@gmail.com>\r
+ * @copyright Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net\r
+ * @licence MIT/X11\r
+ */\r
+\r
+if( defined( 'MEDIAWIKI' ) ) {\r
+require_once( 'recaptchalib.php' );\r
+\r
+// make sure we have the confirm edit plugin \r
+require_once( 'ConfirmEdit.php' );\r
+\r
+// Set the default CAPTCHA to be reCAPTCHA.\r
+$wgCaptchaClass = 'ReCaptcha';\r
+\r
+\r
+global $recaptcha_public_key, $recaptcha_private_key;\r
+\r
+// Set these in LocalSettings.php\r
+$recaptcha_public_key = '';\r
+$recaptcha_private_key = '';\r
+\r
+\r
+$wgExtensionFunctions[] = 'efReCaptcha';\r
+\r
+/**\r
+ * Add the reCAPTCHA messages\r
+ * \r
+ */\r
+function efReCaptcha() {\r
+       global $wgMessageCache;\r
+       global $recaptcha_public_key, $recaptcha_private_key;\r
+       global $wgServerName;\r
+       \r
+       \r
+       require_once( dirname( __FILE__ ) . '/ReCaptcha.i18n.php' );\r
+       foreach( efReCaptchaMessages() as $lang => $messages )\r
+               $wgMessageCache->addMessages( $messages, $lang );\r
+\r
+       if ($recaptcha_private_key == '' || $recaptcha_public_key == '') {\r
+               die ('You need to set $recaptcha_private_key and $recaptcha_public_key in LocalSettings.php to ' .\r
+                    "use the reCAPTCHA plugin. You can sign up for a key <a href='" .\r
+                    htmlentities(recaptcha_get_signup_url ($wgServerName, "mediawiki")) . "'>here</a>.");\r
+       }       \r
+}\r
+\r
+\r
+class ReCaptcha extends SimpleCaptcha {\r
+               \r
+       //reCAPTHCA error code returned from recaptcha_check_answer\r
+       private $recaptcha_error = null;\r
+\r
+               \r
+       /** \r
+        * Displays the reCAPTCHA widget.  \r
+         * If $this->recaptcha_error is set, it will display an error in the widget.\r
+        *\r
+         */\r
+       function getForm() {\r
+               global $recaptcha_public_key;\r
+               return "<script>var RecaptchaOptions = { tabindex : 1 }; </script> " .\r
+               recaptcha_get_html($recaptcha_public_key, $this->recaptcha_error);\r
+       }\r
+\r
+\r
+               \r
+       /**\r
+        * Calls the library function recaptcha_check_answer to verify the users input.\r
+        * Sets $this->recaptcha_error if the user is incorrect.\r
+         * @return boolean \r
+         *\r
+         */\r
+       function passCaptcha() {\r
+               global $recaptcha_private_key;\r
+               $recaptcha_response = recaptcha_check_answer ($recaptcha_private_key,\r
+                                                             wfGetIP (),\r
+                                                             $_POST['recaptcha_challenge_field'],\r
+                                                             $_POST['recaptcha_response_field']);\r
+                if (!$recaptcha_response->is_valid) {\r
+                       $this->recaptcha_error = $recaptcha_response->error;\r
+                       return false;\r
+                }\r
+               $recaptcha_error = null;\r
+                return true;\r
+\r
+       }\r
+\r
+\r
+\r
+        /**\r
+         * Called on all edit page saves. (EditFilter events)\r
+         * @return boolean - true if page save should continue, false if should display Captcha widget.\r
+         */\r
+        function confirmEdit( &$editPage, $newtext, $section ) {\r
+                if( $this->shouldCheck( $editPage, $newtext, $section ) ) {\r
+\r
+                        if (!isset($_POST['recaptcha_response_field'])) {\r
+                                //User has not yet been presented with Captcha, show the widget.\r
+                                $editPage->showEditForm( array( &$this, 'editCallback' ) );\r
+                                return false;\r
+                        }\r
+\r
+                        if( $this->passCaptcha() ) {\r
+                                return true;\r
+                        } else {\r
+                                //Try again - show the widget\r
+                                $editPage->showEditForm( array( &$this, 'editCallback' ) );\r
+                                return false;\r
+                        }\r
+\r
+                } else {\r
+                        wfDebug( "ConfirmEdit: no need to show captcha.\n" );\r
+                        return true;\r
+                }\r
+        }\r
+\r
+       \r
+\r
+       /**\r
+        * Show a message asking the user to enter a captcha on edit\r
+        * The result will be treated as wiki text\r
+        *\r
+        * @param $action Action being performed\r
+        * @return string\r
+        */\r
+       function getMessage( $action ) {\r
+               $name = 'recaptcha-' . $action;\r
+               $text = wfMsg( $name );\r
+               # Obtain a more tailored message, if possible, otherwise, fall back to\r
+               # the default for edits\r
+               return wfEmptyMsg( $name, $text ) ? wfMsg( 'recaptcha-edit' ) : $text;\r
+       }\r
+\r
+}\r
+       \r
+} else {\r
+       echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" );\r
+       die( 1 );\r
+}\r
+\r
+?>\r
diff --git a/oldwiki/extensions/recaptcha/recaptchalib.php b/oldwiki/extensions/recaptcha/recaptchalib.php
new file mode 100644 (file)
index 0000000..b8ac453
--- /dev/null
@@ -0,0 +1,275 @@
+<?php\r
+/*\r
+ * This is a PHP library that handles calling reCAPTCHA.\r
+ *    - Documentation and latest version\r
+ *          http://recaptcha.net/plugins/php/\r
+ *    - Get a reCAPTCHA API Key\r
+ *          http://recaptcha.net/api/getkey\r
+ *    - Discussion group\r
+ *          http://groups.google.com/group/recaptcha\r
+ *\r
+ * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net\r
+ * AUTHORS:\r
+ *   Mike Crawford\r
+ *   Ben Maurer\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy\r
+ * of this software and associated documentation files (the "Software"), to deal\r
+ * in the Software without restriction, including without limitation the rights\r
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+ * copies of the Software, and to permit persons to whom the Software is\r
+ * furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included in\r
+ * all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+ * THE SOFTWARE.\r
+ */\r
+\r
+/**\r
+ * The reCAPTCHA server URL's\r
+ */\r
+$recaptcha_api_server = 'http://api.recaptcha.net';\r
+$recaptcha_api_secure_server = 'https://api-secure.recaptcha.net';\r
+$recaptcha_verify_server = 'api-verify.recaptcha.net';\r
+\r
+\r
+/**\r
+ * Encodes the given data into a query string format\r
+ * @param $data - array of string elements to be encoded\r
+ * @return string - encoded request\r
+ */\r
+function _recaptcha_qsencode ($data) {\r
+        $req = "";\r
+        foreach ( $data as $key => $value )\r
+                $req .= $key . '=' . urlencode( stripslashes($value) ) . '&';\r
+\r
+        // Cut the last '&'\r
+        $req=substr($req,0,strlen($req)-1);\r
+        return $req;\r
+}\r
+\r
+\r
+\r
+/**\r
+ * Submits an HTTP POST to a reCAPTCHA server\r
+ * @param string $host\r
+ * @param string $path\r
+ * @param array $data\r
+ * @param int port\r
+ * @return array response\r
+ */\r
+function _recaptcha_http_post($host, $path, $data, $port = 80) {\r
+\r
+        $req = _recaptcha_qsencode ($data);\r
+\r
+        $http_request  = "POST $path HTTP/1.0\r\n";\r
+        $http_request .= "Host: $host\r\n";\r
+        $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";\r
+        $http_request .= "Content-Length: " . strlen($req) . "\r\n";\r
+        $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";\r
+        $http_request .= "\r\n";\r
+        $http_request .= $req;\r
+\r
+        $response = '';\r
+        if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {\r
+                die ('Could not open socket');\r
+        }\r
+\r
+        fwrite($fs, $http_request);\r
+\r
+        while ( !feof($fs) )\r
+                $response .= fgets($fs, 1160); // One TCP-IP packet\r
+        fclose($fs);\r
+        $response = explode("\r\n\r\n", $response, 2);\r
+\r
+        return $response;\r
+}\r
+\r
+\r
+\r
+/**\r
+ * Gets the challenge HTML (javascript and non-javascript version).\r
+ * This is called from the browser, and the resulting reCAPTCHA HTML widget\r
+ * is embedded within the HTML form it was called from.\r
+ * @param string $pubkey A public key for reCAPTCHA\r
+ * @param string $error The error given by reCAPTCHA (optional, default is null)\r
+ * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false)\r
+\r
+ * @return string - The HTML to be embedded in the user's form.\r
+ */\r
+function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)\r
+{\r
+        global $recaptcha_api_server, $recaptcha_api_ssl_server;\r
+\r
+       if ($pubkey == null || $pubkey == '') {\r
+               die ("To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");\r
+       }\r
+       \r
+       if ($use_ssl) {\r
+           $server = $recaptcha_api_ssl_server;\r
+        } else {\r
+           $server = $recaptcha_api_server;\r
+        }\r
+        $errorpart = "";\r
+        if ($error) {\r
+           $errorpart = "&amp;error=" . $error;\r
+        }\r
+        return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>\r
+\r
+       <noscript>\r
+               <iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br>\r
+               <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>\r
+               <input type="hidden" name="recaptcha_response_field" value="manual_challenge">\r
+       </noscript>';\r
+}\r
+\r
+\r
+\r
+\r
+/**\r
+ * A ReCaptchaResponse is returned from recaptcha_check_answer()\r
+ */\r
+class ReCaptchaResponse {\r
+        var $is_valid;\r
+        var $error;\r
+}\r
+\r
+\r
+/**\r
+  * Calls an HTTP POST function to verify if the user's guess was correct\r
+  * @param string $privkey\r
+  * @param string $remoteip\r
+  * @param string $challenge\r
+  * @param string $response\r
+  * @return ReCaptchaResponse\r
+  */\r
+function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response)\r
+{\r
+       if ($privkey == null || $privkey == '') {\r
+               die ("To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");\r
+       }\r
+\r
+       if ($remoteip == null || $remoteip == '') {\r
+               die ("For security reasons, you must pass the remote ip to reCAPTCHA");\r
+       }\r
+\r
+       \r
+       \r
+        //discard spam submissions\r
+        if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) {\r
+                $recaptcha_response = new ReCaptchaResponse();\r
+                $recaptcha_response->is_valid = false;\r
+                $recaptcha_response->error = 'incorrect-captcha-sol';\r
+                return $recaptcha_response;\r
+        }\r
+\r
+        global $recaptcha_verify_server;\r
+        $response = _recaptcha_http_post ($recaptcha_verify_server, "/verify",\r
+                                          array (\r
+                                                 'privatekey' => $privkey,\r
+                                                 'remoteip' => $remoteip,\r
+                                                 'challenge' => $challenge,\r
+                                                 'response' => $response\r
+                                                 )\r
+                                          );\r
+\r
+        $answers = explode ("\n", $response [1]);\r
+        $recaptcha_response = new ReCaptchaResponse();\r
+\r
+        if (trim ($answers [0]) == 'true') {\r
+                $recaptcha_response->is_valid = true;\r
+        }\r
+        else {\r
+                $recaptcha_response->is_valid = false;\r
+                $recaptcha_response->error = $answers [1];\r
+        }\r
+        return $recaptcha_response;\r
+\r
+}\r
+\r
+/**\r
+ * gets a URL where the user can sign up for reCAPTCHA. If your application\r
+ * has a configuration page where you enter a key, you should provide a link\r
+ * using this function.\r
+ * @param string $domain The domain where the page is hosted\r
+ * @param string $appname The name of your application\r
+ */\r
+function recaptcha_get_signup_url ($domain = null, $appname = null) {\r
+       return "http://recaptcha.net/api/getkey?" .  _recaptcha_qsencode (array ('domain' => $domain, 'app' => $appname));\r
+}\r
+\r
+\r
+\r
+/* Mailhide related code */\r
+\r
+function _recaptcha_aes_encrypt($val,$ky) {\r
+       if (! function_exists ("mcrypt_encrypt")) {\r
+               die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");\r
+       }\r
+       $mode=MCRYPT_MODE_CBC;   \r
+       $enc=MCRYPT_RIJNDAEL_128;\r
+       $val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));\r
+       return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");\r
+}\r
+\r
+\r
+function _recaptcha_mailhide_urlbase64 ($x) {\r
+       return strtr(base64_encode ($x), '+/', '-_');\r
+}\r
+\r
+/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */\r
+function recaptcha_mailhide_url($pubkey, $privkey, $email) {\r
+       if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) {\r
+               die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .\r
+                    "you can do so at <a href='http://mailhide.recaptcha.net/apikey'>http://mailhide.recaptcha.net/apikey</a>");\r
+       }\r
+       \r
+\r
+       $ky = pack('H*', $privkey);\r
+       $cryptmail = _recaptcha_aes_encrypt ($email, $ky);\r
+       \r
+       return "http://mailhide.recaptcha.net/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);\r
+}\r
+\r
+/**\r
+ * gets the parts of the email to expose to the user.\r
+ * eg, given johndoe@example,com return ["john", "example.com"].\r
+ * the email is then displayed as john...@example.com\r
+ */\r
+function _recaptcha_mailhide_email_parts ($email) {\r
+       $arr = preg_split("/@/", $email );\r
+\r
+       if (strlen ($arr[0]) <= 4) {\r
+               $arr[0] = substr ($arr[0], 0, 1);\r
+       } else if (strlen ($arr[0]) <= 6) {\r
+               $arr[0] = substr ($arr[0], 0, 3);\r
+       } else {\r
+               $arr[0] = substr ($arr[0], 0, 4);\r
+       }\r
+       return $arr;\r
+}\r
+\r
+/**\r
+ * Gets html to display an email address given a public an private key.\r
+ * to get a key, go to:\r
+ *\r
+ * http://mailhide.recaptcha.net/apikey\r
+ */\r
+function recaptcha_mailhide_html($pubkey, $privkey, $email) {\r
+       $emailparts = _recaptcha_mailhide_email_parts ($email);\r
+       $url = recaptcha_mailhide_url ($pubkey, $privkey, $email);\r
+       \r
+       return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) .\r
+               "' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]);\r
+\r
+}\r
+\r
+\r
+?>\r
diff --git a/oldwiki/extensions/simplepie.inc b/oldwiki/extensions/simplepie.inc
new file mode 100644 (file)
index 0000000..b5135ad
--- /dev/null
@@ -0,0 +1,5449 @@
+<?php
+/****************************************************
+SIMPLEPIE
+A PHP-Based RSS and Atom Feed Framework
+Takes the hard work out of managing a complete RSS/Atom solution.
+
+Version: "Lemon Meringue"
+Updated: 24 November 2006
+Copyright: 2004-2006 Ryan Parman, Geoffrey Sneddon
+http://simplepie.org
+
+*****************************************************
+LICENSE:
+
+GNU Lesser General Public License 2.1 (LGPL)
+http://creativecommons.org/licenses/LGPL/2.1/
+
+*****************************************************
+Please submit all bug reports and feature requests to the SimplePie forums.
+http://simplepie.org/support/
+
+****************************************************/
+
+class SimplePie
+{
+       // SimplePie Info
+       var $name = 'SimplePie';
+       var $version = '1.0 b3.2';
+       var $build = '20061124';
+       var $url = 'http://simplepie.org/';
+       var $useragent;
+       var $linkback;
+       
+       // Other objects, instances created here so we can set options on them
+       var $sanitize;
+       
+       // Options
+       var $rss_url;
+       var $file;
+       var $timeout = 10;
+       var $xml_dump = false;
+       var $enable_cache = true;
+       var $max_minutes = 60;
+       var $cache_location = './cache';
+       var $order_by_date = true;
+       var $input_encoding = false;
+       var $cache_class = 'SimplePie_Cache';
+       var $locator_class = 'SimplePie_Locator';
+       var $parser_class = 'SimplePie_Parser';
+       var $file_class = 'SimplePie_File';
+       var $force_fsockopen = false;
+       var $cache_name_type = 'sha1';
+       
+       // Misc. variables
+       var $data;
+       var $error;
+       
+       function SimplePie($feed_url = null, $cache_location = null, $cache_max_minutes = null)
+       {
+               // Couple of variables built up from other variables
+               $this->useragent = $this->name . '/' . $this->version . ' (Feed Parser; ' . $this->url . '; Allow like Gecko) Build/' . $this->build;
+               $this->linkback = '<a href="' . $this->url . '" title="' . $this->name . ' ' . $this->version . '">' . $this->name . '</a>';
+               
+               // Other objects, instances created here so we can set options on them
+               $this->sanitize = new SimplePie_Sanitize;
+               
+               // Set options if they're passed to the constructor
+               if (!is_null($feed_url))
+               {
+                       $this->feed_url($feed_url);
+               }
+
+               if (!is_null($cache_location))
+               {
+                       $this->cache_location($cache_location);
+               }
+
+               if (!is_null($cache_max_minutes))
+               {
+                       $this->cache_max_minutes($cache_max_minutes);
+               }
+
+               // If we've passed an xmldump variable in the URL, snap into XMLdump mode
+               if (isset($_GET['xmldump']))
+               {
+                       $this->enable_xmldump(true);
+               }
+               
+               // Only init the script if we're passed a feed URL
+               if (!is_null($feed_url))
+               {
+                       return $this->init();
+               }
+       }
+       
+       function feed_url($url)
+       {
+               $this->rss_url = SimplePie_Misc::fix_protocol($url, 1);
+       }
+       
+       function set_file(&$file)
+       {
+               if (is_a($file, 'SimplePie_File'))
+               {
+                       $this->rss_url = $file->url;
+                       $this->file =& $file;
+               }
+       }
+       
+       function set_timeout($timeout = 10)
+       {
+               $this->timeout = (int) $timeout;
+       }
+       
+       function set_raw_data($data)
+       {
+               $this->raw_data = trim((string) $data);
+       }
+       
+       function enable_xmldump($enable = false)
+       {
+               $this->xml_dump = (bool) $enable;
+       }
+       
+       function enable_caching($enable = true)
+       {
+               $this->enable_cache = (bool) $enable;
+       }
+       
+       function cache_max_minutes($minutes = 60)
+       {
+               $this->max_minutes = (float) $minutes;
+       }
+       
+       function cache_location($location = './cache')
+       {
+               $this->cache_location = (string) $location;
+       }
+       
+       function order_by_date($enable = true)
+       {
+               $this->order_by_date = (bool) $enable;
+       }
+       
+       function input_encoding($encoding = false)
+       {
+               if ($encoding)
+               {
+                       $this->input_encoding = (string) $encoding;
+               }
+               else
+               {
+                       $this->input_encoding = false;
+               }
+       }
+       
+       function set_cache_class($class = 'SimplePie_Cache')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Cache'))
+               {
+                       $this->cache_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_locator_class($class = 'SimplePie_Locator')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Locator'))
+               {
+                       $this->locator_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_parser_class($class = 'SimplePie_Parser')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Parser'))
+               {
+                       $this->parser_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_file_class($class = 'SimplePie_File')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_File'))
+               {
+                       $this->file_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_sanitize_class($object = 'SimplePie_Sanitize')
+       {
+               if (class_exists($object))
+               {
+                       $this->sanitize = new $object;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_useragent($ua)
+       {
+               $this->useragent = (string) $ua;
+       }
+       
+       function force_fsockopen($enable = false)
+       {
+               $this->force_fsockopen = (bool) $enable;
+       }
+       
+       function set_cache_name_type($type = 'sha1')
+       {
+               $type = strtolower(trim($type));
+               switch ($type)
+               {
+                       case 'crc32':
+                               $this->cache_name_type = 'crc32';
+                               break;
+                       
+                       case 'md5':
+                               $this->cache_name_type = 'md5';
+                               break;
+                       
+                       case 'rawurlencode':
+                               $this->cache_name_type = 'rawurlencode';
+                               break;
+                       
+                       case 'urlencode':
+                               $this->cache_name_type = 'urlencode';
+                               break;
+                       
+                       default:
+                               $this->cache_name_type = 'sha1';
+                               break;
+               }
+       }
+       
+       function bypass_image_hotlink($get = false)
+       {
+               $this->sanitize->bypass_image_hotlink($get);
+       }
+       
+       function bypass_image_hotlink_page($page = false)
+       {
+               $this->sanitize->bypass_image_hotlink_page($page);
+       }
+       
+       function replace_headers($enable = false)
+       {
+               $this->sanitize->replace_headers($enable);
+       }
+       
+       function remove_div($enable = true)
+       {
+               $this->sanitize->remove_div($enable);
+       }
+       
+       function strip_ads($enable = false)
+       {
+               $this->sanitize->strip_ads($enable);
+       }
+       
+       function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'), $encode = null)
+       {
+               $this->sanitize->strip_htmltags($tags);
+               if (!is_null($encode))
+               {
+                       $this->sanitize->encode_instead_of_strip($tags);
+               }
+       }
+       
+       function encode_instead_of_strip($enable = true)
+       {
+               $this->sanitize->encode_instead_of_strip($enable);
+       }
+       
+       function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur'))
+       {
+               $this->sanitize->strip_attributes($attribs);
+       }
+       
+       function output_encoding($encoding = 'UTF-8')
+       {
+               $this->sanitize->output_encoding($encoding);
+       }
+       
+       function set_item_class($class = 'SimplePie_Item')
+       {
+               return $this->sanitize->set_item_class($class);
+       }
+       
+       function set_author_class($class = 'SimplePie_Author')
+       {
+               return $this->sanitize->set_author_class($class);
+       }
+       
+       function set_enclosure_class($class = 'SimplePie_Enclosure')
+       {
+               return $this->sanitize->set_enclosure_class($class);
+       }
+       
+       function init()
+       {
+               if (!(function_exists('version_compare') && ((version_compare(phpversion(), '4.3.2', '>=') && version_compare(phpversion(), '5', '<')) || version_compare(phpversion(), '5.0.3', '>='))) || !extension_loaded('xml') || !extension_loaded('pcre'))
+               {
+                       return false;
+               }
+               if ($this->sanitize->bypass_image_hotlink && !empty($_GET[$this->sanitize->bypass_image_hotlink]))
+               {
+                       if (get_magic_quotes_gpc())
+                       {
+                               $_GET[$this->sanitize->bypass_image_hotlink] = stripslashes($_GET[$this->sanitize->bypass_image_hotlink]);
+                       }
+                       SimplePie_Misc::display_file($_GET[$this->sanitize->bypass_image_hotlink], 10, $this->useragent);
+               }
+               
+               if (isset($_GET['js']))
+               {
+                       $embed = <<<EOT
+function embed_odeo(link) {
+       document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
+}
+
+function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
+       if (placeholder != '') {
+               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+       }
+       else {
+               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+       }
+}
+
+function embed_flash(bgcolor, width, height, link, loop, type) {
+       document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
+}
+
+function embed_wmedia(width, height, link) {
+       document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
+}
+EOT;
+
+                       if (function_exists('ob_gzhandler'))
+                       {
+                               ob_start('ob_gzhandler');
+                       }
+                       header('Content-type: text/javascript; charset: UTF-8'); 
+                       header('Cache-Control: must-revalidate'); 
+                       header('Expires: ' .  gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');
+                       echo $embed;
+                       exit;
+               }
+               
+               if (!empty($this->rss_url) || !empty($this->raw_data))
+               {
+                       $this->data = array();
+                       $cache = false;
+                       
+                       if (!empty($this->rss_url))
+                       {
+                               // Decide whether to enable caching
+                               if ($this->enable_cache && preg_match('/^http(s)?:\/\//i', $this->rss_url))
+                               {
+                                       $cache = new $this->cache_class($this->cache_location, call_user_func($this->cache_name_type, $this->rss_url), 'spc');
+                               }
+                               // If it's enabled and we don't want an XML dump, use the cache
+                               if ($cache && !$this->xml_dump)
+                               {
+                                       // Load the Cache
+                                       $this->data = $cache->load();
+                                       if (!empty($this->data))
+                                       {
+                                               // If we've hit a collision just rerun it with caching disabled
+                                               if (isset($this->data['url']) && $this->data['url'] != $this->rss_url)
+                                               {
+                                                       $cache = false;
+                                               }
+                                               // If we've got a feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL
+                                               else if (!empty($this->data['feed_url']))
+                                               {
+                                                       if ($this->data['feed_url'] == $this->data['url'])
+                                                       {
+                                                               $cache->unlink();
+                                                       }
+                                                       else
+                                                       {
+                                                               $this->feed_url($this->data['feed_url']);
+                                                               return $this->init();
+                                                       }
+                                               }
+                                               // If the cache is new enough
+                                               else if ($cache->mtime() + $this->max_minutes * 60 < time())
+                                               {
+                                                       // If we have last-modified and/or etag set
+                                                       if (!empty($this->data['last-modified']) || !empty($this->data['etag']))
+                                                       {
+                                                               $headers = array();
+                                                               if (!empty($this->data['last-modified']))
+                                                               {
+                                                                       $headers['if-modified-since'] = $this->data['last-modified'];
+                                                               }
+                                                               if (!empty($this->data['etag']))
+                                                               {
+                                                                       $headers['if-none-match'] = $this->data['etag'];
+                                                               }
+                                                               $file = new $this->file_class($this->rss_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen);
+                                                               if ($file->success)
+                                                               {
+                                                                       $headers = $file->headers();
+                                                                       if ($headers['status']['code'] == 304)
+                                                                       {
+                                                                               $cache->touch();
+                                                                               return true;
+                                                                       }
+                                                               }
+                                                               else
+                                                               {
+                                                                       unset($file);
+                                                               }
+                                                       }
+                                                       // If we don't have last-modified or etag set, just clear the cache
+                                                       else
+                                                       {
+                                                               $cache->unlink();
+                                                       }
+                                               }
+                                               // If the cache is still valid, just return true
+                                               else
+                                               {
+                                                       return true;
+                                               }
+                                       }
+                                       // If the cache is empty, delete it
+                                       else
+                                       {
+                                               $cache->unlink();
+                                       }
+                               }
+                               $this->data = array();
+                               // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
+                               if (!isset($file))
+                               {
+                                       if (is_a($this->file, 'SimplePie_File') && $this->file->url == $this->rss_url)
+                                       {
+                                               $file =& $this->file;
+                                       }
+                                       else
+                                       {
+                                               $file = new $this->file_class($this->rss_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen);
+                                       }
+                               }
+                               // If the file connection has an error, set SimplePie::error to that and quit
+                               if (!$file->success)
+                               {
+                                       $this->error = $file->error;
+                                       return false;
+                               }
+                               
+                               // Check if the supplied URL is a feed, if it isn't, look for it.
+                               $locate = new $this->locator_class($file, $this->timeout, $this->useragent);
+                               if (!$locate->is_feed($file))
+                               {
+                                       $feed = $locate->find();
+                                       if ($feed)
+                                       {
+                                               if ($cache && !$cache->save(array('url' => $this->rss_url, 'feed_url' => $feed)))
+                                               {
+                                                       $this->error = "$cache->name is not writeable";
+                                                       SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                                               }
+                                               $this->rss_url = $feed;
+                                               return $this->init();
+                                       }
+                                       else
+                                       {
+                                               $this->error = "A feed could not be found at $this->rss_url";
+                                               SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                                               return false;
+                                       }
+                               }
+                               
+                               $headers = $file->headers();
+                               $data = trim($file->body());
+                               $file->close();
+                               unset($file);
+                       }
+                       else
+                       {
+                               $data = $this->raw_data;
+                       }
+                       
+                       // First check to see if input has been overridden.
+                       if (!empty($this->input_encoding))
+                       {
+                               $encoding = $this->input_encoding;
+                       }
+                       // Second try HTTP headers
+                       else if (!empty($headers['content-type']) && preg_match('/charset\s*=\s*([^;]*)/i', $headers['content-type'], $charset))
+                       {
+                               $encoding = $charset[1];
+                       }
+                       // Then prolog, if at the very start of the document
+                       else if (preg_match('/^<\?xml(.*)?>/msiU', $data, $prolog) && preg_match('/encoding\s*=\s*("([^"]*)"|\'([^\']*)\')/Ui', $prolog[1], $encoding))
+                       {
+                               $encoding = substr($encoding[1], 1, -1);
+                       }
+                       // UTF-32 Big Endian BOM
+                       else if (strpos($data, sprintf('%c%c%c%c', 0x00, 0x00, 0xFE, 0xFF)) === 0)
+                       {
+                               $encoding = 'UTF-32be';
+                       }
+                       // UTF-32 Little Endian BOM
+                       else if (strpos($data, sprintf('%c%c%c%c', 0xFF, 0xFE, 0x00, 0x00)) === 0)
+                       {
+                               $encoding = 'UTF-32';
+                       }
+                       // UTF-16 Big Endian BOM
+                       else if (strpos($data, sprintf('%c%c', 0xFE, 0xFF)) === 0)
+                       {
+                               $encoding = 'UTF-16be';
+                       }
+                       // UTF-16 Little Endian BOM
+                       else if (strpos($data, sprintf('%c%c', 0xFF, 0xFE)) === 0)
+                       {
+                               $encoding = 'UTF-16le';
+                       }
+                       // UTF-8 BOM
+                       else if (strpos($data, sprintf('%c%c%c', 0xEF, 0xBB, 0xBF)) === 0)
+                       {
+                               $encoding = 'UTF-8';
+                       }
+                       // Fallback to the default
+                       else
+                       {
+                               $encoding = null;
+                       }
+                       
+                       // Change the encoding to UTF-8 (as we always use UTF-8 internally)
+                       $data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8');
+                       
+                       // Strip illegal characters (if on less  than PHP5, as on PHP5 expat can manage fine)
+                       if (version_compare(phpversion(), '5', '<'))
+                       {
+                               if (function_exists('iconv'))
+                               {
+                                       $data = iconv('UTF-8', 'UTF-8//IGNORE', $data);
+                               }
+                               else if (function_exists('mb_convert_encoding'))
+                               {
+                                       $data = mb_convert_encoding($data, 'UTF-8', 'UTF-8');
+                               }
+                               else
+                               {
+                                       $data = SimplePie_Misc::utf8_bad_replace($data);
+                               }
+                       }
+
+                       // Start parsing
+                       $data = new $this->parser_class($data, 'UTF-8', $this->xml_dump);
+                       // If we want the XML, just output that and quit
+                       if ($this->xml_dump)
+                       {
+                               header('Content-type: text/xml; charset=UTF-8');
+                               echo $data->data;
+                               exit;
+                       }
+                       // If it's parsed fine
+                       else if (!$data->error_code)
+                       {
+                               // Parse the data, and make it sane
+                               $this->sanitize->parse_data_array($data->data, $this->rss_url);
+                               unset($data);
+                               // Get the sane data
+                               $this->data['feedinfo'] = $this->sanitize->feedinfo;
+                               unset($this->sanitize->feedinfo);
+                               $this->data['info'] = $this->sanitize->info;
+                               unset($this->sanitize->info);
+                               $this->data['items'] = $this->sanitize->items;
+                               unset($this->sanitize->items);
+                               $this->data['feedinfo']['encoding'] = $this->sanitize->output_encoding;
+                               $this->data['url'] = $this->rss_url;
+                               
+                               // Store the headers that we need
+                               if (!empty($headers['last-modified']))
+                               {
+                                       $this->data['last-modified'] = $headers['last-modified'];
+                               }
+                               if (!empty($headers['etag']))
+                               {
+                                       $this->data['etag'] = $headers['etag'];
+                               }
+                               
+                               // If we want to order it by date, check if all items have a date, and then sort it
+                               if ($this->order_by_date && !empty($this->data['items']))
+                               {
+                                       $do_sort = true;
+                                       foreach ($this->data['items'] as $item)
+                                       {
+                                               if (!$item->get_date('U'))
+                                               {
+                                                       $do_sort = false;
+                                                       break;
+                                               }
+                                       }
+                                       if ($do_sort)
+                                       {
+                                               usort($this->data['items'], create_function('$a, $b', 'if ($a->get_date(\'U\') == $b->get_date(\'U\')) return 1; return ($a->get_date(\'U\') < $b->get_date(\'U\')) ? 1 : -1;'));
+                                       }
+                               }
+                               
+                               // Cache the file if caching is enabled
+                               if ($cache && !$cache->save($this->data))
+                               {
+                                       $this->error = "$cache->name is not writeable";
+                                       SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                               }
+                               return true;
+                       }
+                       // If we have an error, just set SimplePie::error to it and quit
+                       else
+                       {
+                               $this->error = "XML error: $data->error_string at line $data->current_line, column $data->current_column";
+                               SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
+                               return false;
+                       }
+               }
+       }
+       
+       function get_encoding()
+       {
+               if (!empty($this->data['feedinfo']['encoding']))
+               {
+                       return $this->data['feedinfo']['encoding'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function handle_content_type($mime = 'text/html')
+       {
+               if (!headers_sent())
+               {
+                       $header = "Content-type: $mime;";
+                       if ($this->get_encoding())
+                       {
+                               $header .= ' charset=' . $this->get_encoding();
+                       }
+                       else
+                       {
+                               $header .= ' charset=UTF-8';
+                       }
+                       header($header);
+               }
+       }
+       
+       function get_type()
+       {
+               if (!empty($this->data['feedinfo']['type']))
+               {
+                       return $this->data['feedinfo']['type'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_version()
+       {
+               if (!empty($this->data['feedinfo']['version']))
+               {
+                       return $this->data['feedinfo']['version'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_favicon($check = false, $alternate = null)
+       {
+               if (!empty($this->data['info']['link']['alternate'][0]))
+               {
+                       $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $this->get_feed_link());
+
+                       if ($check)
+                       {
+                               $file = new $this->file_class($favicon, $this->timeout/10, 5, null, $this->useragent, $this->force_fsockopen);
+                               $headers = $file->headers();
+                               $file->close();
+
+                               if ($headers['status']['code'] == 200)
+                               {
+                                       return $favicon;
+                               }
+                       }
+                       else
+                       {
+                               return $favicon;
+                       }
+               }
+               if (!is_null($alternate))
+               {
+                       return $alternate;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_url()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return $this->rss_url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feed()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return SimplePie_Misc::fix_protocol($this->rss_url, 2);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_outlook()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return 'outlook' . SimplePie_Misc::fix_protocol($this->rss_url, 2);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_podcast()
+       {
+               if (!empty($this->rss_url))
+               {
+                       return SimplePie_Misc::fix_protocol($this->rss_url, 3);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_aol()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://feeds.my.aol.com/add.jsp?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_bloglines()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.bloglines.com/sub/' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_eskobo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.eskobo.com/?AddToMyPage=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feedfeeds()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.feedfeeds.com/add?feed=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feedlounge()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://my.feedlounge.com/external/subscribe?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_feedster()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.feedster.com/myfeedster.php?action=addrss&amp;confirm=no&amp;rssurl=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_google()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://fusion.google.com/add?feedurl=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_gritwire()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_msn()
+       {
+               if ($this->subscribe_url())
+               {
+                       $url = 'http://my.msn.com/addtomymsn.armx?id=rss&amp;ut=' . rawurlencode($this->subscribe_url());
+                       if ($this->get_feed_link())
+                       {
+                               $url .= '&amp;ru=' . rawurlencode($this->get_feed_link());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_netvibes()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.netvibes.com/subscribe.php?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_newsburst()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.newsburst.com/Source/?add=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_newsgator()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.newsgator.com/ngs/subscriber/subext.aspx?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_odeo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.odeo.com/listen/subscribe?feed=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_pluck()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://client.pluck.com/pluckit/prompt.aspx?GCID=C12286x053&amp;a=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_podnova()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.podnova.com/index_your_podcasts.srf?action=add&amp;url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_rojo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://www.rojo.com/add-subscription?resource=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function subscribe_yahoo()
+       {
+               if ($this->subscribe_url())
+               {
+                       return 'http://add.my.yahoo.com/rss?url=' . rawurlencode($this->subscribe_url());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_title()
+       {
+               if (!empty($this->data['info']['title']))
+               {
+                       return $this->data['info']['title'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_link()
+       {
+               if (!empty($this->data['info']['link']['alternate'][0]))
+               {
+                       return $this->data['info']['link']['alternate'][0];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_links()
+       {
+               if (!empty($this->data['info']['link']))
+               {
+                       return $this->data['info']['link'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_description()
+       {
+               if (!empty($this->data['info']['description']))
+               {
+                       return $this->data['info']['description'];
+               }
+               else if (!empty($this->data['info']['dc:description']))
+               {
+                       return $this->data['info']['dc:description'];
+               }
+               else if (!empty($this->data['info']['tagline']))
+               {
+                       return $this->data['info']['tagline'];
+               }
+               else if (!empty($this->data['info']['subtitle']))
+               {
+                       return $this->data['info']['subtitle'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_copyright()
+       {
+               if (!empty($this->data['info']['copyright']))
+               {
+                       return $this->data['info']['copyright'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_feed_language()
+       {
+               if (!empty($this->data['info']['language']))
+               {
+                       return $this->data['info']['language'];
+               }
+               else if (!empty($this->data['info']['xml:lang']))
+               {
+                       return $this->data['info']['xml:lang'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_exist()
+       {
+               if (!empty($this->data['info']['image']['url']) || !empty($this->data['info']['image']['logo']))
+               {
+                       return true;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_title()
+       {
+               if (!empty($this->data['info']['image']['title']))
+               {
+                       return $this->data['info']['image']['title'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_url()
+       {
+               if (!empty($this->data['info']['image']['url']))
+               {
+                       return $this->data['info']['image']['url'];
+               }
+               else if (!empty($this->data['info']['image']['logo']))
+               {
+                       return $this->data['info']['image']['logo'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_link()
+       {
+               if (!empty($this->data['info']['image']['link']))
+               {
+                       return $this->data['info']['image']['link'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_width()
+       {
+               if (!empty($this->data['info']['image']['width']))
+               {
+                       return $this->data['info']['image']['width'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_image_height()
+       {
+               if (!empty($this->data['info']['image']['height']))
+               {
+                       return $this->data['info']['image']['height'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_item_quantity($max = 0)
+       {
+               if (!empty($this->data['items']))
+               {
+                       $qty = sizeof($this->data['items']);
+               }
+               else
+               {
+                       $qty = 0;
+               }
+               if ($max == 0)
+               {
+                       return $qty;
+               }
+               else
+               {
+                       return ($qty > $max) ? $max : $qty;
+               }
+       }
+       
+       function get_item($key = 0)
+       {
+               if (!empty($this->data['items'][$key]))
+               {
+                       return $this->data['items'][$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_items($start = 0, $end = 0)
+       {
+               if ($this->get_item_quantity() > 0)
+               {
+                       if ($end == 0)
+                       {
+                               return array_slice($this->data['items'], $start);
+                       }
+                       else
+                       {
+                               return array_slice($this->data['items'], $start, $end);
+                       }
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Item
+{
+       var $data;
+       
+       function SimplePie_Item($data)
+       {
+               $this->data =& $data;
+       }
+       
+       function get_id()
+       {
+               if (!empty($this->data['guid']['data']))
+               {
+                       return $this->data['guid']['data'];
+               }
+               else if (!empty($this->data['id']))
+               {
+                       return $this->data['id'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_title()
+       {
+               if (!empty($this->data['title']))
+               {
+                       return $this->data['title'];
+               }
+               else if (!empty($this->data['dc:title']))
+               {
+                       return $this->data['dc:title'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_description()
+       {
+               if (!empty($this->data['content']))
+               {
+                       return $this->data['content'];
+               }
+               else if (!empty($this->data['encoded']))
+               {
+                       return $this->data['encoded'];
+               }
+               else if (!empty($this->data['summary']))
+               {
+                       return $this->data['summary'];
+               }
+               else if (!empty($this->data['description']))
+               {
+                       return $this->data['description'];
+               }
+               else if (!empty($this->data['dc:description']))
+               {
+                       return $this->data['dc:description'];
+               }
+               else if (!empty($this->data['longdesc']))
+               {
+                       return $this->data['longdesc'];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_category($key = 0)
+       {
+               $categories = $this->get_categories();
+               if (!empty($categories[$key]))
+               {
+                       return $categories[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_categories()
+       {
+               $categories = array();
+               if (!empty($this->data['category']))
+               {
+                       $categories = array_merge($categories, $this->data['category']);
+               }
+               if (!empty($this->data['subject']))
+               {
+                       $categories = array_merge($categories, $this->data['subject']);
+               }
+               if (!empty($this->data['term']))
+               {
+                       $categories = array_merge($categories, $this->data['term']);
+               }
+               if (!empty($categories))
+               {
+                       return array_unique($categories);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_author($key = 0)
+       {
+               $authors = $this->get_authors();
+               if (!empty($authors[$key]))
+               {
+                       return $authors[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_authors()
+       {
+               $authors = array();
+               if (!empty($this->data['author']))
+               {
+                       $authors = array_merge($authors, $this->data['author']);
+               }
+               if (!empty($this->data['creator']))
+               {
+                       $authors = array_merge($authors, $this->data['creator']);
+               }
+               if (!empty($authors))
+               {
+                       return array_unique($authors);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_date($date_format = 'j F Y, g:i a')
+       {
+               if (!empty($this->data['pubdate']))
+               {
+                       return date($date_format, $this->data['pubdate']);
+               }
+               else if (!empty($this->data['dc:date']))
+               {
+                       return date($date_format, $this->data['dc:date']);
+               }
+               else if (!empty($this->data['issued']))
+               {
+                       return date($date_format, $this->data['issued']);
+               }
+               else if (!empty($this->data['published']))
+               {
+                       return date($date_format, $this->data['published']);
+               }
+               else if (!empty($this->data['modified']))
+               {
+                       return date($date_format, $this->data['modified']);
+               }
+               else if (!empty($this->data['updated']))
+               {
+                       return date($date_format, $this->data['updated']);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_permalink()
+       {
+               $link = $this->get_link(0);
+               $enclosure = $this->get_enclosure(0);
+               if (!empty($link))
+               {
+                       return $link;
+               }
+               else if (!empty($enclosure))
+               {
+                       return $enclosure->get_link();
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_link($key = 0, $rel = 'alternate')
+       {
+               $links = $this->get_links($rel);
+               if (!empty($links[$key]))
+               {
+                       return $links[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_links($rel = 'alternate')
+       {
+               if ($rel == 'alternate')
+               {
+                       $links = array();
+                       if (!empty($this->data['link'][$rel]))
+                       {
+                               $links = $this->data['link'][$rel];
+                       }
+                       if (!empty($this->data['guid']['data']) && $this->data['guid']['permalink'] == true)
+                       {
+                               $links[] = $this->data['guid']['data'];
+                       }
+                       return $links;
+               }
+               else if (!empty($this->data['link'][$rel]))
+               {
+                       return $this->data['link'][$rel];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_enclosure($key = 0)
+       {
+               $enclosures = $this->get_enclosures();
+               if (!empty($enclosures[$key]))
+               {
+                       return $enclosures[$key];
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_enclosures()
+       {
+               $enclosures = array();
+               $links = $this->get_links('enclosure');
+               if (!empty($this->data['enclosures']))
+               {
+                       $enclosures = array_merge($enclosures, $this->data['enclosures']);
+               }
+               if (!empty($links))
+               {
+                       $enclosures = array_merge($enclosures, $links);
+               }
+               if (!empty($enclosures))
+               {
+                       return array_unique($enclosures);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_blinklist()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;Title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_blogmarks()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_delicious()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://del.icio.us/post/?v=3&amp;url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_digg()
+       {
+               if ($this->get_permalink())
+               {
+                       return 'http://digg.com/submit?phase=2&amp;URL=' . rawurlencode($this->get_permalink());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_furl()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.furl.net/storeIt.jsp?u=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;t=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_magnolia()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://ma.gnolia.com/bookmarklet/add?url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_myweb20()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://myweb2.search.yahoo.com/myresults/bookmarklet?u=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;t=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_newsvine()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.newsvine.com/_wine/save?u=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;h=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_reddit()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://reddit.com/submit?url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_segnalo()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://segnalo.com/post.html.php?url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_simpy()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.simpy.com/simpy/LinkAdd.do?href=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_smarking()
+       {
+               if ($this->get_permalink())
+               {
+                       return 'http://smarking.com/editbookmark/?url=' . rawurlencode($this->get_permalink());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_spurl()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://www.spurl.net/spurl.php?v=3&amp;url=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function add_to_wists()
+       {
+               if ($this->get_permalink())
+               {
+                       $url = 'http://wists.com/r.php?c=&amp;r=' . rawurlencode($this->get_permalink());
+                       if ($this->get_title())
+                       {
+                               $url .= '&amp;title=' . rawurlencode($this->get_title());
+                       }
+                       return $url;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function search_technorati()
+       {
+               if ($this->get_permalink())
+               {
+                       return 'http://www.technorati.com/search/' . rawurlencode($this->get_permalink());
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Author
+{
+       var $name;
+       var $link;
+       var $email;
+       
+       // Constructor, used to input the data
+       function SimplePie_Author($name, $link, $email)
+       {
+               $this->name = $name;
+               $this->link = $link;
+               $this->email = $email;
+       }
+       
+       function get_name()
+       {
+               if (!empty($this->name))
+               {
+                       return $this->name;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_link()
+       {
+               if (!empty($this->link))
+               {
+                       return $this->link;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function get_email()
+       {
+               if (!empty($this->email))
+               {
+                       return $this->email;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Enclosure
+{
+       var $link;
+       var $type;
+       var $length;
+
+       // Constructor, used to input the data
+       function SimplePie_Enclosure($link, $type, $length)
+       {
+               $this->link = $link;
+               $this->type = $type;
+               $this->length = $length;
+       }
+
+       function get_link()
+       {
+               if (!empty($this->link))
+               {
+                       if (class_exists('idna_convert'))
+                       {
+                               $idn = new idna_convert;
+                               $this->link = $idn->encode($this->link);
+                       }
+                       return $this->link;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_extension()
+       {
+               if (!empty($this->link))
+               {
+                       return pathinfo($this->link, PATHINFO_EXTENSION);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_type()
+       {
+               if (!empty($this->type))
+               {
+                       return $this->type;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_length()
+       {
+               if (!empty($this->length))
+               {
+                       return $this->length;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function get_size()
+       {
+               $length = $this->get_length();
+               if (!empty($length))
+               {
+                       return round($length/1048576, 2);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+
+       function native_embed($options='')
+       {
+               return $this->embed($options, true);            
+       }
+
+       function embed($options = '', $native = false)
+       {
+               // Set up defaults
+               $audio = '';
+               $video = '';
+               $alt = '';
+               $altclass = '';
+               $loop = 'false';
+               $width = 'auto';
+               $height = 'auto';
+               $bgcolor = '#ffffff';
+
+               // Process options and reassign values as necessary
+               if (is_array($options))
+               {
+                       extract($options);
+               }
+               else
+               {
+                       $options = explode(',', $options);
+                       foreach($options as $option)
+                       {
+                               $opt = explode(':', $option, 2);
+                               if (isset($opt[0], $opt[1]))
+                               {
+                                       $opt[0] = trim($opt[0]);
+                                       $opt[1] = trim($opt[1]);
+                                       switch ($opt[0])
+                                       {
+                                               case 'audio':
+                                                       $audio = $opt[1];
+                                                       break;
+                                               
+                                               case 'video':
+                                                       $video = $opt[1];
+                                                       break;
+                                               
+                                               case 'alt':
+                                                       $alt = $opt[1];
+                                                       break;
+                                               
+                                               case 'altclass':
+                                                       $altclass = $opt[1];
+                                                       break;
+                                               
+                                               case 'loop':
+                                                       $loop = $opt[1];
+                                                       break;
+                                               
+                                               case 'width':
+                                                       $width = $opt[1];
+                                                       break;
+                                               
+                                               case 'height':
+                                                       $height = $opt[1];
+                                                       break;
+                                               
+                                               case 'bgcolor':
+                                                       $bgcolor = $opt[1];
+                                                       break;
+                                       }
+                               }
+                       }
+               }
+       
+               $type = strtolower($this->get_type());
+
+               // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
+               if (!in_array($type, array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'x-audio/mp3', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video', 'application/x-shockwave-flash', 'application/futuresplash', 'application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx')))
+               {                       
+                       switch (strtolower($this->get_extension()))
+                       {
+                               // Audio mime-types
+                               case 'aac':
+                               case 'adts':
+                                       $type = 'audio/acc';
+                                       break;
+                               
+                               case 'aif':
+                               case 'aifc':
+                               case 'aiff':
+                               case 'cdda':
+                                       $type = 'audio/aiff';
+                                       break;
+                               
+                               case 'bwf':
+                                       $type = 'audio/wav';
+                                       break;
+                               
+                               case 'kar':
+                               case 'mid':
+                               case 'midi':
+                               case 'smf':
+                                       $type = 'audio/midi';
+                                       break;
+                               
+                               case 'm4a':
+                                       $type = 'audio/x-m4a';
+                                       break;
+                               
+                               case 'mp3':
+                               case 'swa':
+                                       $type = 'audio/mp3';
+                                       break;
+                               
+                               case 'wav':
+                                       $type = 'audio/wav';
+                                       break;
+                               
+                               case 'wax':
+                                       $type = 'audio/x-ms-wax';
+                                       break;
+                               
+                               case 'wma':
+                                       $type = 'audio/x-ms-wma';
+                                       break;
+                               
+                               // Video mime-types
+                               case '3gp':
+                               case '3gpp':
+                                       $type = 'video/3gpp';
+                                       break;
+
+                               case '3g2':
+                               case '3gp2':
+                                       $type = 'video/3gpp2';
+                                       break;
+
+                               case 'asf':
+                                       $type = 'video/x-ms-asf';
+                                       break;
+
+                               case 'm1a':
+                               case 'm1s':
+                               case 'm1v':
+                               case 'm15':
+                               case 'm75':
+                               case 'mp2':
+                               case 'mpa':
+                               case 'mpeg':
+                               case 'mpg':
+                               case 'mpm':
+                               case 'mpv':
+                                       $type = 'video/mpeg';
+                                       break;
+
+                               case 'm4v':
+                                       $type = 'video/x-m4v';
+                                       break;
+
+                               case 'mov':
+                               case 'qt':
+                                       $type = 'video/quicktime';
+                                       break;
+
+                               case 'mp4':
+                               case 'mpg4':
+                                       $type = 'video/mp4';
+                                       break;
+
+                               case 'sdv':
+                                       $type = 'video/sd-video';
+                                       break;
+
+                               case 'wm':
+                                       $type = 'video/x-ms-wm';
+                                       break;
+
+                               case 'wmv':
+                                       $type = 'video/x-ms-wmv';
+                                       break;
+
+                               case 'wvx':
+                                       $type = 'video/x-ms-wvx';
+                                       break;
+                                       
+                               // Flash mime-types
+                               case 'spl':
+                                       $type = 'application/futuresplash';
+                                       break;
+
+                               case 'swf':
+                                       $type = 'application/x-shockwave-flash';
+                                       break;
+                       }
+               }
+
+               $mime = explode('/', $type, 2);
+               $mime = $mime[0];
+               
+               // Process values for 'auto'
+               if ($width == 'auto')
+               {
+                       if ($mime == 'video')
+                       {
+                               $width = '320';
+                       }
+                       else
+                       {
+                               $width = '100%';
+                       }
+               }
+               if ($height == 'auto')
+               {
+                       if ($mime == 'audio')
+                       {
+                               $height = 0;
+                       }
+                       else if ($mime == 'video')
+                       {
+                               $height = 240;
+                       }
+                       else
+                       {
+                               $height = 256;
+                       }
+               }
+
+               // Set proper placeholder value
+               if ($mime == 'audio')
+               {
+                       $placeholder = $audio;
+               }
+               else if ($mime == 'video')
+               {
+                       $placeholder = $video;
+               }
+
+               $embed = '';
+
+               // Make sure the JS library is included
+               // (I know it'll be included multiple times, but I can't think of a better way to do this automatically)
+               if (!$native)
+               {
+                       $embed .= '<script type="text/javascript" src="?js"></script>';                 
+               }
+
+               // Odeo Feed MP3's
+               if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com') {
+                       if ($native)
+                       {
+                               $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
+                       }
+                       else
+                       {
+                               $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';                           
+                       }
+               }
+
+               // QuickTime 7 file types.  Need to test with QuickTime 6.
+               else if (in_array($type, array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'x-audio/mp3', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video')))
+               {
+                       $height += 16;
+                       if ($native)
+                       {
+                               if ($placeholder != "") {
+                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://www.apple.com/quicktime/download/\"></embed>";
+                               }
+                               else {
+                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width+\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://www.apple.com/quicktime/download/\"></embed>";
+                               }
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
+                       }
+               }
+
+               // Flash
+               else if (in_array($type, array('application/x-shockwave-flash', 'application/futuresplash')))
+               {
+                       if ($native)
+                       {
+                               $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
+                       }
+               }
+
+               // Windows Media
+               else if (in_array($type, array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx')))
+               {
+                       $height += 45;
+                       if ($native)
+                       {
+                               $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
+                       }
+                       else
+                       {
+                               $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
+                       }
+               }
+
+               // Everything else
+               else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
+
+               return $embed;
+       }
+}
+
+class SimplePie_File
+{
+       var $url;
+       var $useragent;
+       var $success = true;
+       var $headers = array();
+       var $body;
+       var $fp;
+       var $redirects = 0;
+       var $error;
+       var $method;
+       
+       function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+       {
+               if (class_exists('idna_convert'))
+               {
+                       $idn = new idna_convert;
+                       $url = $idn->encode($url);
+               }
+               $this->url = $url;
+               $this->useragent = $useragent;
+               if (preg_match('/^http(s)?:\/\//i', $url))
+               {
+                       if (empty($useragent))
+                       {
+                               $useragent = ini_get('user_agent');
+                               $this->useragent = $useragent;
+                       }
+                       if (!is_array($headers))
+                       {
+                               $headers = array();
+                       }
+                       if (extension_loaded('curl') && version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>=') && !$force_fsockopen)
+                       {
+                               $this->method = 'curl';
+                               $fp = curl_init();
+                               $headers2 = array();
+                               foreach ($headers as $key => $value)
+                               {
+                                       $headers2[] = "$key: $value";
+                               }
+                               curl_setopt($fp, CURLOPT_ENCODING, '');
+                               curl_setopt($fp, CURLOPT_URL, $url);
+                               curl_setopt($fp, CURLOPT_HEADER, 1);
+                               curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
+                               curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
+                               curl_setopt($fp, CURLOPT_REFERER, $url);
+                               curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
+                               curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
+                               if (!ini_get('open_basedir') && !ini_get('safe_mode'))
+                               {
+                                       curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
+                                       curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
+                               }
+
+                               $this->headers = trim(curl_exec($fp));
+                               if (curl_errno($fp) == 23 || curl_errno($fp) == 61)
+                               {
+                                       curl_setopt($fp, CURLOPT_ENCODING, 'none');
+                                       $this->headers = trim(curl_exec($fp));
+                               }
+                               if (curl_errno($fp))
+                               {
+                                       $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
+                                       $this->success = false;
+                                       return false;
+                               }
+                               $info = curl_getinfo($fp);
+                               $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 2);
+                               if (count($this->headers) == $info['redirect_count'] + 1)
+                               {
+                                       $this->headers = array_pop($this->headers);
+                                       $this->body = '';
+                               }
+                               else
+                               {
+                                       $this->body = array_pop($this->headers);
+                                       $this->headers = array_pop($this->headers);
+                               }
+                               $this->headers = $this->parse_headers($this->headers);
+                               if (($this->headers['status']['code'] == 301 || $this->headers['status']['code'] == 302 || $this->headers['status']['code'] == 303 || $this->headers['status']['code'] == 307) && !empty($this->headers['location']) && $this->redirects < $redirects)
+                               {
+                                       $this->redirects++;
+                                       return $this->SimplePie_File($this->headers['location'], $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+                               }
+                       }
+                       else
+                       {
+                               $this->method = 'fsockopen';
+                               $url_parts = parse_url($url);
+                               if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https')
+                               {
+                                       $url_parts['host'] = "ssl://$url_parts[host]";
+                                       $url_parts['port'] = 443;
+                               }
+                               if (!isset($url_parts['port']))
+                               {
+                                       $url_parts['port'] = 80;
+                               }
+                               $this->fp = fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
+                               if (!$this->fp)
+                               {
+                                       $this->error = 'fsockopen error: ' . $errstr;
+                                       $this->success = false;
+                                       return false;
+                               }
+                               else
+                               {
+                                       stream_set_timeout($this->fp, $timeout);
+                                       $get = (isset($url_parts['query'])) ? "$url_parts[path]?$url_parts[query]" : $url_parts['path'];
+                                       $out = "GET $get HTTP/1.0\r\n";
+                                       $out .= "Host: $url_parts[host]\r\n";
+                                       $out .= "User-Agent: $useragent\r\n";
+                                       if (function_exists('gzinflate'))
+                                       {
+                                               $out .= "Accept-Encoding: gzip,deflate\r\n";
+                                       }
+
+                                       if (!empty($url_parts['user']) && !empty($url_parts['pass']))
+                                       {
+                                               $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
+                                       }
+                                       foreach ($headers as $key => $value)
+                                       {
+                                               $out .= "$key: $value\r\n";
+                                       }
+                                       $out .= "Connection: Close\r\n\r\n";
+                                       fwrite($this->fp, $out);
+                                       
+                                       $info = stream_get_meta_data($this->fp);
+                                       $data = '';
+                                       while (strpos($data, "\r\n\r\n") === false && !$info['timed_out'])
+                                       {
+                                               $data .= fgets($this->fp, 128);
+                                               $info = stream_get_meta_data($this->fp);
+                                       }
+                                       if (!$info['timed_out'])
+                                       {
+                                               $this->headers = $this->parse_headers($data);
+                                               if (($this->headers['status']['code'] == 301 || $this->headers['status']['code'] == 302 || $this->headers['status']['code'] == 303 || $this->headers['status']['code'] == 307) && !empty($this->headers['location']) && $this->redirects < $redirects)
+                                               {
+                                                       $this->redirects++;
+                                                       return $this->SimplePie_File($this->headers['location'], $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+                                               }
+                                       }
+                                       else
+                                       {
+                                               $this->close();
+                                               $this->error = 'fsocket timed out';
+                                               $this->success = false;
+                                               return false;
+                                       }
+                               }
+                       }
+                       return $this->headers['status']['code'];
+               }
+               else
+               {
+                       $this->method = 'fopen';
+                       if ($this->fp = fopen($url, 'r'))
+                       {
+                               return true;
+                       }
+                       else
+                       {
+                               $this->error = 'fopen could not open the file';
+                               $this->success = false;
+                               return false;
+                       }
+               }
+       }
+       
+       function headers()
+       {
+               return $this->headers;
+       }
+       
+       function body()
+       {
+               if (is_null($this->body))
+               {
+                       if ($this->fp)
+                       {
+                               $info = stream_get_meta_data($this->fp);
+                               $this->body = '';
+                               while (!$info['eof'] && !$info['timed_out'])
+                               {
+                                       $this->body .= fread($this->fp, 1024);
+                                       $info = stream_get_meta_data($this->fp);
+                               }
+                               if (!$info['timed_out'])
+                               {
+                                       $this->body = trim($this->body);
+                                       if ($this->method == 'fsockopen' && !empty($this->headers['content-encoding']) && ($this->headers['content-encoding'] == 'gzip' || $this->headers['content-encoding'] == 'deflate'))
+                                       {
+                                               if (substr($this->body, 0, 8) == "\x1f\x8b\x08\x00\x00\x00\x00\x00")
+                                               {
+                                                       $this->body = substr($this->body, 10);
+                                               }
+                                               $this->body = gzinflate($this->body);
+                                       }
+                                       $this->close();
+                               }
+                               else
+                               {
+                                       return false;
+                               }
+                       }
+                       else
+                       {
+                               return false;
+                       }
+               }
+               return $this->body;
+       }
+       
+       function close()
+       {
+               if (!is_null($this->fp))
+               {
+                       if (fclose($this->fp))
+                       {
+                               $this->fp = null;
+                               return true;
+                       }
+                       else
+                       {
+                               return false;
+                       }
+               }
+               else
+               {
+                       return false;
+               }
+       }
+       
+       function parse_headers($headers)
+       {
+               $headers = explode("\r\n", trim($headers));
+               $status = array_shift($headers);
+               foreach ($headers as $header)
+               {
+                       $data = explode(':', $header, 2);
+                       $head[strtolower(trim($data[0]))] = trim($data[1]);
+               }
+               if (preg_match('/HTTP\/[0-9\.]+ ([0-9]+)(.*)$/i', $status, $matches))
+               {
+                       if (isset($head['status']))
+                       {
+                               unset($head['status']);
+                       }
+                       $head['status']['code'] = $matches[1];
+                       $head['status']['name'] = trim($matches[2]);
+               }
+               return $head;
+       }
+}
+
+class SimplePie_Cache
+{
+       var $location;
+       var $filename;
+       var $extension;
+       var $name;
+       
+       function SimplePie_Cache($location, $filename, $extension)
+       {
+               $this->location = $location;
+               $this->filename = rawurlencode($filename);
+               $this->extension = rawurlencode($extension);
+               $this->name = "$location/$this->filename.$this->extension";
+       }
+       
+       function save($data)
+       {
+               if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
+               {
+                       $fp = fopen($this->name, 'w');
+                       if ($fp)
+                       {
+                               fwrite($fp, serialize($data));
+                               fclose($fp);
+                               return true;
+                       }
+               }
+               return false;
+       }
+       
+       function load()
+       {
+               if (file_exists($this->name) && is_readable($this->name))
+               {
+                       return unserialize(file_get_contents($this->name));
+               }
+               return false;
+       }
+       
+       function mtime()
+       {
+               if (file_exists($this->name))
+               {
+                       return filemtime($this->name);
+               }
+               return false;
+       }
+       
+       function touch()
+       {
+               if (file_exists($this->name))
+               {
+                       return touch($this->name);
+               }
+               return false;
+       }
+       
+       function unlink()
+       {
+               if (file_exists($this->name))
+               {
+                       return unlink($this->name);
+               }
+               return false;
+       }
+}
+
+class SimplePie_Misc
+{
+       function absolutize_url($relative, $base)
+       {
+               $relative = trim($relative);
+               $base = trim($base);
+               if (!empty($relative))
+               {
+                       $relative = SimplePie_Misc::parse_url($relative, false);
+                       $relative = array('scheme' => $relative[2], 'authority' => $relative[3], 'path' => $relative[5], 'query' => $relative[7], 'fragment' => $relative[9]);
+                       if (!empty($relative['scheme']))
+                       {
+                               $target = $relative;
+                       }
+                       else if (!empty($base))
+                       {
+                               $base = SimplePie_Misc::parse_url($base, false);
+                               $base = array('scheme' => $base[2], 'authority' => $base[3], 'path' => $base[5], 'query' => $base[7], 'fragment' => $base[9]);
+                               $target['scheme'] = $base['scheme'];
+                               if (!empty($relative['authority']))
+                               {
+                                       $target = array_merge($relative, $target);
+                               }
+                               else
+                               {
+                                       $target['authority'] = $base['authority'];
+                                       if (!empty($relative['path']))
+                                       {
+                                               if (strpos($relative['path'], '/') === 0)
+                                               {
+                                                       $target['path'] = $relative['path'];
+                                               }
+                                               else
+                                               {
+                                                       if (!empty($base['path']))
+                                                       {
+                                                               $target['path'] = dirname("$base[path].") . '/' . $relative['path'];
+                                                       }
+                                                       else
+                                                       {
+                                                               $target['path'] = '/' . $relative['path'];
+                                                       }
+                                               }
+                                               if (!empty($relative['query']))
+                                               {
+                                                       $target['query'] = $relative['query'];
+                                               }
+                                               $input = $target['path'];
+                                               $target['path'] = '';
+                                               while (!empty($input))
+                                               {
+                                                       if (strpos($input, '../') === 0)
+                                                       {
+                                                               $input = substr($input, 3);
+                                                       }
+                                                       else if (strpos($input, './') === 0)
+                                                       {
+                                                               $input = substr($input, 2);
+                                                       }
+                                                       else if (strpos($input, '/./') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', 0, 3);
+                                                       }
+                                                       else if (strpos($input, '/.') === 0 && SimplePie_Misc::strendpos($input, '/.') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', -2);
+                                                       }
+                                                       else if (strpos($input, '/../') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', 0, 4);
+                                                               $target['path'] = preg_replace('/(\/)?([^\/]+)$/msiU', '', $target['path']);
+                                                       }
+                                                       else if (strpos($input, '/..') === 0 && SimplePie_Misc::strendpos($input, '/..') === 0)
+                                                       {
+                                                               $input = substr_replace($input, '/', 0, 3);
+                                                               $target['path'] = preg_replace('/(\/)?([^\/]+)$/msiU', '', $target['path']);
+                                                       }
+                                                       else if ($input == '.' || $input == '..')
+                                                       {
+                                                               $input = '';
+                                                       }
+                                                       else
+                                                       {
+                                                               if (preg_match('/^(.+)(\/|$)/msiU', $input, $match))
+                                                               {
+                                                                       $target['path'] .= $match[1];
+                                                                       $input = substr_replace($input, '', 0, strlen($match[1]));
+                                                               }
+                                                       }
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (!empty($base['path']))
+                                               {
+                                                       $target['path'] = $base['path'];
+                                               }
+                                               else
+                                               {
+                                                       $target['path'] = '/';
+                                               }
+                                               if (!empty($relative['query']))
+                                               {
+                                                       $target['query'] = $relative['query'];
+                                               }
+                                               else if (!empty($base['query']))
+                                               {
+                                                       $target['query'] = $base['query'];
+                                               }
+                                       }
+                               }
+                               if (!empty($relative['fragment']))
+                               {
+                                       $target['fragment'] = $relative['fragment'];
+                               }
+                       }
+                       else
+                       {
+                               return false;
+                       }
+                       $return = '';
+                       if (!empty($target['scheme']))
+                       {
+                               $return .= "$target[scheme]:";
+                       }
+                       if (!empty($target['authority']))
+                       {
+                               $return .= $target['authority'];
+                       }
+                       if (!empty($target['path']))
+                       {
+                               $return .= $target['path'];
+                       }
+                       if (!empty($target['query']))
+                       {
+                               $return .= "?$target[query]";
+                       }
+                       if (!empty($target['fragment']))
+                       {
+                               $return .= "#$target[fragment]";
+                       }
+               }
+               else
+               {
+                       $return = $base;
+               }
+               return $return;
+       }
+       
+       function strendpos($haystack, $needle)
+       {
+               return strlen($haystack) - strpos($haystack, $needle) - strlen($needle);
+       }
+       
+       function get_element($realname, $string)
+       {
+               $return = array();
+               $name = preg_quote($realname, '/');
+               preg_match_all("/<($name)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))*)\s*((\/)?>|>(.*)<\/$name>)/msiU", $string, $matches, PREG_SET_ORDER);
+               for ($i = 0; $i < count($matches); $i++)
+               {
+                       $return[$i]['tag'] = $realname;
+                       $return[$i]['full'] = $matches[$i][0];
+                       if (strlen($matches[$i][10]) <= 2)
+                       {
+                               $return[$i]['self_closing'] = true;
+                       }
+                       else
+                       {
+                               $return[$i]['self_closing'] = false;
+                               $return[$i]['content'] = $matches[$i][12];
+                       }
+                       $return[$i]['attribs'] = array();
+                       if (!empty($matches[$i][2]))
+                       {
+                               preg_match_all('/((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(\S+))\s/msiU', ' ' . $matches[$i][2] . ' ', $attribs, PREG_SET_ORDER);
+                               for ($j = 0; $j < count($attribs);  $j++)
+                               {
+                                       $return[$i]['attribs'][strtoupper($attribs[$j][1])]['data'] = $attribs[$j][count($attribs[$j])-1];
+                                       $first = substr($attribs[$j][2], 0, 1);
+                                       $return[$i]['attribs'][strtoupper($attribs[$j][1])]['split'] = ($first == '"' || $first == "'") ? $first : '"';
+                               }
+                       }
+               }
+               return $return;
+       }
+       
+       function element_implode($element)
+       {
+               $full = "<$element[tag]";
+               foreach ($element['attribs'] as $key => $value)
+               {
+                       $key = strtolower($key);
+                       $full .= " $key=$value[split]$value[data]$value[split]";
+               }
+               if ($element['self_closing'])
+               {
+                       $full .= ' />';
+               }
+               else
+               {
+                       $full .= ">$element[content]</$element[tag]>";
+               }
+               return $full;
+       }
+       
+       function error($message, $level, $file, $line)
+       {
+               switch ($level)
+               {
+                       case E_USER_ERROR:
+                               $note = 'PHP Error';
+                               break;
+                       case E_USER_WARNING:
+                               $note = 'PHP Warning';
+                               break;
+                       case E_USER_NOTICE:
+                               $note = 'PHP Notice';
+                               break;
+                       default:
+                               $note = 'Unknown Error';
+                               break;
+               }
+               error_log("$note: $message in $file on line $line", 0);
+               return $message;
+       }
+       
+       function display_file($url, $timeout = 10, $useragent = null)
+       {
+               $file = new SimplePie_File($url, $timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $useragent);
+               $headers = $file->headers();
+               if ($file->body() !== false)
+               {
+                       header('Content-type: ' . $headers['content-type']);
+                       echo $file->body();
+                       exit;
+               }
+       }
+       
+       function fix_protocol($url, $http = 1)
+       {
+               $parsed = SimplePie_Misc::parse_url($url);
+               if (!empty($parsed['scheme']) && strtolower($parsed['scheme']) != 'http' && strtolower($parsed['scheme']) != 'https')
+               {
+                       return SimplePie_Misc::fix_protocol("$parsed[authority]$parsed[path]$parsed[query]$parsed[fragment]", $http);
+               }
+               if (!file_exists($url) && empty($parsed['scheme']))
+               {
+                       return SimplePie_Misc::fix_protocol("http://$url", $http);
+               }
+
+               if ($http == 2 && !empty($parsed['scheme']))
+               {
+                       return "feed:$url";
+               }
+               else if ($http == 3 && strtolower($parsed['scheme']) == 'http')
+               {
+                       return substr_replace($url, 'podcast', 0, 4);
+               }
+               else
+               {
+                       return $url;
+               }
+       }
+       
+       function parse_url($url, $parse_match = true)
+       {
+               preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/i', $url, $match);
+               if (empty($match[0]))
+               {
+                       return false;
+               }
+               else
+               {
+                       for ($i = 6; $i < 10; $i++)
+                       {
+                               if (!isset($match[$i]))
+                               {
+                                       $match[$i] = '';
+                               }
+                       }
+                       if ($parse_match)
+                       {
+                               $match = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[6], 'fragment' => $match[8]);
+                       }
+                       return $match;
+               }
+       }
+       
+       /**
+        * Replace bad bytes
+        *
+        * PCRE Pattern to locate bad bytes in a UTF-8 string
+        * Comes from W3 FAQ: Multilingual Forms
+        * Note: modified to include full ASCII range including control chars
+        *
+        * Modified by Geoffrey Sneddon 2006-11-19 to remove functionality
+        * to choose what the replace string is, and to use a variable for
+        * the output instead of PHP's output buffer
+        */
+       function utf8_bad_replace($str)
+       {
+               $UTF8_BAD =
+                '([\x00-\x7F]' .                                                       # ASCII (including control chars)
+                '|[\xC2-\xDF][\x80-\xBF]' .                            # non-overlong 2-byte
+                '|\xE0[\xA0-\xBF][\x80-\xBF]' .                        # excluding overlongs
+                '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}' .         # straight 3-byte
+                '|\xED[\x80-\x9F][\x80-\xBF]' .                        # excluding surrogates
+                '|\xF0[\x90-\xBF][\x80-\xBF]{2}' .                     # planes 1-3
+                '|[\xF1-\xF3][\x80-\xBF]{3}' .                         # planes 4-15
+                '|\xF4[\x80-\x8F][\x80-\xBF]{2}' .                     # plane 16
+                '|(.{1}))';                                                            # invalid byte
+               $output = '';
+               while (preg_match('/' . $UTF8_BAD . '/S', $str, $matches))
+               {
+                       if (!isset($matches[2]))
+                       {
+                               $output .= $matches[0];
+                       }
+                       $str = substr($str, strlen($matches[0]));
+               }
+               return $output;
+       }
+       
+       function change_encoding($data, $input, $output)
+       {
+               $input = SimplePie_Misc::encoding($input);
+               $output = SimplePie_Misc::encoding($output);
+               
+               if ($input != $output)
+               {
+                       if (function_exists('iconv') && $input['use_iconv'] && $output['use_iconv'] && iconv($input['encoding'], "$output[encoding]//TRANSLIT", $data))
+                       {
+                               return iconv($input['encoding'], "$output[encoding]//TRANSLIT", $data);
+                       }
+                       else if (function_exists('iconv') && $input['use_iconv'] && $output['use_iconv'] && iconv($input['encoding'], $output['encoding'], $data))
+                       {
+                               return iconv($input['encoding'], $output['encoding'], $data);   
+                       }
+                       else if (function_exists('mb_convert_encoding') && $input['use_mbstring'] && $output['use_mbstring'])
+                       {
+                               return mb_convert_encoding($data, $output['encoding'], $input['encoding']);
+                       }
+                       else if ($input['encoding'] == 'ISO-8859-1' && $output['encoding'] == 'UTF-8')
+                       {
+                               return utf8_encode($data);
+                       }
+                       else if ($input['encoding'] == 'UTF-8' && $output['encoding'] == 'ISO-8859-1')
+                       {
+                               return utf8_decode($data);
+                       }
+               }
+               return $data;
+       }
+       
+       function encoding($encoding)
+       {
+               $return['use_mbstring'] = false;
+               $return['use_iconv'] = false;
+               switch (strtolower($encoding))
+               {
+
+                       // 7bit
+                       case '7bit':
+                       case '7-bit':
+                               $return['encoding'] = '7bit';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // 8bit
+                       case '8bit':
+                       case '8-bit':
+                               $return['encoding'] = '8bit';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ARMSCII-8
+                       case 'armscii-8':
+                       case 'armscii':
+                               $return['encoding'] = 'ARMSCII-8';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ASCII
+                       case 'us-ascii':
+                       case 'ascii':
+                               $return['encoding'] = 'US-ASCII';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // BASE64
+                       case 'base64':
+                       case 'base-64':
+                               $return['encoding'] = 'BASE64';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Big5 - Traditional Chinese, mainly used in Taiwan
+                       case 'big5':
+                       case '950':
+                               $return['encoding'] = 'BIG5';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Big5 with Hong Kong extensions, Traditional Chinese
+                       case 'big5-hkscs':
+                               $return['encoding'] = 'BIG5-HKSCS';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte2be
+                       case 'byte2be':
+                               $return['encoding'] = 'byte2be';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte2le
+                       case 'byte2le':
+                               $return['encoding'] = 'byte2le';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte4be
+                       case 'byte4be':
+                               $return['encoding'] = 'byte4be';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // byte4le
+                       case 'byte4le':
+                               $return['encoding'] = 'byte4le';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-CN
+                       case 'euc-cn':
+                       case 'euccn':
+                               $return['encoding'] = 'EUC-CN';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-JISX0213
+                       case 'euc-jisx0213':
+                       case 'eucjisx0213':
+                               $return['encoding'] = 'EUC-JISX0213';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // EUC-JP
+                       case 'euc-jp':
+                       case 'eucjp':
+                               $return['encoding'] = 'EUC-JP';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUCJP-win
+                       case 'euc-jp-win':
+                       case 'eucjp-win':
+                       case 'eucjpwin':
+                               $return['encoding'] = 'EUCJP-win';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-KR
+                       case 'euc-kr':
+                       case 'euckr':
+                               $return['encoding'] = 'EUC-KR';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // EUC-TW
+                       case 'euc-tw':
+                       case 'euctw':
+                               $return['encoding'] = 'EUC-TW';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // GB18030 - Simplified Chinese, national standard character set
+                       case 'gb18030-2000':
+                       case 'gb18030':
+                               $return['encoding'] = 'GB18030';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // GB2312 - Simplified Chinese, national standard character set
+                       case 'gb2312':
+                       case '936':
+                               $return['encoding'] = 'GB2312';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // GBK
+                       case 'gbk':
+                               $return['encoding'] = 'GBK';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Georgian-Academy
+                       case 'georgian-academy':
+                               $return['encoding'] = 'Georgian-Academy';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Georgian-PS
+                       case 'georgian-ps':
+                               $return['encoding'] = 'Georgian-PS';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // HTML-ENTITIES
+                       case 'html-entities':
+                       case 'htmlentities':
+                               $return['encoding'] = 'HTML-ENTITIES';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // HZ
+                       case 'hz':
+                               $return['encoding'] = 'HZ';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-2022-CN
+                       case 'iso-2022-cn':
+                       case 'iso2022-cn':
+                       case 'iso2022cn':
+                               $return['encoding'] = 'ISO-2022-CN';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-CN-EXT
+                       case 'iso-2022-cn-ext':
+                       case 'iso2022-cn-ext':
+                       case 'iso2022cn-ext':
+                       case 'iso2022cnext':
+                               $return['encoding'] = 'ISO-2022-CN';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-JP
+                       case 'iso-2022-jp':
+                       case 'iso2022-jp':
+                       case 'iso2022jp':
+                               $return['encoding'] = 'ISO-2022-JP';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-2022-JP-1
+                       case 'iso-2022-jp-1':
+                       case 'iso2022-jp-1':
+                       case 'iso2022jp-1':
+                       case 'iso2022jp1':
+                               $return['encoding'] = 'ISO-2022-JP-1';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-JP-2
+                       case 'iso-2022-jp-2':
+                       case 'iso2022-jp-2':
+                       case 'iso2022jp-2':
+                       case 'iso2022jp2':
+                               $return['encoding'] = 'ISO-2022-JP-2';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-JP-3
+                       case 'iso-2022-jp-3':
+                       case 'iso2022-jp-3':
+                       case 'iso2022jp-3':
+                       case 'iso2022jp3':
+                               $return['encoding'] = 'ISO-2022-JP-3';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // ISO-2022-KR
+                       case 'iso-2022-kr':
+                       case 'iso2022-kr':
+                       case 'iso2022kr':
+                               $return['encoding'] = 'ISO-2022-KR';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-1
+                       case 'iso-8859-1':
+                       case 'iso8859-1':
+                               $return['encoding'] = 'ISO-8859-1';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-2
+                       case 'iso-8859-2':
+                       case 'iso8859-2':
+                               $return['encoding'] = 'ISO-8859-2';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-3
+                       case 'iso-8859-3':
+                       case 'iso8859-3':
+                               $return['encoding'] = 'ISO-8859-3';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-4
+                       case 'iso-8859-4':
+                       case 'iso8859-4':
+                               $return['encoding'] = 'ISO-8859-4';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-5
+                       case 'iso-8859-5':
+                       case 'iso8859-5':
+                               $return['encoding'] = 'ISO-8859-5';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-6
+                       case 'iso-8859-6':
+                       case 'iso8859-6':
+                               $return['encoding'] = 'ISO-8859-6';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-7
+                       case 'iso-8859-7':
+                       case 'iso8859-7':
+                               $return['encoding'] = 'ISO-8859-7';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-8
+                       case 'iso-8859-8':
+                       case 'iso8859-8':
+                               $return['encoding'] = 'ISO-8859-8';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-9
+                       case 'iso-8859-9':
+                       case 'iso8859-9':
+                               $return['encoding'] = 'ISO-8859-9';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-10
+                       case 'iso-8859-10':
+                       case 'iso8859-10':
+                               $return['encoding'] = 'ISO-8859-10';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // mbstring/iconv functions don't appear to support 11 & 12
+
+                       // ISO-8859-13
+                       case 'iso-8859-13':
+                       case 'iso8859-13':
+                               $return['encoding'] = 'ISO-8859-13';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-14
+                       case 'iso-8859-14':
+                       case 'iso8859-14':
+                               $return['encoding'] = 'ISO-8859-14';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-15
+                       case 'iso-8859-15':
+                       case 'iso8859-15':
+                               $return['encoding'] = 'ISO-8859-15';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // ISO-8859-16
+                       case 'iso-8859-16':
+                       case 'iso8859-16':
+                               $return['encoding'] = 'ISO-8859-16';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // JIS
+                       case 'jis':
+                               $return['encoding'] = 'JIS';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // JOHAB - Korean
+                       case 'johab':
+                               $return['encoding'] = 'JOHAB';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Russian
+                       case 'koi8-r':
+                       case 'koi8r':
+                               $return['encoding'] = 'KOI8-R';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Turkish
+                       case 'koi8-t':
+                       case 'koi8t':
+                               $return['encoding'] = 'KOI8-T';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Ukrainian
+                       case 'koi8-u':
+                       case 'koi8u':
+                               $return['encoding'] = 'KOI8-U';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Russian+Ukrainian
+                       case 'koi8-ru':
+                       case 'koi8ru':
+                               $return['encoding'] = 'KOI8-RU';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Macintosh (Mac OS Classic)
+                       case 'macintosh':
+                               $return['encoding'] = 'Macintosh';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacArabic (Mac OS Classic)
+                       case 'macarabic':
+                               $return['encoding'] = 'MacArabic';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacCentralEurope (Mac OS Classic)
+                       case 'maccentraleurope':
+                               $return['encoding'] = 'MacCentralEurope';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacCroatian (Mac OS Classic)
+                       case 'maccroatian':
+                               $return['encoding'] = 'MacCroatian';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacCyrillic (Mac OS Classic)
+                       case 'maccyrillic':
+                               $return['encoding'] = 'MacCyrillic';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacGreek (Mac OS Classic)
+                       case 'macgreek':
+                               $return['encoding'] = 'MacGreek';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacHebrew (Mac OS Classic)
+                       case 'machebrew':
+                               $return['encoding'] = 'MacHebrew';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacIceland (Mac OS Classic)
+                       case 'maciceland':
+                               $return['encoding'] = 'MacIceland';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacRoman (Mac OS Classic)
+                       case 'macroman':
+                               $return['encoding'] = 'MacRoman';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacRomania (Mac OS Classic)
+                       case 'macromania':
+                               $return['encoding'] = 'MacRomania';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacThai (Mac OS Classic)
+                       case 'macthai':
+                               $return['encoding'] = 'MacThai';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacTurkish (Mac OS Classic)
+                       case 'macturkish':
+                               $return['encoding'] = 'MacTurkish';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MacUkraine (Mac OS Classic)
+                       case 'macukraine':
+                               $return['encoding'] = 'MacUkraine';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // MuleLao-1
+                       case 'mulelao-1':
+                       case 'mulelao1':
+                               $return['encoding'] = 'MuleLao-1';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Shift_JIS
+                       case 'shift_jis':
+                       case 'sjis':
+                       case '932':
+                               $return['encoding'] = 'Shift_JIS';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Shift_JISX0213
+                       case 'shift-jisx0213':
+                       case 'shiftjisx0213':
+                               $return['encoding'] = 'Shift_JISX0213';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // SJIS-win
+                       case 'sjis-win':
+                       case 'sjiswin':
+                       case 'shift_jis-win':
+                               $return['encoding'] = 'SJIS-win';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // TCVN - Vietnamese
+                       case 'tcvn':
+                               $return['encoding'] = 'TCVN';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // TDS565 - Turkish
+                       case 'tds565':
+                               $return['encoding'] = 'TDS565';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // TIS-620 Thai
+                       case 'tis-620':
+                       case 'tis620':
+                               $return['encoding'] = 'TIS-620';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2
+                       case 'ucs-2':
+                       case 'ucs2':
+                       case 'utf-16':
+                       case 'utf16':
+                               $return['encoding'] = 'UCS-2';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2BE
+                       case 'ucs-2be':
+                       case 'ucs2be':
+                       case 'utf-16be':
+                       case 'utf16be':
+                               $return['encoding'] = 'UCS-2BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2LE
+                       case 'ucs-2le':
+                       case 'ucs2le':
+                       case 'utf-16le':
+                       case 'utf16le':
+                               $return['encoding'] = 'UCS-2LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-2-INTERNAL
+                       case 'ucs-2-internal':
+                       case 'ucs2internal':
+                               $return['encoding'] = 'UCS-2-INTERNAL';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // UCS-4
+                       case 'ucs-4':
+                       case 'ucs4':
+                       case 'utf-32':
+                       case 'utf32':
+                               $return['encoding'] = 'UCS-4';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-4BE
+                       case 'ucs-4be':
+                       case 'ucs4be':
+                       case 'utf-32be':
+                       case 'utf32be':
+                               $return['encoding'] = 'UCS-4BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-4LE
+                       case 'ucs-4le':
+                       case 'ucs4le':
+                       case 'utf-32le':
+                       case 'utf32le':
+                               $return['encoding'] = 'UCS-4LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-4-INTERNAL
+                       case 'ucs-4-internal':
+                       case 'ucs4internal':
+                               $return['encoding'] = 'UCS-4-INTERNAL';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // UCS-16
+                       case 'ucs-16':
+                       case 'ucs16':
+                               $return['encoding'] = 'UCS-16';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-16BE
+                       case 'ucs-16be':
+                       case 'ucs16be':
+                               $return['encoding'] = 'UCS-16BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-16LE
+                       case 'ucs-16le':
+                       case 'ucs16le':
+                               $return['encoding'] = 'UCS-16LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-32
+                       case 'ucs-32':
+                       case 'ucs32':
+                               $return['encoding'] = 'UCS-32';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-32BE
+                       case 'ucs-32be':
+                       case 'ucs32be':
+                               $return['encoding'] = 'UCS-32BE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UCS-32LE
+                       case 'ucs-32le':
+                       case 'ucs32le':
+                               $return['encoding'] = 'UCS-32LE';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UTF-7
+                       case 'utf-7':
+                       case 'utf7':
+                               $return['encoding'] = 'UTF-7';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // UTF7-IMAP
+                       case 'utf-7-imap':
+                       case 'utf7-imap':
+                       case 'utf7imap':
+                               $return['encoding'] = 'UTF7-IMAP';
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // VISCII - Vietnamese ASCII
+                       case 'viscii':
+                               $return['encoding'] = 'VISCII';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Central & Eastern Europe
+                       case 'cp1250':
+                       case 'windows-1250':
+                       case 'win-1250':
+                       case '1250':
+                               $return['encoding'] = 'Windows-1250';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Cyrillic
+                       case 'cp1251':
+                       case 'windows-1251':
+                       case 'win-1251':
+                       case '1251':
+                               $return['encoding'] = 'Windows-1251';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Windows-specific Western Europe
+                       case 'cp1252':
+                       case 'windows-1252':
+                       case '1252':
+                               $return['encoding'] = 'Windows-1252';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+
+                       // Windows-specific Greek
+                       case 'cp1253':
+                       case 'windows-1253':
+                       case '1253':
+                               $return['encoding'] = 'Windows-1253';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Turkish
+                       case 'cp1254':
+                       case 'windows-1254':
+                       case '1254':
+                               $return['encoding'] = 'Windows-1254';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Hebrew
+                       case 'cp1255':
+                       case 'windows-1255':
+                       case '1255':
+                               $return['encoding'] = 'Windows-1255';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Arabic
+                       case 'cp1256':
+                       case 'windows-1256':
+                       case '1256':
+                               $return['encoding'] = 'Windows-1256';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Baltic
+                       case 'cp1257':
+                       case 'windows-1257':
+                       case '1257':
+                               $return['encoding'] = 'Windows-1257';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Windows-specific Vietnamese
+                       case 'cp1258':
+                       case 'windows-1258':
+                       case '1258':
+                               $return['encoding'] = 'Windows-1258';
+                               $return['use_iconv'] = true;
+                               break;
+
+                       // Default to UTF-8
+                       default:
+                               $return['encoding'] = 'UTF-8';
+                               $return['use_iconv'] = true;
+                               $return['use_mbstring'] = true;
+                               break;
+               }
+               
+               // Then, return it.
+               return $return;
+       }
+       
+       function get_curl_version()
+       {
+               $curl = 0;
+               if (is_array(curl_version()))
+               {
+                       $curl = curl_version();
+                       $curl = $curl['version'];
+               }
+               else
+               {
+                       $curl = curl_version();
+                       $curl = explode(' ', $curl);
+                       $curl = explode('/', $curl[0]);
+                       $curl = $curl[1];
+               }
+               return $curl;
+       }
+       
+       function is_a_class($class1, $class2)
+       {
+               if (class_exists($class1))
+               {
+                       $classes = array(strtolower($class1));
+                       while ($class1 = get_parent_class($class1))
+                       {
+                               $classes[] = strtolower($class1);
+                       }
+                       return in_array(strtolower($class2), $classes);
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+class SimplePie_Locator
+{
+       var $useragent;
+       var $timeout;
+       var $file;
+       var $local;
+       var $elsewhere;
+       var $file_class = 'SimplePie_File';
+       
+       function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File')
+       {
+               if (!is_a($file, 'SimplePie_File'))
+               {
+                       $this->file = new $this->file_class($file, $timeout, $useragent);
+               }
+               else
+               {
+                       $this->file =& $file;
+               }
+               $this->file_class = $file_class;
+               $this->useragent = $useragent;
+               $this->timeout = $timeout;
+       }
+               
+       
+       function find()
+       {               
+               if ($this->is_feed($this->file))
+               {
+                       return $this->file->url;
+               }
+               
+               $autodiscovery = $this->autodiscovery($this->file);
+               if ($autodiscovery)
+               {
+                       return $autodiscovery;
+               }
+               
+               if ($this->get_links($this->file))
+               {
+                       if (!empty($this->local))
+                       {
+                               $extension_local = $this->extension($this->local);
+                               if ($extension_local)
+                               {
+                                       return $extension_local;
+                               }
+                       
+                               $body_local = $this->body($this->local);
+                               if ($body_local)
+                               {
+                                       return $body_local;
+                               }
+                       }
+                       
+                       if (!empty($this->elsewhere))
+                       {
+                               $extension_elsewhere = $this->extension($this->elsewhere);
+                               if ($extension_elsewhere)
+                               {
+                                       return $extension_elsewhere;
+                               }
+                               
+                               $body_elsewhere = $this->body($this->elsewhere);
+                               if ($body_elsewhere)
+                               {
+                                       return $body_elsewhere;
+                               }
+                       }
+               }
+               return false;
+       }
+       
+       function is_feed(&$file)
+       {
+               if (!is_a($file, 'SimplePie_File'))
+               {
+                       if (isset($this))
+                       {
+                               $file2 = new $this->file_class($file, $this->timeout, 5, null, $this->useragent);
+                       }
+                       else
+                       {
+                               $file2 = new $this->file_class($file);
+                       }
+                       $file2->body();
+                       $file2->close();
+               }
+               else
+               {
+                       $file2 =& $file;
+               }
+               $body = preg_replace('/<\!-(.*)-\>/msiU', '', $file2->body());
+               if (preg_match('/<(\w+\:)?rss/msiU', $body) || preg_match('/<(\w+\:)?RDF/mi', $body) || preg_match('/<(\w+\:)?feed/mi', $body))
+               {
+                       return true;
+               }
+               return false;
+       }
+       
+       function autodiscovery(&$file)
+       {
+               $links = SimplePie_Misc::get_element('link', $file->body());
+               $done = array();
+               foreach ($links as $link)
+               {
+                       if (!empty($link['attribs']['TYPE']['data']) && !empty($link['attribs']['HREF']['data']) && !empty($link['attribs']['REL']['data']))
+                       {
+                               $rel = preg_split('/\s+/', strtolower(trim($link['attribs']['REL']['data'])));
+                               $type = preg_match('/^(application\/rss\+xml|application\/atom\+xml|application\/rdf\+xml|application\/xml\+rss|application\/xml\+atom|application\/xml\+rdf|application\/xml|application\/x\.atom\+xml|text\/xml)(;|$)/msiU', trim($link['attribs']['TYPE']['data']));
+                               $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['HREF']['data']), $this->file->url);
+                               if (!in_array($href, $done) && in_array('alternate', $rel) && $type)
+                               {
+                                       $feed = $this->is_feed($href);
+                                       if ($feed)
+                                       {
+                                               return $href;
+                                       }
+                               }
+                               $done[] = $href;
+                       }
+               }
+               return false;
+       }
+       
+       function get_links(&$file)
+       {
+               $links = SimplePie_Misc::get_element('a', $file->body());
+               foreach ($links as $link)
+               {
+                       if (!empty($link['attribs']['HREF']['data']))
+                       {
+                               $href = trim($link['attribs']['HREF']['data']);
+                               $parsed = SimplePie_Misc::parse_url($href);
+                               if (empty($parsed['scheme']) || $parsed['scheme'] != 'javascript')
+                               {
+                                       $current = SimplePie_Misc::parse_url($this->file->url);
+                                       if (empty($parsed['authority']) || $parsed['authority'] == $current['authority'])
+                                       {
+                                               $this->local[] = SimplePie_Misc::absolutize_url($href, $this->file->url);
+                                       }
+                                       else
+                                       {
+                                               $this->elsewhere[] = SimplePie_Misc::absolutize_url($href, $this->file->url);
+                                       }
+                               }
+                       }
+               }
+               if (!empty($this->local))
+               {
+                       $this->local = array_unique($this->local);
+               }
+               if (!empty($this->elsewhere))
+               {
+                       $this->elsewhere = array_unique($this->elsewhere);
+               }
+               if (!empty($this->local) || !empty($this->elsewhere))
+               {
+                       return true;
+               }
+               return false;
+       }
+       
+       function extension(&$array)
+       {
+               foreach ($array as $key => $value)
+               {
+                       $value = SimplePie_Misc::absolutize_url($value, $this->file->url);
+                       if (in_array(strrchr($value, '.'), array('.rss', '.rdf', '.atom', '.xml')))
+                       {
+                               if ($this->is_feed($value))
+                               {
+                                       return $value;
+                               }
+                               else
+                               {
+                                       unset($array[$key]);
+                               }
+                       }
+               }
+               return false;
+       }
+       
+       function body(&$array)
+       {
+               foreach ($array as $key => $value)
+               {
+                       $value = SimplePie_Misc::absolutize_url($value, $this->file->url);
+                       if (preg_match('/(rss|rdf|atom|xml)/i', $value))
+                       {
+                               if ($this->is_feed($value))
+                               {
+                                       return $value;
+                               }
+                               else
+                               {
+                                       unset($array[$key]);
+                               }
+                       }
+               }
+               return false;
+       }
+}
+
+class SimplePie_Parser
+{      
+       var $encoding;
+       var $data;
+       var $namespaces = array('xml' => 'HTTP://WWW.W3.ORG/XML/1998/NAMESPACE', 'atom' => 'ATOM', 'rss2' => 'RSS', 'rdf' => 'RDF', 'rss1' => 'RSS', 'dc' => 'DC', 'xhtml' => 'XHTML', 'content' => 'CONTENT');
+       var $xml;
+       var $error_code;
+       var $error_string;
+       var $current_line;
+       var $current_column;
+       var $current_byte;
+       var $tag_name;
+       var $inside_item;
+       var $item_number = 0;
+       var $inside_channel;
+       var $author_number= 0;
+       var $category_number = 0;
+       var $enclosure_number = 0;
+       var $link_number = 0;
+       var $item_link_number = 0;
+       var $inside_image;
+       var $attribs;
+       var $is_first;
+       var $inside_author;
+       var $depth_inside_item = 0;
+               
+       function SimplePie_Parser($data, $encoding, $return_xml = false)
+       {
+               $this->encoding = $encoding;
+               
+               // Strip BOM:
+               // UTF-32 Big Endian BOM
+               if (strpos($data, sprintf('%c%c%c%c', 0x00, 0x00, 0xFE, 0xFF)) === 0)
+               {
+                       $data = substr($data, 4);
+               }
+               // UTF-32 Little Endian BOM
+               else if (strpos($data, sprintf('%c%c%c%c', 0xFF, 0xFE, 0x00, 0x00)) === 0)
+               {
+                       $data = substr($data, 4);
+               }
+               // UTF-16 Big Endian BOM
+               else if (strpos($data, sprintf('%c%c', 0xFE, 0xFF)) === 0)
+               {
+                       $data = substr($data, 2);
+               }
+               // UTF-16 Little Endian BOM
+               else if (strpos($data, sprintf('%c%c', 0xFF, 0xFE)) === 0)
+               {
+                       $data = substr($data, 2);
+               }
+               // UTF-8 BOM
+               else if (strpos($data, sprintf('%c%c%c', 0xEF, 0xBB, 0xBF)) === 0)
+               {
+                       $data = substr($data, 3);
+               }
+               
+               // Make sure the XML prolog is sane and has the correct encoding
+               if (preg_match('/^<\?xml(.*)?>/msiU', $data, $prolog))
+               {
+                       $data = substr_replace($data, '', 0, strlen($prolog[0]));
+               }
+               $data = "<?xml version='1.0' encoding='$encoding'?>\n" . $data;
+               
+               // Put some data into CDATA blocks
+               // If we're RSS
+               if ((stristr($data, '<rss') || preg_match('/<([a-z0-9]+\:)?RDF/mi', $data)) && (preg_match('/<([a-z0-9]+\:)?channel/mi', $data) || preg_match('/<([a-z0-9]+\:)?item/mi', $data)))
+               {
+                       $sp_elements = array(
+                               'author',
+                               'category',
+                               'copyright', 
+                               'description',
+                               'docs', 
+                               'generator', 
+                               'guid', 
+                               'language',
+                               'lastBuildDate', 
+                               'link',
+                               'managingEditor', 
+                               'pubDate', 
+                               'title',
+                               'url', 
+                               'webMaster', 
+                       );
+               }
+               // Or if we're Atom
+               else
+               {
+                       $sp_elements = array(
+                               'content',
+                               'copyright',
+                               'name',
+                               'subtitle',
+                               'summary',
+                               'tagline',
+                               'title',
+                       );
+               }
+               foreach ($sp_elements as $full)
+               {
+                       $data = preg_replace_callback("/<($full)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'))*)\s*(\/>|>(.*)<\/$full>)/msiU", array(&$this, 'add_cdata'), $data);
+               }
+               foreach ($sp_elements as $full)
+               {
+                       // Deal with CDATA within CDATA (this can be caused by us inserting CDATA above)
+                       $data = preg_replace_callback("/<($full)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'))*)\s*(\/>|><!\[CDATA\[(.*)\]\]><\/$full>)/msiU", array(&$this, 'cdata_in_cdata'), $data);
+               }
+               
+               // Return the XML, if so desired
+               if ($return_xml)
+               {
+                       $this->data =& $data;
+                       return;
+               }
+               
+               // Create the parser
+               $this->xml = xml_parser_create_ns($encoding);
+               xml_parser_set_option($this->xml, XML_OPTION_SKIP_WHITE, 1);
+               xml_set_object($this->xml, $this);
+               xml_set_character_data_handler($this->xml, 'data_handler');
+               xml_set_element_handler($this->xml, 'start_handler', 'end_handler');
+               xml_set_start_namespace_decl_handler($this->xml, 'start_name_space');
+               xml_set_end_namespace_decl_handler($this->xml, 'end_name_space');
+               
+               // Parse!
+               if (!xml_parse($this->xml, $data))
+               {
+                       $this->data = null;
+                       $this->error_code = xml_get_error_code($this->xml);
+                       $this->error_string = xml_error_string($this->error_code);
+               }
+               $this->current_line = xml_get_current_line_number($this->xml);
+               $this->current_column = xml_get_current_column_number($this->xml);
+               $this->current_byte = xml_get_current_byte_index($this->xml);
+               xml_parser_free($this->xml);
+               return;
+       }
+       
+       function add_cdata($match)
+       {
+               if (isset($match[10]))
+               {
+                       return "<$match[1]$match[2]><![CDATA[$match[10]]]></$match[1]>";
+               }
+               return $match[0];
+       }
+
+       function cdata_in_cdata($match)
+       {
+               if (isset($match[10]))
+               {
+                       $match[10] = preg_replace_callback('/<!\[CDATA\[(.*)\]\]>/msiU', array(&$this, 'real_cdata_in_cdata'), $match[10]);
+                       return "<$match[1]$match[2]><![CDATA[$match[10]]]></$match[1]>";
+               }
+               return $match[0];
+       }
+       
+       function real_cdata_in_cdata($match)
+       {
+               return htmlspecialchars($match[1], ENT_NOQUOTES);
+       }
+       
+       function do_add_content(&$array, $data)
+       {
+               if ($this->is_first)
+               {
+                       $array['data'] = $data;
+                       $array['attribs'] = $this->attribs;
+               }
+               else
+               {
+                       $array['data'] .= $data;
+               }
+       }
+       
+       function start_handler($parser, $name, $attribs)
+       {
+               $this->tag_name = $name;
+               $this->attribs = $attribs;
+               $this->is_first = true;
+
+               if ($this->inside_item)
+               {
+                       $this->depth_inside_item++;
+               }
+
+               switch ($this->tag_name)
+               {
+                       case 'ITEM':
+                       case $this->namespaces['rss2'] . ':ITEM':
+                       case $this->namespaces['rss1'] . ':ITEM':
+                       case 'ENTRY':
+                       case $this->namespaces['atom'] . ':ENTRY':
+                               $this->inside_item = true;
+                               $this->do_add_content($this->data['items'][$this->item_number], '');
+                               break;
+
+                       case 'CHANNEL':
+                       case $this->namespaces['rss2'] . ':CHANNEL':
+                       case $this->namespaces['rss1'] . ':CHANNEL':
+                               $this->inside_channel = true;
+                               break;
+
+                       case 'RSS':
+                       case $this->namespaces['rss2'] . ':RSS':
+                               $this->data['feedinfo']['type'] = 'RSS';
+                               $this->do_add_content($this->data['feeddata'], '');
+                               if (!empty($attribs['VERSION']))
+                               {
+                                       $this->data['feedinfo']['version'] = trim($attribs['VERSION']);
+                               }
+                               break;
+
+                       case $this->namespaces['rdf'] . ':RDF':
+                               $this->data['feedinfo']['type'] = 'RSS';
+                               $this->do_add_content($this->data['feeddata'], '');
+                               $this->data['feedinfo']['version'] = 1;
+                               break;
+
+                       case 'FEED':
+                       case $this->namespaces['atom'] . ':FEED':
+                               $this->data['feedinfo']['type'] = 'Atom';
+                               $this->do_add_content($this->data['feeddata'], '');
+                               if (!empty($attribs['VERSION']))
+                               {
+                                       $this->data['feedinfo']['version'] = trim($attribs['VERSION']);
+                               }
+                               break;
+
+                       case 'IMAGE':
+                       case $this->namespaces['rss2'] . ':IMAGE':
+                       case $this->namespaces['rss1'] . ':IMAGE':
+                               if ($this->inside_channel)
+                               {
+                                       $this->inside_image = true;
+                               }
+                               break;
+               }
+
+               if (!empty($this->data['feedinfo']['type']) && $this->data['feedinfo']['type'] == 'Atom' && ($this->tag_name == 'AUTHOR' || $this->tag_name == $this->namespaces['atom'] . ':AUTHOR'))
+               {
+                       $this->inside_author = true;
+               }
+               $this->data_handler($this->xml, '');
+       }
+
+       function data_handler($parser, $data)
+       {
+               if ($this->inside_item && $this->depth_inside_item == 1)
+               {
+                       switch ($this->tag_name)
+                       {
+                               case 'TITLE':
+                               case $this->namespaces['rss1'] . ':TITLE':
+                               case $this->namespaces['rss2'] . ':TITLE':
+                               case $this->namespaces['atom'] . ':TITLE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['title'], $data);
+                                       break;
+                                       
+                               case $this->namespaces['dc'] . ':TITLE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['dc:title'], $data);
+                                       break;
+
+                               case 'CONTENT':
+                               case $this->namespaces['atom'] . ':CONTENT':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['content'], $data);
+                                       break;
+
+                               case $this->namespaces['content'] . ':ENCODED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['encoded'], $data);
+                                       break;
+
+                               case 'SUMMARY':
+                               case $this->namespaces['atom'] . ':SUMMARY':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['summary'], $data);
+                                       break;
+
+                               case 'LONGDESC':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['longdesc'], $data);
+                                       break;
+
+                               case 'DESCRIPTION':
+                               case $this->namespaces['rss1'] . ':DESCRIPTION':
+                               case $this->namespaces['rss2'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['description'], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['dc:description'], $data);
+                                       break;
+
+                               case 'LINK':
+                               case $this->namespaces['rss1'] . ':LINK':
+                               case $this->namespaces['rss2'] . ':LINK':
+                               case $this->namespaces['atom'] . ':LINK':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['link'][$this->item_link_number], $data);
+                                       break;
+                                       
+                               case 'ENCLOSURE':
+                               case $this->namespaces['rss1'] . ':ENCLOSURE':
+                               case $this->namespaces['rss2'] . ':ENCLOSURE':
+                               case $this->namespaces['atom'] . ':ENCLOSURE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['enclosure'][$this->enclosure_number], $data);
+                                       break;
+
+                               case 'GUID':
+                               case $this->namespaces['rss1'] . ':GUID':
+                               case $this->namespaces['rss2'] . ':GUID':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['guid'], $data);
+                                       break;
+
+                               case 'ID':
+                               case $this->namespaces['atom'] . ':ID':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['id'], $data);
+                                       break;
+
+                               case 'PUBDATE':
+                               case $this->namespaces['rss1'] . ':PUBDATE':
+                               case $this->namespaces['rss2'] . ':PUBDATE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['pubdate'], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':DATE':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['dc:date'], $data);
+                                       break;
+
+                               case 'ISSUED':
+                               case $this->namespaces['atom'] . ':ISSUED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['issued'], $data);
+                                       break;
+
+                               case 'PUBLISHED':
+                               case $this->namespaces['atom'] . ':PUBLISHED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['published'], $data);
+                                       break;
+
+                               case 'MODIFIED':
+                               case $this->namespaces['atom'] . ':MODIFIED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['modified'], $data);
+                                       break;
+
+                               case 'UPDATED':
+                               case $this->namespaces['atom'] . ':UPDATED':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['updated'], $data);
+                                       break;
+       
+                               case 'CATEGORY':
+                               case $this->namespaces['rss1'] . ':CATEGORY':
+                               case $this->namespaces['rss2'] . ':CATEGORY':
+                               case $this->namespaces['atom'] . ':CATEGORY':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['category'][$this->category_number], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':SUBJECT':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['subject'][$this->category_number], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':CREATOR':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['creator'][$this->author_number], $data);
+                                       break;
+
+                               case 'AUTHOR':
+                               case $this->namespaces['rss1'] . ':AUTHOR':
+                               case $this->namespaces['rss2'] . ':AUTHOR':
+                                       $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['rss'], $data);
+                                       break;
+                       }
+
+                       if ($this->inside_author)
+                       {
+                               switch ($this->tag_name)
+                               {
+                                       case 'NAME':
+                                       case $this->namespaces['atom'] . ':NAME':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['name'], $data);
+                                               break;
+
+                                       case 'URL':
+                                       case $this->namespaces['atom'] . ':URL':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['url'], $data);
+                                               break;
+
+                                       case 'URI':
+                                       case $this->namespaces['atom'] . ':URI':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['uri'], $data);
+                                               break;
+
+                                       case 'HOMEPAGE':
+                                       case $this->namespaces['atom'] . ':HOMEPAGE':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['homepage'], $data);
+                                               break;
+
+                                       case 'EMAIL':
+                                       case $this->namespaces['atom'] . ':EMAIL':
+                                               $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['email'], $data);
+                                               break;
+                               }
+                       }
+               }
+
+               else if (($this->inside_channel && !$this->inside_image) || (isset($this->data['feedinfo']['type']) && $this->data['feedinfo']['type'] == 'Atom'))
+               {
+                       switch ($this->tag_name)
+                       {
+                               case 'TITLE':
+                               case $this->namespaces['rss1'] . ':TITLE':
+                               case $this->namespaces['rss2'] . ':TITLE':
+                               case $this->namespaces['atom'] . ':TITLE':
+                                       $this->do_add_content($this->data['info']['title'], $data);
+                                       break;
+
+                               case 'LINK':
+                               case $this->namespaces['rss1'] . ':LINK':
+                               case $this->namespaces['rss2'] . ':LINK':
+                               case $this->namespaces['atom'] . ':LINK':
+                                       $this->do_add_content($this->data['info']['link'][$this->link_number], $data);
+                                       break;
+
+                               case 'DESCRIPTION':
+                               case $this->namespaces['rss1'] . ':DESCRIPTION':
+                               case $this->namespaces['rss2'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['info']['description'], $data);
+                                       break;
+
+                               case $this->namespaces['dc'] . ':DESCRIPTION':
+                                       $this->do_add_content($this->data['info']['dc:description'], $data);
+                                       break;
+
+                               case 'TAGLINE':
+                               case $this->namespaces['atom'] . ':TAGLINE':
+                                       $this->do_add_content($this->data['info']['tagline'], $data);
+                                       break;
+
+                               case 'SUBTITLE':
+                               case $this->namespaces['atom'] . ':SUBTITLE':
+                                       $this->do_add_content($this->data['info']['subtitle'], $data);
+                                       break;
+
+                               case 'COPYRIGHT':
+                               case $this->namespaces['rss1'] . ':COPYRIGHT':
+                               case $this->namespaces['rss2'] . ':COPYRIGHT':
+                               case $this->namespaces['atom'] . ':COPYRIGHT':
+                                       $this->do_add_content($this->data['info']['copyright'], $data);
+                                       break;
+
+                               case 'LANGUAGE':
+                               case $this->namespaces['rss1'] . ':LANGUAGE':
+                               case $this->namespaces['rss2'] . ':LANGUAGE':
+                                       $this->do_add_content($this->data['info']['language'], $data);
+                                       break;
+                               
+                               case 'LOGO':
+                               case $this->namespaces['atom'] . ':LOGO':
+                                       $this->do_add_content($this->data['info']['logo'], $data);
+                                       break;
+                               
+                       }
+               }
+
+               else if ($this->inside_channel && $this->inside_image)
+               {
+                       switch ($this->tag_name)
+                       {
+                               case 'TITLE':
+                               case $this->namespaces['rss1'] . ':TITLE':
+                               case $this->namespaces['rss2'] . ':TITLE':
+                                       $this->do_add_content($this->data['info']['image']['title'], $data);
+                                       break;
+
+                               case 'URL':
+                               case $this->namespaces['rss1'] . ':URL':
+                               case $this->namespaces['rss2'] . ':URL':
+                                       $this->do_add_content($this->data['info']['image']['url'], $data);
+                                       break;
+
+                               case 'LINK':
+                               case $this->namespaces['rss1'] . ':LINK':
+                               case $this->namespaces['rss2'] . ':LINK':
+                                       $this->do_add_content($this->data['info']['image']['link'], $data);
+                                       break;
+
+                               case 'WIDTH':
+                               case $this->namespaces['rss1'] . ':WIDTH':
+                               case $this->namespaces['rss2'] . ':WIDTH':
+                                       $this->do_add_content($this->data['info']['image']['width'], $data);
+                                       break;
+
+                               case 'HEIGHT':
+                               case $this->namespaces['rss1'] . ':HEIGHT':
+                               case $this->namespaces['rss2'] . ':HEIGHT':
+                                       $this->do_add_content($this->data['info']['image']['height'], $data);
+                                       break;
+                       }
+               }
+               $this->is_first = false;
+       }
+
+       function end_handler($parser, $name)
+       {
+               $this->tag_name = '';
+               switch ($name)
+               {
+                       case 'ITEM':
+                       case $this->namespaces['rss1'] . ':ITEM':
+                       case $this->namespaces['rss2'] . ':ITEM':
+                       case 'ENTRY':
+                       case $this->namespaces['atom'] . ':ENTRY':
+                               $this->inside_item = false;
+                               $this->item_number++;
+                               $this->author_number = 0;
+                               $this->category_number = 0;
+                               $this->enclosure_number = 0;
+                               $this->item_link_number = 0;
+                               break;
+
+                       case 'CHANNEL':
+                       case $this->namespaces['rss1'] . ':CHANNEL':
+                       case $this->namespaces['rss2'] . ':CHANNEL':
+                               $this->inside_channel = false;
+                               break;
+
+                       case 'IMAGE':
+                       case $this->namespaces['rss1'] . ':IMAGE':
+                       case $this->namespaces['rss2'] . ':IMAGE':
+                               $this->inside_image = false;
+                               break;
+
+                       case 'AUTHOR':
+                       case $this->namespaces['rss1'] . ':AUTHOR':
+                       case $this->namespaces['rss2'] . ':AUTHOR':
+                       case $this->namespaces['atom'] . ':AUTHOR':
+                               $this->author_number++;
+                               $this->inside_author = false;
+                               break;
+
+                       case 'CATEGORY':
+                       case $this->namespaces['rss1'] . ':CATEGORY':
+                       case $this->namespaces['rss2'] . ':CATEGORY':
+                       case $this->namespaces['atom'] . ':CATEGORY':
+                       case $this->namespaces['dc'] . ':SUBJECT':
+                               $this->category_number++;
+                               break;
+                       
+                       case 'ENCLOSURE':
+                       case $this->namespaces['rss1'] . ':ENCLOSURE':
+                       case $this->namespaces['rss2'] . ':ENCLOSURE':
+                               $this->enclosure_number++;
+                               break;
+                               
+                       case 'LINK':
+                       case $this->namespaces['rss1'] . ':LINK':
+                       case $this->namespaces['rss2'] . ':LINK':
+                       case $this->namespaces['atom'] . ':LINK':
+                               if ($this->inside_item)
+                               {
+                                       $this->item_link_number++;
+                               }
+                               else
+                               {
+                                       $this->link_number++;
+                               }
+                               break;
+               }
+               if ($this->inside_item)
+               {
+                       $this->depth_inside_item--;
+               }
+       }
+       
+       function start_name_space($parser, $prefix, $uri = null)
+       {
+               $prefix = strtoupper($prefix);
+               $uri = strtoupper($uri);
+               if ($prefix == 'ATOM' || $uri == 'HTTP://WWW.W3.ORG/2005/ATOM' || $uri == 'HTTP://PURL.ORG/ATOM/NS#')
+               {
+                       $this->namespaces['atom'] = $uri;
+               }
+               else if ($prefix == 'RSS2' || $uri == 'HTTP://BACKEND.USERLAND.COM/RSS2')
+               {
+                       $this->namespaces['rss2'] = $uri;
+               }
+               else if ($prefix == 'RDF' || $uri == 'HTTP://WWW.W3.ORG/1999/02/22-RDF-SYNTAX-NS#')
+               {
+                       $this->namespaces['rdf'] = $uri;
+               }
+               else if ($prefix == 'RSS' || $uri == 'HTTP://PURL.ORG/RSS/1.0/' || $uri == 'HTTP://MY.NETSCAPE.COM/RDF/SIMPLE/0.9/')
+               {
+                       $this->namespaces['rss1'] = $uri;
+               }
+               else if ($prefix == 'DC' || $uri == 'HTTP://PURL.ORG/DC/ELEMENTS/1.1/')
+               {
+                       $this->namespaces['dc'] = $uri;
+               }
+               else if ($prefix == 'XHTML' || $uri == 'HTTP://WWW.W3.ORG/1999/XHTML')
+               {
+                       $this->namespaces['xhtml'] = $uri;
+                       $this->xhtml_prefix = $prefix;
+               }
+               else if ($prefix == 'CONTENT' || $uri == 'HTTP://PURL.ORG/RSS/1.0/MODULES/CONTENT/')
+               {
+                       $this->namespaces['content'] = $uri;
+               }
+       }
+       
+       function end_name_space($parser, $prefix)
+       {
+               if ($key = array_search(strtoupper($prefix), $this->namespaces))
+               {
+                       if ($key == 'atom')
+                       {
+                               $this->namespaces['atom'] = 'ATOM';
+                       }
+                       else if ($key == 'rss2')
+                       {
+                               $this->namespaces['rss2'] = 'RSS';
+                       }
+                       else if ($key == 'rdf')
+                       {
+                               $this->namespaces['rdf'] = 'RDF';
+                       }
+                       else if ($key == 'rss1')
+                       {
+                               $this->namespaces['rss1'] = 'RSS';
+                       }
+                       else if ($key == 'dc')
+                       {
+                               $this->namespaces['dc'] = 'DC';
+                       }
+                       else if ($key == 'xhtml')
+                       {
+                               $this->namespaces['xhtml'] = 'XHTML';
+                               $this->xhtml_prefix = 'XHTML';
+                       }
+                       else if ($key == 'content')
+                       {
+                               $this->namespaces['content'] = 'CONTENT';
+                       }
+               }
+       }
+}
+
+class SimplePie_Sanitize
+{
+       // Private vars
+       var $feedinfo;
+       var $info;
+       var $items;
+       var $feed_xmlbase;
+       var $item_xmlbase;
+       var $attribs;
+       var $cached_entities;
+       var $cache_convert_entities;
+       
+       // Options
+       var $remove_div = true;
+       var $strip_ads = false;
+       var $replace_headers = false;
+       var $bypass_image_hotlink = false;
+       var $bypass_image_hotlink_page = false;
+       var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+       var $encode_instead_of_strip = false;
+       var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur');
+       var $input_encoding = 'UTF-8';
+       var $output_encoding = 'UTF-8';
+       var $item_class = 'SimplePie_Item';
+       var $author_class = 'SimplePie_Author';
+       var $enclosure_class = 'SimplePie_Enclosure';
+       
+       function remove_div($enable = true)
+       {
+               $this->remove_div = (bool) $enable;
+       }
+       
+       function strip_ads($enable = false)
+       {
+               $this->strip_ads = (bool) $enable;
+       }
+       
+       function replace_headers($enable = false)
+       {
+               $this->enable_headers = (bool) $enable;
+       }
+       
+       function bypass_image_hotlink($get = false)
+       {
+               if ($get)
+               {
+                       $this->bypass_image_hotlink = (string) $get;
+               }
+               else
+               {
+                       $this->bypass_image_hotlink = false;
+               }
+       }
+       
+       function bypass_image_hotlink_page($page = false)
+       {
+               if ($page)
+               {
+                       $this->bypass_image_hotlink_page = (string) $page;
+               }
+               else
+               {
+                       $this->bypass_image_hotlink_page = false;
+               }
+       }
+       
+       function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
+       {
+               if ($tags)
+               {
+                       if (is_array($tags))
+                       {
+                               $this->strip_htmltags = $tags;
+                       }
+                       else
+                       {
+                               $this->strip_htmltags = explode(',', $tags);
+                       }
+               }
+               else
+               {
+                       $this->strip_htmltags = false;
+               }
+       }
+       
+       function encode_instead_of_strip($enable = false)
+       {
+               $this->encode_instead_of_strip = (bool) $enable;
+       }
+       
+       function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur'))
+       {
+               if ($attribs)
+               {
+                       if (is_array($attribs))
+                       {
+                               $this->strip_attributes = $attribs;
+                       }
+                       else
+                       {
+                               $this->strip_attributes = explode(',', $attribs);
+                       }
+               }
+               else
+               {
+                       $this->strip_attributes = false;
+               }
+       }
+       
+       function input_encoding($encoding = 'UTF-8')
+       {
+               $this->input_encoding = (string) $encoding;
+       }
+       
+       function output_encoding($encoding = 'UTF-8')
+       {
+               $this->output_encoding = (string) $encoding;
+       }
+       
+       function set_item_class($class = 'SimplePie_Item')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Item'))
+               {
+                       $this->item_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_author_class($class = 'SimplePie_Author')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Author'))
+               {
+                       $this->author_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function set_enclosure_class($class = 'SimplePie_Enclosure')
+       {
+               if (SimplePie_Misc::is_a_class($class, 'SimplePie_Enclosure'))
+               {
+                       $this->enclosure_class = $class;
+                       return true;
+               }
+               return false;
+       }
+       
+       function parse_data_array(&$data, $url)
+       {               
+               // Feed Info (Type and Version)
+               if (!empty($data['feedinfo']['type']))
+               {
+                       $this->feedinfo = $data['feedinfo'];
+               }
+               
+               // Feed level xml:base
+               if (!empty($data['feeddata']['attribs']['XML:BASE']))
+               {
+                       $this->feed_xmlbase = $data['feeddata']['attribs']['XML:BASE'];
+               }
+               else if (!empty($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
+               {
+                       $this->feed_xmlbase = $data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'];
+               }
+               // FeedBurner feeds use alternate link
+               else if (strpos($url, 'http://feeds.feedburner.com/') !== 0)
+               {
+                       $this->feed_xmlbase = SimplePie_Misc::parse_url($url);
+                       if (empty($this->feed_xmlbase['authority']))
+                       {
+                               $this->feed_xmlbase = preg_replace('/^' . preg_quote(realpath($_SERVER['DOCUMENT_ROOT']), '/') . '/', '', realpath($url));
+                       }
+                       else
+                       {
+                               $this->feed_xmlbase = $url;
+                       }
+               }
+               
+               
+               // Feed link(s)
+               if (!empty($data['info']['link']))
+               {
+                       foreach ($data['info']['link'] as $link)
+                       {
+                               if (empty($link['attribs']['REL']))
+                               {
+                                       $rel = 'alternate';
+                               }
+                               else
+                               {
+                                       $rel = strtolower($link['attribs']['REL']);
+                               }
+                               if ($rel == 'enclosure')
+                               {
+                                       $href = null;
+                                       $type = null;
+                                       $length = null;
+                                       if (!empty($link['data']))
+                                       {
+                                               $href = $this->sanitize($link['data'], $link['attribs'], true);
+                                       }
+                                       else if (!empty($link['attribs']['HREF']))
+                                       {
+                                               $href = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                       }
+                                       if (!empty($link['attribs']['TYPE'])) {
+                                               $type = $this->sanitize($link['attribs']['TYPE'], $link['attribs']);
+                                       }
+                                       if (!empty($link['attribs']['LENGTH'])) {
+                                               $length = $this->sanitize($link['attribs']['LENGTH'], $link['attribs']);
+                                       }
+                                       $this->info['link']['enclosure'][] = new $this->enclosure_class($href, $type, $length);
+                               }
+                               else
+                               {
+                                       if (!empty($link['data']))
+                                       {
+                                               $this->info['link'][$rel][] = $this->sanitize($link['data'], $link['attribs'], true);
+                                       }
+                                       else if (!empty($link['attribs']['HREF']))
+                                       {
+                                               $this->info['link'][$rel][] = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                       }
+                               }
+                       }
+               }
+               
+               // Use the first alternate link if we don't have any feed xml:base
+               if (empty($this->feed_xmlbase) && !empty($this->info['link']['alternate'][0]))
+               {
+                       $this->feed_xmlbase = $this->info['link']['alternate'][0];
+               }
+               
+               // Feed Title
+               if (!empty($data['info']['title']['data']))
+               {
+                       $this->info['title'] = $this->sanitize($data['info']['title']['data'], $data['info']['title']['attribs']);
+               }
+               
+               // Feed Descriptions
+               if (!empty($data['info']['description']['data']))
+               {
+                       $this->info['description'] = $this->sanitize($data['info']['description']['data'], $data['info']['description']['attribs'], false, true);
+               }
+               if (!empty($data['info']['dc:description']['data']))
+               {
+                       $this->info['dc:description'] = $this->sanitize($data['info']['dc:description']['data'], $data['info']['dc:description']['attribs']);
+               }
+               if (!empty($data['info']['tagline']['data']))
+               {
+                       $this->info['tagline'] = $this->sanitize($data['info']['tagline']['data'], $data['info']['tagline']['attribs']);
+               }
+               if (!empty($data['info']['subtitle']['data']))
+               {
+                       $this->info['subtitle'] = $this->sanitize($data['info']['subtitle']['data'], $data['info']['subtitle']['attribs']);
+               }
+               
+               // Feed Language
+               if (!empty($data['info']['language']['data']))
+               {
+                       $this->info['language'] = $this->sanitize($data['info']['language']['data'], $data['info']['language']['attribs']);
+               }
+               if (!empty($data['feeddata']['attribs']['XML:LANG']))
+               {
+                       $this->info['xml:lang'] = $this->sanitize($data['feeddata']['attribs']['XML:LANG'], null);
+               }
+               else if (!empty($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:LANG']))
+               {
+                       $this->info['xml:lang'] = $this->sanitize($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:LANG'], null);
+               }
+               
+               // Feed Copyright
+               if (!empty($data['info']['copyright']['data']))
+               {
+                       $this->info['copyright'] = $this->sanitize($data['info']['copyright']['data'], $data['info']['copyright']['attribs']);
+               }
+               
+               // Feed Image
+               if (!empty($data['info']['image']['title']['data']))
+               {
+                       $this->info['image']['title'] = $this->sanitize($data['info']['image']['title']['data'], $data['info']['image']['title']['attribs']);
+               }
+               if (!empty($data['info']['image']['url']['data']))
+               {
+                       $this->info['image']['url'] = $this->sanitize($data['info']['image']['url']['data'], $data['info']['image']['url']['attribs'], true);
+               }
+               if (!empty($data['info']['logo']['data']))
+               {
+                       $this->info['image']['logo'] = $this->sanitize($data['info']['logo']['data'], $data['info']['logo']['attribs'], true);
+               }
+               if (!empty($data['info']['image']['link']['data']))
+               {
+                       $this->info['image']['link'] = $this->sanitize($data['info']['image']['link']['data'], $data['info']['image']['link']['attribs'], true);
+               }
+               if (!empty($data['info']['image']['width']['data']))
+               {
+                       $this->info['image']['width'] = $this->sanitize($data['info']['image']['width']['data'], $data['info']['image']['width']['attribs']);
+               }
+               if (!empty($data['info']['image']['height']['data']))
+               {
+                       $this->info['image']['height'] = $this->sanitize($data['info']['image']['height']['data'], $data['info']['image']['height']['attribs']);
+               }
+               
+               // Items
+               if (!empty($data['items']))
+               {
+                       foreach ($data['items'] as $key => $item)
+                       {
+                               $newitem = null;
+                               
+                               // Item level xml:base
+                               if (!empty($item['attribs']['XML:BASE']))
+                               {
+                                       $this->item_xmlbase = SimplePie_Misc::absolutize_url($item['attribs']['XML:BASE'], $this->feed_xmlbase);
+                               }
+                               else if (!empty($item['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
+                               {
+                                       $this->item_xmlbase = SimplePie_Misc::absolutize_url($item['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'], $this->feed_xmlbase);
+                               }
+                               else
+                               {
+                                       $this->item_xmlbase = null;
+                               }
+       
+                               // Title
+                               if (!empty($item['title']['data'])) {
+                                       $newitem['title'] = $this->sanitize($item['title']['data'], $item['title']['attribs']);
+                               }
+                               if (!empty($item['dc:title']['data']))
+                               {
+                                       $newitem['dc:title'] = $this->sanitize($item['dc:title']['data'], $item['dc:title']['attribs']);
+                               }
+                               
+                               // Description
+                               if (!empty($item['content']['data']))
+                               {
+                                       $newitem['content'] = $this->sanitize($item['content']['data'], $item['content']['attribs']);
+                               }
+                               if (!empty($item['encoded']['data']))
+                               {
+                                       $newitem['encoded'] = $this->sanitize($item['encoded']['data'], $item['encoded']['attribs']);
+                               }
+                               if (!empty($item['summary']['data']))
+                               {
+                                       $newitem['summary'] = $this->sanitize($item['summary']['data'], $item['summary']['attribs']);
+                               }
+                               if (!empty($item['description']['data']))
+                               {
+                                       $newitem['description'] = $this->sanitize($item['description']['data'], $item['description']['attribs'], false, true);
+                               }
+                               if (!empty($item['dc:description']['data']))
+                               {
+                                       $newitem['dc:description'] = $this->sanitize($item['dc:description']['data'], $item['dc:description']['attribs']);
+                               }
+                               if (!empty($item['longdesc']['data']))
+                               {
+                                       $newitem['longdesc'] = $this->sanitize($item['longdesc']['data'], $item['longdesc']['attribs']);
+                               }
+               
+                               // Link(s)
+                               if (!empty($item['link']))
+                               {
+                                       foreach ($item['link'] as $link)
+                                       {
+                                               if (empty($link['attribs']['REL']))
+                                               {
+                                                       $rel = 'alternate';
+                                               }
+                                               else
+                                               {
+                                                       $rel = strtolower($link['attribs']['REL']);
+                                               }
+                                               if ($rel == 'enclosure')
+                                               {
+                                                       $href = null;
+                                                       $type = null;
+                                                       $length = null;
+                                                       if (!empty($link['data']))
+                                                       {
+                                                               $href = $this->sanitize($link['data'], $link['attribs'], true);
+                                                       }
+                                                       else if (!empty($link['attribs']['HREF']))
+                                                       {
+                                                               $href = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                                       }
+                                                       if (!empty($link['attribs']['TYPE'])) {
+                                                               $type = $this->sanitize($link['attribs']['TYPE'], $link['attribs']);
+                                                       }
+                                                       if (!empty($link['attribs']['LENGTH'])) {
+                                                               $length = $this->sanitize($link['attribs']['LENGTH'], $link['attribs']);
+                                                       }
+                                                       if (!empty($href))
+                                                       {
+                                                               $newitem['link'][$rel][] = new $this->enclosure_class($href, $type, $length);
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       if (!empty($link['data']))
+                                                       {
+                                                               $newitem['link'][$rel][] = $this->sanitize($link['data'], $link['attribs'], true);
+                                                       }
+                                                       else if (!empty($link['attribs']['HREF']))
+                                                       {
+                                                               $newitem['link'][$rel][] = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
+                                                       }
+                                               }
+                                       }
+                               }
+                               
+                               // Enclosure(s)
+                               if (!empty($item['enclosure']))
+                               {
+                                       foreach ($item['enclosure'] as $enclosure)
+                                       {
+                                               if (!empty($enclosure['attribs']['URL']))
+                                               {
+                                                       $type = null;
+                                                       $length = null;
+                                                       $href = $this->sanitize($enclosure['attribs']['URL'], $enclosure['attribs'], true);
+                                                       if (!empty($enclosure['attribs']['TYPE']))
+                                                       {
+                                                               $type = $this->sanitize($enclosure['attribs']['TYPE'], $enclosure['attribs']);
+                                                       }
+                                                       if (!empty($enclosure['attribs']['LENGTH']))
+                                                       {
+                                                               $length = $this->sanitize($enclosure['attribs']['LENGTH'], $enclosure['attribs']);
+                                                       }
+                                                       $newitem['enclosures'][] = new $this->enclosure_class($href, $type, $length);
+                                               }
+                                       }
+                               }
+                               
+                               // ID
+                               if (!empty($item['guid']['data']))
+                               {
+                                       if (!empty($item['guid']['attribs']['ISPERMALINK']) && strtolower($item['guid']['attribs']['ISPERMALINK']) == 'false')
+                                       {
+                                               $newitem['guid']['permalink'] = false;
+                                       }
+                                       else
+                                       {
+                                               $newitem['guid']['permalink'] = true;
+                                       }
+                                       $newitem['guid']['data'] = $this->sanitize($item['guid']['data'], $item['guid']['attribs']);
+                               }
+                               if (!empty($item['id']['data']))
+                               {
+                                       $newitem['id'] = $this->sanitize($item['id']['data'], $item['id']['attribs']);
+                               }
+                               
+                               // Date
+                               if (!empty($item['pubdate']['data']))
+                               {
+                                       $newitem['pubdate'] = $this->parse_date($this->sanitize($item['pubdate']['data'], $item['pubdate']['attribs']));
+                               }
+                               if (!empty($item['dc:date']['data']))
+                               {
+                                       $newitem['dc:date'] = $this->parse_date($this->sanitize($item['dc:date']['data'], $item['dc:date']['attribs']));
+                               }
+                               if (!empty($item['issued']['data']))
+                               {
+                                       $newitem['issued'] = $this->parse_date($this->sanitize($item['issued']['data'], $item['issued']['attribs']));
+                               }
+                               if (!empty($item['published']['data']))
+                               {
+                                       $newitem['published'] = $this->parse_date($this->sanitize($item['published']['data'], $item['published']['attribs']));
+                               }
+                               if (!empty($item['modified']['data']))
+                               {
+                                       $newitem['modified'] = $this->parse_date($this->sanitize($item['modified']['data'], $item['modified']['attribs']));
+                               }
+                               if (!empty($item['updated']['data']))
+                               {
+                                       $newitem['updated'] = $this->parse_date($this->sanitize($item['updated']['data'], $item['updated']['attribs']));
+                               }
+                               
+                               // Categories
+                               if (!empty($item['category']))
+                               {
+                                       foreach ($item['category'] as $category)
+                                       {
+                                               if (!empty($category['data']))
+                                               {
+                                                       $newitem['category'][] = $this->sanitize($category['data'], $category['attribs']);
+                                               }
+                                               else if (!empty($category['attribs']['TERM']))
+                                               {
+                                                       $newitem['term'][] = $this->sanitize($category['attribs']['TERM'], $category['attribs']);
+                                               }
+                                       }
+                               }
+                               if (!empty($item['subject']))
+                               {
+                                       foreach ($item['subject'] as $category)
+                                       {
+                                               if (!empty($category['data']))
+                                               {
+                                                       $newitem['subject'][] = $this->sanitize($category['data'], $category['attribs']);
+                                               }
+                                       }
+                               }
+                               
+                               // Author
+                               if (!empty($item['creator']))
+                               {
+                                       foreach ($item['creator'] as $creator)
+                                       {
+                                               if (!empty($creator['data']))
+                                               {
+                                                       $newitem['creator'][] = new $this->author_class($this->sanitize($creator['data'], $creator['attribs']), null, null);
+                                               }
+                                       }
+                               }
+                               if (!empty($item['author']))
+                               {
+                                       foreach ($item['author'] as $author)
+                                       {
+                                               $name = null;
+                                               $link = null;
+                                               $email = null;
+                                               if (!empty($author['rss']))
+                                               {
+                                                       $sane = $this->sanitize($author['rss']['data'], $author['rss']['attribs']);
+                                                       if (preg_match('/(.*)@(.*) \((.*)\)/msiU', $sane, $matches)) {
+                                                               $name = trim($matches[3]);
+                                                               $email = trim("$matches[1]@$matches[2]");
+                                                       } else {
+                                                               $email = $sane;
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       if (!empty($author['name']))
+                                                       {
+                                                               $name = $this->sanitize($author['name']['data'], $author['name']['attribs']);
+                                                       }
+                                                       if (!empty($author['url']))
+                                                       {
+                                                               $link = $this->sanitize($author['url']['data'], $author['url']['attribs'], true);
+                                                       }
+                                                       else if (!empty($author['uri']))
+                                                       {
+                                                               $link = $this->sanitize($author['uri']['data'], $author['uri']['attribs'], true);
+                                                       }
+                                                       else if (!empty($author['homepage']))
+                                                       {
+                                                               $link = $this->sanitize($author['homepage']['data'], $author['homepage']['attribs'], true);
+                                                       }
+                                                       if (!empty($author['email'])) {
+                                                               $email = $this->sanitize($author['email']['data'], $author['email']['attribs']);
+                                                       }
+                                               }
+                                               $newitem['author'][] = new $this->author_class($name, $link, $email);
+                                       }
+                               }
+                               unset($data['items'][$key]);
+                               $this->items[] = new $this->item_class($newitem);
+                       }
+               }
+       }
+       
+       function sanitize($data, $attribs, $is_url = false, $force_decode = false)
+       {
+               $this->attribs = $attribs;
+               if (isset($this->feedinfo['type']) && $this->feedinfo['type'] == 'Atom')
+               {
+                       if ((!empty($attribs['MODE']) && $attribs['MODE'] == 'base64') || (!empty($attribs['TYPE']) && $attribs['TYPE'] == 'application/octet-stream'))
+                       {
+                               $data = trim($data);
+                               $data = base64_decode($data);
+                       }
+                       else if ((!empty($attribs['MODE']) && $attribs['MODE'] == 'escaped' || !empty($attribs['TYPE']) && ($attribs['TYPE'] == 'html' || $attribs['TYPE'] == 'text/html')))
+                       {
+                               $data = $this->entities_decode($data);
+                       }
+                       if (!empty($attribs['TYPE']) && ($attribs['TYPE'] == 'xhtml' || $attribs['TYPE'] == 'application/xhtml+xml'))
+                       {
+                               if ($this->remove_div)
+                               {
+                                       $data = preg_replace('/<div( .*)?>/msiU', '', strrev(preg_replace('/>vid\/</i', '', strrev($data), 1)), 1);
+                               }
+                               else
+                               {
+                                       $data = preg_replace('/<div( .*)?>/msiU', '<div>', $data, 1);
+                               }
+                               $data = $this->convert_entities($data);
+                       }
+               }
+               else
+               {
+                       $data = $this->convert_entities($data);
+               }
+               if ($force_decode)
+               {
+                       $data = $this->entities_decode($data);
+               }
+               $data = trim($data);
+               $data = preg_replace('/<\!--([^-]|-[^-])*-->/msiU', '', $data);
+
+               // If Strip Ads is enabled, strip them.
+               if ($this->strip_ads)
+               {
+                       $data = preg_replace('/<a (.*)href=(.*)click\.phdo\?s=(.*)<\/a>/msiU', '', $data); // Pheedo links (tested with Dooce.com)
+                       $data = preg_replace('/<p(.*)>(.*)<a href="http:\/\/ad.doubleclick.net\/jump\/(.*)<\/p>/msiU', '', $data); // Doubleclick links (tested with InfoWorld.com)
+                       $data = preg_replace('/<p><map (.*)name=(.*)google_ad_map(.*)<\/p>/msiU', '', $data); // Google AdSense for Feeds (tested with tuaw.com).
+                       // Feedflare, from Feedburner
+               }
+
+               // Replace H1, H2, and H3 tags with the less important H4 tags.
+               // This is because on a site, the more important headers might make sense,
+               // but it most likely doesn't fit in the context of RSS-in-a-webpage.
+               if ($this->replace_headers)
+               {
+                       $data = preg_replace('/<h[1-3]((\s*((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(.*)))*)\s*>/msiU', '<h4\\1>', $data);
+                       $data = preg_replace('/<\/h[1-3]>/i', '</h4>', $data);
+               }
+
+               if ($is_url)
+               {
+                       $data = $this->replace_urls($data, true);
+               }
+               else
+               {
+                       $data = preg_replace_callback('/<(\S+)((\s*((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(.*)))*)\s*(\/>|>(.*)<\/\S+>)/msiU', array(&$this, 'replace_urls'), $data);
+               }
+
+               // If Bypass Image Hotlink is enabled, rewrite all the image tags.
+               if ($this->bypass_image_hotlink)
+               {
+                       $images = SimplePie_Misc::get_element('img', $data);
+                       foreach ($images as $img)
+                       {
+                               if (!empty($img['attribs']['SRC']['data']))
+                               {
+                                       $pre = '';
+                                       if ($this->bypass_image_hotlink_page)
+                                       {
+                                               $pre = $this->bypass_image_hotlink_page;
+                                       }
+                                       $pre .= "?$this->bypass_image_hotlink=";
+                                       $img['attribs']['SRC']['data'] = $pre . rawurlencode(strtr($img['attribs']['SRC']['data'], array_flip(get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES))));
+                                       $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+                               }
+                       }
+               }
+
+               // Strip out HTML tags and attributes that might cause various security problems.
+               // Based on recommendations by Mark Pilgrim at:
+               // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
+               if ($this->strip_htmltags)
+               {
+                       foreach ($this->strip_htmltags as $tag)
+                       {
+                               $data = preg_replace_callback("/<($tag)((\s*((\w+:)?\w+)(\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))?)*)\s*(\/>|>(.*)<\/($tag)((\s*((\w+:)?\w+)(\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))?)*)\s*>)/msiU", array(&$this, 'do_strip_htmltags'), $data);
+                       }
+               }
+
+               if ($this->strip_attributes)
+               {
+                       foreach ($this->strip_attributes as $attrib)
+                       {
+                               $data = preg_replace('/ '. trim($attrib) .'=("|&quot;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\'|&apos;|<|>|\+|{|})*("|&quot;)/i', '', $data);
+                               $data = preg_replace('/ '. trim($attrib) .'=(\'|&apos;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|"|&quot;|<|>|\+|{|})*(\'|&apos;)/i', '', $data);
+                               $data = preg_replace('/ '. trim($attrib) .'=(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\+|{|})*/i', '', $data);
+                       }
+               }
+               
+               // Convert encoding
+               $data = SimplePie_Misc::change_encoding($data, $this->input_encoding, $this->output_encoding);
+
+               return $data;
+       }
+       
+       function do_strip_htmltags($match)
+       {
+               if ($this->encode_instead_of_strip)
+               {
+                       if (isset($match[12]) && !in_array(strtolower($match[1]), array('script', 'style')))
+                       {
+                               return "&lt;$match[1]$match[2]&gt;$match[12]&lt;/$match[1]&gt;";
+                       }
+                       else if (isset($match[12]))
+                       {
+                               return "&lt;$match[1]$match[2]&gt;&lt;/$match[1]&gt;";
+                       }
+                       else
+                       {
+                               return "&lt;$match[1]$match[2]/&gt;";
+                       }
+               }
+               else
+               {
+                       if (isset($match[12]) && !in_array(strtolower($match[1]), array('script', 'style')))
+                       {
+                               return $match[12];
+                       }
+                       else
+                       {
+                               return '';
+                       }
+               }
+       }
+       
+       function replace_urls($data, $raw_url = false)
+       {
+               if (!empty($this->attribs['XML:BASE']))
+               {
+                       $xmlbase = $attribs['XML:BASE'];
+               }
+               else if (!empty($this->attribs['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
+               {
+                       $xmlbase = $this->attribs['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'];
+               }
+               if (!empty($xmlbase))
+               {
+                       if (!empty($this->item_xmlbase))
+                       {
+                               $xmlbase = SimplePie_Misc::absolutize_url($xmlbase, $this->item_xmlbase);
+                       }
+                       else
+                       {
+                               $xmlbase = SimplePie_Misc::absolutize_url($xmlbase, $this->feed_xmlbase);
+                       }
+               }
+               else if (!empty($this->item_xmlbase))
+               {
+                       $xmlbase = $this->item_xmlbase;
+               }
+               else
+               {
+                       $xmlbase = $this->feed_xmlbase;
+               }
+               
+               if ($raw_url)
+               {
+                       return SimplePie_Misc::absolutize_url($data, $xmlbase);
+               }
+               else
+               {
+                       $attributes = array(
+                               'background',
+                               'href',
+                               'src',
+                               'longdesc',
+                               'usemap',
+                               'codebase',
+                               'data',
+                               'classid',
+                               'cite',
+                               'action',
+                               'profile',
+                               'for'
+                       );
+                       foreach ($attributes as $attribute)
+                       {
+                               if (preg_match("/$attribute='(.*)'/siU", $data[0], $attrib) || preg_match("/$attribute=\"(.*)\"/siU", $data[0], $attrib) || preg_match("/$attribute=(.*)[ |\/|>]/siU", $data[0], $attrib))
+                               {
+                                       $new_tag = str_replace($attrib[1], SimplePie_Misc::absolutize_url($attrib[1], $xmlbase), $attrib[0]);
+                                       $data[0] = str_replace($attrib[0], $new_tag, $data[0]);
+                               }
+                       }
+                       return $data[0];
+               }
+       }
+       
+       function entities_decode($data)
+       {
+               return preg_replace_callback('/&(#)?(x)?([0-9a-z]+);/mi', array(&$this, 'do_entites_decode'), $data);
+       }
+       
+       function do_entites_decode($data)
+       {
+               if (isset($this->cached_entities[$data[0]]))
+               {
+                       return $this->cached_entities[$data[0]];
+               }
+               else
+               {
+                       $return = SimplePie_Misc::change_encoding(html_entity_decode($data[0], ENT_QUOTES), 'ISO-8859-1', $this->input_encoding);
+                       if ($return == $data[0])
+                       {
+                               $return = SimplePie_Misc::change_encoding(preg_replace_callback('/&#([x]?[0-9a-f]+);/mi', array(&$this, 'replace_num_entity'), $data[0]), 'UTF-8', $this->input_encoding);
+                       }
+                       $this->cached_entities[$data[0]] = $return;
+                       return $return;
+               }
+       }
+       
+       function convert_entities($data)
+       {
+               return preg_replace_callback('/&#(x)?([0-9a-z]+);/mi', array(&$this, 'do_convert_entities'), $data);
+       }
+       
+       function do_convert_entities($data)
+       {
+               if (isset($this->cache_convert_entities[$data[0]]))
+               {
+                       return $this->cache_convert_entities[$data[0]];
+               }
+               else if (isset($this->cached_entities[$data[0]]))
+               {
+                       $return = htmlentities($this->cached_entities[$data[0]], ENT_QUOTES, 'UTF-8');
+               }
+               else
+               {
+                       $return = htmlentities(preg_replace_callback('/&#([x]?[0-9a-f]+);/mi', array(&$this, 'replace_num_entity'), $data[0]), ENT_QUOTES, 'UTF-8');
+               }
+               $this->cache_convert_entities[$data[0]] = $return;
+               return $return;
+       }
+
+       /*
+        * Escape numeric entities
+        * From a PHP Manual note (on html_entity_decode())
+        * Copyright (c) 2005 by "php dot net at c dash ovidiu dot tk", 
+        * "emilianomartinezluque at yahoo dot com" and "hurricane at cyberworldz dot org".
+        *
+        * This material may be distributed only subject to the terms and conditions set forth in 
+        * the Open Publication License, v1.0 or later (the latest version is presently available at 
+        * http://www.opencontent.org/openpub/).
+        */
+       function replace_num_entity($ord)
+       {
+               $ord = $ord[1];
+               if (preg_match('/^x([0-9a-f]+)$/i', $ord, $match))
+               {
+                       $ord = hexdec($match[1]);
+               }
+               else
+               {
+                       $ord = intval($ord);
+               }
+               
+               $no_bytes = 0;
+               $byte = array();
+               if ($ord < 128)
+               {
+                       return chr($ord);
+               }
+               if ($ord < 2048)
+               {
+                       $no_bytes = 2;
+               }
+               else if ($ord < 65536)
+               {
+                       $no_bytes = 3;
+               }
+               else if ($ord < 1114112)
+               {
+                       $no_bytes = 4;
+               }
+               else
+               {
+                       return;
+               }
+               switch ($no_bytes)
+               {
+                       case 2:
+                               $prefix = array(31, 192);
+                               break;
+                               
+                       case 3:
+                               $prefix = array(15, 224);
+                               break;
+                               
+                       case 4:
+                               $prefix = array(7, 240);
+                               break;
+               }
+               
+               for ($i = 0; $i < $no_bytes; $i++)
+               {
+                       $byte[$no_bytes-$i-1] = (($ord & (63 * pow(2,6*$i))) / pow(2,6*$i)) & 63 | 128;
+               }
+               $byte[0] = ($byte[0] & $prefix[0]) | $prefix[1];
+               
+               $ret = '';
+               for ($i = 0; $i < $no_bytes; $i++)
+               {
+                       $ret .= chr($byte[$i]);
+               }
+               return $ret;
+       }
+       
+       function parse_date($date)
+       {
+               $military_timezone = array('A' => '-0100', 'B' => '-0200', 'C' => '-0300', 'D' => '-0400', 'E' => '-0500', 'F' => '-0600', 'G' => '-0700', 'H' => '-0800', 'I' => '-0900', 'K' => '-1000', 'L' => '-1100', 'M' => '-1200', 'N' => '+0100', 'O' => '+0200', 'P' => '+0300', 'Q' => '+0400', 'R' => '+0500', 'S' => '+0600', 'T' => '+0700', 'U' => '+0800', 'V' => '+0900', 'W' => '+1000', 'X' => '+1100', 'Y' => '+1200', 'Z' => '-0000');
+               $north_american_timezone = array('GMT' => '-0000', 'EST' => '-0500', 'EDT' => '-0400', 'CST' => '-0600', 'CDT' => '-0500', 'MST' => '-0700', 'MDT' => '-0600', 'PST' => '-0800', 'PDT' => '-0700');
+               if (preg_match('/([0-9]{2,4})-?([0-9]{2})-?([0-9]{2})T([0-9]{2}):?([0-9]{2})(:?([0-9]{2}(\.[0-9]*)?))?(UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[a-z]|(\\+|-)[0-9]{4}|(\\+|-)[0-9]{2}:[0-9]{2})?/i', $date, $matches))
+               {
+                       if (!isset($matches[7]))
+                       {
+                               $matches[7] = '';
+                       }
+                       if (!isset($matches[9]))
+                       {
+                               $matches[9] = '';
+                       }
+                       $matches[7] = str_pad(round($matches[7]), 2, '0', STR_PAD_LEFT);
+                       switch (strlen($matches[9]))
+                       {
+                               case 0:
+                                       $timezone = '';
+                                       break;
+                                       
+                               case 1:
+                                       $timezone = $military_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 2:
+                                       $timezone = '-0000';
+                                       break;
+                               
+                               case 3:
+                                       $timezone = $north_american_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 5:
+                                       $timezone = $matches[9];
+                                       break;
+                               
+                               case 6:
+                                       $timezone = substr_replace($matches[9], '', 3, 1);
+                                       break;
+                       }
+                       $date = strtotime("$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:$matches[7] $timezone");
+               }
+               else if (preg_match('/([0-9]{1,2})\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s*([0-9]{2}|[0-9]{4})\s*([0-9]{2}):([0-9]{2})(:([0-9]{2}(\.[0-9]*)?))?\s*(UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[a-z]|(\\+|-)[0-9]{4}|(\\+|-)[0-9]{2}:[0-9]{2})?/i', $date, $matches))
+               {
+                       $three_month = array('Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12);
+                       $month = $three_month[$matches[2]];
+                       if (strlen($matches[3]) == 2)
+                       {
+                               $year = ($matches[3] < 70) ? "20$matches[3]" : "19$matches[3]";
+                       }
+                       else
+                       {
+                               $year = $matches[3];
+                       }
+                       if (!isset($matches[7]))
+                       {
+                               $matches[7] = '';
+                       }
+                       if (!isset($matches[9]))
+                       {
+                               $matches[9] = '';
+                       }
+                       $second = str_pad(round($matches[7]), 2, '0', STR_PAD_LEFT);
+                       switch (strlen($matches[9]))
+                       {
+                               case 0:
+                                       $timezone = '';
+                                       break;
+                                       
+                               case 1:
+                                       $timezone = $military_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 2:
+                                       $timezone = '-0000';
+                                       break;
+                               
+                               case 3:
+                                       $timezone = $north_american_timezone[strtoupper($matches[9])];
+                                       break;
+                               
+                               case 5:
+                                       $timezone = $matches[9];
+                                       break;
+                               
+                               case 6:
+                                       $timezone = substr_replace($matches[9], '', 3, 1);
+                                       break;
+                       }
+                       $date = strtotime("$year-$month-$matches[1] $matches[4]:$matches[5]:$second $timezone");
+               }
+               else
+               {
+                       $date = strtotime($date);
+               }
+               if ($date !== false && $date !== -1)
+               {
+                       return $date;
+               }
+               else
+               {
+                       return false;
+               }
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/oldwiki/images/0/01/Translate-72.png b/oldwiki/images/0/01/Translate-72.png
new file mode 100644 (file)
index 0000000..ccaeceb
Binary files /dev/null and b/oldwiki/images/0/01/Translate-72.png differ
diff --git a/oldwiki/images/0/05/Screenshot-openbox-pretty-jrnorman.png b/oldwiki/images/0/05/Screenshot-openbox-pretty-jrnorman.png
new file mode 100644 (file)
index 0000000..3a57f75
Binary files /dev/null and b/oldwiki/images/0/05/Screenshot-openbox-pretty-jrnorman.png differ
diff --git a/oldwiki/images/0/0c/GkrellShoot_09-28-08_235222.png b/oldwiki/images/0/0c/GkrellShoot_09-28-08_235222.png
new file mode 100644 (file)
index 0000000..87db210
Binary files /dev/null and b/oldwiki/images/0/0c/GkrellShoot_09-28-08_235222.png differ
diff --git a/oldwiki/images/0/0e/OpenBox_on_blackPanther.jpg b/oldwiki/images/0/0e/OpenBox_on_blackPanther.jpg
new file mode 100644 (file)
index 0000000..2db2e40
Binary files /dev/null and b/oldwiki/images/0/0e/OpenBox_on_blackPanther.jpg differ
diff --git a/oldwiki/images/0/0f/NewClearlooksTheme.png b/oldwiki/images/0/0f/NewClearlooksTheme.png
new file mode 100644 (file)
index 0000000..714bb64
Binary files /dev/null and b/oldwiki/images/0/0f/NewClearlooksTheme.png differ
diff --git a/oldwiki/images/1/12/GkrellShoot_09-28-08_235222.jpg b/oldwiki/images/1/12/GkrellShoot_09-28-08_235222.jpg
new file mode 100644 (file)
index 0000000..c74e67a
Binary files /dev/null and b/oldwiki/images/1/12/GkrellShoot_09-28-08_235222.jpg differ
diff --git a/oldwiki/images/1/13/Arch-openbox-rss.jpg b/oldwiki/images/1/13/Arch-openbox-rss.jpg
new file mode 100644 (file)
index 0000000..32d18d1
Binary files /dev/null and b/oldwiki/images/1/13/Arch-openbox-rss.jpg differ
diff --git a/oldwiki/images/1/15/Openbox_130308.png b/oldwiki/images/1/15/Openbox_130308.png
new file mode 100644 (file)
index 0000000..621f539
Binary files /dev/null and b/oldwiki/images/1/15/Openbox_130308.png differ
diff --git a/oldwiki/images/1/16/Flx-2007-08-08.3.png b/oldwiki/images/1/16/Flx-2007-08-08.3.png
new file mode 100644 (file)
index 0000000..8cdc16b
Binary files /dev/null and b/oldwiki/images/1/16/Flx-2007-08-08.3.png differ
diff --git a/oldwiki/images/1/17/OgMaciel_20070607.png b/oldwiki/images/1/17/OgMaciel_20070607.png
new file mode 100644 (file)
index 0000000..f67d512
Binary files /dev/null and b/oldwiki/images/1/17/OgMaciel_20070607.png differ
diff --git a/oldwiki/images/1/19/My_openbox.jpg b/oldwiki/images/1/19/My_openbox.jpg
new file mode 100644 (file)
index 0000000..cb33d5b
Binary files /dev/null and b/oldwiki/images/1/19/My_openbox.jpg differ
diff --git a/oldwiki/images/1/1a/New.png b/oldwiki/images/1/1a/New.png
new file mode 100644 (file)
index 0000000..81e9ed2
Binary files /dev/null and b/oldwiki/images/1/1a/New.png differ
diff --git a/oldwiki/images/1/1a/Screenshot-43.png b/oldwiki/images/1/1a/Screenshot-43.png
new file mode 100644 (file)
index 0000000..0803f1d
Binary files /dev/null and b/oldwiki/images/1/1a/Screenshot-43.png differ
diff --git a/oldwiki/images/1/1b/2009-11-12-181109_576x360_scrot-thumb.png b/oldwiki/images/1/1b/2009-11-12-181109_576x360_scrot-thumb.png
new file mode 100644 (file)
index 0000000..4e12102
Binary files /dev/null and b/oldwiki/images/1/1b/2009-11-12-181109_576x360_scrot-thumb.png differ
diff --git a/oldwiki/images/2/22/Obox.png b/oldwiki/images/2/22/Obox.png
new file mode 100644 (file)
index 0000000..998301a
Binary files /dev/null and b/oldwiki/images/2/22/Obox.png differ
diff --git a/oldwiki/images/2/23/050810141937.jpg b/oldwiki/images/2/23/050810141937.jpg
new file mode 100644 (file)
index 0000000..fcbd35b
Binary files /dev/null and b/oldwiki/images/2/23/050810141937.jpg differ
diff --git a/oldwiki/images/2/23/Openboxscreenshot2.png b/oldwiki/images/2/23/Openboxscreenshot2.png
new file mode 100644 (file)
index 0000000..e20a55d
Binary files /dev/null and b/oldwiki/images/2/23/Openboxscreenshot2.png differ
diff --git a/oldwiki/images/2/24/Scrot_smoon.png b/oldwiki/images/2/24/Scrot_smoon.png
new file mode 100644 (file)
index 0000000..268dfb2
Binary files /dev/null and b/oldwiki/images/2/24/Scrot_smoon.png differ
diff --git a/oldwiki/images/2/26/HostnameInTitlebar.png b/oldwiki/images/2/26/HostnameInTitlebar.png
new file mode 100644 (file)
index 0000000..5c03dc1
Binary files /dev/null and b/oldwiki/images/2/26/HostnameInTitlebar.png differ
diff --git a/oldwiki/images/2/27/NewParentrelativeTextures.png b/oldwiki/images/2/27/NewParentrelativeTextures.png
new file mode 100644 (file)
index 0000000..871fd1c
Binary files /dev/null and b/oldwiki/images/2/27/NewParentrelativeTextures.png differ
diff --git a/oldwiki/images/2/27/Openboxshot2010.01.29-1.jpg b/oldwiki/images/2/27/Openboxshot2010.01.29-1.jpg
new file mode 100644 (file)
index 0000000..75906e8
Binary files /dev/null and b/oldwiki/images/2/27/Openboxshot2010.01.29-1.jpg differ
diff --git a/oldwiki/images/2/2b/Openbox-inko.png b/oldwiki/images/2/2b/Openbox-inko.png
new file mode 100644 (file)
index 0000000..ef9164f
Binary files /dev/null and b/oldwiki/images/2/2b/Openbox-inko.png differ
diff --git a/oldwiki/images/3/33/Screen_hf.png b/oldwiki/images/3/33/Screen_hf.png
new file mode 100644 (file)
index 0000000..398dfd1
Binary files /dev/null and b/oldwiki/images/3/33/Screen_hf.png differ
diff --git a/oldwiki/images/3/33/Spatial-vi-cheatsheet2-WUXGA.png b/oldwiki/images/3/33/Spatial-vi-cheatsheet2-WUXGA.png
new file mode 100644 (file)
index 0000000..698e14b
Binary files /dev/null and b/oldwiki/images/3/33/Spatial-vi-cheatsheet2-WUXGA.png differ
diff --git a/oldwiki/images/3/39/KDE-Openbox.png b/oldwiki/images/3/39/KDE-Openbox.png
new file mode 100644 (file)
index 0000000..685e07d
Binary files /dev/null and b/oldwiki/images/3/39/KDE-Openbox.png differ
diff --git a/oldwiki/images/3/3c/Bsoftgrey20100508.jpg b/oldwiki/images/3/3c/Bsoftgrey20100508.jpg
new file mode 100644 (file)
index 0000000..077e54e
Binary files /dev/null and b/oldwiki/images/3/3c/Bsoftgrey20100508.jpg differ
diff --git a/oldwiki/images/3/3e/NewCombinedClientListMenu.png b/oldwiki/images/3/3e/NewCombinedClientListMenu.png
new file mode 100644 (file)
index 0000000..8845915
Binary files /dev/null and b/oldwiki/images/3/3e/NewCombinedClientListMenu.png differ
diff --git a/oldwiki/images/4/41/Greenw.png b/oldwiki/images/4/41/Greenw.png
new file mode 100644 (file)
index 0000000..47c3f06
Binary files /dev/null and b/oldwiki/images/4/41/Greenw.png differ
diff --git a/oldwiki/images/4/41/Screen.jpg b/oldwiki/images/4/41/Screen.jpg
new file mode 100644 (file)
index 0000000..42919e2
Binary files /dev/null and b/oldwiki/images/4/41/Screen.jpg differ
diff --git a/oldwiki/images/4/46/Crunchbang_openbox.png b/oldwiki/images/4/46/Crunchbang_openbox.png
new file mode 100644 (file)
index 0000000..640ee34
Binary files /dev/null and b/oldwiki/images/4/46/Crunchbang_openbox.png differ
diff --git a/oldwiki/images/4/47/Tobu-pro-9-11-menu.jpg b/oldwiki/images/4/47/Tobu-pro-9-11-menu.jpg
new file mode 100644 (file)
index 0000000..53b08e8
Binary files /dev/null and b/oldwiki/images/4/47/Tobu-pro-9-11-menu.jpg differ
diff --git a/oldwiki/images/4/49/GNOMELogout.png b/oldwiki/images/4/49/GNOMELogout.png
new file mode 100644 (file)
index 0000000..9b9c71c
Binary files /dev/null and b/oldwiki/images/4/49/GNOMELogout.png differ
diff --git a/oldwiki/images/4/49/Ktop.jpg b/oldwiki/images/4/49/Ktop.jpg
new file mode 100644 (file)
index 0000000..9e151fc
Binary files /dev/null and b/oldwiki/images/4/49/Ktop.jpg differ
diff --git a/oldwiki/images/4/49/Spatial-vi-cheatsheet-WUXGA.png b/oldwiki/images/4/49/Spatial-vi-cheatsheet-WUXGA.png
new file mode 100644 (file)
index 0000000..2b46692
Binary files /dev/null and b/oldwiki/images/4/49/Spatial-vi-cheatsheet-WUXGA.png differ
diff --git a/oldwiki/images/4/4a/NewFocusDialog.png b/oldwiki/images/4/4a/NewFocusDialog.png
new file mode 100644 (file)
index 0000000..f96fc3b
Binary files /dev/null and b/oldwiki/images/4/4a/NewFocusDialog.png differ
diff --git a/oldwiki/images/4/4b/Lightbulb-72.png b/oldwiki/images/4/4b/Lightbulb-72.png
new file mode 100644 (file)
index 0000000..8d13570
Binary files /dev/null and b/oldwiki/images/4/4b/Lightbulb-72.png differ
diff --git a/oldwiki/images/4/4c/Ss_OnyxTheme.png b/oldwiki/images/4/4c/Ss_OnyxTheme.png
new file mode 100644 (file)
index 0000000..77f5df6
Binary files /dev/null and b/oldwiki/images/4/4c/Ss_OnyxTheme.png differ
diff --git a/oldwiki/images/4/4f/Vector.jpg b/oldwiki/images/4/4f/Vector.jpg
new file mode 100644 (file)
index 0000000..9594517
Binary files /dev/null and b/oldwiki/images/4/4f/Vector.jpg differ
diff --git a/oldwiki/images/5/50/Breakage.png b/oldwiki/images/5/50/Breakage.png
new file mode 100644 (file)
index 0000000..ebbfb85
Binary files /dev/null and b/oldwiki/images/5/50/Breakage.png differ
diff --git a/oldwiki/images/5/53/Sysrq-2006-11-03.png b/oldwiki/images/5/53/Sysrq-2006-11-03.png
new file mode 100644 (file)
index 0000000..85619d4
Binary files /dev/null and b/oldwiki/images/5/53/Sysrq-2006-11-03.png differ
diff --git a/oldwiki/images/5/55/Boxtubeshot012509.jpg b/oldwiki/images/5/55/Boxtubeshot012509.jpg
new file mode 100644 (file)
index 0000000..d810767
Binary files /dev/null and b/oldwiki/images/5/55/Boxtubeshot012509.jpg differ
diff --git a/oldwiki/images/5/55/My_underwood-and-powderfinger_type.jpg b/oldwiki/images/5/55/My_underwood-and-powderfinger_type.jpg
new file mode 100644 (file)
index 0000000..5a549f3
Binary files /dev/null and b/oldwiki/images/5/55/My_underwood-and-powderfinger_type.jpg differ
diff --git a/oldwiki/images/5/56/Cowsay.png b/oldwiki/images/5/56/Cowsay.png
new file mode 100644 (file)
index 0000000..9e3be6d
Binary files /dev/null and b/oldwiki/images/5/56/Cowsay.png differ
diff --git a/oldwiki/images/5/57/Irc-72.png b/oldwiki/images/5/57/Irc-72.png
new file mode 100644 (file)
index 0000000..8bbfa54
Binary files /dev/null and b/oldwiki/images/5/57/Irc-72.png differ
diff --git a/oldwiki/images/5/5c/Bildschirmfoto-1.jpg b/oldwiki/images/5/5c/Bildschirmfoto-1.jpg
new file mode 100644 (file)
index 0000000..893015f
Binary files /dev/null and b/oldwiki/images/5/5c/Bildschirmfoto-1.jpg differ
diff --git a/oldwiki/images/5/5c/Planetob.png b/oldwiki/images/5/5c/Planetob.png
new file mode 100644 (file)
index 0000000..e13761c
Binary files /dev/null and b/oldwiki/images/5/5c/Planetob.png differ
diff --git a/oldwiki/images/5/5d/Borosaiob_2007-06-06.png b/oldwiki/images/5/5d/Borosaiob_2007-06-06.png
new file mode 100644 (file)
index 0000000..e2aceb3
Binary files /dev/null and b/oldwiki/images/5/5d/Borosaiob_2007-06-06.png differ
diff --git a/oldwiki/images/5/5f/Openbox-scalable3.svg b/oldwiki/images/5/5f/Openbox-scalable3.svg
new file mode 100644 (file)
index 0000000..00cad6c
--- /dev/null
@@ -0,0 +1,2278 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="90"
+   inkscape:export-xdpi="90"
+   inkscape:export-filename="/home/david/Desktop/openboxy23.png"
+   width="48px"
+   height="48px"
+   id="svg11300"
+   sodipodi:version="0.32"
+   inkscape:version="0.45"
+   sodipodi:docbase="/home/david/Desktop"
+   sodipodi:docname="openbox-scalable3.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="TRUE">
+  <defs
+     id="defs3">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient15631">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop15633" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop15635" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient9428">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop9430" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop9432" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient8267">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop8269" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop8271" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3393">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3395" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3397" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient18400">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop18402" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop18404" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient13526">
+      <stop
+         style="stop-color:#00036c;stop-opacity:1;"
+         offset="0"
+         id="stop13528" />
+      <stop
+         style="stop-color:#00036c;stop-opacity:0;"
+         offset="1"
+         id="stop13530" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5721">
+      <stop
+         style="stop-color:#2d2d2d;stop-opacity:1;"
+         offset="0"
+         id="stop5723" />
+      <stop
+         style="stop-color:#2d2d2d;stop-opacity:0;"
+         offset="1"
+         id="stop5725" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3288">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3290" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3292" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4816">
+      <stop
+         style="stop-color:#204a87;stop-opacity:1;"
+         offset="0"
+         id="stop4818" />
+      <stop
+         style="stop-color:#2a6dcf;stop-opacity:1;"
+         offset="1"
+         id="stop4820" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4808">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4810" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4812" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3832">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3834" />
+      <stop
+         style="stop-color:#dadada;stop-opacity:1;"
+         offset="1"
+         id="stop3836" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4808"
+       id="radialGradient4814"
+       cx="17.368311"
+       cy="25.681942"
+       fx="17.368311"
+       fy="25.681942"
+       r="11.799845"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.385768,8.417746e-16,15.77468)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4808"
+       id="radialGradient4832"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.385768,9.076565e-15,15.77468)"
+       cx="17.368311"
+       cy="25.681942"
+       fx="17.368311"
+       fy="25.681942"
+       r="11.799845" />
+    <radialGradient
+       r="20.530962"
+       fy="35.878170"
+       fx="24.445690"
+       cy="35.878170"
+       cx="24.445690"
+       gradientTransform="matrix(2.049266,-1.696401e-32,0.000000,2.049266,-25.65002,-37.31089)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1366"
+       xlink:href="#linearGradient11520"
+       inkscape:collect="always" />
+    <radialGradient
+       r="6.5659914"
+       fy="44.565483"
+       fx="30.203562"
+       cy="44.565483"
+       cx="30.203562"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.220359e-14,29.48178)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1356"
+       xlink:href="#linearGradient11508"
+       inkscape:collect="always" />
+    <radialGradient
+       r="3.8335034"
+       fy="15.048258"
+       fx="27.577173"
+       cy="15.048258"
+       cx="27.577173"
+       gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1354"
+       xlink:href="#linearGradient11494"
+       inkscape:collect="always" />
+    <radialGradient
+       r="3.8335034"
+       fy="16.049133"
+       fx="27.577173"
+       cy="16.049133"
+       cx="27.577173"
+       gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1352"
+       xlink:href="#linearGradient11494"
+       inkscape:collect="always" />
+    <radialGradient
+       r="20.530962"
+       fy="35.878170"
+       fx="24.445690"
+       cy="35.878170"
+       cx="24.445690"
+       gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1350"
+       xlink:href="#linearGradient11520"
+       inkscape:collect="always" />
+    <radialGradient
+       r="6.5659914"
+       fy="44.565483"
+       fx="30.203562"
+       cy="44.565483"
+       cx="30.203562"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.353344e-14,29.48178)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1348"
+       xlink:href="#linearGradient11508"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11508"
+       id="radialGradient11532"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,3.185827e-15,29.48178)"
+       cx="30.203562"
+       cy="44.565483"
+       fx="30.203562"
+       fy="44.565483"
+       r="6.5659914" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11520"
+       id="radialGradient11526"
+       cx="24.445690"
+       cy="35.878170"
+       fx="24.445690"
+       fy="35.878170"
+       r="20.530962"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11508"
+       id="radialGradient11514"
+       cx="30.203562"
+       cy="44.565483"
+       fx="30.203562"
+       fy="44.565483"
+       r="6.5659914"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.166583e-14,29.48178)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11494"
+       id="radialGradient11504"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
+       cx="27.577173"
+       cy="16.049133"
+       fx="27.577173"
+       fy="16.049133"
+       r="3.8335034" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11494"
+       id="radialGradient11500"
+       cx="27.577173"
+       cy="15.048258"
+       fx="27.577173"
+       fy="15.048258"
+       r="3.8335034"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11399"
+       id="radialGradient11441"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.487395,0.000000,20.06483)"
+       cx="12.071428"
+       cy="39.142857"
+       fx="12.071428"
+       fy="39.142857"
+       r="8.5000000" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11415"
+       id="linearGradient11439"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-60.85714,0.428571)"
+       x1="13.267134"
+       y1="19.774456"
+       x2="26.758644"
+       y2="33.462429" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11415"
+       id="linearGradient11427"
+       gradientUnits="userSpaceOnUse"
+       x1="9.6957054"
+       y1="9.3458843"
+       x2="35.679932"
+       y2="39.033859"
+       gradientTransform="translate(-60.57143,0.000000)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11415"
+       id="linearGradient11425"
+       gradientUnits="userSpaceOnUse"
+       x1="15.828360"
+       y1="3.7744560"
+       x2="43.615788"
+       y2="34.462429"
+       gradientTransform="translate(-60.28571,-0.285714)" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient11399">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop11401" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop11403" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11415">
+      <stop
+         style="stop-color:#204a87;stop-opacity:0.0000000;"
+         offset="0.0000000"
+         id="stop11417" />
+      <stop
+         id="stop11423"
+         offset="0.50000000"
+         style="stop-color:#204a87;stop-opacity:1.0000000;" />
+      <stop
+         style="stop-color:#204a87;stop-opacity:0;"
+         offset="1"
+         id="stop11419" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient11494">
+      <stop
+         style="stop-color:#ef2929;stop-opacity:1;"
+         offset="0"
+         id="stop11496" />
+      <stop
+         style="stop-color:#ef2929;stop-opacity:0;"
+         offset="1"
+         id="stop11498" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient11508">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop11510" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop11512" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11520">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop11522" />
+      <stop
+         style="stop-color:#dcdcdc;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop11524" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4710">
+      <stop
+         id="stop4712"
+         offset="0"
+         style="stop-color:#f2f4f1;stop-opacity:1;" />
+      <stop
+         id="stop4714"
+         offset="1"
+         style="stop-color:#d3d7cf;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4728">
+      <stop
+         id="stop4730"
+         offset="0"
+         style="stop-color:#eeeeec;stop-opacity:1;" />
+      <stop
+         id="stop4732"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4750">
+      <stop
+         id="stop4752"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0.5"
+         id="stop4758" />
+      <stop
+         id="stop4754"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2461">
+      <stop
+         id="stop2463"
+         offset="0"
+         style="stop-color:#f8f8f7;stop-opacity:1;" />
+      <stop
+         id="stop2465"
+         offset="1"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="26.433243"
+       x2="44.571289"
+       y1="26.433243"
+       x1="37.551125"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2542"
+       xlink:href="#linearGradient3359"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="14.589205"
+       x2="48.08326"
+       y1="14.589205"
+       x1="35.253414"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2540"
+       xlink:href="#linearGradient3327"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="17.240854"
+       x2="47.651093"
+       y1="17.240854"
+       x1="35.176235"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2538"
+       xlink:href="#linearGradient3351"
+       inkscape:collect="always" />
+    <radialGradient
+       r="12"
+       fy="14.05233"
+       fx="35.973362"
+       cy="14.052355"
+       cx="35.973373"
+       gradientTransform="matrix(0.751224,2.345941e-6,-7.16423e-7,0.229414,8.256114,12.93155)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2536"
+       xlink:href="#linearGradient3417"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.375"
+       x2="47.5625"
+       y1="13.375"
+       x1="41.125"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2534"
+       xlink:href="#linearGradient2379"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="15.875"
+       x2="46.562737"
+       y1="15.875"
+       x1="29.861185"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2532"
+       xlink:href="#linearGradient3387"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="26.433243"
+       x2="44.822086"
+       y1="26.433243"
+       x1="37.551125"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2530"
+       xlink:href="#linearGradient3359"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.375"
+       x2="47.5625"
+       y1="13.4375"
+       x1="37.5"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2528"
+       xlink:href="#linearGradient2391"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="16.0625"
+       x2="44.853527"
+       y1="15.8125"
+       x1="34.122208"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2526"
+       xlink:href="#linearGradient3346"
+       inkscape:collect="always" />
+    <radialGradient
+       r="12"
+       fy="14.914677"
+       fx="31.349794"
+       cy="14.914701"
+       cx="31.349806"
+       gradientTransform="matrix(1.027139,7.049762e-7,-2.341676e-7,0.341179,-0.857269,11.25477)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2518"
+       xlink:href="#linearGradient3417"
+       inkscape:collect="always" />
+    <radialGradient
+       r="13"
+       fy="22.25555"
+       fx="7.0126991"
+       cy="22.25555"
+       cx="7.0126991"
+       gradientTransform="matrix(0.21225,0,0,0.254807,12.01156,16.32913)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2504"
+       xlink:href="#linearGradient3487"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3327"
+       inkscape:collect="always">
+      <stop
+         id="stop3329"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop3331"
+         offset="1"
+         style="stop-color:white;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3351"
+       inkscape:collect="always">
+      <stop
+         id="stop3353"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop3355"
+         offset="1"
+         style="stop-color:white;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3359"
+       inkscape:collect="always">
+      <stop
+         id="stop3361"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop3363"
+         offset="1"
+         style="stop-color:white;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3377"
+       inkscape:collect="always">
+      <stop
+         id="stop3379"
+         offset="0"
+         style="stop-color:#555753;stop-opacity:1" />
+      <stop
+         id="stop3381"
+         offset="1"
+         style="stop-color:#888a85;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3387">
+      <stop
+         id="stop3389"
+         offset="0"
+         style="stop-color:#8f9388;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c6cac2;stop-opacity:1;"
+         offset="0.5"
+         id="stop3354" />
+      <stop
+         id="stop3391"
+         offset="1"
+         style="stop-color:#d3d7cf;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3397">
+      <stop
+         style="stop-color:#555753;stop-opacity:1"
+         offset="0"
+         id="stop3399" />
+      <stop
+         style="stop-color:#d3d7cf;stop-opacity:0;"
+         offset="1"
+         id="stop3401" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3417"
+       inkscape:collect="always">
+      <stop
+         id="stop3419"
+         offset="0"
+         style="stop-color:white;stop-opacity:1" />
+      <stop
+         id="stop3421"
+         offset="1"
+         style="stop-color:#eeeeec;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3303"
+       inkscape:collect="always">
+      <stop
+         id="stop3305"
+         offset="0"
+         style="stop-color:#888a85;stop-opacity:1" />
+      <stop
+         id="stop3307"
+         offset="1"
+         style="stop-color:#eeeeec;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3473">
+      <stop
+         id="stop3475"
+         offset="0"
+         style="stop-color:#888a85;stop-opacity:1" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0.5"
+         id="stop3481" />
+      <stop
+         id="stop3477"
+         offset="1"
+         style="stop-color:#cecec8;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3487"
+       inkscape:collect="always">
+      <stop
+         id="stop3489"
+         offset="0"
+         style="stop-color:white;stop-opacity:1" />
+      <stop
+         id="stop3491"
+         offset="1"
+         style="stop-color:#eeeeec;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2379">
+      <stop
+         style="stop-color:#555753;stop-opacity:1"
+         offset="0"
+         id="stop2381" />
+      <stop
+         style="stop-color:#888a85;stop-opacity:0;"
+         offset="1"
+         id="stop2383" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2391">
+      <stop
+         style="stop-color:#555753;stop-opacity:1"
+         offset="0"
+         id="stop2393" />
+      <stop
+         style="stop-color:#888a85;stop-opacity:0;"
+         offset="1"
+         id="stop2395" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2397">
+      <stop
+         style="stop-color:#555753;stop-opacity:1"
+         offset="0"
+         id="stop2399" />
+      <stop
+         style="stop-color:#888a85;stop-opacity:0;"
+         offset="1"
+         id="stop2401" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3269">
+      <stop
+         style="stop-color:#fecb81;stop-opacity:1"
+         offset="0"
+         id="stop3271" />
+      <stop
+         style="stop-color:#fcaf3e;stop-opacity:1"
+         offset="1"
+         id="stop3273" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3325">
+      <stop
+         style="stop-color:#babdb6;stop-opacity:1"
+         offset="0"
+         id="stop3327" />
+      <stop
+         style="stop-color:#d3d7cf;stop-opacity:0;"
+         offset="1"
+         id="stop3333" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3346"
+       inkscape:collect="always">
+      <stop
+         id="stop3349"
+         offset="0"
+         style="stop-color:#555753;stop-opacity:1" />
+      <stop
+         id="stop3351"
+         offset="1"
+         style="stop-color:#d3d7cf;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4221">
+      <stop
+         id="stop4223"
+         offset="0"
+         style="stop-color:#0b60c1;stop-opacity:1;" />
+      <stop
+         id="stop4225"
+         offset="1"
+         style="stop-color:#6b9fce;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9160"
+       inkscape:collect="always">
+      <stop
+         id="stop9162"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop9164"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3473"
+       id="linearGradient2633"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="20"
+       y1="24"
+       x2="20"
+       y2="19.121248" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3359"
+       id="linearGradient2644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="37.551125"
+       y1="26.433243"
+       x2="46.258511"
+       y2="26.433243" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3327"
+       id="linearGradient2647"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="35.253414"
+       y1="14.589205"
+       x2="48.08326"
+       y2="14.589205" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3351"
+       id="linearGradient2650"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="35.176235"
+       y1="17.240854"
+       x2="47.651093"
+       y2="17.240854" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3325"
+       id="linearGradient2654"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="36.122208"
+       y1="15.875"
+       x2="47.312737"
+       y2="15.875" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2397"
+       id="linearGradient2656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="41.125"
+       y1="13.375"
+       x2="47.5625"
+       y2="13.375" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3359"
+       id="linearGradient2661"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="37.551125"
+       y1="26.433243"
+       x2="46.821011"
+       y2="26.433243" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3397"
+       id="linearGradient2664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="32.309578"
+       y1="15.875"
+       x2="44.187737"
+       y2="15.875" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3377"
+       id="linearGradient2666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="37.124252"
+       y1="13.375"
+       x2="47.5625"
+       y2="13.375" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3303"
+       id="linearGradient2669"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8682315,0,0,0.9101184,-3.6061871,-45.924276)"
+       x1="23.467106"
+       y1="20.201925"
+       x2="23.467106"
+       y2="17.015749" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9160"
+       id="radialGradient2730"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,5.4272094e-2,0,41.872476)"
+       cx="23.5"
+       cy="44.275394"
+       fx="23.5"
+       fy="44.275394"
+       r="23.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3832"
+       id="linearGradient5644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.4972531,0,0,2.3604061,-10.41248,-15.325579)"
+       x1="17.88068"
+       y1="11.072588"
+       x2="17.88068"
+       y2="21.767578" />
+    <linearGradient
+       id="linearGradient3013">
+      <stop
+         id="stop3015"
+         offset="0"
+         style="stop-color:#2d2d2d;stop-opacity:1;" />
+      <stop
+         id="stop3017"
+         offset="1"
+         style="stop-color:white;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3052">
+      <stop
+         style="stop-color:#555753;stop-opacity:1"
+         offset="0"
+         id="stop3054" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1"
+         offset="1"
+         id="stop3056" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2796">
+      <stop
+         id="stop2798"
+         offset="0"
+         style="stop-color:#2e3436;stop-opacity:1;" />
+      <stop
+         id="stop2800"
+         offset="1"
+         style="stop-color:#2e3436;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3288"
+       id="linearGradient3294"
+       x1="32.721527"
+       y1="52.910225"
+       x2="32.721527"
+       y2="55.701607"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7026458,0,0,0.3721852,0.2959765,19.971284)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3487"
+       id="linearGradient5240"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9415142,0,0,1.0383934,0.935741,-1.0548753)"
+       x1="21.278625"
+       y1="5.7148094"
+       x2="21.37009"
+       y2="14.438764" />
+    <linearGradient
+       id="linearGradient3422">
+      <stop
+         id="stop3424"
+         offset="0"
+         style="stop-color:#2d2d2d;stop-opacity:1;" />
+      <stop
+         id="stop3426"
+         offset="1"
+         style="stop-color:white;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3416">
+      <stop
+         style="stop-color:#555753;stop-opacity:1"
+         offset="0"
+         id="stop3418" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1"
+         offset="1"
+         id="stop3420" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3410">
+      <stop
+         id="stop3412"
+         offset="0"
+         style="stop-color:#2e3436;stop-opacity:1;" />
+      <stop
+         id="stop3414"
+         offset="1"
+         style="stop-color:#2e3436;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8824"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <linearGradient
+       id="linearGradient8918">
+      <stop
+         id="stop8920"
+         offset="0"
+         style="stop-color:#cee14b" />
+      <stop
+         id="stop8922"
+         offset="1"
+         style="stop-color:#9db029" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8918"
+       id="radialGradient9203"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(6.718136e-2,2.42191,-1.629357,4.51789e-2,52.36869,-50.34012)"
+       cx="25.969097"
+       cy="17.257854"
+       fx="25.968998"
+       fy="17.257843"
+       r="9.82225" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8820"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <linearGradient
+       id="linearGradient8912">
+      <stop
+         style="stop-color:#cee14b"
+         offset="0"
+         id="stop8914" />
+      <stop
+         style="stop-color:#9db029"
+         offset="1"
+         id="stop8916" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8912"
+       id="radialGradient9197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.222034,8.004376,-0.597156,1.656095e-2,29.5454,-182.3268)"
+       cx="24.478569"
+       cy="17.573915"
+       fx="24.478539"
+       fy="17.573889"
+       r="2.97195" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <linearGradient
+       id="linearGradient8930">
+      <stop
+         id="stop8932"
+         offset="0"
+         style="stop-color:#cee14b" />
+      <stop
+         id="stop8934"
+         offset="1"
+         style="stop-color:#9db029" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8930"
+       id="radialGradient9191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.159592,5.753335,-0.8072,2.23703e-2,32.87305,-131.6974)"
+       cx="25.135374"
+       cy="14.542349"
+       fx="25.135332"
+       fy="14.542329"
+       r="4.13475" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <linearGradient
+       id="linearGradient8924">
+      <stop
+         id="stop8926"
+         offset="0"
+         style="stop-color:#cee14b" />
+      <stop
+         id="stop8928"
+         offset="1"
+         style="stop-color:#9db029" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8924"
+       id="radialGradient9185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(7.657394e-2,2.760516,-1.969551,5.463895e-2,60.09901,-55.47179)"
+       cx="24.652573"
+       cy="18.94449"
+       fx="24.652485"
+       fy="18.944481"
+       r="8.61745" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8810"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8806"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8804"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8794"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8792"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8788"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8786"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8782"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8780"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8778"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8766"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8764"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8760"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8756"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8750"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient8740">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop8742" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop8744" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient8748"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,1.662905e-14,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <linearGradient
+       id="linearGradient8647">
+      <stop
+         style="stop-color:#8fb1dc;stop-opacity:1;"
+         offset="0"
+         id="stop8649" />
+      <stop
+         style="stop-color:#305686;stop-opacity:1;"
+         offset="1"
+         id="stop8651" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4845">
+      <stop
+         id="stop4847"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4849"
+         offset="1"
+         style="stop-color:#b6b6b6;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4700"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4702"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4704"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4706"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8924"
+       id="radialGradient4710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(7.657394e-2,2.760516,-1.969551,5.463895e-2,60.09901,-55.47179)"
+       cx="24.652573"
+       cy="18.94449"
+       fx="24.652485"
+       fy="18.944481"
+       r="8.61745" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4712"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8930"
+       id="radialGradient4714"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.159592,5.753335,-0.8072,2.23703e-2,32.87305,-131.6974)"
+       cx="25.135374"
+       cy="14.542349"
+       fx="25.135332"
+       fy="14.542329"
+       r="4.13475" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4716"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8912"
+       id="radialGradient4718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.222034,8.004376,-0.597156,1.656095e-2,29.5454,-182.3268)"
+       cx="24.478569"
+       cy="17.573915"
+       fx="24.478539"
+       fy="17.573889"
+       r="2.97195" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8918"
+       id="radialGradient4722"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(6.718136e-2,2.42191,-1.629357,4.51789e-2,52.36869,-50.34012)"
+       cx="25.969097"
+       cy="17.257854"
+       fx="25.968998"
+       fy="17.257843"
+       r="9.82225" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8740"
+       id="radialGradient4724"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.930233,0,-0.240141)"
+       cx="62.225393"
+       cy="-3.4420195"
+       fx="62.225393"
+       fy="-3.4420195"
+       r="10.081216" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4845"
+       id="linearGradient5727"
+       x1="-37.25"
+       y1="4.0196629"
+       x2="-33.875"
+       y2="40.769665"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9995097,0,0,1.0458824,-1.1400445e-2,-0.1321658)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18400"
+       id="radialGradient18406"
+       cx="-83.438599"
+       cy="48.883884"
+       fx="-83.438599"
+       fy="48.883884"
+       r="25.102291"
+       gradientTransform="matrix(1,0,0,9.1549298e-2,0,44.408599)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8267"
+       id="radialGradient8273"
+       cx="24.549999"
+       cy="43.049999"
+       fx="24.549999"
+       fy="43.049999"
+       r="22.15"
+       gradientTransform="matrix(1,0,0,0.1015801,0,38.676974)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       r="117.14286"
+       fy="486.64789"
+       fx="605.71429"
+       cy="486.64789"
+       cx="605.71429"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6677"
+       xlink:href="#linearGradient5060"
+       inkscape:collect="always" />
+    <radialGradient
+       r="117.14286"
+       fy="486.64789"
+       fx="605.71429"
+       cy="486.64789"
+       cx="605.71429"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6675"
+       xlink:href="#linearGradient5060"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="609.50507"
+       x2="302.85715"
+       y1="366.64789"
+       x1="302.85715"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6673"
+       xlink:href="#linearGradient5048"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="12.480761"
+       x2="13.267747"
+       y1="7.7190704"
+       x1="13.267747"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4836"
+       xlink:href="#linearGradient4816"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="21.767578"
+       x2="17.88068"
+       y1="11.072588"
+       x1="17.88068"
+       gradientTransform="matrix(0.993847,0,0,0.984817,-0.192265,-0.512678)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4834"
+       xlink:href="#linearGradient3832"
+       inkscape:collect="always" />
+    <radialGradient
+       r="11.799845"
+       fy="25.681942"
+       fx="17.368311"
+       cy="25.681942"
+       cx="17.368311"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.385768,9.076565e-15,15.77468)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient12286"
+       xlink:href="#linearGradient4808"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="12.480761"
+       x2="13.267747"
+       y1="7.7190704"
+       x1="13.267747"
+       id="linearGradient4822"
+       xlink:href="#linearGradient4816"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.385768,8.417746e-16,15.77468)"
+       r="11.799845"
+       fy="25.681942"
+       fx="17.368311"
+       cy="25.681942"
+       cx="17.368311"
+       id="radialGradient12283"
+       xlink:href="#linearGradient4808"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="matrix(0.993847,0,0,0.984817,-0.192265,-0.512678)"
+       gradientUnits="userSpaceOnUse"
+       y2="21.767578"
+       x2="17.88068"
+       y1="11.072588"
+       x1="17.88068"
+       id="linearGradient3838"
+       xlink:href="#linearGradient3832"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient12276">
+      <stop
+         id="stop12278"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop12280"
+         offset="1"
+         style="stop-color:#e0e0e0;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="609.50507"
+       x2="302.85715"
+       y1="366.64789"
+       x1="302.85715"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5027"
+       xlink:href="#linearGradient5048"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient12255">
+      <stop
+         id="stop12257"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0.5"
+         id="stop12259" />
+      <stop
+         id="stop12261"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       r="117.14286"
+       fy="486.64789"
+       fx="605.71429"
+       cy="486.64789"
+       cx="605.71429"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5029"
+       xlink:href="#linearGradient5060"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient5060"
+       inkscape:collect="always">
+      <stop
+         id="stop5062"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5064"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       r="117.14286"
+       fy="486.64789"
+       fx="605.71429"
+       cy="486.64789"
+       cx="605.71429"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5031"
+       xlink:href="#linearGradient5060"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3832"
+       id="linearGradient12328"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.993847,0,0,0.984817,-0.192265,-0.512678)"
+       x1="17.88068"
+       y1="11.072588"
+       x2="17.88068"
+       y2="21.767578" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4816"
+       id="linearGradient12330"
+       gradientUnits="userSpaceOnUse"
+       x1="13.267747"
+       y1="7.7190704"
+       x2="13.267747"
+       y2="12.480761" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient12332"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient12334"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient12336"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       y2="12.480761"
+       x2="13.267747"
+       y1="7.7190704"
+       x1="13.267747"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2575"
+       xlink:href="#linearGradient4816"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="21.767578"
+       x2="17.88068"
+       y1="11.072588"
+       x1="17.88068"
+       gradientTransform="matrix(0.993847,0,0,0.984817,-0.192265,-0.512678)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2573"
+       xlink:href="#linearGradient3832"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3832"
+       id="linearGradient2565"
+       x1="17.88068"
+       y1="11.072588"
+       x2="17.88068"
+       y2="21.767578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.993847,0,0,0.984817,-0.192265,-0.512678)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4816"
+       id="linearGradient2563"
+       x1="13.267747"
+       y1="7.7190704"
+       x2="13.267747"
+       y2="12.480761"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient2561"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient2559"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient2557"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient2551">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop2553" />
+      <stop
+         style="stop-color:#b6b6b6;stop-opacity:1;"
+         offset="1"
+         id="stop2555" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2545">
+      <stop
+         id="stop2547"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2549"
+         offset="1"
+         style="stop-color:#dadada;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2539">
+      <stop
+         id="stop2541"
+         offset="0"
+         style="stop-color:#204a87;stop-opacity:1;" />
+      <stop
+         id="stop2543"
+         offset="1"
+         style="stop-color:#2a6dcf;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2531">
+      <stop
+         id="stop2533"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0.5"
+         id="stop2535" />
+      <stop
+         id="stop2537"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4144"
+       inkscape:collect="always">
+      <stop
+         id="stop4146"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop4148"
+         offset="1"
+         style="stop-color:#5085c8;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4144"
+       id="linearGradient2611"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7911987,0,0,0.7995727,-13.032903,31.363016)"
+       x1="13.267742"
+       y1="8.3006649"
+       x2="13.267742"
+       y2="10.802001" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3393"
+       id="linearGradient2615"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9622123,0,0,0.8977616,0.3738924,0.1343742)"
+       spreadMethod="pad"
+       x1="22.714291"
+       y1="5.1111107"
+       x2="23.47788"
+       y2="19.827486" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4144"
+       id="linearGradient2618"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.791199,0,0,3.598078,-13.03292,-25.866447)"
+       x1="13.267747"
+       y1="7.7190704"
+       x2="13.267746"
+       y2="10.802002" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4845"
+       id="linearGradient2621"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8961515,0,0,0.9722387,44.835522,0.4779121)"
+       x1="-37.25"
+       y1="4.0196629"
+       x2="-33.875"
+       y2="40.769665" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9428"
+       id="linearGradient9434"
+       x1="22.5"
+       y1="38"
+       x2="22.950001"
+       y2="44.700001"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0260895,0,0,0.9914029,-0.6261491,-0.160425)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15631"
+       id="linearGradient15637"
+       x1="22.5"
+       y1="36.299999"
+       x2="22.799997"
+       y2="-15.400001"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0005403,0,0,0.9574525,-1.2966401e-2,1.5636885)" />
+  </defs>
+  <sodipodi:namedview
+     stroke="#ef2929"
+     fill="#eeeeec"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.25490196"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="20"
+     inkscape:cx="14.886123"
+     inkscape:cy="29.095468"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1002"
+     inkscape:window-height="695"
+     inkscape:window-x="19"
+     inkscape:window-y="11"
+     showguides="true" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+        <dc:title>Windows</dc:title>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>window</rdf:li>
+            <rdf:li>manager</rdf:li>
+            <rdf:li>decoration</rdf:li>
+            <rdf:li>behavior</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Attribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g5022"
+       transform="matrix(2.4625279e-2,0,0,2.086758e-2,45.902599,38.662522)">
+      <rect
+         y="-150.69685"
+         x="-1559.2523"
+         height="478.35718"
+         width="1339.6335"
+         id="rect4173"
+         style="opacity:0.40206185;color:#000000;fill:url(#linearGradient12332);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path5058"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         style="opacity:0.40206185;color:#000000;fill:url(#radialGradient12334);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         style="opacity:0.40206185;color:#000000;fill:url(#radialGradient12336);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         id="path5018"
+         sodipodi:nodetypes="cccc" />
+    </g>
+    <rect
+       style="fill:url(#linearGradient2621);fill-opacity:1;stroke:#204a87;stroke-width:1.00107694;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4750"
+       width="40.998924"
+       height="36.983303"
+       x="3.5005383"
+       y="3.5161586" />
+    <rect
+       y="4"
+       x="4"
+       height="9"
+       width="40"
+       id="rect4830"
+       style="color:#000000;fill:url(#linearGradient2618);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       inkscape:export-filename="E:\path8199.png"
+       inkscape:export-xdpi="88.15593"
+       inkscape:export-ydpi="88.15593" />
+    <rect
+       inkscape:export-ydpi="88.15593"
+       inkscape:export-xdpi="88.15593"
+       inkscape:export-filename="E:\path8199.png"
+       style="opacity:0.56571428;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2615);stroke-width:0.99757719;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect2422"
+       width="39.002422"
+       height="8.0177841"
+       x="4.4987888"
+       y="4.483427" />
+    <path
+       id="path13524"
+       d="M 3.600373,13.5 L 44.5,13.5"
+       style="fill:none;fill-rule:evenodd;stroke:#204a87;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       inkscape:export-ydpi="88.15593"
+       inkscape:export-xdpi="88.15593"
+       inkscape:export-filename="E:\path8199.png"
+       style="color:#000000;fill:url(#linearGradient2611);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="rect12539"
+       width="40"
+       height="2"
+       x="4"
+       y="38" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#204a87;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 3.5,37.5 L 44.137931,37.5"
+       id="path11562" />
+    <rect
+       style="opacity:0.94285715;fill:none;fill-opacity:1;stroke:url(#linearGradient15637);stroke-width:0.97110623;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect6698"
+       width="39.028893"
+       height="22.028893"
+       x="4.4855528"
+       y="14.485553" />
+    <path
+       style="opacity:0.27428571;fill:none;fill-rule:evenodd;stroke:url(#linearGradient9434);stroke-width:1.00859725px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 43.995701,38.504299 L 4.0542987,38.554299"
+       id="path8457"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#204a87;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 35.5,37.997946 L 35.5,40.250468"
+       id="path11568"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#204a87;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 12.5,37.966667 L 12.5,40.5"
+       id="path10250" />
+    <g
+       transform="matrix(1.789616e-2,0,0,2.086758e-2,-40.332519,-125.40065)"
+       id="g6665">
+      <rect
+         style="opacity:0.40206185;color:#000000;fill:url(#linearGradient6673);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect6667"
+         width="1339.6335"
+         height="478.35718"
+         x="-1559.2523"
+         y="-150.69685" />
+      <path
+         style="opacity:0.40206185;color:#000000;fill:url(#radialGradient6675);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         id="path6669"
+         sodipodi:nodetypes="cccc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path6671"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         style="opacity:0.40206185;color:#000000;fill:url(#radialGradient6677);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <g
+       id="g3822"
+       transform="matrix(1.814279,0,0,1.599146,-80.946403,-158.70323)">
+      <rect
+         ry="0.69171613"
+         rx="0.60969371"
+         y="7.3579211"
+         x="5.2738938"
+         height="15.642846"
+         width="15.987699"
+         id="rect3818"
+         style="opacity:1;color:#000000;fill:url(#linearGradient3838);fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8d;stroke-width:0.58708906;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         ry="0.13899347"
+         rx="0.12251196"
+         y="8.3006659"
+         x="6.102366"
+         height="2.5013354"
+         width="14.330762"
+         id="rect3820"
+         style="opacity:1;color:#000000;fill:url(#linearGradient4822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.58708918;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.47878789;visibility:visible;display:inline;overflow:visible"
+         id="rect4962"
+         width="14.758596"
+         height="14.440255"
+         x="5.8884473"
+         y="7.959219"
+         rx="0.22271593"
+         ry="0.22271593" />
+    </g>
+    <g
+       transform="matrix(1.814279,0,0,1.599146,-130.92217,-138.61832)"
+       id="g4826">
+      <rect
+         style="opacity:1;color:#000000;fill:url(#linearGradient12328);fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8d;stroke-width:0.58708906;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect4828"
+         width="15.987699"
+         height="15.642846"
+         x="5.2738938"
+         y="7.3579211"
+         rx="0.60969371"
+         ry="0.69171613" />
+      <rect
+         style="opacity:1;color:#000000;fill:url(#linearGradient12330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect12309"
+         width="14.330762"
+         height="2.5013354"
+         x="6.102366"
+         y="8.3006659"
+         rx="0.12251196"
+         ry="0.13899347" />
+      <rect
+         ry="0.14454938"
+         rx="0.14454938"
+         y="7.8840585"
+         x="5.8116298"
+         height="14.590583"
+         width="14.912238"
+         id="rect4958"
+         style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.5870893;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.54545456;visibility:visible;display:inline;overflow:visible" />
+    </g>
+  </g>
+</svg>
diff --git a/oldwiki/images/6/60/FocusCyclingForAllDesktops.png b/oldwiki/images/6/60/FocusCyclingForAllDesktops.png
new file mode 100644 (file)
index 0000000..e40876c
Binary files /dev/null and b/oldwiki/images/6/60/FocusCyclingForAllDesktops.png differ
diff --git a/oldwiki/images/6/63/Schermafdruk-6.png b/oldwiki/images/6/63/Schermafdruk-6.png
new file mode 100644 (file)
index 0000000..098b3bb
Binary files /dev/null and b/oldwiki/images/6/63/Schermafdruk-6.png differ
diff --git a/oldwiki/images/6/64/Kde-72.png b/oldwiki/images/6/64/Kde-72.png
new file mode 100644 (file)
index 0000000..f28b095
Binary files /dev/null and b/oldwiki/images/6/64/Kde-72.png differ
diff --git a/oldwiki/images/6/65/2008-08-02-011650_1280x1024_scrot.png b/oldwiki/images/6/65/2008-08-02-011650_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..2c21882
Binary files /dev/null and b/oldwiki/images/6/65/2008-08-02-011650_1280x1024_scrot.png differ
diff --git a/oldwiki/images/6/66/Mendax-desktop.jpg b/oldwiki/images/6/66/Mendax-desktop.jpg
new file mode 100644 (file)
index 0000000..17c8a65
Binary files /dev/null and b/oldwiki/images/6/66/Mendax-desktop.jpg differ
diff --git a/oldwiki/images/6/67/Date_menu.jpg b/oldwiki/images/6/67/Date_menu.jpg
new file mode 100644 (file)
index 0000000..852015d
Binary files /dev/null and b/oldwiki/images/6/67/Date_menu.jpg differ
diff --git a/oldwiki/images/6/69/Dktop.jpg b/oldwiki/images/6/69/Dktop.jpg
new file mode 100644 (file)
index 0000000..18de62f
Binary files /dev/null and b/oldwiki/images/6/69/Dktop.jpg differ
diff --git a/oldwiki/images/6/69/Laplinbox.jpg b/oldwiki/images/6/69/Laplinbox.jpg
new file mode 100644 (file)
index 0000000..695b313
Binary files /dev/null and b/oldwiki/images/6/69/Laplinbox.jpg differ
diff --git a/oldwiki/images/6/69/Openbox_7_04_08.jpg b/oldwiki/images/6/69/Openbox_7_04_08.jpg
new file mode 100644 (file)
index 0000000..b976855
Binary files /dev/null and b/oldwiki/images/6/69/Openbox_7_04_08.jpg differ
diff --git a/oldwiki/images/6/6a/LoginOptions.png b/oldwiki/images/6/6a/LoginOptions.png
new file mode 100644 (file)
index 0000000..acc9e5c
Binary files /dev/null and b/oldwiki/images/6/6a/LoginOptions.png differ
diff --git a/oldwiki/images/6/6b/FocusCyclingToPanel.png b/oldwiki/images/6/6b/FocusCyclingToPanel.png
new file mode 100644 (file)
index 0000000..a476e56
Binary files /dev/null and b/oldwiki/images/6/6b/FocusCyclingToPanel.png differ
diff --git a/oldwiki/images/6/6e/Pantallazo_04-05-2010_1366x768.png b/oldwiki/images/6/6e/Pantallazo_04-05-2010_1366x768.png
new file mode 100644 (file)
index 0000000..cfce3d4
Binary files /dev/null and b/oldwiki/images/6/6e/Pantallazo_04-05-2010_1366x768.png differ
diff --git a/oldwiki/images/6/6f/NewBusyCursor.png b/oldwiki/images/6/6f/NewBusyCursor.png
new file mode 100644 (file)
index 0000000..9258b2e
Binary files /dev/null and b/oldwiki/images/6/6f/NewBusyCursor.png differ
diff --git a/oldwiki/images/6/6f/Openboxscreenshot4.png b/oldwiki/images/6/6f/Openboxscreenshot4.png
new file mode 100644 (file)
index 0000000..e8b8330
Binary files /dev/null and b/oldwiki/images/6/6f/Openboxscreenshot4.png differ
diff --git a/oldwiki/images/7/70/20070723-1848.png b/oldwiki/images/7/70/20070723-1848.png
new file mode 100644 (file)
index 0000000..0c4b011
Binary files /dev/null and b/oldwiki/images/7/70/20070723-1848.png differ
diff --git a/oldwiki/images/7/72/Cia.gif b/oldwiki/images/7/72/Cia.gif
new file mode 100644 (file)
index 0000000..78ec1ca
Binary files /dev/null and b/oldwiki/images/7/72/Cia.gif differ
diff --git a/oldwiki/images/7/72/GNOME-Openbox.png b/oldwiki/images/7/72/GNOME-Openbox.png
new file mode 100644 (file)
index 0000000..9fef625
Binary files /dev/null and b/oldwiki/images/7/72/GNOME-Openbox.png differ
diff --git a/oldwiki/images/7/75/ObConfDock.png b/oldwiki/images/7/75/ObConfDock.png
new file mode 100644 (file)
index 0000000..eb16587
Binary files /dev/null and b/oldwiki/images/7/75/ObConfDock.png differ
diff --git a/oldwiki/images/7/78/HiddenTitlebarButtons.png b/oldwiki/images/7/78/HiddenTitlebarButtons.png
new file mode 100644 (file)
index 0000000..5be30e6
Binary files /dev/null and b/oldwiki/images/7/78/HiddenTitlebarButtons.png differ
diff --git a/oldwiki/images/7/7b/Gnome-72.png b/oldwiki/images/7/7b/Gnome-72.png
new file mode 100644 (file)
index 0000000..c0e75d7
Binary files /dev/null and b/oldwiki/images/7/7b/Gnome-72.png differ
diff --git a/oldwiki/images/7/7b/Myscreen-weboide-x.jpg b/oldwiki/images/7/7b/Myscreen-weboide-x.jpg
new file mode 100644 (file)
index 0000000..466b8e5
Binary files /dev/null and b/oldwiki/images/7/7b/Myscreen-weboide-x.jpg differ
diff --git a/oldwiki/images/7/7b/Openboxshot2.jpg b/oldwiki/images/7/7b/Openboxshot2.jpg
new file mode 100644 (file)
index 0000000..6b3783f
Binary files /dev/null and b/oldwiki/images/7/7b/Openboxshot2.jpg differ
diff --git a/oldwiki/images/7/7f/ActiveDisabledMenuEntry.png b/oldwiki/images/7/7f/ActiveDisabledMenuEntry.png
new file mode 100644 (file)
index 0000000..2ede896
Binary files /dev/null and b/oldwiki/images/7/7f/ActiveDisabledMenuEntry.png differ
diff --git a/oldwiki/images/7/7f/GagaPeter_001.png b/oldwiki/images/7/7f/GagaPeter_001.png
new file mode 100644 (file)
index 0000000..c64b25f
Binary files /dev/null and b/oldwiki/images/7/7f/GagaPeter_001.png differ
diff --git a/oldwiki/images/7/7f/OpenboxMotivationalPoster.png b/oldwiki/images/7/7f/OpenboxMotivationalPoster.png
new file mode 100644 (file)
index 0000000..d0bbbb2
Binary files /dev/null and b/oldwiki/images/7/7f/OpenboxMotivationalPoster.png differ
diff --git a/oldwiki/images/8/80/Obconf-72.png b/oldwiki/images/8/80/Obconf-72.png
new file mode 100644 (file)
index 0000000..02a1738
Binary files /dev/null and b/oldwiki/images/8/80/Obconf-72.png differ
diff --git a/oldwiki/images/8/82/Donnie-2007-07-15.png b/oldwiki/images/8/82/Donnie-2007-07-15.png
new file mode 100644 (file)
index 0000000..e35e098
Binary files /dev/null and b/oldwiki/images/8/82/Donnie-2007-07-15.png differ
diff --git a/oldwiki/images/8/85/Openbox_dust_carbon.png b/oldwiki/images/8/85/Openbox_dust_carbon.png
new file mode 100644 (file)
index 0000000..12bb503
Binary files /dev/null and b/oldwiki/images/8/85/Openbox_dust_carbon.png differ
diff --git a/oldwiki/images/8/87/MyDesktop.jpeg b/oldwiki/images/8/87/MyDesktop.jpeg
new file mode 100644 (file)
index 0000000..a190e90
Binary files /dev/null and b/oldwiki/images/8/87/MyDesktop.jpeg differ
diff --git a/oldwiki/images/8/87/Openbox.png b/oldwiki/images/8/87/Openbox.png
new file mode 100644 (file)
index 0000000..b81fdfd
Binary files /dev/null and b/oldwiki/images/8/87/Openbox.png differ
diff --git a/oldwiki/images/8/87/Openbox_28_03_08.jpg b/oldwiki/images/8/87/Openbox_28_03_08.jpg
new file mode 100644 (file)
index 0000000..a77bb5b
Binary files /dev/null and b/oldwiki/images/8/87/Openbox_28_03_08.jpg differ
diff --git a/oldwiki/images/8/8a/Capture.png b/oldwiki/images/8/8a/Capture.png
new file mode 100644 (file)
index 0000000..149cb7b
Binary files /dev/null and b/oldwiki/images/8/8a/Capture.png differ
diff --git a/oldwiki/images/8/8c/2560x1024_scrot.jpg b/oldwiki/images/8/8c/2560x1024_scrot.jpg
new file mode 100644 (file)
index 0000000..e1e40b5
Binary files /dev/null and b/oldwiki/images/8/8c/2560x1024_scrot.jpg differ
diff --git a/oldwiki/images/8/8c/Openbox_dust_carbon.jpg b/oldwiki/images/8/8c/Openbox_dust_carbon.jpg
new file mode 100644 (file)
index 0000000..71f075d
Binary files /dev/null and b/oldwiki/images/8/8c/Openbox_dust_carbon.jpg differ
diff --git a/oldwiki/images/8/8d/Sodio.png b/oldwiki/images/8/8d/Sodio.png
new file mode 100644 (file)
index 0000000..ce7bcca
Binary files /dev/null and b/oldwiki/images/8/8d/Sodio.png differ
diff --git a/oldwiki/images/9/93/NewClientMenu.png b/oldwiki/images/9/93/NewClientMenu.png
new file mode 100644 (file)
index 0000000..e6acd77
Binary files /dev/null and b/oldwiki/images/9/93/NewClientMenu.png differ
diff --git a/oldwiki/images/9/95/KeychainDialog.png b/oldwiki/images/9/95/KeychainDialog.png
new file mode 100644 (file)
index 0000000..212f477
Binary files /dev/null and b/oldwiki/images/9/95/KeychainDialog.png differ
diff --git a/oldwiki/images/9/96/Sreenopenbox2.png b/oldwiki/images/9/96/Sreenopenbox2.png
new file mode 100644 (file)
index 0000000..e7ead74
Binary files /dev/null and b/oldwiki/images/9/96/Sreenopenbox2.png differ
diff --git a/oldwiki/images/9/97/Bug-72.png b/oldwiki/images/9/97/Bug-72.png
new file mode 100644 (file)
index 0000000..c38dde1
Binary files /dev/null and b/oldwiki/images/9/97/Bug-72.png differ
diff --git a/oldwiki/images/9/97/Image-Ss_October.png b/oldwiki/images/9/97/Image-Ss_October.png
new file mode 100644 (file)
index 0000000..51a90aa
Binary files /dev/null and b/oldwiki/images/9/97/Image-Ss_October.png differ
diff --git a/oldwiki/images/9/9c/Gxdesktop26.jpg b/oldwiki/images/9/9c/Gxdesktop26.jpg
new file mode 100644 (file)
index 0000000..829dc76
Binary files /dev/null and b/oldwiki/images/9/9c/Gxdesktop26.jpg differ
diff --git a/oldwiki/images/9/9c/ObConfTheme.png b/oldwiki/images/9/9c/ObConfTheme.png
new file mode 100644 (file)
index 0000000..1c289b7
Binary files /dev/null and b/oldwiki/images/9/9c/ObConfTheme.png differ
diff --git a/oldwiki/images/9/9e/2007-06-29-233539_1280x1024_scrot.png b/oldwiki/images/9/9e/2007-06-29-233539_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..0ec10c2
Binary files /dev/null and b/oldwiki/images/9/9e/2007-06-29-233539_1280x1024_scrot.png differ
diff --git a/oldwiki/images/README b/oldwiki/images/README
new file mode 100644 (file)
index 0000000..ca30bbc
--- /dev/null
@@ -0,0 +1,5 @@
+If uploads are enabled in the wiki, files will be put in subdirectories
+under here.
+
+Note to upgraders: as of MediaWiki 1.5, the images used in the user
+interface have been moved to skins/common/images.
diff --git a/oldwiki/images/a/a0/Boxw.png b/oldwiki/images/a/a0/Boxw.png
new file mode 100644 (file)
index 0000000..0f60bf1
Binary files /dev/null and b/oldwiki/images/a/a0/Boxw.png differ
diff --git a/oldwiki/images/a/a0/Slackware_skinn3r.png b/oldwiki/images/a/a0/Slackware_skinn3r.png
new file mode 100644 (file)
index 0000000..ad65944
Binary files /dev/null and b/oldwiki/images/a/a0/Slackware_skinn3r.png differ
diff --git a/oldwiki/images/a/a1/Nightm4re-2006-10-26-2128-october.jpg b/oldwiki/images/a/a1/Nightm4re-2006-10-26-2128-october.jpg
new file mode 100644 (file)
index 0000000..2d49bda
Binary files /dev/null and b/oldwiki/images/a/a1/Nightm4re-2006-10-26-2128-october.jpg differ
diff --git a/oldwiki/images/a/a5/ObConfBehavior.png b/oldwiki/images/a/a5/ObConfBehavior.png
new file mode 100644 (file)
index 0000000..44114b6
Binary files /dev/null and b/oldwiki/images/a/a5/ObConfBehavior.png differ
diff --git a/oldwiki/images/a/ac/14-42.png b/oldwiki/images/a/ac/14-42.png
new file mode 100644 (file)
index 0000000..64ab5b0
Binary files /dev/null and b/oldwiki/images/a/ac/14-42.png differ
diff --git a/oldwiki/images/archive/0/01/20070830002231!Translate-72.png b/oldwiki/images/archive/0/01/20070830002231!Translate-72.png
new file mode 100644 (file)
index 0000000..645f4d9
Binary files /dev/null and b/oldwiki/images/archive/0/01/20070830002231!Translate-72.png differ
diff --git a/oldwiki/images/archive/1/19/20081219163527!My_openbox.jpg b/oldwiki/images/archive/1/19/20081219163527!My_openbox.jpg
new file mode 100644 (file)
index 0000000..e696b78
Binary files /dev/null and b/oldwiki/images/archive/1/19/20081219163527!My_openbox.jpg differ
diff --git a/oldwiki/images/archive/2/24/20070609032910!Scrot_smoon.png b/oldwiki/images/archive/2/24/20070609032910!Scrot_smoon.png
new file mode 100644 (file)
index 0000000..9f0535e
Binary files /dev/null and b/oldwiki/images/archive/2/24/20070609032910!Scrot_smoon.png differ
diff --git a/oldwiki/images/archive/2/2b/20080111005524!Openbox-inko.png b/oldwiki/images/archive/2/2b/20080111005524!Openbox-inko.png
new file mode 100644 (file)
index 0000000..cf84834
Binary files /dev/null and b/oldwiki/images/archive/2/2b/20080111005524!Openbox-inko.png differ
diff --git a/oldwiki/images/archive/2/2b/20080229005825!Openbox-inko.png b/oldwiki/images/archive/2/2b/20080229005825!Openbox-inko.png
new file mode 100644 (file)
index 0000000..cf84834
Binary files /dev/null and b/oldwiki/images/archive/2/2b/20080229005825!Openbox-inko.png differ
diff --git a/oldwiki/images/archive/4/41/20070609032915!Greenw.png b/oldwiki/images/archive/4/41/20070609032915!Greenw.png
new file mode 100644 (file)
index 0000000..0af701e
Binary files /dev/null and b/oldwiki/images/archive/4/41/20070609032915!Greenw.png differ
diff --git a/oldwiki/images/archive/4/4b/20070830003249!Lightbulb-72.png b/oldwiki/images/archive/4/4b/20070830003249!Lightbulb-72.png
new file mode 100644 (file)
index 0000000..1835746
Binary files /dev/null and b/oldwiki/images/archive/4/4b/20070830003249!Lightbulb-72.png differ
diff --git a/oldwiki/images/archive/4/4c/20070609032808!Ss_OnyxTheme.png b/oldwiki/images/archive/4/4c/20070609032808!Ss_OnyxTheme.png
new file mode 100644 (file)
index 0000000..0baeefe
Binary files /dev/null and b/oldwiki/images/archive/4/4c/20070609032808!Ss_OnyxTheme.png differ
diff --git a/oldwiki/images/archive/4/4c/20070609205911!Ss_OnyxTheme.png b/oldwiki/images/archive/4/4c/20070609205911!Ss_OnyxTheme.png
new file mode 100644 (file)
index 0000000..83d82e5
Binary files /dev/null and b/oldwiki/images/archive/4/4c/20070609205911!Ss_OnyxTheme.png differ
diff --git a/oldwiki/images/archive/5/53/20070609031454!Sysrq-2006-11-03.png b/oldwiki/images/archive/5/53/20070609031454!Sysrq-2006-11-03.png
new file mode 100644 (file)
index 0000000..35c61b0
Binary files /dev/null and b/oldwiki/images/archive/5/53/20070609031454!Sysrq-2006-11-03.png differ
diff --git a/oldwiki/images/archive/5/56/20071209040919!Cowsay.png b/oldwiki/images/archive/5/56/20071209040919!Cowsay.png
new file mode 100644 (file)
index 0000000..9a30087
Binary files /dev/null and b/oldwiki/images/archive/5/56/20071209040919!Cowsay.png differ
diff --git a/oldwiki/images/archive/7/7b/20080212154504!Gnome-72.png b/oldwiki/images/archive/7/7b/20080212154504!Gnome-72.png
new file mode 100644 (file)
index 0000000..9aa77e2
Binary files /dev/null and b/oldwiki/images/archive/7/7b/20080212154504!Gnome-72.png differ
diff --git a/oldwiki/images/archive/8/85/20081109141645!Openbox_dust_carbon.png b/oldwiki/images/archive/8/85/20081109141645!Openbox_dust_carbon.png
new file mode 100644 (file)
index 0000000..5638ac0
Binary files /dev/null and b/oldwiki/images/archive/8/85/20081109141645!Openbox_dust_carbon.png differ
diff --git a/oldwiki/images/archive/8/8d/20070609032753!Sodio.png b/oldwiki/images/archive/8/8d/20070609032753!Sodio.png
new file mode 100644 (file)
index 0000000..d5512a5
Binary files /dev/null and b/oldwiki/images/archive/8/8d/20070609032753!Sodio.png differ
diff --git a/oldwiki/images/archive/9/97/20070830003412!Bug-72.png b/oldwiki/images/archive/9/97/20070830003412!Bug-72.png
new file mode 100644 (file)
index 0000000..0fcdd96
Binary files /dev/null and b/oldwiki/images/archive/9/97/20070830003412!Bug-72.png differ
diff --git a/oldwiki/images/archive/c/c5/20070521022115!Openbox-72.png b/oldwiki/images/archive/c/c5/20070521022115!Openbox-72.png
new file mode 100644 (file)
index 0000000..7861c03
Binary files /dev/null and b/oldwiki/images/archive/c/c5/20070521022115!Openbox-72.png differ
diff --git a/oldwiki/images/archive/c/c5/20070521214126!Openbox-72.png b/oldwiki/images/archive/c/c5/20070521214126!Openbox-72.png
new file mode 100644 (file)
index 0000000..f98693d
Binary files /dev/null and b/oldwiki/images/archive/c/c5/20070521214126!Openbox-72.png differ
diff --git a/oldwiki/images/archive/c/c5/20070526145129!Openbox-72.png b/oldwiki/images/archive/c/c5/20070526145129!Openbox-72.png
new file mode 100644 (file)
index 0000000..f8c332b
Binary files /dev/null and b/oldwiki/images/archive/c/c5/20070526145129!Openbox-72.png differ
diff --git a/oldwiki/images/archive/f/f5/20100407010522!OpenboxStandalone.jpg b/oldwiki/images/archive/f/f5/20100407010522!OpenboxStandalone.jpg
new file mode 100644 (file)
index 0000000..cf2d402
Binary files /dev/null and b/oldwiki/images/archive/f/f5/20100407010522!OpenboxStandalone.jpg differ
diff --git a/oldwiki/images/archive/f/f5/20100407010758!OpenboxStandalone.jpg b/oldwiki/images/archive/f/f5/20100407010758!OpenboxStandalone.jpg
new file mode 100644 (file)
index 0000000..65e1075
Binary files /dev/null and b/oldwiki/images/archive/f/f5/20100407010758!OpenboxStandalone.jpg differ
diff --git a/oldwiki/images/archive/f/f6/20080831052713!Screenshot.jpg b/oldwiki/images/archive/f/f6/20080831052713!Screenshot.jpg
new file mode 100644 (file)
index 0000000..49fb32b
Binary files /dev/null and b/oldwiki/images/archive/f/f6/20080831052713!Screenshot.jpg differ
diff --git a/oldwiki/images/archive/f/f7/20070609032857!Ss_postlogic01.png b/oldwiki/images/archive/f/f7/20070609032857!Ss_postlogic01.png
new file mode 100644 (file)
index 0000000..631c84a
Binary files /dev/null and b/oldwiki/images/archive/f/f7/20070609032857!Ss_postlogic01.png differ
diff --git a/oldwiki/images/b/b0/Openbox-elementary3.png b/oldwiki/images/b/b0/Openbox-elementary3.png
new file mode 100644 (file)
index 0000000..e20f640
Binary files /dev/null and b/oldwiki/images/b/b0/Openbox-elementary3.png differ
diff --git a/oldwiki/images/b/b0/Openbox.jpg b/oldwiki/images/b/b0/Openbox.jpg
new file mode 100644 (file)
index 0000000..e124db0
Binary files /dev/null and b/oldwiki/images/b/b0/Openbox.jpg differ
diff --git a/oldwiki/images/b/b1/FreeBSD_Ob3.4-20070717.png b/oldwiki/images/b/b1/FreeBSD_Ob3.4-20070717.png
new file mode 100644 (file)
index 0000000..2079791
Binary files /dev/null and b/oldwiki/images/b/b1/FreeBSD_Ob3.4-20070717.png differ
diff --git a/oldwiki/images/b/b2/2007-06-29.jpg b/oldwiki/images/b/b2/2007-06-29.jpg
new file mode 100644 (file)
index 0000000..a915a28
Binary files /dev/null and b/oldwiki/images/b/b2/2007-06-29.jpg differ
diff --git a/oldwiki/images/b/b2/MoveFromEdge.png b/oldwiki/images/b/b2/MoveFromEdge.png
new file mode 100644 (file)
index 0000000..16d0593
Binary files /dev/null and b/oldwiki/images/b/b2/MoveFromEdge.png differ
diff --git a/oldwiki/images/b/b7/Dct_screenshot.jpg b/oldwiki/images/b/b7/Dct_screenshot.jpg
new file mode 100644 (file)
index 0000000..c041216
Binary files /dev/null and b/oldwiki/images/b/b7/Dct_screenshot.jpg differ
diff --git a/oldwiki/images/b/b7/NewMoreMenu.png b/oldwiki/images/b/b7/NewMoreMenu.png
new file mode 100644 (file)
index 0000000..234bcb9
Binary files /dev/null and b/oldwiki/images/b/b7/NewMoreMenu.png differ
diff --git a/oldwiki/images/b/b7/TrueTransparentWindows.png b/oldwiki/images/b/b7/TrueTransparentWindows.png
new file mode 100644 (file)
index 0000000..40dd8d5
Binary files /dev/null and b/oldwiki/images/b/b7/TrueTransparentWindows.png differ
diff --git a/oldwiki/images/b/b8/12-16-2003_04;46;30PM.jpg b/oldwiki/images/b/b8/12-16-2003_04;46;30PM.jpg
new file mode 100644 (file)
index 0000000..21b6fd2
Binary files /dev/null and b/oldwiki/images/b/b8/12-16-2003_04;46;30PM.jpg differ
diff --git a/oldwiki/images/b/ba/ObConfAppearance.png b/oldwiki/images/b/ba/ObConfAppearance.png
new file mode 100644 (file)
index 0000000..1ee4f94
Binary files /dev/null and b/oldwiki/images/b/ba/ObConfAppearance.png differ
diff --git a/oldwiki/images/b/bc/2007-06-25.png b/oldwiki/images/b/bc/2007-06-25.png
new file mode 100644 (file)
index 0000000..96dd105
Binary files /dev/null and b/oldwiki/images/b/bc/2007-06-25.png differ
diff --git a/oldwiki/images/b/bd/NewDefaultTitlebarButtons.png b/oldwiki/images/b/bd/NewDefaultTitlebarButtons.png
new file mode 100644 (file)
index 0000000..c6932b1
Binary files /dev/null and b/oldwiki/images/b/bd/NewDefaultTitlebarButtons.png differ
diff --git a/oldwiki/images/b/be/Ss6.png b/oldwiki/images/b/be/Ss6.png
new file mode 100644 (file)
index 0000000..5f1561b
Binary files /dev/null and b/oldwiki/images/b/be/Ss6.png differ
diff --git a/oldwiki/images/b/bf/GnomeMenuInOpenbox.png b/oldwiki/images/b/bf/GnomeMenuInOpenbox.png
new file mode 100644 (file)
index 0000000..e8cd54f
Binary files /dev/null and b/oldwiki/images/b/bf/GnomeMenuInOpenbox.png differ
diff --git a/oldwiki/images/c/c3/Spatial-vi-cheatsheet2-WVGA.png b/oldwiki/images/c/c3/Spatial-vi-cheatsheet2-WVGA.png
new file mode 100644 (file)
index 0000000..cc636ac
Binary files /dev/null and b/oldwiki/images/c/c3/Spatial-vi-cheatsheet2-WVGA.png differ
diff --git a/oldwiki/images/c/c4/2010-04-05-215307_1024x768_scrot.png b/oldwiki/images/c/c4/2010-04-05-215307_1024x768_scrot.png
new file mode 100644 (file)
index 0000000..b40a8c5
Binary files /dev/null and b/oldwiki/images/c/c4/2010-04-05-215307_1024x768_scrot.png differ
diff --git a/oldwiki/images/c/c5/Openbox-72.png b/oldwiki/images/c/c5/Openbox-72.png
new file mode 100644 (file)
index 0000000..856eb3b
Binary files /dev/null and b/oldwiki/images/c/c5/Openbox-72.png differ
diff --git a/oldwiki/images/c/c5/Openbox3_28_03_08.jpg b/oldwiki/images/c/c5/Openbox3_28_03_08.jpg
new file mode 100644 (file)
index 0000000..a77bb5b
Binary files /dev/null and b/oldwiki/images/c/c5/Openbox3_28_03_08.jpg differ
diff --git a/oldwiki/images/c/c5/Openboxshot1.jpg b/oldwiki/images/c/c5/Openboxshot1.jpg
new file mode 100644 (file)
index 0000000..22d6269
Binary files /dev/null and b/oldwiki/images/c/c5/Openboxshot1.jpg differ
diff --git a/oldwiki/images/c/ca/IconifyAnimation.ogg b/oldwiki/images/c/ca/IconifyAnimation.ogg
new file mode 100644 (file)
index 0000000..1d00f75
Binary files /dev/null and b/oldwiki/images/c/ca/IconifyAnimation.ogg differ
diff --git a/oldwiki/images/c/cb/Openboxscreenshot.png b/oldwiki/images/c/cb/Openboxscreenshot.png
new file mode 100644 (file)
index 0000000..29a584b
Binary files /dev/null and b/oldwiki/images/c/cb/Openboxscreenshot.png differ
diff --git a/oldwiki/images/c/cc/2010-04-05-145901_1280x800_scrot.jpg b/oldwiki/images/c/cc/2010-04-05-145901_1280x800_scrot.jpg
new file mode 100644 (file)
index 0000000..93538bc
Binary files /dev/null and b/oldwiki/images/c/cc/2010-04-05-145901_1280x800_scrot.jpg differ
diff --git a/oldwiki/images/d/d1/2008-05-08-1024x768-Crunchbang.png b/oldwiki/images/d/d1/2008-05-08-1024x768-Crunchbang.png
new file mode 100644 (file)
index 0000000..2b7862c
Binary files /dev/null and b/oldwiki/images/d/d1/2008-05-08-1024x768-Crunchbang.png differ
diff --git a/oldwiki/images/d/d2/NewTitleSeparatorColors.png b/oldwiki/images/d/d2/NewTitleSeparatorColors.png
new file mode 100644 (file)
index 0000000..ee9e746
Binary files /dev/null and b/oldwiki/images/d/d2/NewTitleSeparatorColors.png differ
diff --git a/oldwiki/images/d/d2/Spatial-vi-cheatsheet-WVGA.png b/oldwiki/images/d/d2/Spatial-vi-cheatsheet-WVGA.png
new file mode 100644 (file)
index 0000000..4293d18
Binary files /dev/null and b/oldwiki/images/d/d2/Spatial-vi-cheatsheet-WVGA.png differ
diff --git a/oldwiki/images/d/d7/Debian_lenny_Openbox_3.4.7.2.png b/oldwiki/images/d/d7/Debian_lenny_Openbox_3.4.7.2.png
new file mode 100644 (file)
index 0000000..2dd7d48
Binary files /dev/null and b/oldwiki/images/d/d7/Debian_lenny_Openbox_3.4.7.2.png differ
diff --git a/oldwiki/images/d/d7/MSLDNI.png b/oldwiki/images/d/d7/MSLDNI.png
new file mode 100644 (file)
index 0000000..996a9ef
Binary files /dev/null and b/oldwiki/images/d/d7/MSLDNI.png differ
diff --git a/oldwiki/images/d/dc/Shot.png b/oldwiki/images/d/dc/Shot.png
new file mode 100644 (file)
index 0000000..6f07549
Binary files /dev/null and b/oldwiki/images/d/dc/Shot.png differ
diff --git a/oldwiki/images/d/df/Laen-screenshot-080210213623.jpg b/oldwiki/images/d/df/Laen-screenshot-080210213623.jpg
new file mode 100644 (file)
index 0000000..42f1796
Binary files /dev/null and b/oldwiki/images/d/df/Laen-screenshot-080210213623.jpg differ
diff --git a/oldwiki/images/deleted/.htaccess b/oldwiki/images/deleted/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/oldwiki/images/deleted/p/e/p/index.html b/oldwiki/images/deleted/p/e/p/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/oldwiki/images/deleted/p/e/p/pep7xdluwg0j82hjuq3wmhhuj2erk1p.jpg b/oldwiki/images/deleted/p/e/p/pep7xdluwg0j82hjuq3wmhhuj2erk1p.jpg
new file mode 100644 (file)
index 0000000..441e9ab
Binary files /dev/null and b/oldwiki/images/deleted/p/e/p/pep7xdluwg0j82hjuq3wmhhuj2erk1p.jpg differ
diff --git a/oldwiki/images/e/e0/ObCom.gif b/oldwiki/images/e/e0/ObCom.gif
new file mode 100644 (file)
index 0000000..7830d7a
Binary files /dev/null and b/oldwiki/images/e/e0/ObCom.gif differ
diff --git a/oldwiki/images/e/e0/Openbox_chg.jpg b/oldwiki/images/e/e0/Openbox_chg.jpg
new file mode 100644 (file)
index 0000000..1b2b3b4
Binary files /dev/null and b/oldwiki/images/e/e0/Openbox_chg.jpg differ
diff --git a/oldwiki/images/e/e2/Openbox-debian.jpg b/oldwiki/images/e/e2/Openbox-debian.jpg
new file mode 100644 (file)
index 0000000..06849b8
Binary files /dev/null and b/oldwiki/images/e/e2/Openbox-debian.jpg differ
diff --git a/oldwiki/images/e/e4/Video.png b/oldwiki/images/e/e4/Video.png
new file mode 100644 (file)
index 0000000..3e4ced5
Binary files /dev/null and b/oldwiki/images/e/e4/Video.png differ
diff --git a/oldwiki/images/e/e6/KickerStartupNotification.png b/oldwiki/images/e/e6/KickerStartupNotification.png
new file mode 100644 (file)
index 0000000..6888633
Binary files /dev/null and b/oldwiki/images/e/e6/KickerStartupNotification.png differ
diff --git a/oldwiki/images/e/e6/Openbox_30_04_08.jpg b/oldwiki/images/e/e6/Openbox_30_04_08.jpg
new file mode 100644 (file)
index 0000000..0c4a695
Binary files /dev/null and b/oldwiki/images/e/e6/Openbox_30_04_08.jpg differ
diff --git a/oldwiki/images/e/e6/RSS.png b/oldwiki/images/e/e6/RSS.png
new file mode 100644 (file)
index 0000000..b3c949d
Binary files /dev/null and b/oldwiki/images/e/e6/RSS.png differ
diff --git a/oldwiki/images/e/ea/050310075012obox.jpg b/oldwiki/images/e/ea/050310075012obox.jpg
new file mode 100644 (file)
index 0000000..42ca018
Binary files /dev/null and b/oldwiki/images/e/ea/050310075012obox.jpg differ
diff --git a/oldwiki/images/e/ee/Desktop-2008-04-02.png b/oldwiki/images/e/ee/Desktop-2008-04-02.png
new file mode 100644 (file)
index 0000000..d1ad4bc
Binary files /dev/null and b/oldwiki/images/e/ee/Desktop-2008-04-02.png differ
diff --git a/oldwiki/images/f/f0/ObConfDesktops.png b/oldwiki/images/f/f0/ObConfDesktops.png
new file mode 100644 (file)
index 0000000..f40b7eb
Binary files /dev/null and b/oldwiki/images/f/f0/ObConfDesktops.png differ
diff --git a/oldwiki/images/f/f0/Openboxscreenshot3.png b/oldwiki/images/f/f0/Openboxscreenshot3.png
new file mode 100644 (file)
index 0000000..02496d0
Binary files /dev/null and b/oldwiki/images/f/f0/Openboxscreenshot3.png differ
diff --git a/oldwiki/images/f/f0/Openzen13.png b/oldwiki/images/f/f0/Openzen13.png
new file mode 100644 (file)
index 0000000..c04c92d
Binary files /dev/null and b/oldwiki/images/f/f0/Openzen13.png differ
diff --git a/oldwiki/images/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png b/oldwiki/images/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png
new file mode 100644 (file)
index 0000000..5d76213
Binary files /dev/null and b/oldwiki/images/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png differ
diff --git a/oldwiki/images/f/f4/Ss_obconfblackness.jpg b/oldwiki/images/f/f4/Ss_obconfblackness.jpg
new file mode 100644 (file)
index 0000000..3bd387f
Binary files /dev/null and b/oldwiki/images/f/f4/Ss_obconfblackness.jpg differ
diff --git a/oldwiki/images/f/f5/Arch_ob.jpg b/oldwiki/images/f/f5/Arch_ob.jpg
new file mode 100644 (file)
index 0000000..cd8f130
Binary files /dev/null and b/oldwiki/images/f/f5/Arch_ob.jpg differ
diff --git a/oldwiki/images/f/f5/IconlessWindows.png b/oldwiki/images/f/f5/IconlessWindows.png
new file mode 100644 (file)
index 0000000..6e8b170
Binary files /dev/null and b/oldwiki/images/f/f5/IconlessWindows.png differ
diff --git a/oldwiki/images/f/f5/OpenboxStandalone.jpg b/oldwiki/images/f/f5/OpenboxStandalone.jpg
new file mode 100644 (file)
index 0000000..cf2d402
Binary files /dev/null and b/oldwiki/images/f/f5/OpenboxStandalone.jpg differ
diff --git a/oldwiki/images/f/f6/Screenshot.jpg b/oldwiki/images/f/f6/Screenshot.jpg
new file mode 100644 (file)
index 0000000..49fb32b
Binary files /dev/null and b/oldwiki/images/f/f6/Screenshot.jpg differ
diff --git a/oldwiki/images/f/f7/Ss_postlogic01.png b/oldwiki/images/f/f7/Ss_postlogic01.png
new file mode 100644 (file)
index 0000000..dd070c4
Binary files /dev/null and b/oldwiki/images/f/f7/Ss_postlogic01.png differ
diff --git a/oldwiki/images/f/fa/CLIM.png b/oldwiki/images/f/fa/CLIM.png
new file mode 100644 (file)
index 0000000..a9334af
Binary files /dev/null and b/oldwiki/images/f/fa/CLIM.png differ
diff --git a/oldwiki/images/f/ff/Important.png b/oldwiki/images/f/ff/Important.png
new file mode 100644 (file)
index 0000000..4c5599a
Binary files /dev/null and b/oldwiki/images/f/ff/Important.png differ
diff --git a/oldwiki/images/temp/1/19/20091025104526!2009-10-25--1256466652_1280x1024_scrot.png b/oldwiki/images/temp/1/19/20091025104526!2009-10-25--1256466652_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..c1ad5ac
Binary files /dev/null and b/oldwiki/images/temp/1/19/20091025104526!2009-10-25--1256466652_1280x1024_scrot.png differ
diff --git a/oldwiki/images/temp/4/46/20100321153501!Crunchbang_openbox.png b/oldwiki/images/temp/4/46/20100321153501!Crunchbang_openbox.png
new file mode 100644 (file)
index 0000000..640ee34
Binary files /dev/null and b/oldwiki/images/temp/4/46/20100321153501!Crunchbang_openbox.png differ
diff --git a/oldwiki/images/temp/6/63/20090610034656!ObCom.png b/oldwiki/images/temp/6/63/20090610034656!ObCom.png
new file mode 100644 (file)
index 0000000..0870d28
Binary files /dev/null and b/oldwiki/images/temp/6/63/20090610034656!ObCom.png differ
diff --git a/oldwiki/images/temp/f/f5/20100407010156!OpenboxStandalone.jpg b/oldwiki/images/temp/f/f5/20100407010156!OpenboxStandalone.jpg
new file mode 100644 (file)
index 0000000..92dadae
Binary files /dev/null and b/oldwiki/images/temp/f/f5/20100407010156!OpenboxStandalone.jpg differ
diff --git a/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/120px-Screenshot-openbox-pretty-jrnorman.png b/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/120px-Screenshot-openbox-pretty-jrnorman.png
new file mode 100644 (file)
index 0000000..9cafa73
Binary files /dev/null and b/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/120px-Screenshot-openbox-pretty-jrnorman.png differ
diff --git a/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/180px-Screenshot-openbox-pretty-jrnorman.png b/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/180px-Screenshot-openbox-pretty-jrnorman.png
new file mode 100644 (file)
index 0000000..bb34425
Binary files /dev/null and b/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/180px-Screenshot-openbox-pretty-jrnorman.png differ
diff --git a/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/800px-Screenshot-openbox-pretty-jrnorman.png b/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/800px-Screenshot-openbox-pretty-jrnorman.png
new file mode 100644 (file)
index 0000000..1d5595b
Binary files /dev/null and b/oldwiki/images/thumb/0/05/Screenshot-openbox-pretty-jrnorman.png/800px-Screenshot-openbox-pretty-jrnorman.png differ
diff --git a/oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/120px-GkrellShoot_09-28-08_235222.png b/oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/120px-GkrellShoot_09-28-08_235222.png
new file mode 100644 (file)
index 0000000..b93d6da
Binary files /dev/null and b/oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/120px-GkrellShoot_09-28-08_235222.png differ
diff --git a/oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/750px-GkrellShoot_09-28-08_235222.png b/oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/750px-GkrellShoot_09-28-08_235222.png
new file mode 100644 (file)
index 0000000..a4615d7
Binary files /dev/null and b/oldwiki/images/thumb/0/0c/GkrellShoot_09-28-08_235222.png/750px-GkrellShoot_09-28-08_235222.png differ
diff --git a/oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/120px-OpenBox_on_blackPanther.jpg b/oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/120px-OpenBox_on_blackPanther.jpg
new file mode 100644 (file)
index 0000000..0833f02
Binary files /dev/null and b/oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/120px-OpenBox_on_blackPanther.jpg differ
diff --git a/oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/800px-OpenBox_on_blackPanther.jpg b/oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/800px-OpenBox_on_blackPanther.jpg
new file mode 100644 (file)
index 0000000..737e354
Binary files /dev/null and b/oldwiki/images/thumb/0/0e/OpenBox_on_blackPanther.jpg/800px-OpenBox_on_blackPanther.jpg differ
diff --git a/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/120px-NewClearlooksTheme.png b/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/120px-NewClearlooksTheme.png
new file mode 100644 (file)
index 0000000..09d98de
Binary files /dev/null and b/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/120px-NewClearlooksTheme.png differ
diff --git a/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/150px-NewClearlooksTheme.png b/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/150px-NewClearlooksTheme.png
new file mode 100644 (file)
index 0000000..a2c371a
Binary files /dev/null and b/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/150px-NewClearlooksTheme.png differ
diff --git a/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/180px-NewClearlooksTheme.png b/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/180px-NewClearlooksTheme.png
new file mode 100644 (file)
index 0000000..5b44762
Binary files /dev/null and b/oldwiki/images/thumb/0/0f/NewClearlooksTheme.png/180px-NewClearlooksTheme.png differ
diff --git a/oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/120px-GkrellShoot_09-28-08_235222.jpg b/oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/120px-GkrellShoot_09-28-08_235222.jpg
new file mode 100644 (file)
index 0000000..4c43a28
Binary files /dev/null and b/oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/120px-GkrellShoot_09-28-08_235222.jpg differ
diff --git a/oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/750px-GkrellShoot_09-28-08_235222.jpg b/oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/750px-GkrellShoot_09-28-08_235222.jpg
new file mode 100644 (file)
index 0000000..c9d0bb8
Binary files /dev/null and b/oldwiki/images/thumb/1/12/GkrellShoot_09-28-08_235222.jpg/750px-GkrellShoot_09-28-08_235222.jpg differ
diff --git a/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/120px-Arch-openbox-rss.jpg b/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/120px-Arch-openbox-rss.jpg
new file mode 100644 (file)
index 0000000..8d27f40
Binary files /dev/null and b/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/120px-Arch-openbox-rss.jpg differ
diff --git a/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/180px-Arch-openbox-rss.jpg b/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/180px-Arch-openbox-rss.jpg
new file mode 100644 (file)
index 0000000..04e9fee
Binary files /dev/null and b/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/180px-Arch-openbox-rss.jpg differ
diff --git a/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/800px-Arch-openbox-rss.jpg b/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/800px-Arch-openbox-rss.jpg
new file mode 100644 (file)
index 0000000..7a4c035
Binary files /dev/null and b/oldwiki/images/thumb/1/13/Arch-openbox-rss.jpg/800px-Arch-openbox-rss.jpg differ
diff --git a/oldwiki/images/thumb/1/15/Openbox_130308.png/120px-Openbox_130308.png b/oldwiki/images/thumb/1/15/Openbox_130308.png/120px-Openbox_130308.png
new file mode 100644 (file)
index 0000000..c3059f9
Binary files /dev/null and b/oldwiki/images/thumb/1/15/Openbox_130308.png/120px-Openbox_130308.png differ
diff --git a/oldwiki/images/thumb/1/15/Openbox_130308.png/800px-Openbox_130308.png b/oldwiki/images/thumb/1/15/Openbox_130308.png/800px-Openbox_130308.png
new file mode 100644 (file)
index 0000000..0d8bc36
Binary files /dev/null and b/oldwiki/images/thumb/1/15/Openbox_130308.png/800px-Openbox_130308.png differ
diff --git a/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/120px-Flx-2007-08-08.3.png b/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/120px-Flx-2007-08-08.3.png
new file mode 100644 (file)
index 0000000..51347f9
Binary files /dev/null and b/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/120px-Flx-2007-08-08.3.png differ
diff --git a/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/180px-Flx-2007-08-08.3.png b/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/180px-Flx-2007-08-08.3.png
new file mode 100644 (file)
index 0000000..48c1b11
Binary files /dev/null and b/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/180px-Flx-2007-08-08.3.png differ
diff --git a/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/800px-Flx-2007-08-08.3.png b/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/800px-Flx-2007-08-08.3.png
new file mode 100644 (file)
index 0000000..3e86d68
Binary files /dev/null and b/oldwiki/images/thumb/1/16/Flx-2007-08-08.3.png/800px-Flx-2007-08-08.3.png differ
diff --git a/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/120px-OgMaciel_20070607.png b/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/120px-OgMaciel_20070607.png
new file mode 100644 (file)
index 0000000..6b9eef5
Binary files /dev/null and b/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/120px-OgMaciel_20070607.png differ
diff --git a/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/180px-OgMaciel_20070607.png b/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/180px-OgMaciel_20070607.png
new file mode 100644 (file)
index 0000000..7f8b656
Binary files /dev/null and b/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/180px-OgMaciel_20070607.png differ
diff --git a/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/800px-OgMaciel_20070607.png b/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/800px-OgMaciel_20070607.png
new file mode 100644 (file)
index 0000000..80bdc80
Binary files /dev/null and b/oldwiki/images/thumb/1/17/OgMaciel_20070607.png/800px-OgMaciel_20070607.png differ
diff --git a/oldwiki/images/thumb/1/19/My_openbox.jpg/120px-My_openbox.jpg b/oldwiki/images/thumb/1/19/My_openbox.jpg/120px-My_openbox.jpg
new file mode 100644 (file)
index 0000000..9b876ec
Binary files /dev/null and b/oldwiki/images/thumb/1/19/My_openbox.jpg/120px-My_openbox.jpg differ
diff --git a/oldwiki/images/thumb/1/19/My_openbox.jpg/800px-My_openbox.jpg b/oldwiki/images/thumb/1/19/My_openbox.jpg/800px-My_openbox.jpg
new file mode 100644 (file)
index 0000000..6915595
Binary files /dev/null and b/oldwiki/images/thumb/1/19/My_openbox.jpg/800px-My_openbox.jpg differ
diff --git a/oldwiki/images/thumb/1/1a/Screenshot-43.png/120px-Screenshot-43.png b/oldwiki/images/thumb/1/1a/Screenshot-43.png/120px-Screenshot-43.png
new file mode 100644 (file)
index 0000000..5430b89
Binary files /dev/null and b/oldwiki/images/thumb/1/1a/Screenshot-43.png/120px-Screenshot-43.png differ
diff --git a/oldwiki/images/thumb/1/1a/Screenshot-43.png/180px-Screenshot-43.png b/oldwiki/images/thumb/1/1a/Screenshot-43.png/180px-Screenshot-43.png
new file mode 100644 (file)
index 0000000..2ed15e6
Binary files /dev/null and b/oldwiki/images/thumb/1/1a/Screenshot-43.png/180px-Screenshot-43.png differ
diff --git a/oldwiki/images/thumb/1/1a/Screenshot-43.png/800px-Screenshot-43.png b/oldwiki/images/thumb/1/1a/Screenshot-43.png/800px-Screenshot-43.png
new file mode 100644 (file)
index 0000000..f9bc8af
Binary files /dev/null and b/oldwiki/images/thumb/1/1a/Screenshot-43.png/800px-Screenshot-43.png differ
diff --git a/oldwiki/images/thumb/1/1b/2009-11-12-181109_576x360_scrot-thumb.png/120px-2009-11-12-181109_576x360_scrot-thumb.png b/oldwiki/images/thumb/1/1b/2009-11-12-181109_576x360_scrot-thumb.png/120px-2009-11-12-181109_576x360_scrot-thumb.png
new file mode 100644 (file)
index 0000000..1b14436
Binary files /dev/null and b/oldwiki/images/thumb/1/1b/2009-11-12-181109_576x360_scrot-thumb.png/120px-2009-11-12-181109_576x360_scrot-thumb.png differ
diff --git a/oldwiki/images/thumb/2/22/Obox.png/120px-Obox.png b/oldwiki/images/thumb/2/22/Obox.png/120px-Obox.png
new file mode 100644 (file)
index 0000000..10fb6f6
Binary files /dev/null and b/oldwiki/images/thumb/2/22/Obox.png/120px-Obox.png differ
diff --git a/oldwiki/images/thumb/2/22/Obox.png/800px-Obox.png b/oldwiki/images/thumb/2/22/Obox.png/800px-Obox.png
new file mode 100644 (file)
index 0000000..caa8380
Binary files /dev/null and b/oldwiki/images/thumb/2/22/Obox.png/800px-Obox.png differ
diff --git a/oldwiki/images/thumb/2/23/050810141937.jpg/120px-050810141937.jpg b/oldwiki/images/thumb/2/23/050810141937.jpg/120px-050810141937.jpg
new file mode 100644 (file)
index 0000000..4808caa
Binary files /dev/null and b/oldwiki/images/thumb/2/23/050810141937.jpg/120px-050810141937.jpg differ
diff --git a/oldwiki/images/thumb/2/23/050810141937.jpg/180px-050810141937.jpg b/oldwiki/images/thumb/2/23/050810141937.jpg/180px-050810141937.jpg
new file mode 100644 (file)
index 0000000..08e710a
Binary files /dev/null and b/oldwiki/images/thumb/2/23/050810141937.jpg/180px-050810141937.jpg differ
diff --git a/oldwiki/images/thumb/2/23/050810141937.jpg/800px-050810141937.jpg b/oldwiki/images/thumb/2/23/050810141937.jpg/800px-050810141937.jpg
new file mode 100644 (file)
index 0000000..64a36be
Binary files /dev/null and b/oldwiki/images/thumb/2/23/050810141937.jpg/800px-050810141937.jpg differ
diff --git a/oldwiki/images/thumb/2/23/Openboxscreenshot2.png/120px-Openboxscreenshot2.png b/oldwiki/images/thumb/2/23/Openboxscreenshot2.png/120px-Openboxscreenshot2.png
new file mode 100644 (file)
index 0000000..949180b
Binary files /dev/null and b/oldwiki/images/thumb/2/23/Openboxscreenshot2.png/120px-Openboxscreenshot2.png differ
diff --git a/oldwiki/images/thumb/2/23/Openboxscreenshot2.png/800px-Openboxscreenshot2.png b/oldwiki/images/thumb/2/23/Openboxscreenshot2.png/800px-Openboxscreenshot2.png
new file mode 100644 (file)
index 0000000..6b5a32c
Binary files /dev/null and b/oldwiki/images/thumb/2/23/Openboxscreenshot2.png/800px-Openboxscreenshot2.png differ
diff --git a/oldwiki/images/thumb/2/24/Scrot_smoon.png/120px-Scrot_smoon.png b/oldwiki/images/thumb/2/24/Scrot_smoon.png/120px-Scrot_smoon.png
new file mode 100644 (file)
index 0000000..52243a3
Binary files /dev/null and b/oldwiki/images/thumb/2/24/Scrot_smoon.png/120px-Scrot_smoon.png differ
diff --git a/oldwiki/images/thumb/2/24/Scrot_smoon.png/169px-Scrot_smoon.png b/oldwiki/images/thumb/2/24/Scrot_smoon.png/169px-Scrot_smoon.png
new file mode 100644 (file)
index 0000000..79bced3
Binary files /dev/null and b/oldwiki/images/thumb/2/24/Scrot_smoon.png/169px-Scrot_smoon.png differ
diff --git a/oldwiki/images/thumb/2/24/Scrot_smoon.png/180px-Scrot_smoon.png b/oldwiki/images/thumb/2/24/Scrot_smoon.png/180px-Scrot_smoon.png
new file mode 100644 (file)
index 0000000..14a01bc
Binary files /dev/null and b/oldwiki/images/thumb/2/24/Scrot_smoon.png/180px-Scrot_smoon.png differ
diff --git a/oldwiki/images/thumb/2/24/Scrot_smoon.png/750px-Scrot_smoon.png b/oldwiki/images/thumb/2/24/Scrot_smoon.png/750px-Scrot_smoon.png
new file mode 100644 (file)
index 0000000..2cf55a2
Binary files /dev/null and b/oldwiki/images/thumb/2/24/Scrot_smoon.png/750px-Scrot_smoon.png differ
diff --git a/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/120px-HostnameInTitlebar.png b/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/120px-HostnameInTitlebar.png
new file mode 100644 (file)
index 0000000..349f2e9
Binary files /dev/null and b/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/120px-HostnameInTitlebar.png differ
diff --git a/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/150px-HostnameInTitlebar.png b/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/150px-HostnameInTitlebar.png
new file mode 100644 (file)
index 0000000..28aa97a
Binary files /dev/null and b/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/150px-HostnameInTitlebar.png differ
diff --git a/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/180px-HostnameInTitlebar.png b/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/180px-HostnameInTitlebar.png
new file mode 100644 (file)
index 0000000..39690c0
Binary files /dev/null and b/oldwiki/images/thumb/2/26/HostnameInTitlebar.png/180px-HostnameInTitlebar.png differ
diff --git a/oldwiki/images/thumb/2/27/NewParentrelativeTextures.png/120px-NewParentrelativeTextures.png b/oldwiki/images/thumb/2/27/NewParentrelativeTextures.png/120px-NewParentrelativeTextures.png
new file mode 100644 (file)
index 0000000..22cf465
Binary files /dev/null and b/oldwiki/images/thumb/2/27/NewParentrelativeTextures.png/120px-NewParentrelativeTextures.png differ
diff --git a/oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/120px-Openboxshot2010.01.29-1.jpg b/oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/120px-Openboxshot2010.01.29-1.jpg
new file mode 100644 (file)
index 0000000..e704eb9
Binary files /dev/null and b/oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/120px-Openboxshot2010.01.29-1.jpg differ
diff --git a/oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/800px-Openboxshot2010.01.29-1.jpg b/oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/800px-Openboxshot2010.01.29-1.jpg
new file mode 100644 (file)
index 0000000..6ff0be4
Binary files /dev/null and b/oldwiki/images/thumb/2/27/Openboxshot2010.01.29-1.jpg/800px-Openboxshot2010.01.29-1.jpg differ
diff --git a/oldwiki/images/thumb/2/2b/Openbox-inko.png/120px-Openbox-inko.png b/oldwiki/images/thumb/2/2b/Openbox-inko.png/120px-Openbox-inko.png
new file mode 100644 (file)
index 0000000..3326a43
Binary files /dev/null and b/oldwiki/images/thumb/2/2b/Openbox-inko.png/120px-Openbox-inko.png differ
diff --git a/oldwiki/images/thumb/2/2b/Openbox-inko.png/1280px-Openbox-inko.png b/oldwiki/images/thumb/2/2b/Openbox-inko.png/1280px-Openbox-inko.png
new file mode 100644 (file)
index 0000000..9c453ba
Binary files /dev/null and b/oldwiki/images/thumb/2/2b/Openbox-inko.png/1280px-Openbox-inko.png differ
diff --git a/oldwiki/images/thumb/2/2b/Openbox-inko.png/180px-Openbox-inko.png b/oldwiki/images/thumb/2/2b/Openbox-inko.png/180px-Openbox-inko.png
new file mode 100644 (file)
index 0000000..3c3fb4b
Binary files /dev/null and b/oldwiki/images/thumb/2/2b/Openbox-inko.png/180px-Openbox-inko.png differ
diff --git a/oldwiki/images/thumb/2/2b/Openbox-inko.png/800px-Openbox-inko.png b/oldwiki/images/thumb/2/2b/Openbox-inko.png/800px-Openbox-inko.png
new file mode 100644 (file)
index 0000000..4df987a
Binary files /dev/null and b/oldwiki/images/thumb/2/2b/Openbox-inko.png/800px-Openbox-inko.png differ
diff --git a/oldwiki/images/thumb/3/33/Screen_hf.png/120px-Screen_hf.png b/oldwiki/images/thumb/3/33/Screen_hf.png/120px-Screen_hf.png
new file mode 100644 (file)
index 0000000..f790d33
Binary files /dev/null and b/oldwiki/images/thumb/3/33/Screen_hf.png/120px-Screen_hf.png differ
diff --git a/oldwiki/images/thumb/3/33/Screen_hf.png/800px-Screen_hf.png b/oldwiki/images/thumb/3/33/Screen_hf.png/800px-Screen_hf.png
new file mode 100644 (file)
index 0000000..d8ac8ef
Binary files /dev/null and b/oldwiki/images/thumb/3/33/Screen_hf.png/800px-Screen_hf.png differ
diff --git a/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/120px-Spatial-vi-cheatsheet2-WUXGA.png b/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/120px-Spatial-vi-cheatsheet2-WUXGA.png
new file mode 100644 (file)
index 0000000..7027701
Binary files /dev/null and b/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/120px-Spatial-vi-cheatsheet2-WUXGA.png differ
diff --git a/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/180px-Spatial-vi-cheatsheet2-WUXGA.png b/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/180px-Spatial-vi-cheatsheet2-WUXGA.png
new file mode 100644 (file)
index 0000000..f2aec76
Binary files /dev/null and b/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/180px-Spatial-vi-cheatsheet2-WUXGA.png differ
diff --git a/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/800px-Spatial-vi-cheatsheet2-WUXGA.png b/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/800px-Spatial-vi-cheatsheet2-WUXGA.png
new file mode 100644 (file)
index 0000000..604a792
Binary files /dev/null and b/oldwiki/images/thumb/3/33/Spatial-vi-cheatsheet2-WUXGA.png/800px-Spatial-vi-cheatsheet2-WUXGA.png differ
diff --git a/oldwiki/images/thumb/3/39/KDE-Openbox.png/120px-KDE-Openbox.png b/oldwiki/images/thumb/3/39/KDE-Openbox.png/120px-KDE-Openbox.png
new file mode 100644 (file)
index 0000000..396e29b
Binary files /dev/null and b/oldwiki/images/thumb/3/39/KDE-Openbox.png/120px-KDE-Openbox.png differ
diff --git a/oldwiki/images/thumb/3/39/KDE-Openbox.png/180px-KDE-Openbox.png b/oldwiki/images/thumb/3/39/KDE-Openbox.png/180px-KDE-Openbox.png
new file mode 100644 (file)
index 0000000..a04d5f7
Binary files /dev/null and b/oldwiki/images/thumb/3/39/KDE-Openbox.png/180px-KDE-Openbox.png differ
diff --git a/oldwiki/images/thumb/3/39/KDE-Openbox.png/800px-KDE-Openbox.png b/oldwiki/images/thumb/3/39/KDE-Openbox.png/800px-KDE-Openbox.png
new file mode 100644 (file)
index 0000000..4c92c1f
Binary files /dev/null and b/oldwiki/images/thumb/3/39/KDE-Openbox.png/800px-KDE-Openbox.png differ
diff --git a/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/120px-Bsoftgrey20100508.jpg b/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/120px-Bsoftgrey20100508.jpg
new file mode 100644 (file)
index 0000000..e6f38aa
Binary files /dev/null and b/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/120px-Bsoftgrey20100508.jpg differ
diff --git a/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/180px-Bsoftgrey20100508.jpg b/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/180px-Bsoftgrey20100508.jpg
new file mode 100644 (file)
index 0000000..1c873c5
Binary files /dev/null and b/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/180px-Bsoftgrey20100508.jpg differ
diff --git a/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/800px-Bsoftgrey20100508.jpg b/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/800px-Bsoftgrey20100508.jpg
new file mode 100644 (file)
index 0000000..b4745ac
Binary files /dev/null and b/oldwiki/images/thumb/3/3c/Bsoftgrey20100508.jpg/800px-Bsoftgrey20100508.jpg differ
diff --git a/oldwiki/images/thumb/3/3e/NewCombinedClientListMenu.png/88px-NewCombinedClientListMenu.png b/oldwiki/images/thumb/3/3e/NewCombinedClientListMenu.png/88px-NewCombinedClientListMenu.png
new file mode 100644 (file)
index 0000000..0c45bdc
Binary files /dev/null and b/oldwiki/images/thumb/3/3e/NewCombinedClientListMenu.png/88px-NewCombinedClientListMenu.png differ
diff --git a/oldwiki/images/thumb/4/41/Greenw.png/120px-Greenw.png b/oldwiki/images/thumb/4/41/Greenw.png/120px-Greenw.png
new file mode 100644 (file)
index 0000000..d40a8f2
Binary files /dev/null and b/oldwiki/images/thumb/4/41/Greenw.png/120px-Greenw.png differ
diff --git a/oldwiki/images/thumb/4/41/Greenw.png/180px-Greenw.png b/oldwiki/images/thumb/4/41/Greenw.png/180px-Greenw.png
new file mode 100644 (file)
index 0000000..29bf74a
Binary files /dev/null and b/oldwiki/images/thumb/4/41/Greenw.png/180px-Greenw.png differ
diff --git a/oldwiki/images/thumb/4/41/Greenw.png/800px-Greenw.png b/oldwiki/images/thumb/4/41/Greenw.png/800px-Greenw.png
new file mode 100644 (file)
index 0000000..f212e1e
Binary files /dev/null and b/oldwiki/images/thumb/4/41/Greenw.png/800px-Greenw.png differ
diff --git a/oldwiki/images/thumb/4/41/Screen.jpg/120px-Screen.jpg b/oldwiki/images/thumb/4/41/Screen.jpg/120px-Screen.jpg
new file mode 100644 (file)
index 0000000..c95c71b
Binary files /dev/null and b/oldwiki/images/thumb/4/41/Screen.jpg/120px-Screen.jpg differ
diff --git a/oldwiki/images/thumb/4/41/Screen.jpg/800px-Screen.jpg b/oldwiki/images/thumb/4/41/Screen.jpg/800px-Screen.jpg
new file mode 100644 (file)
index 0000000..e9c7a8f
Binary files /dev/null and b/oldwiki/images/thumb/4/41/Screen.jpg/800px-Screen.jpg differ
diff --git a/oldwiki/images/thumb/4/46/Crunchbang_openbox.png/120px-Crunchbang_openbox.png b/oldwiki/images/thumb/4/46/Crunchbang_openbox.png/120px-Crunchbang_openbox.png
new file mode 100644 (file)
index 0000000..1ffd939
Binary files /dev/null and b/oldwiki/images/thumb/4/46/Crunchbang_openbox.png/120px-Crunchbang_openbox.png differ
diff --git a/oldwiki/images/thumb/4/46/Crunchbang_openbox.png/800px-Crunchbang_openbox.png b/oldwiki/images/thumb/4/46/Crunchbang_openbox.png/800px-Crunchbang_openbox.png
new file mode 100644 (file)
index 0000000..964f6d9
Binary files /dev/null and b/oldwiki/images/thumb/4/46/Crunchbang_openbox.png/800px-Crunchbang_openbox.png differ
diff --git a/oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/120px-Tobu-pro-9-11-menu.jpg b/oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/120px-Tobu-pro-9-11-menu.jpg
new file mode 100644 (file)
index 0000000..f9886e4
Binary files /dev/null and b/oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/120px-Tobu-pro-9-11-menu.jpg differ
diff --git a/oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/800px-Tobu-pro-9-11-menu.jpg b/oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/800px-Tobu-pro-9-11-menu.jpg
new file mode 100644 (file)
index 0000000..ea10d15
Binary files /dev/null and b/oldwiki/images/thumb/4/47/Tobu-pro-9-11-menu.jpg/800px-Tobu-pro-9-11-menu.jpg differ
diff --git a/oldwiki/images/thumb/4/49/GNOMELogout.png/120px-GNOMELogout.png b/oldwiki/images/thumb/4/49/GNOMELogout.png/120px-GNOMELogout.png
new file mode 100644 (file)
index 0000000..5f4aefe
Binary files /dev/null and b/oldwiki/images/thumb/4/49/GNOMELogout.png/120px-GNOMELogout.png differ
diff --git a/oldwiki/images/thumb/4/49/GNOMELogout.png/180px-GNOMELogout.png b/oldwiki/images/thumb/4/49/GNOMELogout.png/180px-GNOMELogout.png
new file mode 100644 (file)
index 0000000..8fe17cb
Binary files /dev/null and b/oldwiki/images/thumb/4/49/GNOMELogout.png/180px-GNOMELogout.png differ
diff --git a/oldwiki/images/thumb/4/49/GNOMELogout.png/800px-GNOMELogout.png b/oldwiki/images/thumb/4/49/GNOMELogout.png/800px-GNOMELogout.png
new file mode 100644 (file)
index 0000000..1bdae8a
Binary files /dev/null and b/oldwiki/images/thumb/4/49/GNOMELogout.png/800px-GNOMELogout.png differ
diff --git a/oldwiki/images/thumb/4/49/Ktop.jpg/120px-Ktop.jpg b/oldwiki/images/thumb/4/49/Ktop.jpg/120px-Ktop.jpg
new file mode 100644 (file)
index 0000000..8e3f5d1
Binary files /dev/null and b/oldwiki/images/thumb/4/49/Ktop.jpg/120px-Ktop.jpg differ
diff --git a/oldwiki/images/thumb/4/49/Ktop.jpg/169px-Ktop.jpg b/oldwiki/images/thumb/4/49/Ktop.jpg/169px-Ktop.jpg
new file mode 100644 (file)
index 0000000..7cf5e5e
Binary files /dev/null and b/oldwiki/images/thumb/4/49/Ktop.jpg/169px-Ktop.jpg differ
diff --git a/oldwiki/images/thumb/4/49/Ktop.jpg/750px-Ktop.jpg b/oldwiki/images/thumb/4/49/Ktop.jpg/750px-Ktop.jpg
new file mode 100644 (file)
index 0000000..4def7e5
Binary files /dev/null and b/oldwiki/images/thumb/4/49/Ktop.jpg/750px-Ktop.jpg differ
diff --git a/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/120px-Spatial-vi-cheatsheet-WUXGA.png b/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/120px-Spatial-vi-cheatsheet-WUXGA.png
new file mode 100644 (file)
index 0000000..6b995f6
Binary files /dev/null and b/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/120px-Spatial-vi-cheatsheet-WUXGA.png differ
diff --git a/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/180px-Spatial-vi-cheatsheet-WUXGA.png b/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/180px-Spatial-vi-cheatsheet-WUXGA.png
new file mode 100644 (file)
index 0000000..69ab564
Binary files /dev/null and b/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/180px-Spatial-vi-cheatsheet-WUXGA.png differ
diff --git a/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/800px-Spatial-vi-cheatsheet-WUXGA.png b/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/800px-Spatial-vi-cheatsheet-WUXGA.png
new file mode 100644 (file)
index 0000000..376cee0
Binary files /dev/null and b/oldwiki/images/thumb/4/49/Spatial-vi-cheatsheet-WUXGA.png/800px-Spatial-vi-cheatsheet-WUXGA.png differ
diff --git a/oldwiki/images/thumb/4/4a/NewFocusDialog.png/120px-NewFocusDialog.png b/oldwiki/images/thumb/4/4a/NewFocusDialog.png/120px-NewFocusDialog.png
new file mode 100644 (file)
index 0000000..38dcd79
Binary files /dev/null and b/oldwiki/images/thumb/4/4a/NewFocusDialog.png/120px-NewFocusDialog.png differ
diff --git a/oldwiki/images/thumb/4/4a/NewFocusDialog.png/150px-NewFocusDialog.png b/oldwiki/images/thumb/4/4a/NewFocusDialog.png/150px-NewFocusDialog.png
new file mode 100644 (file)
index 0000000..93eeed6
Binary files /dev/null and b/oldwiki/images/thumb/4/4a/NewFocusDialog.png/150px-NewFocusDialog.png differ
diff --git a/oldwiki/images/thumb/4/4a/NewFocusDialog.png/180px-NewFocusDialog.png b/oldwiki/images/thumb/4/4a/NewFocusDialog.png/180px-NewFocusDialog.png
new file mode 100644 (file)
index 0000000..9609845
Binary files /dev/null and b/oldwiki/images/thumb/4/4a/NewFocusDialog.png/180px-NewFocusDialog.png differ
diff --git a/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/120px-Ss_OnyxTheme.png b/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/120px-Ss_OnyxTheme.png
new file mode 100644 (file)
index 0000000..64a5a7d
Binary files /dev/null and b/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/120px-Ss_OnyxTheme.png differ
diff --git a/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/180px-Ss_OnyxTheme.png b/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/180px-Ss_OnyxTheme.png
new file mode 100644 (file)
index 0000000..33bf739
Binary files /dev/null and b/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/180px-Ss_OnyxTheme.png differ
diff --git a/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/800px-Ss_OnyxTheme.png b/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/800px-Ss_OnyxTheme.png
new file mode 100644 (file)
index 0000000..f92f97f
Binary files /dev/null and b/oldwiki/images/thumb/4/4c/Ss_OnyxTheme.png/800px-Ss_OnyxTheme.png differ
diff --git a/oldwiki/images/thumb/4/4f/Vector.jpg/120px-Vector.jpg b/oldwiki/images/thumb/4/4f/Vector.jpg/120px-Vector.jpg
new file mode 100644 (file)
index 0000000..9fdcbab
Binary files /dev/null and b/oldwiki/images/thumb/4/4f/Vector.jpg/120px-Vector.jpg differ
diff --git a/oldwiki/images/thumb/4/4f/Vector.jpg/800px-Vector.jpg b/oldwiki/images/thumb/4/4f/Vector.jpg/800px-Vector.jpg
new file mode 100644 (file)
index 0000000..b249b7b
Binary files /dev/null and b/oldwiki/images/thumb/4/4f/Vector.jpg/800px-Vector.jpg differ
diff --git a/oldwiki/images/thumb/5/50/Breakage.png/120px-Breakage.png b/oldwiki/images/thumb/5/50/Breakage.png/120px-Breakage.png
new file mode 100644 (file)
index 0000000..fca6ea9
Binary files /dev/null and b/oldwiki/images/thumb/5/50/Breakage.png/120px-Breakage.png differ
diff --git a/oldwiki/images/thumb/5/50/Breakage.png/750px-Breakage.png b/oldwiki/images/thumb/5/50/Breakage.png/750px-Breakage.png
new file mode 100644 (file)
index 0000000..282a1ec
Binary files /dev/null and b/oldwiki/images/thumb/5/50/Breakage.png/750px-Breakage.png differ
diff --git a/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/120px-Sysrq-2006-11-03.png b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/120px-Sysrq-2006-11-03.png
new file mode 100644 (file)
index 0000000..93e524b
Binary files /dev/null and b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/120px-Sysrq-2006-11-03.png differ
diff --git a/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/1280px-Sysrq-2006-11-03.png b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/1280px-Sysrq-2006-11-03.png
new file mode 100644 (file)
index 0000000..274d1fe
Binary files /dev/null and b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/1280px-Sysrq-2006-11-03.png differ
diff --git a/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/180px-Sysrq-2006-11-03.png b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/180px-Sysrq-2006-11-03.png
new file mode 100644 (file)
index 0000000..fb7a971
Binary files /dev/null and b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/180px-Sysrq-2006-11-03.png differ
diff --git a/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/800px-Sysrq-2006-11-03.png b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/800px-Sysrq-2006-11-03.png
new file mode 100644 (file)
index 0000000..6a4c677
Binary files /dev/null and b/oldwiki/images/thumb/5/53/Sysrq-2006-11-03.png/800px-Sysrq-2006-11-03.png differ
diff --git a/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/120px-Boxtubeshot012509.jpg b/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/120px-Boxtubeshot012509.jpg
new file mode 100644 (file)
index 0000000..a90144a
Binary files /dev/null and b/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/120px-Boxtubeshot012509.jpg differ
diff --git a/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/180px-Boxtubeshot012509.jpg b/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/180px-Boxtubeshot012509.jpg
new file mode 100644 (file)
index 0000000..5b6eb92
Binary files /dev/null and b/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/180px-Boxtubeshot012509.jpg differ
diff --git a/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/800px-Boxtubeshot012509.jpg b/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/800px-Boxtubeshot012509.jpg
new file mode 100644 (file)
index 0000000..4d59bb3
Binary files /dev/null and b/oldwiki/images/thumb/5/55/Boxtubeshot012509.jpg/800px-Boxtubeshot012509.jpg differ
diff --git a/oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/120px-My_underwood-and-powderfinger_type.jpg b/oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/120px-My_underwood-and-powderfinger_type.jpg
new file mode 100644 (file)
index 0000000..197d4e4
Binary files /dev/null and b/oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/120px-My_underwood-and-powderfinger_type.jpg differ
diff --git a/oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/800px-My_underwood-and-powderfinger_type.jpg b/oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/800px-My_underwood-and-powderfinger_type.jpg
new file mode 100644 (file)
index 0000000..52c69d3
Binary files /dev/null and b/oldwiki/images/thumb/5/55/My_underwood-and-powderfinger_type.jpg/800px-My_underwood-and-powderfinger_type.jpg differ
diff --git a/oldwiki/images/thumb/5/56/Cowsay.png/120px-Cowsay.png b/oldwiki/images/thumb/5/56/Cowsay.png/120px-Cowsay.png
new file mode 100644 (file)
index 0000000..3cfd7dc
Binary files /dev/null and b/oldwiki/images/thumb/5/56/Cowsay.png/120px-Cowsay.png differ
diff --git a/oldwiki/images/thumb/5/56/Cowsay.png/640px-Cowsay.png b/oldwiki/images/thumb/5/56/Cowsay.png/640px-Cowsay.png
new file mode 100644 (file)
index 0000000..37b7930
Binary files /dev/null and b/oldwiki/images/thumb/5/56/Cowsay.png/640px-Cowsay.png differ
diff --git a/oldwiki/images/thumb/5/56/Cowsay.png/750px-Cowsay.png b/oldwiki/images/thumb/5/56/Cowsay.png/750px-Cowsay.png
new file mode 100644 (file)
index 0000000..7863577
Binary files /dev/null and b/oldwiki/images/thumb/5/56/Cowsay.png/750px-Cowsay.png differ
diff --git a/oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/120px-Bildschirmfoto-1.jpg b/oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/120px-Bildschirmfoto-1.jpg
new file mode 100644 (file)
index 0000000..6e737da
Binary files /dev/null and b/oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/120px-Bildschirmfoto-1.jpg differ
diff --git a/oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/800px-Bildschirmfoto-1.jpg b/oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/800px-Bildschirmfoto-1.jpg
new file mode 100644 (file)
index 0000000..20760be
Binary files /dev/null and b/oldwiki/images/thumb/5/5c/Bildschirmfoto-1.jpg/800px-Bildschirmfoto-1.jpg differ
diff --git a/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/120px-Borosaiob_2007-06-06.png b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/120px-Borosaiob_2007-06-06.png
new file mode 100644 (file)
index 0000000..b5694ee
Binary files /dev/null and b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/120px-Borosaiob_2007-06-06.png differ
diff --git a/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/1280px-Borosaiob_2007-06-06.png b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/1280px-Borosaiob_2007-06-06.png
new file mode 100644 (file)
index 0000000..f5ad2af
Binary files /dev/null and b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/1280px-Borosaiob_2007-06-06.png differ
diff --git a/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/180px-Borosaiob_2007-06-06.png b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/180px-Borosaiob_2007-06-06.png
new file mode 100644 (file)
index 0000000..c3a1a78
Binary files /dev/null and b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/180px-Borosaiob_2007-06-06.png differ
diff --git a/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/800px-Borosaiob_2007-06-06.png b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/800px-Borosaiob_2007-06-06.png
new file mode 100644 (file)
index 0000000..967f364
Binary files /dev/null and b/oldwiki/images/thumb/5/5d/Borosaiob_2007-06-06.png/800px-Borosaiob_2007-06-06.png differ
diff --git a/oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/120px-Openbox-scalable3.svg.png b/oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/120px-Openbox-scalable3.svg.png
new file mode 100644 (file)
index 0000000..41c45f0
Binary files /dev/null and b/oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/120px-Openbox-scalable3.svg.png differ
diff --git a/oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/48px-Openbox-scalable3.svg.png b/oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/48px-Openbox-scalable3.svg.png
new file mode 100644 (file)
index 0000000..a137227
Binary files /dev/null and b/oldwiki/images/thumb/5/5f/Openbox-scalable3.svg/48px-Openbox-scalable3.svg.png differ
diff --git a/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/120px-FocusCyclingForAllDesktops.png b/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/120px-FocusCyclingForAllDesktops.png
new file mode 100644 (file)
index 0000000..a8f8ade
Binary files /dev/null and b/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/120px-FocusCyclingForAllDesktops.png differ
diff --git a/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/150px-FocusCyclingForAllDesktops.png b/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/150px-FocusCyclingForAllDesktops.png
new file mode 100644 (file)
index 0000000..56e4548
Binary files /dev/null and b/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/150px-FocusCyclingForAllDesktops.png differ
diff --git a/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/180px-FocusCyclingForAllDesktops.png b/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/180px-FocusCyclingForAllDesktops.png
new file mode 100644 (file)
index 0000000..8a7858e
Binary files /dev/null and b/oldwiki/images/thumb/6/60/FocusCyclingForAllDesktops.png/180px-FocusCyclingForAllDesktops.png differ
diff --git a/oldwiki/images/thumb/6/63/Schermafdruk-6.png/120px-Schermafdruk-6.png b/oldwiki/images/thumb/6/63/Schermafdruk-6.png/120px-Schermafdruk-6.png
new file mode 100644 (file)
index 0000000..dbb7dbe
Binary files /dev/null and b/oldwiki/images/thumb/6/63/Schermafdruk-6.png/120px-Schermafdruk-6.png differ
diff --git a/oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/120px-2008-08-02-011650_1280x1024_scrot.png b/oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/120px-2008-08-02-011650_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..57a4cf9
Binary files /dev/null and b/oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/120px-2008-08-02-011650_1280x1024_scrot.png differ
diff --git a/oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/750px-2008-08-02-011650_1280x1024_scrot.png b/oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/750px-2008-08-02-011650_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..1b07d48
Binary files /dev/null and b/oldwiki/images/thumb/6/65/2008-08-02-011650_1280x1024_scrot.png/750px-2008-08-02-011650_1280x1024_scrot.png differ
diff --git a/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/120px-Mendax-desktop.jpg b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/120px-Mendax-desktop.jpg
new file mode 100644 (file)
index 0000000..4295beb
Binary files /dev/null and b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/120px-Mendax-desktop.jpg differ
diff --git a/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/169px-Mendax-desktop.jpg b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/169px-Mendax-desktop.jpg
new file mode 100644 (file)
index 0000000..f64a4a5
Binary files /dev/null and b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/169px-Mendax-desktop.jpg differ
diff --git a/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/300px-Mendax-desktop.jpg b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/300px-Mendax-desktop.jpg
new file mode 100644 (file)
index 0000000..dda2183
Binary files /dev/null and b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/300px-Mendax-desktop.jpg differ
diff --git a/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/750px-Mendax-desktop.jpg b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/750px-Mendax-desktop.jpg
new file mode 100644 (file)
index 0000000..20f8d1a
Binary files /dev/null and b/oldwiki/images/thumb/6/66/Mendax-desktop.jpg/750px-Mendax-desktop.jpg differ
diff --git a/oldwiki/images/thumb/6/67/Date_menu.jpg/104px-Date_menu.jpg b/oldwiki/images/thumb/6/67/Date_menu.jpg/104px-Date_menu.jpg
new file mode 100644 (file)
index 0000000..54e0a4b
Binary files /dev/null and b/oldwiki/images/thumb/6/67/Date_menu.jpg/104px-Date_menu.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Dktop.jpg/120px-Dktop.jpg b/oldwiki/images/thumb/6/69/Dktop.jpg/120px-Dktop.jpg
new file mode 100644 (file)
index 0000000..47e032c
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Dktop.jpg/120px-Dktop.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Dktop.jpg/169px-Dktop.jpg b/oldwiki/images/thumb/6/69/Dktop.jpg/169px-Dktop.jpg
new file mode 100644 (file)
index 0000000..c2cdebf
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Dktop.jpg/169px-Dktop.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Dktop.jpg/750px-Dktop.jpg b/oldwiki/images/thumb/6/69/Dktop.jpg/750px-Dktop.jpg
new file mode 100644 (file)
index 0000000..c8131bf
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Dktop.jpg/750px-Dktop.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Laplinbox.jpg/120px-Laplinbox.jpg b/oldwiki/images/thumb/6/69/Laplinbox.jpg/120px-Laplinbox.jpg
new file mode 100644 (file)
index 0000000..f003778
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Laplinbox.jpg/120px-Laplinbox.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Laplinbox.jpg/180px-Laplinbox.jpg b/oldwiki/images/thumb/6/69/Laplinbox.jpg/180px-Laplinbox.jpg
new file mode 100644 (file)
index 0000000..c34d7ec
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Laplinbox.jpg/180px-Laplinbox.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Laplinbox.jpg/800px-Laplinbox.jpg b/oldwiki/images/thumb/6/69/Laplinbox.jpg/800px-Laplinbox.jpg
new file mode 100644 (file)
index 0000000..696292d
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Laplinbox.jpg/800px-Laplinbox.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/120px-Openbox_7_04_08.jpg b/oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/120px-Openbox_7_04_08.jpg
new file mode 100644 (file)
index 0000000..fc0a3dd
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/120px-Openbox_7_04_08.jpg differ
diff --git a/oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/800px-Openbox_7_04_08.jpg b/oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/800px-Openbox_7_04_08.jpg
new file mode 100644 (file)
index 0000000..a035de1
Binary files /dev/null and b/oldwiki/images/thumb/6/69/Openbox_7_04_08.jpg/800px-Openbox_7_04_08.jpg differ
diff --git a/oldwiki/images/thumb/6/6a/LoginOptions.png/120px-LoginOptions.png b/oldwiki/images/thumb/6/6a/LoginOptions.png/120px-LoginOptions.png
new file mode 100644 (file)
index 0000000..2fdddc5
Binary files /dev/null and b/oldwiki/images/thumb/6/6a/LoginOptions.png/120px-LoginOptions.png differ
diff --git a/oldwiki/images/thumb/6/6a/LoginOptions.png/180px-LoginOptions.png b/oldwiki/images/thumb/6/6a/LoginOptions.png/180px-LoginOptions.png
new file mode 100644 (file)
index 0000000..1fa1758
Binary files /dev/null and b/oldwiki/images/thumb/6/6a/LoginOptions.png/180px-LoginOptions.png differ
diff --git a/oldwiki/images/thumb/6/6a/LoginOptions.png/800px-LoginOptions.png b/oldwiki/images/thumb/6/6a/LoginOptions.png/800px-LoginOptions.png
new file mode 100644 (file)
index 0000000..e27540e
Binary files /dev/null and b/oldwiki/images/thumb/6/6a/LoginOptions.png/800px-LoginOptions.png differ
diff --git a/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/120px-FocusCyclingToPanel.png b/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/120px-FocusCyclingToPanel.png
new file mode 100644 (file)
index 0000000..f15e7d5
Binary files /dev/null and b/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/120px-FocusCyclingToPanel.png differ
diff --git a/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/150px-FocusCyclingToPanel.png b/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/150px-FocusCyclingToPanel.png
new file mode 100644 (file)
index 0000000..613c080
Binary files /dev/null and b/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/150px-FocusCyclingToPanel.png differ
diff --git a/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/180px-FocusCyclingToPanel.png b/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/180px-FocusCyclingToPanel.png
new file mode 100644 (file)
index 0000000..dbed864
Binary files /dev/null and b/oldwiki/images/thumb/6/6b/FocusCyclingToPanel.png/180px-FocusCyclingToPanel.png differ
diff --git a/oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/120px-Pantallazo_04-05-2010_1366x768.png b/oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/120px-Pantallazo_04-05-2010_1366x768.png
new file mode 100644 (file)
index 0000000..d6c2f01
Binary files /dev/null and b/oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/120px-Pantallazo_04-05-2010_1366x768.png differ
diff --git a/oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/800px-Pantallazo_04-05-2010_1366x768.png b/oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/800px-Pantallazo_04-05-2010_1366x768.png
new file mode 100644 (file)
index 0000000..ca5e513
Binary files /dev/null and b/oldwiki/images/thumb/6/6e/Pantallazo_04-05-2010_1366x768.png/800px-Pantallazo_04-05-2010_1366x768.png differ
diff --git a/oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/120px-Openboxscreenshot4.png b/oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/120px-Openboxscreenshot4.png
new file mode 100644 (file)
index 0000000..7830b63
Binary files /dev/null and b/oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/120px-Openboxscreenshot4.png differ
diff --git a/oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/800px-Openboxscreenshot4.png b/oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/800px-Openboxscreenshot4.png
new file mode 100644 (file)
index 0000000..fe49d33
Binary files /dev/null and b/oldwiki/images/thumb/6/6f/Openboxscreenshot4.png/800px-Openboxscreenshot4.png differ
diff --git a/oldwiki/images/thumb/7/70/20070723-1848.png/120px-20070723-1848.png b/oldwiki/images/thumb/7/70/20070723-1848.png/120px-20070723-1848.png
new file mode 100644 (file)
index 0000000..263ed70
Binary files /dev/null and b/oldwiki/images/thumb/7/70/20070723-1848.png/120px-20070723-1848.png differ
diff --git a/oldwiki/images/thumb/7/70/20070723-1848.png/180px-20070723-1848.png b/oldwiki/images/thumb/7/70/20070723-1848.png/180px-20070723-1848.png
new file mode 100644 (file)
index 0000000..00d4d66
Binary files /dev/null and b/oldwiki/images/thumb/7/70/20070723-1848.png/180px-20070723-1848.png differ
diff --git a/oldwiki/images/thumb/7/70/20070723-1848.png/800px-20070723-1848.png b/oldwiki/images/thumb/7/70/20070723-1848.png/800px-20070723-1848.png
new file mode 100644 (file)
index 0000000..39ba0b8
Binary files /dev/null and b/oldwiki/images/thumb/7/70/20070723-1848.png/800px-20070723-1848.png differ
diff --git a/oldwiki/images/thumb/7/72/GNOME-Openbox.png/120px-GNOME-Openbox.png b/oldwiki/images/thumb/7/72/GNOME-Openbox.png/120px-GNOME-Openbox.png
new file mode 100644 (file)
index 0000000..bd4606e
Binary files /dev/null and b/oldwiki/images/thumb/7/72/GNOME-Openbox.png/120px-GNOME-Openbox.png differ
diff --git a/oldwiki/images/thumb/7/72/GNOME-Openbox.png/180px-GNOME-Openbox.png b/oldwiki/images/thumb/7/72/GNOME-Openbox.png/180px-GNOME-Openbox.png
new file mode 100644 (file)
index 0000000..e40064d
Binary files /dev/null and b/oldwiki/images/thumb/7/72/GNOME-Openbox.png/180px-GNOME-Openbox.png differ
diff --git a/oldwiki/images/thumb/7/72/GNOME-Openbox.png/800px-GNOME-Openbox.png b/oldwiki/images/thumb/7/72/GNOME-Openbox.png/800px-GNOME-Openbox.png
new file mode 100644 (file)
index 0000000..16e22c6
Binary files /dev/null and b/oldwiki/images/thumb/7/72/GNOME-Openbox.png/800px-GNOME-Openbox.png differ
diff --git a/oldwiki/images/thumb/7/75/ObConfDock.png/150px-ObConfDock.png b/oldwiki/images/thumb/7/75/ObConfDock.png/150px-ObConfDock.png
new file mode 100644 (file)
index 0000000..6b262eb
Binary files /dev/null and b/oldwiki/images/thumb/7/75/ObConfDock.png/150px-ObConfDock.png differ
diff --git a/oldwiki/images/thumb/7/75/ObConfDock.png/180px-ObConfDock.png b/oldwiki/images/thumb/7/75/ObConfDock.png/180px-ObConfDock.png
new file mode 100644 (file)
index 0000000..7b2ae08
Binary files /dev/null and b/oldwiki/images/thumb/7/75/ObConfDock.png/180px-ObConfDock.png differ
diff --git a/oldwiki/images/thumb/7/75/ObConfDock.png/200px-ObConfDock.png b/oldwiki/images/thumb/7/75/ObConfDock.png/200px-ObConfDock.png
new file mode 100644 (file)
index 0000000..570e2f8
Binary files /dev/null and b/oldwiki/images/thumb/7/75/ObConfDock.png/200px-ObConfDock.png differ
diff --git a/oldwiki/images/thumb/7/75/ObConfDock.png/89px-ObConfDock.png b/oldwiki/images/thumb/7/75/ObConfDock.png/89px-ObConfDock.png
new file mode 100644 (file)
index 0000000..da73b25
Binary files /dev/null and b/oldwiki/images/thumb/7/75/ObConfDock.png/89px-ObConfDock.png differ
diff --git a/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/120px-HiddenTitlebarButtons.png b/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/120px-HiddenTitlebarButtons.png
new file mode 100644 (file)
index 0000000..48fc2db
Binary files /dev/null and b/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/120px-HiddenTitlebarButtons.png differ
diff --git a/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/150px-HiddenTitlebarButtons.png b/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/150px-HiddenTitlebarButtons.png
new file mode 100644 (file)
index 0000000..50e7ce0
Binary files /dev/null and b/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/150px-HiddenTitlebarButtons.png differ
diff --git a/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/180px-HiddenTitlebarButtons.png b/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/180px-HiddenTitlebarButtons.png
new file mode 100644 (file)
index 0000000..ddbc37d
Binary files /dev/null and b/oldwiki/images/thumb/7/78/HiddenTitlebarButtons.png/180px-HiddenTitlebarButtons.png differ
diff --git a/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/120px-Myscreen-weboide-x.jpg b/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/120px-Myscreen-weboide-x.jpg
new file mode 100644 (file)
index 0000000..3568328
Binary files /dev/null and b/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/120px-Myscreen-weboide-x.jpg differ
diff --git a/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/180px-Myscreen-weboide-x.jpg b/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/180px-Myscreen-weboide-x.jpg
new file mode 100644 (file)
index 0000000..e5dcc6c
Binary files /dev/null and b/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/180px-Myscreen-weboide-x.jpg differ
diff --git a/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/800px-Myscreen-weboide-x.jpg b/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/800px-Myscreen-weboide-x.jpg
new file mode 100644 (file)
index 0000000..d28e1d6
Binary files /dev/null and b/oldwiki/images/thumb/7/7b/Myscreen-weboide-x.jpg/800px-Myscreen-weboide-x.jpg differ
diff --git a/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/120px-Openboxshot2.jpg b/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/120px-Openboxshot2.jpg
new file mode 100644 (file)
index 0000000..dfbb575
Binary files /dev/null and b/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/120px-Openboxshot2.jpg differ
diff --git a/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/180px-Openboxshot2.jpg b/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/180px-Openboxshot2.jpg
new file mode 100644 (file)
index 0000000..8f3c63d
Binary files /dev/null and b/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/180px-Openboxshot2.jpg differ
diff --git a/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/800px-Openboxshot2.jpg b/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/800px-Openboxshot2.jpg
new file mode 100644 (file)
index 0000000..ae09bdc
Binary files /dev/null and b/oldwiki/images/thumb/7/7b/Openboxshot2.jpg/800px-Openboxshot2.jpg differ
diff --git a/oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/150px-ActiveDisabledMenuEntry.png b/oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/150px-ActiveDisabledMenuEntry.png
new file mode 100644 (file)
index 0000000..c5b5cf7
Binary files /dev/null and b/oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/150px-ActiveDisabledMenuEntry.png differ
diff --git a/oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/86px-ActiveDisabledMenuEntry.png b/oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/86px-ActiveDisabledMenuEntry.png
new file mode 100644 (file)
index 0000000..757dbc1
Binary files /dev/null and b/oldwiki/images/thumb/7/7f/ActiveDisabledMenuEntry.png/86px-ActiveDisabledMenuEntry.png differ
diff --git a/oldwiki/images/thumb/7/7f/GagaPeter_001.png/120px-GagaPeter_001.png b/oldwiki/images/thumb/7/7f/GagaPeter_001.png/120px-GagaPeter_001.png
new file mode 100644 (file)
index 0000000..a5baa45
Binary files /dev/null and b/oldwiki/images/thumb/7/7f/GagaPeter_001.png/120px-GagaPeter_001.png differ
diff --git a/oldwiki/images/thumb/7/7f/GagaPeter_001.png/180px-GagaPeter_001.png b/oldwiki/images/thumb/7/7f/GagaPeter_001.png/180px-GagaPeter_001.png
new file mode 100644 (file)
index 0000000..f069276
Binary files /dev/null and b/oldwiki/images/thumb/7/7f/GagaPeter_001.png/180px-GagaPeter_001.png differ
diff --git a/oldwiki/images/thumb/7/7f/GagaPeter_001.png/800px-GagaPeter_001.png b/oldwiki/images/thumb/7/7f/GagaPeter_001.png/800px-GagaPeter_001.png
new file mode 100644 (file)
index 0000000..3f6d07f
Binary files /dev/null and b/oldwiki/images/thumb/7/7f/GagaPeter_001.png/800px-GagaPeter_001.png differ
diff --git a/oldwiki/images/thumb/7/7f/OpenboxMotivationalPoster.png/120px-OpenboxMotivationalPoster.png b/oldwiki/images/thumb/7/7f/OpenboxMotivationalPoster.png/120px-OpenboxMotivationalPoster.png
new file mode 100644 (file)
index 0000000..fc63482
Binary files /dev/null and b/oldwiki/images/thumb/7/7f/OpenboxMotivationalPoster.png/120px-OpenboxMotivationalPoster.png differ
diff --git a/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/120px-Donnie-2007-07-15.png b/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/120px-Donnie-2007-07-15.png
new file mode 100644 (file)
index 0000000..97051a1
Binary files /dev/null and b/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/120px-Donnie-2007-07-15.png differ
diff --git a/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/180px-Donnie-2007-07-15.png b/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/180px-Donnie-2007-07-15.png
new file mode 100644 (file)
index 0000000..2fe7947
Binary files /dev/null and b/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/180px-Donnie-2007-07-15.png differ
diff --git a/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/800px-Donnie-2007-07-15.png b/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/800px-Donnie-2007-07-15.png
new file mode 100644 (file)
index 0000000..15c8d31
Binary files /dev/null and b/oldwiki/images/thumb/8/82/Donnie-2007-07-15.png/800px-Donnie-2007-07-15.png differ
diff --git a/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/120px-Openbox_dust_carbon.png b/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/120px-Openbox_dust_carbon.png
new file mode 100644 (file)
index 0000000..2912a98
Binary files /dev/null and b/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/120px-Openbox_dust_carbon.png differ
diff --git a/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/180px-Openbox_dust_carbon.png b/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/180px-Openbox_dust_carbon.png
new file mode 100644 (file)
index 0000000..644cf0c
Binary files /dev/null and b/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/180px-Openbox_dust_carbon.png differ
diff --git a/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/800px-Openbox_dust_carbon.png b/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/800px-Openbox_dust_carbon.png
new file mode 100644 (file)
index 0000000..8c8e55b
Binary files /dev/null and b/oldwiki/images/thumb/8/85/Openbox_dust_carbon.png/800px-Openbox_dust_carbon.png differ
diff --git a/oldwiki/images/thumb/8/87/MyDesktop.jpeg/120px-MyDesktop.jpeg b/oldwiki/images/thumb/8/87/MyDesktop.jpeg/120px-MyDesktop.jpeg
new file mode 100644 (file)
index 0000000..843e754
Binary files /dev/null and b/oldwiki/images/thumb/8/87/MyDesktop.jpeg/120px-MyDesktop.jpeg differ
diff --git a/oldwiki/images/thumb/8/87/MyDesktop.jpeg/800px-MyDesktop.jpeg b/oldwiki/images/thumb/8/87/MyDesktop.jpeg/800px-MyDesktop.jpeg
new file mode 100644 (file)
index 0000000..9f46e94
Binary files /dev/null and b/oldwiki/images/thumb/8/87/MyDesktop.jpeg/800px-MyDesktop.jpeg differ
diff --git a/oldwiki/images/thumb/8/87/Openbox.png/120px-Openbox.png b/oldwiki/images/thumb/8/87/Openbox.png/120px-Openbox.png
new file mode 100644 (file)
index 0000000..80c1649
Binary files /dev/null and b/oldwiki/images/thumb/8/87/Openbox.png/120px-Openbox.png differ
diff --git a/oldwiki/images/thumb/8/87/Openbox.png/180px-Openbox.png b/oldwiki/images/thumb/8/87/Openbox.png/180px-Openbox.png
new file mode 100644 (file)
index 0000000..dd3aafd
Binary files /dev/null and b/oldwiki/images/thumb/8/87/Openbox.png/180px-Openbox.png differ
diff --git a/oldwiki/images/thumb/8/87/Openbox.png/800px-Openbox.png b/oldwiki/images/thumb/8/87/Openbox.png/800px-Openbox.png
new file mode 100644 (file)
index 0000000..91e6885
Binary files /dev/null and b/oldwiki/images/thumb/8/87/Openbox.png/800px-Openbox.png differ
diff --git a/oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/120px-Openbox_28_03_08.jpg b/oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/120px-Openbox_28_03_08.jpg
new file mode 100644 (file)
index 0000000..c122234
Binary files /dev/null and b/oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/120px-Openbox_28_03_08.jpg differ
diff --git a/oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/800px-Openbox_28_03_08.jpg b/oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/800px-Openbox_28_03_08.jpg
new file mode 100644 (file)
index 0000000..52e9b7b
Binary files /dev/null and b/oldwiki/images/thumb/8/87/Openbox_28_03_08.jpg/800px-Openbox_28_03_08.jpg differ
diff --git a/oldwiki/images/thumb/8/8a/Capture.png/120px-Capture.png b/oldwiki/images/thumb/8/8a/Capture.png/120px-Capture.png
new file mode 100644 (file)
index 0000000..be9e48b
Binary files /dev/null and b/oldwiki/images/thumb/8/8a/Capture.png/120px-Capture.png differ
diff --git a/oldwiki/images/thumb/8/8a/Capture.png/1280px-Capture.png b/oldwiki/images/thumb/8/8a/Capture.png/1280px-Capture.png
new file mode 100644 (file)
index 0000000..993718f
Binary files /dev/null and b/oldwiki/images/thumb/8/8a/Capture.png/1280px-Capture.png differ
diff --git a/oldwiki/images/thumb/8/8a/Capture.png/180px-Capture.png b/oldwiki/images/thumb/8/8a/Capture.png/180px-Capture.png
new file mode 100644 (file)
index 0000000..94ea9d1
Binary files /dev/null and b/oldwiki/images/thumb/8/8a/Capture.png/180px-Capture.png differ
diff --git a/oldwiki/images/thumb/8/8a/Capture.png/800px-Capture.png b/oldwiki/images/thumb/8/8a/Capture.png/800px-Capture.png
new file mode 100644 (file)
index 0000000..6142396
Binary files /dev/null and b/oldwiki/images/thumb/8/8a/Capture.png/800px-Capture.png differ
diff --git a/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/1024px-2560x1024_scrot.jpg b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/1024px-2560x1024_scrot.jpg
new file mode 100644 (file)
index 0000000..d1d7e0f
Binary files /dev/null and b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/1024px-2560x1024_scrot.jpg differ
diff --git a/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/120px-2560x1024_scrot.jpg b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/120px-2560x1024_scrot.jpg
new file mode 100644 (file)
index 0000000..2579bd0
Binary files /dev/null and b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/120px-2560x1024_scrot.jpg differ
diff --git a/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/180px-2560x1024_scrot.jpg b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/180px-2560x1024_scrot.jpg
new file mode 100644 (file)
index 0000000..044368d
Binary files /dev/null and b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/180px-2560x1024_scrot.jpg differ
diff --git a/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/800px-2560x1024_scrot.jpg b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/800px-2560x1024_scrot.jpg
new file mode 100644 (file)
index 0000000..4c9f87c
Binary files /dev/null and b/oldwiki/images/thumb/8/8c/2560x1024_scrot.jpg/800px-2560x1024_scrot.jpg differ
diff --git a/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/120px-Openbox_dust_carbon.jpg b/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/120px-Openbox_dust_carbon.jpg
new file mode 100644 (file)
index 0000000..ff3a30e
Binary files /dev/null and b/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/120px-Openbox_dust_carbon.jpg differ
diff --git a/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/180px-Openbox_dust_carbon.jpg b/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/180px-Openbox_dust_carbon.jpg
new file mode 100644 (file)
index 0000000..6a9df47
Binary files /dev/null and b/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/180px-Openbox_dust_carbon.jpg differ
diff --git a/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/800px-Openbox_dust_carbon.jpg b/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/800px-Openbox_dust_carbon.jpg
new file mode 100644 (file)
index 0000000..e1941f3
Binary files /dev/null and b/oldwiki/images/thumb/8/8c/Openbox_dust_carbon.jpg/800px-Openbox_dust_carbon.jpg differ
diff --git a/oldwiki/images/thumb/8/8d/Sodio.png/120px-Sodio.png b/oldwiki/images/thumb/8/8d/Sodio.png/120px-Sodio.png
new file mode 100644 (file)
index 0000000..da8aa1e
Binary files /dev/null and b/oldwiki/images/thumb/8/8d/Sodio.png/120px-Sodio.png differ
diff --git a/oldwiki/images/thumb/8/8d/Sodio.png/180px-Sodio.png b/oldwiki/images/thumb/8/8d/Sodio.png/180px-Sodio.png
new file mode 100644 (file)
index 0000000..850e45a
Binary files /dev/null and b/oldwiki/images/thumb/8/8d/Sodio.png/180px-Sodio.png differ
diff --git a/oldwiki/images/thumb/8/8d/Sodio.png/320px-Sodio.png b/oldwiki/images/thumb/8/8d/Sodio.png/320px-Sodio.png
new file mode 100644 (file)
index 0000000..908337e
Binary files /dev/null and b/oldwiki/images/thumb/8/8d/Sodio.png/320px-Sodio.png differ
diff --git a/oldwiki/images/thumb/8/8d/Sodio.png/800px-Sodio.png b/oldwiki/images/thumb/8/8d/Sodio.png/800px-Sodio.png
new file mode 100644 (file)
index 0000000..de81229
Binary files /dev/null and b/oldwiki/images/thumb/8/8d/Sodio.png/800px-Sodio.png differ
diff --git a/oldwiki/images/thumb/9/93/NewClientMenu.png/150px-NewClientMenu.png b/oldwiki/images/thumb/9/93/NewClientMenu.png/150px-NewClientMenu.png
new file mode 100644 (file)
index 0000000..eb876d3
Binary files /dev/null and b/oldwiki/images/thumb/9/93/NewClientMenu.png/150px-NewClientMenu.png differ
diff --git a/oldwiki/images/thumb/9/93/NewClientMenu.png/180px-NewClientMenu.png b/oldwiki/images/thumb/9/93/NewClientMenu.png/180px-NewClientMenu.png
new file mode 100644 (file)
index 0000000..d91ed53
Binary files /dev/null and b/oldwiki/images/thumb/9/93/NewClientMenu.png/180px-NewClientMenu.png differ
diff --git a/oldwiki/images/thumb/9/93/NewClientMenu.png/86px-NewClientMenu.png b/oldwiki/images/thumb/9/93/NewClientMenu.png/86px-NewClientMenu.png
new file mode 100644 (file)
index 0000000..8521ca8
Binary files /dev/null and b/oldwiki/images/thumb/9/93/NewClientMenu.png/86px-NewClientMenu.png differ
diff --git a/oldwiki/images/thumb/9/95/KeychainDialog.png/120px-KeychainDialog.png b/oldwiki/images/thumb/9/95/KeychainDialog.png/120px-KeychainDialog.png
new file mode 100644 (file)
index 0000000..3f290a0
Binary files /dev/null and b/oldwiki/images/thumb/9/95/KeychainDialog.png/120px-KeychainDialog.png differ
diff --git a/oldwiki/images/thumb/9/95/KeychainDialog.png/150px-KeychainDialog.png b/oldwiki/images/thumb/9/95/KeychainDialog.png/150px-KeychainDialog.png
new file mode 100644 (file)
index 0000000..0af2dc5
Binary files /dev/null and b/oldwiki/images/thumb/9/95/KeychainDialog.png/150px-KeychainDialog.png differ
diff --git a/oldwiki/images/thumb/9/96/Sreenopenbox2.png/120px-Sreenopenbox2.png b/oldwiki/images/thumb/9/96/Sreenopenbox2.png/120px-Sreenopenbox2.png
new file mode 100644 (file)
index 0000000..e7aca32
Binary files /dev/null and b/oldwiki/images/thumb/9/96/Sreenopenbox2.png/120px-Sreenopenbox2.png differ
diff --git a/oldwiki/images/thumb/9/96/Sreenopenbox2.png/180px-Sreenopenbox2.png b/oldwiki/images/thumb/9/96/Sreenopenbox2.png/180px-Sreenopenbox2.png
new file mode 100644 (file)
index 0000000..0b236a0
Binary files /dev/null and b/oldwiki/images/thumb/9/96/Sreenopenbox2.png/180px-Sreenopenbox2.png differ
diff --git a/oldwiki/images/thumb/9/96/Sreenopenbox2.png/800px-Sreenopenbox2.png b/oldwiki/images/thumb/9/96/Sreenopenbox2.png/800px-Sreenopenbox2.png
new file mode 100644 (file)
index 0000000..c79309b
Binary files /dev/null and b/oldwiki/images/thumb/9/96/Sreenopenbox2.png/800px-Sreenopenbox2.png differ
diff --git a/oldwiki/images/thumb/9/97/Image-Ss_October.png/120px-Image-Ss_October.png b/oldwiki/images/thumb/9/97/Image-Ss_October.png/120px-Image-Ss_October.png
new file mode 100644 (file)
index 0000000..6852540
Binary files /dev/null and b/oldwiki/images/thumb/9/97/Image-Ss_October.png/120px-Image-Ss_October.png differ
diff --git a/oldwiki/images/thumb/9/97/Image-Ss_October.png/750px-Image-Ss_October.png b/oldwiki/images/thumb/9/97/Image-Ss_October.png/750px-Image-Ss_October.png
new file mode 100644 (file)
index 0000000..b4e260f
Binary files /dev/null and b/oldwiki/images/thumb/9/97/Image-Ss_October.png/750px-Image-Ss_October.png differ
diff --git a/oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/120px-Gxdesktop26.jpg b/oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/120px-Gxdesktop26.jpg
new file mode 100644 (file)
index 0000000..9c02d47
Binary files /dev/null and b/oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/120px-Gxdesktop26.jpg differ
diff --git a/oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/800px-Gxdesktop26.jpg b/oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/800px-Gxdesktop26.jpg
new file mode 100644 (file)
index 0000000..12cf0fc
Binary files /dev/null and b/oldwiki/images/thumb/9/9c/Gxdesktop26.jpg/800px-Gxdesktop26.jpg differ
diff --git a/oldwiki/images/thumb/9/9c/ObConfTheme.png/150px-ObConfTheme.png b/oldwiki/images/thumb/9/9c/ObConfTheme.png/150px-ObConfTheme.png
new file mode 100644 (file)
index 0000000..9370a7d
Binary files /dev/null and b/oldwiki/images/thumb/9/9c/ObConfTheme.png/150px-ObConfTheme.png differ
diff --git a/oldwiki/images/thumb/9/9c/ObConfTheme.png/180px-ObConfTheme.png b/oldwiki/images/thumb/9/9c/ObConfTheme.png/180px-ObConfTheme.png
new file mode 100644 (file)
index 0000000..d5d5226
Binary files /dev/null and b/oldwiki/images/thumb/9/9c/ObConfTheme.png/180px-ObConfTheme.png differ
diff --git a/oldwiki/images/thumb/9/9c/ObConfTheme.png/200px-ObConfTheme.png b/oldwiki/images/thumb/9/9c/ObConfTheme.png/200px-ObConfTheme.png
new file mode 100644 (file)
index 0000000..5a493ff
Binary files /dev/null and b/oldwiki/images/thumb/9/9c/ObConfTheme.png/200px-ObConfTheme.png differ
diff --git a/oldwiki/images/thumb/9/9c/ObConfTheme.png/89px-ObConfTheme.png b/oldwiki/images/thumb/9/9c/ObConfTheme.png/89px-ObConfTheme.png
new file mode 100644 (file)
index 0000000..51faffc
Binary files /dev/null and b/oldwiki/images/thumb/9/9c/ObConfTheme.png/89px-ObConfTheme.png differ
diff --git a/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/120px-2007-06-29-233539_1280x1024_scrot.png b/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/120px-2007-06-29-233539_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..242fef5
Binary files /dev/null and b/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/120px-2007-06-29-233539_1280x1024_scrot.png differ
diff --git a/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/169px-2007-06-29-233539_1280x1024_scrot.png b/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/169px-2007-06-29-233539_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..86fe108
Binary files /dev/null and b/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/169px-2007-06-29-233539_1280x1024_scrot.png differ
diff --git a/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/750px-2007-06-29-233539_1280x1024_scrot.png b/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/750px-2007-06-29-233539_1280x1024_scrot.png
new file mode 100644 (file)
index 0000000..73c62bd
Binary files /dev/null and b/oldwiki/images/thumb/9/9e/2007-06-29-233539_1280x1024_scrot.png/750px-2007-06-29-233539_1280x1024_scrot.png differ
diff --git a/oldwiki/images/thumb/a/a0/Boxw.png/120px-Boxw.png b/oldwiki/images/thumb/a/a0/Boxw.png/120px-Boxw.png
new file mode 100644 (file)
index 0000000..fdd8e20
Binary files /dev/null and b/oldwiki/images/thumb/a/a0/Boxw.png/120px-Boxw.png differ
diff --git a/oldwiki/images/thumb/a/a0/Boxw.png/180px-Boxw.png b/oldwiki/images/thumb/a/a0/Boxw.png/180px-Boxw.png
new file mode 100644 (file)
index 0000000..e05a9f8
Binary files /dev/null and b/oldwiki/images/thumb/a/a0/Boxw.png/180px-Boxw.png differ
diff --git a/oldwiki/images/thumb/a/a0/Boxw.png/800px-Boxw.png b/oldwiki/images/thumb/a/a0/Boxw.png/800px-Boxw.png
new file mode 100644 (file)
index 0000000..3dd7c4b
Binary files /dev/null and b/oldwiki/images/thumb/a/a0/Boxw.png/800px-Boxw.png differ
diff --git a/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/120px-Slackware_skinn3r.png b/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/120px-Slackware_skinn3r.png
new file mode 100644 (file)
index 0000000..0627852
Binary files /dev/null and b/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/120px-Slackware_skinn3r.png differ
diff --git a/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/169px-Slackware_skinn3r.png b/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/169px-Slackware_skinn3r.png
new file mode 100644 (file)
index 0000000..83688a8
Binary files /dev/null and b/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/169px-Slackware_skinn3r.png differ
diff --git a/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/750px-Slackware_skinn3r.png b/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/750px-Slackware_skinn3r.png
new file mode 100644 (file)
index 0000000..09e4282
Binary files /dev/null and b/oldwiki/images/thumb/a/a0/Slackware_skinn3r.png/750px-Slackware_skinn3r.png differ
diff --git a/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/120px-Nightm4re-2006-10-26-2128-october.jpg b/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/120px-Nightm4re-2006-10-26-2128-october.jpg
new file mode 100644 (file)
index 0000000..7d5859f
Binary files /dev/null and b/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/120px-Nightm4re-2006-10-26-2128-october.jpg differ
diff --git a/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/180px-Nightm4re-2006-10-26-2128-october.jpg b/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/180px-Nightm4re-2006-10-26-2128-october.jpg
new file mode 100644 (file)
index 0000000..a421940
Binary files /dev/null and b/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/180px-Nightm4re-2006-10-26-2128-october.jpg differ
diff --git a/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/800px-Nightm4re-2006-10-26-2128-october.jpg b/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/800px-Nightm4re-2006-10-26-2128-october.jpg
new file mode 100644 (file)
index 0000000..9895ba2
Binary files /dev/null and b/oldwiki/images/thumb/a/a1/Nightm4re-2006-10-26-2128-october.jpg/800px-Nightm4re-2006-10-26-2128-october.jpg differ
diff --git a/oldwiki/images/thumb/a/a5/ObConfBehavior.png/150px-ObConfBehavior.png b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/150px-ObConfBehavior.png
new file mode 100644 (file)
index 0000000..feb0892
Binary files /dev/null and b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/150px-ObConfBehavior.png differ
diff --git a/oldwiki/images/thumb/a/a5/ObConfBehavior.png/180px-ObConfBehavior.png b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/180px-ObConfBehavior.png
new file mode 100644 (file)
index 0000000..6654382
Binary files /dev/null and b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/180px-ObConfBehavior.png differ
diff --git a/oldwiki/images/thumb/a/a5/ObConfBehavior.png/200px-ObConfBehavior.png b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/200px-ObConfBehavior.png
new file mode 100644 (file)
index 0000000..095fab8
Binary files /dev/null and b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/200px-ObConfBehavior.png differ
diff --git a/oldwiki/images/thumb/a/a5/ObConfBehavior.png/89px-ObConfBehavior.png b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/89px-ObConfBehavior.png
new file mode 100644 (file)
index 0000000..a09e57d
Binary files /dev/null and b/oldwiki/images/thumb/a/a5/ObConfBehavior.png/89px-ObConfBehavior.png differ
diff --git a/oldwiki/images/thumb/a/ac/14-42.png/120px-14-42.png b/oldwiki/images/thumb/a/ac/14-42.png/120px-14-42.png
new file mode 100644 (file)
index 0000000..bf7ad6b
Binary files /dev/null and b/oldwiki/images/thumb/a/ac/14-42.png/120px-14-42.png differ
diff --git a/oldwiki/images/thumb/a/ac/14-42.png/750px-14-42.png b/oldwiki/images/thumb/a/ac/14-42.png/750px-14-42.png
new file mode 100644 (file)
index 0000000..3404a47
Binary files /dev/null and b/oldwiki/images/thumb/a/ac/14-42.png/750px-14-42.png differ
diff --git a/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/120px-Openbox-elementary3.png b/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/120px-Openbox-elementary3.png
new file mode 100644 (file)
index 0000000..0172b3f
Binary files /dev/null and b/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/120px-Openbox-elementary3.png differ
diff --git a/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/180px-Openbox-elementary3.png b/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/180px-Openbox-elementary3.png
new file mode 100644 (file)
index 0000000..3723fc7
Binary files /dev/null and b/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/180px-Openbox-elementary3.png differ
diff --git a/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/800px-Openbox-elementary3.png b/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/800px-Openbox-elementary3.png
new file mode 100644 (file)
index 0000000..18488d1
Binary files /dev/null and b/oldwiki/images/thumb/b/b0/Openbox-elementary3.png/800px-Openbox-elementary3.png differ
diff --git a/oldwiki/images/thumb/b/b0/Openbox.jpg/120px-Openbox.jpg b/oldwiki/images/thumb/b/b0/Openbox.jpg/120px-Openbox.jpg
new file mode 100644 (file)
index 0000000..b46e0c2
Binary files /dev/null and b/oldwiki/images/thumb/b/b0/Openbox.jpg/120px-Openbox.jpg differ
diff --git a/oldwiki/images/thumb/b/b0/Openbox.jpg/800px-Openbox.jpg b/oldwiki/images/thumb/b/b0/Openbox.jpg/800px-Openbox.jpg
new file mode 100644 (file)
index 0000000..a0284cd
Binary files /dev/null and b/oldwiki/images/thumb/b/b0/Openbox.jpg/800px-Openbox.jpg differ
diff --git a/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/120px-FreeBSD_Ob3.4-20070717.png b/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/120px-FreeBSD_Ob3.4-20070717.png
new file mode 100644 (file)
index 0000000..813db61
Binary files /dev/null and b/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/120px-FreeBSD_Ob3.4-20070717.png differ
diff --git a/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/180px-FreeBSD_Ob3.4-20070717.png b/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/180px-FreeBSD_Ob3.4-20070717.png
new file mode 100644 (file)
index 0000000..e6c1a95
Binary files /dev/null and b/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/180px-FreeBSD_Ob3.4-20070717.png differ
diff --git a/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/800px-FreeBSD_Ob3.4-20070717.png b/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/800px-FreeBSD_Ob3.4-20070717.png
new file mode 100644 (file)
index 0000000..6cc2416
Binary files /dev/null and b/oldwiki/images/thumb/b/b1/FreeBSD_Ob3.4-20070717.png/800px-FreeBSD_Ob3.4-20070717.png differ
diff --git a/oldwiki/images/thumb/b/b2/2007-06-29.jpg/120px-2007-06-29.jpg b/oldwiki/images/thumb/b/b2/2007-06-29.jpg/120px-2007-06-29.jpg
new file mode 100644 (file)
index 0000000..e98c4d0
Binary files /dev/null and b/oldwiki/images/thumb/b/b2/2007-06-29.jpg/120px-2007-06-29.jpg differ
diff --git a/oldwiki/images/thumb/b/b2/2007-06-29.jpg/180px-2007-06-29.jpg b/oldwiki/images/thumb/b/b2/2007-06-29.jpg/180px-2007-06-29.jpg
new file mode 100644 (file)
index 0000000..011eb05
Binary files /dev/null and b/oldwiki/images/thumb/b/b2/2007-06-29.jpg/180px-2007-06-29.jpg differ
diff --git a/oldwiki/images/thumb/b/b2/2007-06-29.jpg/800px-2007-06-29.jpg b/oldwiki/images/thumb/b/b2/2007-06-29.jpg/800px-2007-06-29.jpg
new file mode 100644 (file)
index 0000000..c64663e
Binary files /dev/null and b/oldwiki/images/thumb/b/b2/2007-06-29.jpg/800px-2007-06-29.jpg differ
diff --git a/oldwiki/images/thumb/b/b2/MoveFromEdge.png/120px-MoveFromEdge.png b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/120px-MoveFromEdge.png
new file mode 100644 (file)
index 0000000..e085c56
Binary files /dev/null and b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/120px-MoveFromEdge.png differ
diff --git a/oldwiki/images/thumb/b/b2/MoveFromEdge.png/150px-MoveFromEdge.png b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/150px-MoveFromEdge.png
new file mode 100644 (file)
index 0000000..ca98cc3
Binary files /dev/null and b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/150px-MoveFromEdge.png differ
diff --git a/oldwiki/images/thumb/b/b2/MoveFromEdge.png/180px-MoveFromEdge.png b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/180px-MoveFromEdge.png
new file mode 100644 (file)
index 0000000..8c39ecc
Binary files /dev/null and b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/180px-MoveFromEdge.png differ
diff --git a/oldwiki/images/thumb/b/b2/MoveFromEdge.png/800px-MoveFromEdge.png b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/800px-MoveFromEdge.png
new file mode 100644 (file)
index 0000000..ddb4cfb
Binary files /dev/null and b/oldwiki/images/thumb/b/b2/MoveFromEdge.png/800px-MoveFromEdge.png differ
diff --git a/oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/120px-Dct_screenshot.jpg b/oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/120px-Dct_screenshot.jpg
new file mode 100644 (file)
index 0000000..0b379bc
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/120px-Dct_screenshot.jpg differ
diff --git a/oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/750px-Dct_screenshot.jpg b/oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/750px-Dct_screenshot.jpg
new file mode 100644 (file)
index 0000000..042d948
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/Dct_screenshot.jpg/750px-Dct_screenshot.jpg differ
diff --git a/oldwiki/images/thumb/b/b7/NewMoreMenu.png/120px-NewMoreMenu.png b/oldwiki/images/thumb/b/b7/NewMoreMenu.png/120px-NewMoreMenu.png
new file mode 100644 (file)
index 0000000..ad692f1
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/NewMoreMenu.png/120px-NewMoreMenu.png differ
diff --git a/oldwiki/images/thumb/b/b7/NewMoreMenu.png/150px-NewMoreMenu.png b/oldwiki/images/thumb/b/b7/NewMoreMenu.png/150px-NewMoreMenu.png
new file mode 100644 (file)
index 0000000..180cde7
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/NewMoreMenu.png/150px-NewMoreMenu.png differ
diff --git a/oldwiki/images/thumb/b/b7/NewMoreMenu.png/180px-NewMoreMenu.png b/oldwiki/images/thumb/b/b7/NewMoreMenu.png/180px-NewMoreMenu.png
new file mode 100644 (file)
index 0000000..bd4dff8
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/NewMoreMenu.png/180px-NewMoreMenu.png differ
diff --git a/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/120px-TrueTransparentWindows.png b/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/120px-TrueTransparentWindows.png
new file mode 100644 (file)
index 0000000..3291d03
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/120px-TrueTransparentWindows.png differ
diff --git a/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/150px-TrueTransparentWindows.png b/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/150px-TrueTransparentWindows.png
new file mode 100644 (file)
index 0000000..0a04b99
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/150px-TrueTransparentWindows.png differ
diff --git a/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/180px-TrueTransparentWindows.png b/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/180px-TrueTransparentWindows.png
new file mode 100644 (file)
index 0000000..8cc8f73
Binary files /dev/null and b/oldwiki/images/thumb/b/b7/TrueTransparentWindows.png/180px-TrueTransparentWindows.png differ
diff --git a/oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/399px-12-16-2003_04;46;30PM.jpg b/oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/399px-12-16-2003_04;46;30PM.jpg
new file mode 100644 (file)
index 0000000..14c8a75
Binary files /dev/null and b/oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/399px-12-16-2003_04;46;30PM.jpg differ
diff --git a/oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/80px-12-16-2003_04;46;30PM.jpg b/oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/80px-12-16-2003_04;46;30PM.jpg
new file mode 100644 (file)
index 0000000..763aa7c
Binary files /dev/null and b/oldwiki/images/thumb/b/b8/12-16-2003_04;46;30PM.jpg/80px-12-16-2003_04;46;30PM.jpg differ
diff --git a/oldwiki/images/thumb/b/ba/ObConfAppearance.png/150px-ObConfAppearance.png b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/150px-ObConfAppearance.png
new file mode 100644 (file)
index 0000000..bd8f993
Binary files /dev/null and b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/150px-ObConfAppearance.png differ
diff --git a/oldwiki/images/thumb/b/ba/ObConfAppearance.png/180px-ObConfAppearance.png b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/180px-ObConfAppearance.png
new file mode 100644 (file)
index 0000000..08fbeb8
Binary files /dev/null and b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/180px-ObConfAppearance.png differ
diff --git a/oldwiki/images/thumb/b/ba/ObConfAppearance.png/200px-ObConfAppearance.png b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/200px-ObConfAppearance.png
new file mode 100644 (file)
index 0000000..75c9f53
Binary files /dev/null and b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/200px-ObConfAppearance.png differ
diff --git a/oldwiki/images/thumb/b/ba/ObConfAppearance.png/89px-ObConfAppearance.png b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/89px-ObConfAppearance.png
new file mode 100644 (file)
index 0000000..939c994
Binary files /dev/null and b/oldwiki/images/thumb/b/ba/ObConfAppearance.png/89px-ObConfAppearance.png differ
diff --git a/oldwiki/images/thumb/b/bc/2007-06-25.png/120px-2007-06-25.png b/oldwiki/images/thumb/b/bc/2007-06-25.png/120px-2007-06-25.png
new file mode 100644 (file)
index 0000000..b3080c6
Binary files /dev/null and b/oldwiki/images/thumb/b/bc/2007-06-25.png/120px-2007-06-25.png differ
diff --git a/oldwiki/images/thumb/b/bc/2007-06-25.png/169px-2007-06-25.png b/oldwiki/images/thumb/b/bc/2007-06-25.png/169px-2007-06-25.png
new file mode 100644 (file)
index 0000000..860e4cb
Binary files /dev/null and b/oldwiki/images/thumb/b/bc/2007-06-25.png/169px-2007-06-25.png differ
diff --git a/oldwiki/images/thumb/b/bc/2007-06-25.png/750px-2007-06-25.png b/oldwiki/images/thumb/b/bc/2007-06-25.png/750px-2007-06-25.png
new file mode 100644 (file)
index 0000000..6fe98d5
Binary files /dev/null and b/oldwiki/images/thumb/b/bc/2007-06-25.png/750px-2007-06-25.png differ
diff --git a/oldwiki/images/thumb/b/be/Ss6.png/120px-Ss6.png b/oldwiki/images/thumb/b/be/Ss6.png/120px-Ss6.png
new file mode 100644 (file)
index 0000000..344e4cf
Binary files /dev/null and b/oldwiki/images/thumb/b/be/Ss6.png/120px-Ss6.png differ
diff --git a/oldwiki/images/thumb/b/be/Ss6.png/800px-Ss6.png b/oldwiki/images/thumb/b/be/Ss6.png/800px-Ss6.png
new file mode 100644 (file)
index 0000000..e2b93a5
Binary files /dev/null and b/oldwiki/images/thumb/b/be/Ss6.png/800px-Ss6.png differ
diff --git a/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/120px-GnomeMenuInOpenbox.png b/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/120px-GnomeMenuInOpenbox.png
new file mode 100644 (file)
index 0000000..c6501c0
Binary files /dev/null and b/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/120px-GnomeMenuInOpenbox.png differ
diff --git a/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/180px-GnomeMenuInOpenbox.png b/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/180px-GnomeMenuInOpenbox.png
new file mode 100644 (file)
index 0000000..fa3aa75
Binary files /dev/null and b/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/180px-GnomeMenuInOpenbox.png differ
diff --git a/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/800px-GnomeMenuInOpenbox.png b/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/800px-GnomeMenuInOpenbox.png
new file mode 100644 (file)
index 0000000..e897b1f
Binary files /dev/null and b/oldwiki/images/thumb/b/bf/GnomeMenuInOpenbox.png/800px-GnomeMenuInOpenbox.png differ
diff --git a/oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/120px-Spatial-vi-cheatsheet2-WVGA.png b/oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/120px-Spatial-vi-cheatsheet2-WVGA.png
new file mode 100644 (file)
index 0000000..f094b0c
Binary files /dev/null and b/oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/120px-Spatial-vi-cheatsheet2-WVGA.png differ
diff --git a/oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/180px-Spatial-vi-cheatsheet2-WVGA.png b/oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/180px-Spatial-vi-cheatsheet2-WVGA.png
new file mode 100644 (file)
index 0000000..7123016
Binary files /dev/null and b/oldwiki/images/thumb/c/c3/Spatial-vi-cheatsheet2-WVGA.png/180px-Spatial-vi-cheatsheet2-WVGA.png differ
diff --git a/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/120px-2010-04-05-215307_1024x768_scrot.png b/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/120px-2010-04-05-215307_1024x768_scrot.png
new file mode 100644 (file)
index 0000000..63f6dcb
Binary files /dev/null and b/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/120px-2010-04-05-215307_1024x768_scrot.png differ
diff --git a/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/180px-2010-04-05-215307_1024x768_scrot.png b/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/180px-2010-04-05-215307_1024x768_scrot.png
new file mode 100644 (file)
index 0000000..a1c058c
Binary files /dev/null and b/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/180px-2010-04-05-215307_1024x768_scrot.png differ
diff --git a/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/800px-2010-04-05-215307_1024x768_scrot.png b/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/800px-2010-04-05-215307_1024x768_scrot.png
new file mode 100644 (file)
index 0000000..0a0f69d
Binary files /dev/null and b/oldwiki/images/thumb/c/c4/2010-04-05-215307_1024x768_scrot.png/800px-2010-04-05-215307_1024x768_scrot.png differ
diff --git a/oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/120px-Openbox3_28_03_08.jpg b/oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/120px-Openbox3_28_03_08.jpg
new file mode 100644 (file)
index 0000000..c122234
Binary files /dev/null and b/oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/120px-Openbox3_28_03_08.jpg differ
diff --git a/oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/800px-Openbox3_28_03_08.jpg b/oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/800px-Openbox3_28_03_08.jpg
new file mode 100644 (file)
index 0000000..52e9b7b
Binary files /dev/null and b/oldwiki/images/thumb/c/c5/Openbox3_28_03_08.jpg/800px-Openbox3_28_03_08.jpg differ
diff --git a/oldwiki/images/thumb/c/c5/Openboxshot1.jpg/120px-Openboxshot1.jpg b/oldwiki/images/thumb/c/c5/Openboxshot1.jpg/120px-Openboxshot1.jpg
new file mode 100644 (file)
index 0000000..edae3b2
Binary files /dev/null and b/oldwiki/images/thumb/c/c5/Openboxshot1.jpg/120px-Openboxshot1.jpg differ
diff --git a/oldwiki/images/thumb/c/c5/Openboxshot1.jpg/800px-Openboxshot1.jpg b/oldwiki/images/thumb/c/c5/Openboxshot1.jpg/800px-Openboxshot1.jpg
new file mode 100644 (file)
index 0000000..03fb986
Binary files /dev/null and b/oldwiki/images/thumb/c/c5/Openboxshot1.jpg/800px-Openboxshot1.jpg differ
diff --git a/oldwiki/images/thumb/c/cb/Openboxscreenshot.png/120px-Openboxscreenshot.png b/oldwiki/images/thumb/c/cb/Openboxscreenshot.png/120px-Openboxscreenshot.png
new file mode 100644 (file)
index 0000000..e00e6ac
Binary files /dev/null and b/oldwiki/images/thumb/c/cb/Openboxscreenshot.png/120px-Openboxscreenshot.png differ
diff --git a/oldwiki/images/thumb/c/cb/Openboxscreenshot.png/800px-Openboxscreenshot.png b/oldwiki/images/thumb/c/cb/Openboxscreenshot.png/800px-Openboxscreenshot.png
new file mode 100644 (file)
index 0000000..93c3c99
Binary files /dev/null and b/oldwiki/images/thumb/c/cb/Openboxscreenshot.png/800px-Openboxscreenshot.png differ
diff --git a/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/120px-2010-04-05-145901_1280x800_scrot.jpg b/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/120px-2010-04-05-145901_1280x800_scrot.jpg
new file mode 100644 (file)
index 0000000..2cfd864
Binary files /dev/null and b/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/120px-2010-04-05-145901_1280x800_scrot.jpg differ
diff --git a/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/180px-2010-04-05-145901_1280x800_scrot.jpg b/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/180px-2010-04-05-145901_1280x800_scrot.jpg
new file mode 100644 (file)
index 0000000..c95b927
Binary files /dev/null and b/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/180px-2010-04-05-145901_1280x800_scrot.jpg differ
diff --git a/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/800px-2010-04-05-145901_1280x800_scrot.jpg b/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/800px-2010-04-05-145901_1280x800_scrot.jpg
new file mode 100644 (file)
index 0000000..95a9af3
Binary files /dev/null and b/oldwiki/images/thumb/c/cc/2010-04-05-145901_1280x800_scrot.jpg/800px-2010-04-05-145901_1280x800_scrot.jpg differ
diff --git a/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/120px-2008-05-08-1024x768-Crunchbang.png b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/120px-2008-05-08-1024x768-Crunchbang.png
new file mode 100644 (file)
index 0000000..3a7b65b
Binary files /dev/null and b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/120px-2008-05-08-1024x768-Crunchbang.png differ
diff --git a/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/180px-2008-05-08-1024x768-Crunchbang.png b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/180px-2008-05-08-1024x768-Crunchbang.png
new file mode 100644 (file)
index 0000000..099ff60
Binary files /dev/null and b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/180px-2008-05-08-1024x768-Crunchbang.png differ
diff --git a/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/320px-2008-05-08-1024x768-Crunchbang.png b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/320px-2008-05-08-1024x768-Crunchbang.png
new file mode 100644 (file)
index 0000000..555b758
Binary files /dev/null and b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/320px-2008-05-08-1024x768-Crunchbang.png differ
diff --git a/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/800px-2008-05-08-1024x768-Crunchbang.png b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/800px-2008-05-08-1024x768-Crunchbang.png
new file mode 100644 (file)
index 0000000..996f071
Binary files /dev/null and b/oldwiki/images/thumb/d/d1/2008-05-08-1024x768-Crunchbang.png/800px-2008-05-08-1024x768-Crunchbang.png differ
diff --git a/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/120px-NewTitleSeparatorColors.png b/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/120px-NewTitleSeparatorColors.png
new file mode 100644 (file)
index 0000000..fbcbbbd
Binary files /dev/null and b/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/120px-NewTitleSeparatorColors.png differ
diff --git a/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/150px-NewTitleSeparatorColors.png b/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/150px-NewTitleSeparatorColors.png
new file mode 100644 (file)
index 0000000..ee8fd25
Binary files /dev/null and b/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/150px-NewTitleSeparatorColors.png differ
diff --git a/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/180px-NewTitleSeparatorColors.png b/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/180px-NewTitleSeparatorColors.png
new file mode 100644 (file)
index 0000000..a17730d
Binary files /dev/null and b/oldwiki/images/thumb/d/d2/NewTitleSeparatorColors.png/180px-NewTitleSeparatorColors.png differ
diff --git a/oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/120px-Spatial-vi-cheatsheet-WVGA.png b/oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/120px-Spatial-vi-cheatsheet-WVGA.png
new file mode 100644 (file)
index 0000000..b95bdb4
Binary files /dev/null and b/oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/120px-Spatial-vi-cheatsheet-WVGA.png differ
diff --git a/oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/180px-Spatial-vi-cheatsheet-WVGA.png b/oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/180px-Spatial-vi-cheatsheet-WVGA.png
new file mode 100644 (file)
index 0000000..0a11832
Binary files /dev/null and b/oldwiki/images/thumb/d/d2/Spatial-vi-cheatsheet-WVGA.png/180px-Spatial-vi-cheatsheet-WVGA.png differ
diff --git a/oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/120px-Debian_lenny_Openbox_3.4.7.2.png b/oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/120px-Debian_lenny_Openbox_3.4.7.2.png
new file mode 100644 (file)
index 0000000..ef57cda
Binary files /dev/null and b/oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/120px-Debian_lenny_Openbox_3.4.7.2.png differ
diff --git a/oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/800px-Debian_lenny_Openbox_3.4.7.2.png b/oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/800px-Debian_lenny_Openbox_3.4.7.2.png
new file mode 100644 (file)
index 0000000..e6aabbb
Binary files /dev/null and b/oldwiki/images/thumb/d/d7/Debian_lenny_Openbox_3.4.7.2.png/800px-Debian_lenny_Openbox_3.4.7.2.png differ
diff --git a/oldwiki/images/thumb/d/d7/MSLDNI.png/120px-MSLDNI.png b/oldwiki/images/thumb/d/d7/MSLDNI.png/120px-MSLDNI.png
new file mode 100644 (file)
index 0000000..2d5bc1f
Binary files /dev/null and b/oldwiki/images/thumb/d/d7/MSLDNI.png/120px-MSLDNI.png differ
diff --git a/oldwiki/images/thumb/d/dc/Shot.png/120px-Shot.png b/oldwiki/images/thumb/d/dc/Shot.png/120px-Shot.png
new file mode 100644 (file)
index 0000000..c453844
Binary files /dev/null and b/oldwiki/images/thumb/d/dc/Shot.png/120px-Shot.png differ
diff --git a/oldwiki/images/thumb/d/dc/Shot.png/800px-Shot.png b/oldwiki/images/thumb/d/dc/Shot.png/800px-Shot.png
new file mode 100644 (file)
index 0000000..36196cd
Binary files /dev/null and b/oldwiki/images/thumb/d/dc/Shot.png/800px-Shot.png differ
diff --git a/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/120px-Laen-screenshot-080210213623.jpg b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/120px-Laen-screenshot-080210213623.jpg
new file mode 100644 (file)
index 0000000..59c7303
Binary files /dev/null and b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/120px-Laen-screenshot-080210213623.jpg differ
diff --git a/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/1280px-Laen-screenshot-080210213623.jpg b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/1280px-Laen-screenshot-080210213623.jpg
new file mode 100644 (file)
index 0000000..1cf85bb
Binary files /dev/null and b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/1280px-Laen-screenshot-080210213623.jpg differ
diff --git a/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/180px-Laen-screenshot-080210213623.jpg b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/180px-Laen-screenshot-080210213623.jpg
new file mode 100644 (file)
index 0000000..a291f88
Binary files /dev/null and b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/180px-Laen-screenshot-080210213623.jpg differ
diff --git a/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/800px-Laen-screenshot-080210213623.jpg b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/800px-Laen-screenshot-080210213623.jpg
new file mode 100644 (file)
index 0000000..45f6ef6
Binary files /dev/null and b/oldwiki/images/thumb/d/df/Laen-screenshot-080210213623.jpg/800px-Laen-screenshot-080210213623.jpg differ
diff --git a/oldwiki/images/thumb/e/e0/ObCom.gif/120px-ObCom.gif b/oldwiki/images/thumb/e/e0/ObCom.gif/120px-ObCom.gif
new file mode 100644 (file)
index 0000000..2ae7012
Binary files /dev/null and b/oldwiki/images/thumb/e/e0/ObCom.gif/120px-ObCom.gif differ
diff --git a/oldwiki/images/thumb/e/e0/ObCom.gif/800px-ObCom.gif b/oldwiki/images/thumb/e/e0/ObCom.gif/800px-ObCom.gif
new file mode 100644 (file)
index 0000000..588c81d
Binary files /dev/null and b/oldwiki/images/thumb/e/e0/ObCom.gif/800px-ObCom.gif differ
diff --git a/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/120px-Openbox_chg.jpg b/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/120px-Openbox_chg.jpg
new file mode 100644 (file)
index 0000000..f0e79e8
Binary files /dev/null and b/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/120px-Openbox_chg.jpg differ
diff --git a/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/180px-Openbox_chg.jpg b/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/180px-Openbox_chg.jpg
new file mode 100644 (file)
index 0000000..c4bd9f3
Binary files /dev/null and b/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/180px-Openbox_chg.jpg differ
diff --git a/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/800px-Openbox_chg.jpg b/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/800px-Openbox_chg.jpg
new file mode 100644 (file)
index 0000000..f6cef39
Binary files /dev/null and b/oldwiki/images/thumb/e/e0/Openbox_chg.jpg/800px-Openbox_chg.jpg differ
diff --git a/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/120px-Openbox-debian.jpg b/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/120px-Openbox-debian.jpg
new file mode 100644 (file)
index 0000000..2933789
Binary files /dev/null and b/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/120px-Openbox-debian.jpg differ
diff --git a/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/180px-Openbox-debian.jpg b/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/180px-Openbox-debian.jpg
new file mode 100644 (file)
index 0000000..fe75a4d
Binary files /dev/null and b/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/180px-Openbox-debian.jpg differ
diff --git a/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/800px-Openbox-debian.jpg b/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/800px-Openbox-debian.jpg
new file mode 100644 (file)
index 0000000..ff5e2fd
Binary files /dev/null and b/oldwiki/images/thumb/e/e2/Openbox-debian.jpg/800px-Openbox-debian.jpg differ
diff --git a/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/120px-KickerStartupNotification.png b/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/120px-KickerStartupNotification.png
new file mode 100644 (file)
index 0000000..c65946c
Binary files /dev/null and b/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/120px-KickerStartupNotification.png differ
diff --git a/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/150px-KickerStartupNotification.png b/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/150px-KickerStartupNotification.png
new file mode 100644 (file)
index 0000000..b653f6c
Binary files /dev/null and b/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/150px-KickerStartupNotification.png differ
diff --git a/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/180px-KickerStartupNotification.png b/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/180px-KickerStartupNotification.png
new file mode 100644 (file)
index 0000000..d11df5e
Binary files /dev/null and b/oldwiki/images/thumb/e/e6/KickerStartupNotification.png/180px-KickerStartupNotification.png differ
diff --git a/oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/120px-Openbox_30_04_08.jpg b/oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/120px-Openbox_30_04_08.jpg
new file mode 100644 (file)
index 0000000..826b561
Binary files /dev/null and b/oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/120px-Openbox_30_04_08.jpg differ
diff --git a/oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/800px-Openbox_30_04_08.jpg b/oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/800px-Openbox_30_04_08.jpg
new file mode 100644 (file)
index 0000000..c1469e4
Binary files /dev/null and b/oldwiki/images/thumb/e/e6/Openbox_30_04_08.jpg/800px-Openbox_30_04_08.jpg differ
diff --git a/oldwiki/images/thumb/e/ea/050310075012obox.jpg/120px-050310075012obox.jpg b/oldwiki/images/thumb/e/ea/050310075012obox.jpg/120px-050310075012obox.jpg
new file mode 100644 (file)
index 0000000..9dde48e
Binary files /dev/null and b/oldwiki/images/thumb/e/ea/050310075012obox.jpg/120px-050310075012obox.jpg differ
diff --git a/oldwiki/images/thumb/e/ea/050310075012obox.jpg/180px-050310075012obox.jpg b/oldwiki/images/thumb/e/ea/050310075012obox.jpg/180px-050310075012obox.jpg
new file mode 100644 (file)
index 0000000..e064007
Binary files /dev/null and b/oldwiki/images/thumb/e/ea/050310075012obox.jpg/180px-050310075012obox.jpg differ
diff --git a/oldwiki/images/thumb/e/ea/050310075012obox.jpg/800px-050310075012obox.jpg b/oldwiki/images/thumb/e/ea/050310075012obox.jpg/800px-050310075012obox.jpg
new file mode 100644 (file)
index 0000000..1bfbde8
Binary files /dev/null and b/oldwiki/images/thumb/e/ea/050310075012obox.jpg/800px-050310075012obox.jpg differ
diff --git a/oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/120px-Desktop-2008-04-02.png b/oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/120px-Desktop-2008-04-02.png
new file mode 100644 (file)
index 0000000..df29386
Binary files /dev/null and b/oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/120px-Desktop-2008-04-02.png differ
diff --git a/oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/800px-Desktop-2008-04-02.png b/oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/800px-Desktop-2008-04-02.png
new file mode 100644 (file)
index 0000000..ef921f0
Binary files /dev/null and b/oldwiki/images/thumb/e/ee/Desktop-2008-04-02.png/800px-Desktop-2008-04-02.png differ
diff --git a/oldwiki/images/thumb/f/f0/ObConfDesktops.png/150px-ObConfDesktops.png b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/150px-ObConfDesktops.png
new file mode 100644 (file)
index 0000000..63b8a82
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/150px-ObConfDesktops.png differ
diff --git a/oldwiki/images/thumb/f/f0/ObConfDesktops.png/180px-ObConfDesktops.png b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/180px-ObConfDesktops.png
new file mode 100644 (file)
index 0000000..62d93b8
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/180px-ObConfDesktops.png differ
diff --git a/oldwiki/images/thumb/f/f0/ObConfDesktops.png/200px-ObConfDesktops.png b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/200px-ObConfDesktops.png
new file mode 100644 (file)
index 0000000..380f753
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/200px-ObConfDesktops.png differ
diff --git a/oldwiki/images/thumb/f/f0/ObConfDesktops.png/89px-ObConfDesktops.png b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/89px-ObConfDesktops.png
new file mode 100644 (file)
index 0000000..8c4d580
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/ObConfDesktops.png/89px-ObConfDesktops.png differ
diff --git a/oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/120px-Openboxscreenshot3.png b/oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/120px-Openboxscreenshot3.png
new file mode 100644 (file)
index 0000000..c956181
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/120px-Openboxscreenshot3.png differ
diff --git a/oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/800px-Openboxscreenshot3.png b/oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/800px-Openboxscreenshot3.png
new file mode 100644 (file)
index 0000000..eb7532a
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/Openboxscreenshot3.png/800px-Openboxscreenshot3.png differ
diff --git a/oldwiki/images/thumb/f/f0/Openzen13.png/120px-Openzen13.png b/oldwiki/images/thumb/f/f0/Openzen13.png/120px-Openzen13.png
new file mode 100644 (file)
index 0000000..278c179
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/Openzen13.png/120px-Openzen13.png differ
diff --git a/oldwiki/images/thumb/f/f0/Openzen13.png/169px-Openzen13.png b/oldwiki/images/thumb/f/f0/Openzen13.png/169px-Openzen13.png
new file mode 100644 (file)
index 0000000..49e255a
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/Openzen13.png/169px-Openzen13.png differ
diff --git a/oldwiki/images/thumb/f/f0/Openzen13.png/750px-Openzen13.png b/oldwiki/images/thumb/f/f0/Openzen13.png/750px-Openzen13.png
new file mode 100644 (file)
index 0000000..0665308
Binary files /dev/null and b/oldwiki/images/thumb/f/f0/Openzen13.png/750px-Openzen13.png differ
diff --git a/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/120px-Crunchbang_2010-03-08_1280x800_scrot.png b/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/120px-Crunchbang_2010-03-08_1280x800_scrot.png
new file mode 100644 (file)
index 0000000..f85c515
Binary files /dev/null and b/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/120px-Crunchbang_2010-03-08_1280x800_scrot.png differ
diff --git a/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/180px-Crunchbang_2010-03-08_1280x800_scrot.png b/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/180px-Crunchbang_2010-03-08_1280x800_scrot.png
new file mode 100644 (file)
index 0000000..f4f655d
Binary files /dev/null and b/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/180px-Crunchbang_2010-03-08_1280x800_scrot.png differ
diff --git a/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/800px-Crunchbang_2010-03-08_1280x800_scrot.png b/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/800px-Crunchbang_2010-03-08_1280x800_scrot.png
new file mode 100644 (file)
index 0000000..0046179
Binary files /dev/null and b/oldwiki/images/thumb/f/f3/Crunchbang_2010-03-08_1280x800_scrot.png/800px-Crunchbang_2010-03-08_1280x800_scrot.png differ
diff --git a/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/104px-Ss_obconfblackness.jpg b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/104px-Ss_obconfblackness.jpg
new file mode 100644 (file)
index 0000000..88e5314
Binary files /dev/null and b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/104px-Ss_obconfblackness.jpg differ
diff --git a/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/108px-Ss_obconfblackness.jpg b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/108px-Ss_obconfblackness.jpg
new file mode 100644 (file)
index 0000000..a2f8afd
Binary files /dev/null and b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/108px-Ss_obconfblackness.jpg differ
diff --git a/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/122px-Ss_obconfblackness.jpg b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/122px-Ss_obconfblackness.jpg
new file mode 100644 (file)
index 0000000..041c350
Binary files /dev/null and b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/122px-Ss_obconfblackness.jpg differ
diff --git a/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/180px-Ss_obconfblackness.jpg b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/180px-Ss_obconfblackness.jpg
new file mode 100644 (file)
index 0000000..abe8efd
Binary files /dev/null and b/oldwiki/images/thumb/f/f4/Ss_obconfblackness.jpg/180px-Ss_obconfblackness.jpg differ
diff --git a/oldwiki/images/thumb/f/f5/Arch_ob.jpg/120px-Arch_ob.jpg b/oldwiki/images/thumb/f/f5/Arch_ob.jpg/120px-Arch_ob.jpg
new file mode 100644 (file)
index 0000000..437cf44
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/Arch_ob.jpg/120px-Arch_ob.jpg differ
diff --git a/oldwiki/images/thumb/f/f5/Arch_ob.jpg/800px-Arch_ob.jpg b/oldwiki/images/thumb/f/f5/Arch_ob.jpg/800px-Arch_ob.jpg
new file mode 100644 (file)
index 0000000..de11339
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/Arch_ob.jpg/800px-Arch_ob.jpg differ
diff --git a/oldwiki/images/thumb/f/f5/IconlessWindows.png/120px-IconlessWindows.png b/oldwiki/images/thumb/f/f5/IconlessWindows.png/120px-IconlessWindows.png
new file mode 100644 (file)
index 0000000..f5f7a16
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/IconlessWindows.png/120px-IconlessWindows.png differ
diff --git a/oldwiki/images/thumb/f/f5/IconlessWindows.png/150px-IconlessWindows.png b/oldwiki/images/thumb/f/f5/IconlessWindows.png/150px-IconlessWindows.png
new file mode 100644 (file)
index 0000000..177359e
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/IconlessWindows.png/150px-IconlessWindows.png differ
diff --git a/oldwiki/images/thumb/f/f5/IconlessWindows.png/180px-IconlessWindows.png b/oldwiki/images/thumb/f/f5/IconlessWindows.png/180px-IconlessWindows.png
new file mode 100644 (file)
index 0000000..5be11f8
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/IconlessWindows.png/180px-IconlessWindows.png differ
diff --git a/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/120px-OpenboxStandalone.jpg b/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/120px-OpenboxStandalone.jpg
new file mode 100644 (file)
index 0000000..68981fe
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/120px-OpenboxStandalone.jpg differ
diff --git a/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/180px-OpenboxStandalone.jpg b/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/180px-OpenboxStandalone.jpg
new file mode 100644 (file)
index 0000000..c0dad0e
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/180px-OpenboxStandalone.jpg differ
diff --git a/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/750px-OpenboxStandalone.jpg b/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/750px-OpenboxStandalone.jpg
new file mode 100644 (file)
index 0000000..a6b2b42
Binary files /dev/null and b/oldwiki/images/thumb/f/f5/OpenboxStandalone.jpg/750px-OpenboxStandalone.jpg differ
diff --git a/oldwiki/images/thumb/f/f6/Screenshot.jpg/120px-Screenshot.jpg b/oldwiki/images/thumb/f/f6/Screenshot.jpg/120px-Screenshot.jpg
new file mode 100644 (file)
index 0000000..b2ff092
Binary files /dev/null and b/oldwiki/images/thumb/f/f6/Screenshot.jpg/120px-Screenshot.jpg differ
diff --git a/oldwiki/images/thumb/f/f6/Screenshot.jpg/750px-Screenshot.jpg b/oldwiki/images/thumb/f/f6/Screenshot.jpg/750px-Screenshot.jpg
new file mode 100644 (file)
index 0000000..3341f64
Binary files /dev/null and b/oldwiki/images/thumb/f/f6/Screenshot.jpg/750px-Screenshot.jpg differ
diff --git a/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/120px-Ss_postlogic01.png b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/120px-Ss_postlogic01.png
new file mode 100644 (file)
index 0000000..82c13e5
Binary files /dev/null and b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/120px-Ss_postlogic01.png differ
diff --git a/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/1280px-Ss_postlogic01.png b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/1280px-Ss_postlogic01.png
new file mode 100644 (file)
index 0000000..c0796c9
Binary files /dev/null and b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/1280px-Ss_postlogic01.png differ
diff --git a/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/180px-Ss_postlogic01.png b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/180px-Ss_postlogic01.png
new file mode 100644 (file)
index 0000000..80745b4
Binary files /dev/null and b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/180px-Ss_postlogic01.png differ
diff --git a/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/800px-Ss_postlogic01.png b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/800px-Ss_postlogic01.png
new file mode 100644 (file)
index 0000000..f049374
Binary files /dev/null and b/oldwiki/images/thumb/f/f7/Ss_postlogic01.png/800px-Ss_postlogic01.png differ
diff --git a/oldwiki/images/thumb/f/fa/CLIM.png/120px-CLIM.png b/oldwiki/images/thumb/f/fa/CLIM.png/120px-CLIM.png
new file mode 100644 (file)
index 0000000..5e739f6
Binary files /dev/null and b/oldwiki/images/thumb/f/fa/CLIM.png/120px-CLIM.png differ
diff --git a/oldwiki/images/thumb/f/fa/CLIM.png/180px-CLIM.png b/oldwiki/images/thumb/f/fa/CLIM.png/180px-CLIM.png
new file mode 100644 (file)
index 0000000..cb6224a
Binary files /dev/null and b/oldwiki/images/thumb/f/fa/CLIM.png/180px-CLIM.png differ
diff --git a/oldwiki/img_auth.php b/oldwiki/img_auth.php
new file mode 120000 (symlink)
index 0000000..76f6b0c
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/img_auth.php
\ No newline at end of file
diff --git a/oldwiki/includes b/oldwiki/includes
new file mode 120000 (symlink)
index 0000000..e7e733f
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/includes
\ No newline at end of file
diff --git a/oldwiki/index.php b/oldwiki/index.php
new file mode 120000 (symlink)
index 0000000..01a952b
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/index.php
\ No newline at end of file
diff --git a/oldwiki/install-utils.inc b/oldwiki/install-utils.inc
new file mode 120000 (symlink)
index 0000000..8a8a6f7
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/install-utils.inc
\ No newline at end of file
diff --git a/oldwiki/languages b/oldwiki/languages
new file mode 120000 (symlink)
index 0000000..0b6c6d1
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/languages
\ No newline at end of file
diff --git a/oldwiki/maintenance b/oldwiki/maintenance
new file mode 120000 (symlink)
index 0000000..3397d8b
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/maintenance
\ No newline at end of file
diff --git a/oldwiki/opensearch_desc.php b/oldwiki/opensearch_desc.php
new file mode 120000 (symlink)
index 0000000..f669fe0
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/opensearch_desc.php
\ No newline at end of file
diff --git a/oldwiki/profileinfo.php b/oldwiki/profileinfo.php
new file mode 120000 (symlink)
index 0000000..87ceea0
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/profileinfo.php
\ No newline at end of file
diff --git a/oldwiki/redirect.php b/oldwiki/redirect.php
new file mode 120000 (symlink)
index 0000000..f304aa8
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/redirect.php
\ No newline at end of file
diff --git a/oldwiki/redirect.phtml b/oldwiki/redirect.phtml
new file mode 120000 (symlink)
index 0000000..8c8b365
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/redirect.phtml
\ No newline at end of file
diff --git a/oldwiki/skins/Chick.deps.php b/oldwiki/skins/Chick.deps.php
new file mode 120000 (symlink)
index 0000000..37c45d8
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Chick.deps.php
\ No newline at end of file
diff --git a/oldwiki/skins/Chick.php b/oldwiki/skins/Chick.php
new file mode 120000 (symlink)
index 0000000..2762915
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Chick.php
\ No newline at end of file
diff --git a/oldwiki/skins/CologneBlue.php b/oldwiki/skins/CologneBlue.php
new file mode 120000 (symlink)
index 0000000..71fa325
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/CologneBlue.php
\ No newline at end of file
diff --git a/oldwiki/skins/MonoBook.deps.php b/oldwiki/skins/MonoBook.deps.php
new file mode 120000 (symlink)
index 0000000..10deba1
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MonoBook.deps.php
\ No newline at end of file
diff --git a/oldwiki/skins/MonoBook.php b/oldwiki/skins/MonoBook.php
new file mode 120000 (symlink)
index 0000000..898b73c
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MonoBook.php
\ No newline at end of file
diff --git a/oldwiki/skins/MySkin.deps.php b/oldwiki/skins/MySkin.deps.php
new file mode 120000 (symlink)
index 0000000..72f4ca9
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MySkin.deps.php
\ No newline at end of file
diff --git a/oldwiki/skins/MySkin.php b/oldwiki/skins/MySkin.php
new file mode 120000 (symlink)
index 0000000..2731872
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/MySkin.php
\ No newline at end of file
diff --git a/oldwiki/skins/Nostalgia.php b/oldwiki/skins/Nostalgia.php
new file mode 120000 (symlink)
index 0000000..4477b7d
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Nostalgia.php
\ No newline at end of file
diff --git a/oldwiki/skins/Openbox.php b/oldwiki/skins/Openbox.php
new file mode 100644 (file)
index 0000000..ca05707
--- /dev/null
@@ -0,0 +1,349 @@
+<?php
+/**
+ * openbox skin to integrate into the new openbox site
+ *
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+  die( -1 );
+
+/** */
+require_once('includes/SkinTemplate.php');
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinOpenbox extends SkinTemplate {
+  function initPage( &$out ) {
+    SkinTemplate::initPage( $out );
+    $this->skinname  = 'openbox';
+    $this->stylename = 'openbox';
+    $this->template  = 'OpenboxTemplate';
+  }
+}
+
+class OpenboxTemplate extends QuickTemplate {
+  function execute() {
+    global $wgUser;
+    $skin = $wgUser->getSkin();
+
+    // Suppress warnings to prevent notices about missing indexes in
+    // $this->data
+    wfSuppressWarnings();
+
+    // wiki style shows the wiki things all the time, help style hides them
+    // out of view a bit
+    $style_wiki=1;
+    $style_help=2;
+    $style=$style_wiki;
+
+    $title = htmlspecialchars($this->data['title']);
+    $matches;
+    if (preg_match('/^Openbox:(.*)/', $title, &$matches)) {
+      $title=$matches[1];
+      $style=$style_help;
+    }
+    $breadcrumb=array('Home', '..', 'Help', '.');
+
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+     foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+       ?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+     } ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+
+<?php include('../head.php'); ?>
+  <?php $this->html('headlinks') ?>
+
+  <link rel="stylesheet" type="text/css" href="../css/help.css" />
+  <link rel="stylesheet" type="text/css" href="../css/wiki.css" />
+
+  <!--[-if lt IE 7]>
+    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"></script>
+    <meta http-equiv="imagetoolbar" content="no" />
+  <![endif]-->
+
+  <?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+                
+  <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+
+<!--
+  <?php if($this->data['jsvarurl'  ]) { ?>
+  <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"></script>
+  <?php } ?>
+-->
+<!--
+  <?php if($this->data['pagecss'   ]) { ?>
+  <style type="text/css"><?php $this->html('pagecss'   ) ?></style>
+  <?php } ?>
+  <?php if($this->data['usercss'   ]) { ?>
+  <style type="text/css"><?php $this->html('usercss'   ) ?></style>
+  <?php } ?>
+  <?php if($this->data['userjs'    ]) { ?>
+  <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs' ) ?>"></script>
+  <?php } ?>
+  <?php if($this->data['userjsprev']) { ?>
+  <script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
+  <?php } ?>
+-->
+
+<!--
+  <?php if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
+-->
+  <!-- Head Scripts -->
+  <?php $this->html('headscripts') ?>
+</head>
+
+<body <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
+
+<?php include('../top.php'); ?>
+
+<div id="splash">
+  <?php include('../searchbox.html') ?>
+  <img class="icon" src="../images/splash/help.png" alt="help"/>
+  <h2><?php echo $title ?></h2>
+  <div class="clear"></div>
+</div>
+
+<?php include('../content.php'); ?>
+
+<div id="wikithings">
+  <?php if($this->data['undelete']) { ?>
+  <div id="contentSub2"><?php     $this->html('undelete') ?></div>
+  <?php } ?>
+
+  <?php if($this->data['newtalk'] ) { ?>
+  <div class="usermessage"><?php $this->html('newtalk')  ?></div>
+  <?php } ?>
+</div>
+
+<div id="col1">
+<h5>hi</h5>
+                       <?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks') ?></div><?php } ?>
+</div>
+
+<div id="col2" class="widecol">
+<?php $this->html('bodytext') ?>
+</div>
+
+
+<?php include('../bottom.php'); ?>
+
+<?php exit; ?>
+
+
+               <div id="bodyContent">
+                       <!-- start content -->
+                       <!-- end content -->
+                       <div class="visualClear"></div>
+               </div>
+       </div>
+               </div>
+               <div id="column-one">
+       <div id="p-cactions" class="portlet">
+               <h5><?php $this->msg('views') ?></h5>
+               <div class="pBody">
+                       <ul>
+       <?php                   foreach($this->data['content_actions'] as $key => $tab) { ?>
+                                <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+                                               if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
+                                        ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>><?php
+                                        echo htmlspecialchars($tab['text']) ?></a></li>
+       <?php                    } ?>
+                       </ul>
+               </div>
+       </div>
+       <div class="portlet" id="p-personal">
+               <h5><?php $this->msg('personaltools') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php                  foreach($this->data['personal_urls'] as $key => $item) { ?>
+                               <li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
+                                       if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php
+                               echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
+                               if(!empty($item['class'])) { ?> class="<?php
+                               echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
+                               echo htmlspecialchars($item['text']) ?></a></li>
+<?php                  } ?>
+                       </ul>
+               </div>
+       </div>
+       <div class="portlet" id="p-logo">
+               <a style="background-image: url(<?php $this->text('logopath') ?>);" <?php
+                       ?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"<?php
+                       echo $skin->tooltipAndAccesskey('n-mainpage') ?>></a>
+       </div>
+       <script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
+       <?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
+       <div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar) ?>'<?php echo $skin->tooltip('p-'.$bar) ?>>
+               <h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
+               <div class='pBody'>
+                       <ul>
+<?php                  foreach($cont as $key => $val) { ?>
+                               <li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
+                                       if ( $val['active'] ) { ?> class="active" <?php }
+                               ?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
+<?php                  } ?>
+                       </ul>
+               </div>
+       </div>
+       <?php } ?>
+       <div id="p-search" class="portlet">
+               <h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+               <div id="searchBody" class="pBody">
+                       <form action="<?php $this->text('searchaction') ?>" id="searchform"><div>
+                               <input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
+                                       if( isset( $this->data['search'] ) ) {
+                                               ?> value="<?php $this->text('search') ?>"<?php } ?> />
+                               <input type='submit' name="go" class="searchButton" id="searchGoButton" value="<?php $this->msg('searcharticle') ?>" />&nbsp;
+                               <input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>" />
+                       </div></form>
+               </div>
+       </div>
+       <div class="portlet" id="p-tb">
+               <h5><?php $this->msg('toolbox') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php
+               if($this->data['notspecialpage']) { ?>
+                               <li id="t-whatlinkshere"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
+<?php
+                       if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
+                               <li id="t-recentchangeslinked"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a></li>
+<?php          }
+               }
+               if(isset($this->data['nav_urls']['trackbacklink'])) { ?>
+                       <li id="t-trackbacklink"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
+<?php  }
+               if($this->data['feeds']) { ?>
+                       <li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
+                                       ?><span id="feed-<?php echo Sanitizer::escapeId($key) ?>"><a href="<?php
+                                       echo htmlspecialchars($feed['href']) ?>"<?php echo $skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
+                                       <?php } ?></li><?php
+               }
+
+               foreach( array('contributions', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+
+                       if($this->data['nav_urls'][$special]) {
+                               ?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
+<?php          }
+               }
+
+               if(!empty($this->data['nav_urls']['print']['href'])) { ?>
+                               <li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
+               }
+
+               if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
+                               <li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
+               } elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
+                               <li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
+               }
+
+               wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
+?>
+                       </ul>
+               </div>
+       </div>
+
+       <div id="p-advertisement" class="portlet">
+               <h5>books for children</h5>
+               <div class="pBody">
+                       <!-- Phoophie ad! -->
+                       <!--
+                       <div><a target="_BLANK" href="http://www.phoophie.com"><img src="/openbox/webgfx/bannerbyeve3.gif" /></a></div>
+                       -->
+
+                       <!-- Books for Africa widget -->
+                       <div><small>Help us support the 
+                         Fray Luis Primary School through
+                         <a target="_blank" href="http://www.booksforafrica.org/donate/projects.php?p=11">Books for Africa</a>
+                       </small></div>
+<a href="http://www.firstgiving.com/chatoyance" alt="Firstgiving- SPONSOR ME" target="_blank"><img src="http://www.firstgiving.com/design/1/images/badges/firstgiving_badge5.gif" border="0" width="150" height="85"></a>
+                       <!-- no flash please...
+                       <object type="application/x-shockwave-flash"
+                               allowScriptAccess="always" 
+                               allowNetworking="all"
+                               height="230" width="150" align="middle"
+                               data="http://www.firstgiving.com/widgets/fgwidget.swf"
+                               flashvars="EggId=380566">
+                         <param name="allowScriptAccess" value="always" />
+                         <param name="allowNetworking" value="all" />
+                         <param name="movie"
+                                value="http://www.firstgiving.com/widgets/fgwidget.swf" />
+                         <param name="quality" value="high" />
+                         <param name="wmode" value="transparent" />
+                         <param name="flashvars" value="EggId=380566" />
+                         <param name="bgcolor" value="#ffffff" />
+                       </object-->
+               </div>
+       </div>
+
+<?php
+               if( $this->data['language_urls'] ) { ?>
+       <div id="p-lang" class="portlet">
+               <h5><?php $this->msg('otherlanguages') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php          foreach($this->data['language_urls'] as $langlink) { ?>
+                               <li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php
+                               ?><a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'] ?></a></li>
+<?php          } ?>
+                       </ul>
+               </div>
+       </div>
+<?php  } ?>
+               </div><!-- end of the left (by default at least) column -->
+                       <div class="visualClear"></div>
+                       <div id="footer">
+<?php
+               if($this->data['poweredbyico']) { ?>
+                               <div id="f-poweredbyico"><?php $this->html('poweredbyico') ?></div>
+<?php  }
+               if($this->data['copyrightico']) { ?>
+                               <div id="f-copyrightico"><?php $this->html('copyrightico') ?></div>
+<?php  }
+
+               // Generate additional footer links
+?>
+                       <ul id="f-list">
+<?php
+               $footerlinks = array(
+                       'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
+                       'privacy', 'about', 'disclaimer', 'tagline',
+               );
+               foreach( $footerlinks as $aLink ) {
+                       if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
+?>                             <li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
+<?php          }
+               }
+?>
+                       </ul>
+               </div>
+               
+       <?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
+</div>
+<?php $this->html('reporttime') ?>
+<?php if ( $this->data['debug'] ): ?>
+<!-- Debug output:
+<?php $this->text( 'debug' ); ?>
+
+-->
+<?php endif; ?>
+</body></html>
+<?php
+       wfRestoreWarnings();
+       } // end of execute() method
+} // end of class
+?>
diff --git a/oldwiki/skins/OpenboxWiki.php b/oldwiki/skins/OpenboxWiki.php
new file mode 100644 (file)
index 0000000..61909b1
--- /dev/null
@@ -0,0 +1,323 @@
+<?php
+/**
+ * openbox foo
+ *
+ * Translated from gwicke's previous TAL template version to remove
+ * dependency on PHPTAL.
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+       die( -1 );
+
+/** */
+require_once('includes/SkinTemplate.php');
+
+$nav_urlss['news'] = 'Openbox:News';
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinOpenboxWiki extends SkinTemplate {
+       /** Using monobook. */
+       function initPage( &$out ) {
+               SkinTemplate::initPage( $out );
+               $this->skinname  = 'openboxwiki';
+               $this->stylename = 'openboxwiki';
+               $this->template  = 'OpenboxWikiTemplate';
+       }
+}
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class OpenboxWikiTemplate extends QuickTemplate {
+       /**
+        * Template filter callback for MonoBook skin.
+        * Takes an associative array of data set from a SkinTemplate-based
+        * class, and a wrapper for MediaWiki's localization database, and
+        * outputs a formatted page.
+        *
+        * @access private
+        */
+       function execute() {
+               global $wgUser;
+               $skin = $wgUser->getSkin();
+
+               // Suppress warnings to prevent notices about missing indexes in $this->data
+               wfSuppressWarnings();
+
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+       foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+               ?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+       } ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+       <head>
+               <meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
+               <?php $this->html('headlinks') ?>
+               <title><?php $this->text('pagetitle') ?></title>
+               <style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>"; /*]]>*/</style>
+               <link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php } ?> href="<?php $this->text('stylepath') ?>/common/commonPrint.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" />
+               <!--link rel="stylesheet" type="text/css" media="handheld" href="<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/handheld.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" /-->
+               <!--[-if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if IE 7]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE70Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+               <!--[-if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"></script>
+               <meta http-equiv="imagetoolbar" content="no" /><![endif]-->
+               
+               <?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+                
+               <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+<?php  if($this->data['jsvarurl'  ]) { ?>
+               <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"><!-- site js --></script>
+<?php  } ?>
+<?php  if($this->data['pagecss'   ]) { ?>
+               <style type="text/css"><?php $this->html('pagecss'   ) ?></style>
+<?php  }
+               if($this->data['usercss'   ]) { ?>
+               <style type="text/css"><?php $this->html('usercss'   ) ?></style>
+<?php  }
+               if($this->data['userjs'    ]) { ?>
+               <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs' ) ?>"></script>
+<?php  }
+               if($this->data['userjsprev']) { ?>
+               <script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
+<?php  }
+               if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
+               <!-- Head Scripts -->
+<?php $this->html('headscripts') ?>
+       </head>
+<body <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
+       <div id="globalWrapper">
+               <div id="column-content">
+       <div id="content">
+               <a name="top" id="top"></a>
+               <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
+               <h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
+               <div id="bodyContent">
+                       <h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
+                       <div id="contentSub"><?php $this->html('subtitle') ?></div>
+                       <?php if($this->data['undelete']) { ?><div id="contentSub2"><?php     $this->html('undelete') ?></div><?php } ?>
+                       <?php if($this->data['newtalk'] ) { ?><div class="usermessage"><?php $this->html('newtalk')  ?></div><?php } ?>
+                       <?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto') ?> <a href="#column-one"><?php $this->msg('jumptonavigation') ?></a>, <a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div><?php } ?>
+                       <!-- start content -->
+                       <?php $this->html('bodytext') ?>
+                       <?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks') ?></div><?php } ?>
+                       <!-- end content -->
+                       <div class="visualClear"></div>
+               </div>
+       </div>
+               </div>
+               <div id="column-one">
+       <div id="p-cactions" class="portlet">
+               <h5><?php $this->msg('views') ?></h5>
+               <div class="pBody">
+                       <ul>
+       <?php                   foreach($this->data['content_actions'] as $key => $tab) { ?>
+                                <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+                                               if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
+                                        ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>><?php
+                                        echo htmlspecialchars($tab['text']) ?></a></li>
+       <?php                    } ?>
+                       </ul>
+               </div>
+       </div>
+       <div class="portlet" id="p-personal">
+               <h5><?php $this->msg('personaltools') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php                  foreach($this->data['personal_urls'] as $key => $item) { ?>
+                               <li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
+                                       if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php
+                               echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
+                               if(!empty($item['class'])) { ?> class="<?php
+                               echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
+                               echo htmlspecialchars($item['text']) ?></a></li>
+<?php                  } ?>
+                       </ul>
+               </div>
+       </div>
+       <div class="portlet" id="p-logo">
+               <a style="background-image: url(<?php $this->text('logopath') ?>);" <?php
+                       ?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"<?php
+                       echo $skin->tooltipAndAccesskey('n-mainpage') ?>></a>
+       </div>
+       <script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
+       <?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
+       <div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar) ?>'<?php echo $skin->tooltip('p-'.$bar) ?>>
+               <h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
+               <div class='pBody'>
+                       <ul>
+<?php                  foreach($cont as $key => $val) { ?>
+                               <li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
+                                       if ( $val['active'] ) { ?> class="active" <?php }
+                               ?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
+<?php                  } ?>
+                       </ul>
+               </div>
+       </div>
+       <?php } ?>
+       <div id="p-search" class="portlet">
+               <h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+               <div id="searchBody" class="pBody">
+                       <form action="<?php $this->text('searchaction') ?>" id="searchform"><div>
+                               <input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
+                                       if( isset( $this->data['search'] ) ) {
+                                               ?> value="<?php $this->text('search') ?>"<?php } ?> />
+                               <input type='submit' name="go" class="searchButton" id="searchGoButton" value="<?php $this->msg('searcharticle') ?>" />&nbsp;
+                               <input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>" />
+                       </div></form>
+               </div>
+       </div>
+       <div class="portlet" id="p-tb">
+               <h5><?php $this->msg('toolbox') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php
+               if($this->data['notspecialpage']) { ?>
+                               <li id="t-whatlinkshere"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
+<?php
+                       if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
+                               <li id="t-recentchangeslinked"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a></li>
+<?php          }
+               }
+               if(isset($this->data['nav_urls']['trackbacklink'])) { ?>
+                       <li id="t-trackbacklink"><a href="<?php
+                               echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
+<?php  }
+               if($this->data['feeds']) { ?>
+                       <li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
+                                       ?><span id="feed-<?php echo Sanitizer::escapeId($key) ?>"><a href="<?php
+                                       echo htmlspecialchars($feed['href']) ?>"<?php echo $skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
+                                       <?php } ?></li><?php
+               }
+
+               foreach( array('contributions', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+
+                       if($this->data['nav_urls'][$special]) {
+                               ?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
+<?php          }
+               }
+
+               if(!empty($this->data['nav_urls']['print']['href'])) { ?>
+                               <li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
+               }
+
+               if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
+                               <li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
+                               ?>"<?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
+               } elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
+                               <li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
+               }
+
+               wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
+?>
+                       </ul>
+               </div>
+       </div>
+
+       <div id="p-advertisement" class="portlet">
+               <h5>books for children</h5>
+               <div class="pBody">
+                       <!-- Phoophie ad! -->
+                       <!--
+                       <div><a target="_BLANK" href="http://www.phoophie.com"><img src="/openbox/webgfx/bannerbyeve3.gif" /></a></div>
+                       -->
+
+                       <!-- Books for Africa widget -->
+                       <div><small>Help us support the 
+                         Fray Luis Primary School through
+                         <a target="_blank" href="http://www.booksforafrica.org/donate/projects.php?p=11">Books for Africa</a>
+                       </small></div>
+<a href="http://www.firstgiving.com/chatoyance" alt="Firstgiving- SPONSOR ME" target="_blank"><img src="http://www.firstgiving.com/design/1/images/badges/firstgiving_badge5.gif" border="0" width="150" height="85"></a>
+                       <!-- no flash please...
+                       <object type="application/x-shockwave-flash"
+                               allowScriptAccess="always" 
+                               allowNetworking="all"
+                               height="230" width="150" align="middle"
+                               data="http://www.firstgiving.com/widgets/fgwidget.swf"
+                               flashvars="EggId=380566">
+                         <param name="allowScriptAccess" value="always" />
+                         <param name="allowNetworking" value="all" />
+                         <param name="movie"
+                                value="http://www.firstgiving.com/widgets/fgwidget.swf" />
+                         <param name="quality" value="high" />
+                         <param name="wmode" value="transparent" />
+                         <param name="flashvars" value="EggId=380566" />
+                         <param name="bgcolor" value="#ffffff" />
+                       </object-->
+               </div>
+       </div>
+
+<?php
+               if( $this->data['language_urls'] ) { ?>
+       <div id="p-lang" class="portlet">
+               <h5><?php $this->msg('otherlanguages') ?></h5>
+               <div class="pBody">
+                       <ul>
+<?php          foreach($this->data['language_urls'] as $langlink) { ?>
+                               <li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php
+                               ?><a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'] ?></a></li>
+<?php          } ?>
+                       </ul>
+               </div>
+       </div>
+<?php  } ?>
+               </div><!-- end of the left (by default at least) column -->
+                       <div class="visualClear"></div>
+                       <div id="footer">
+<?php
+               if($this->data['poweredbyico']) { ?>
+                               <div id="f-poweredbyico"><?php $this->html('poweredbyico') ?></div>
+<?php  }
+               if($this->data['copyrightico']) { ?>
+                               <div id="f-copyrightico"><?php $this->html('copyrightico') ?></div>
+<?php  }
+
+               // Generate additional footer links
+?>
+                       <ul id="f-list">
+<?php
+               $footerlinks = array(
+                       'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
+                       'privacy', 'about', 'disclaimer', 'tagline',
+               );
+               foreach( $footerlinks as $aLink ) {
+                       if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
+?>                             <li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
+<?php          }
+               }
+?>
+                       </ul>
+               </div>
+               
+       <?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
+</div>
+<?php $this->html('reporttime') ?>
+<?php if ( $this->data['debug'] ): ?>
+<!-- Debug output:
+<?php $this->text( 'debug' ); ?>
+
+-->
+<?php endif; ?>
+</body></html>
+<?php
+       wfRestoreWarnings();
+       } // end of execute() method
+} // end of class
+?>
diff --git a/oldwiki/skins/Simple.deps.php b/oldwiki/skins/Simple.deps.php
new file mode 120000 (symlink)
index 0000000..43e7574
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Simple.deps.php
\ No newline at end of file
diff --git a/oldwiki/skins/Simple.php b/oldwiki/skins/Simple.php
new file mode 120000 (symlink)
index 0000000..7aac591
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Simple.php
\ No newline at end of file
diff --git a/oldwiki/skins/Skin.sample b/oldwiki/skins/Skin.sample
new file mode 120000 (symlink)
index 0000000..6443809
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Skin.sample
\ No newline at end of file
diff --git a/oldwiki/skins/SkinPHPTal.sample b/oldwiki/skins/SkinPHPTal.sample
new file mode 120000 (symlink)
index 0000000..ed8bbd4
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/SkinPHPTal.sample
\ No newline at end of file
diff --git a/oldwiki/skins/Standard.php b/oldwiki/skins/Standard.php
new file mode 120000 (symlink)
index 0000000..d58d03c
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/Standard.php
\ No newline at end of file
diff --git a/oldwiki/skins/chick b/oldwiki/skins/chick
new file mode 120000 (symlink)
index 0000000..930be72
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/chick
\ No newline at end of file
diff --git a/oldwiki/skins/common b/oldwiki/skins/common
new file mode 120000 (symlink)
index 0000000..5597d1d
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/common
\ No newline at end of file
diff --git a/oldwiki/skins/disabled b/oldwiki/skins/disabled
new file mode 120000 (symlink)
index 0000000..1b9789a
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/disabled
\ No newline at end of file
diff --git a/oldwiki/skins/htmldump b/oldwiki/skins/htmldump
new file mode 120000 (symlink)
index 0000000..0a22cb9
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/htmldump
\ No newline at end of file
diff --git a/oldwiki/skins/monobook b/oldwiki/skins/monobook
new file mode 120000 (symlink)
index 0000000..7cbca7e
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/monobook
\ No newline at end of file
diff --git a/oldwiki/skins/myskin b/oldwiki/skins/myskin
new file mode 120000 (symlink)
index 0000000..03bc601
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/myskin
\ No newline at end of file
diff --git a/oldwiki/skins/openbox/bg-bottom.gif b/oldwiki/skins/openbox/bg-bottom.gif
new file mode 100644 (file)
index 0000000..81b27e2
Binary files /dev/null and b/oldwiki/skins/openbox/bg-bottom.gif differ
diff --git a/oldwiki/skins/openbox/bg.gif b/oldwiki/skins/openbox/bg.gif
new file mode 100644 (file)
index 0000000..4015a0c
Binary files /dev/null and b/oldwiki/skins/openbox/bg.gif differ
diff --git a/oldwiki/skins/openbox/bullet.gif b/oldwiki/skins/openbox/bullet.gif
new file mode 100644 (file)
index 0000000..6197b63
Binary files /dev/null and b/oldwiki/skins/openbox/bullet.gif differ
diff --git a/oldwiki/skins/openbox/default-icon-theme.css b/oldwiki/skins/openbox/default-icon-theme.css
new file mode 100644 (file)
index 0000000..f681802
--- /dev/null
@@ -0,0 +1,17 @@
+table.default-icon-theme td,th {
+       border-bottom: 1px solid #EEE;
+               margin: 0;
+                       padding: 4px;
+                               font-family: sans-serif;
+                                       vertical-align: middle;
+                                               color: #555;
+                                               }
+
+                                               table.default-icon-theme td.dit-icon {
+                                                       color: #999;
+                                                               text-align: center;
+                                                               }
+
+                                                               table.default-icon-theme td.dit-description {
+                                                                       font-size: x-small;
+                                                                       }
diff --git a/oldwiki/skins/openbox/discussionitem_icon.gif b/oldwiki/skins/openbox/discussionitem_icon.gif
new file mode 100644 (file)
index 0000000..ce57163
Binary files /dev/null and b/oldwiki/skins/openbox/discussionitem_icon.gif differ
diff --git a/oldwiki/skins/openbox/external.png b/oldwiki/skins/openbox/external.png
new file mode 100644 (file)
index 0000000..dac9539
Binary files /dev/null and b/oldwiki/skins/openbox/external.png differ
diff --git a/oldwiki/skins/openbox/file_icon.gif b/oldwiki/skins/openbox/file_icon.gif
new file mode 100644 (file)
index 0000000..9964800
Binary files /dev/null and b/oldwiki/skins/openbox/file_icon.gif differ
diff --git a/oldwiki/skins/openbox/headbg.gif b/oldwiki/skins/openbox/headbg.gif
new file mode 100644 (file)
index 0000000..9408bff
Binary files /dev/null and b/oldwiki/skins/openbox/headbg.gif differ
diff --git a/oldwiki/skins/openbox/headbg.jpg b/oldwiki/skins/openbox/headbg.jpg
new file mode 100644 (file)
index 0000000..9939153
Binary files /dev/null and b/oldwiki/skins/openbox/headbg.jpg differ
diff --git a/oldwiki/skins/openbox/icons.css b/oldwiki/skins/openbox/icons.css
new file mode 100644 (file)
index 0000000..916cafd
--- /dev/null
@@ -0,0 +1,14 @@
+/* Icon Renderings */
+
+div.icons {
+       display: block;
+       float: left;
+       width: 300px;
+       position: relative;
+}
+
+div.icons h4 {
+       position: absolute;
+       bottom: 0px;
+       left: 0px;
+}
diff --git a/oldwiki/skins/openbox/link_icon.gif b/oldwiki/skins/openbox/link_icon.gif
new file mode 100644 (file)
index 0000000..70b20f7
Binary files /dev/null and b/oldwiki/skins/openbox/link_icon.gif differ
diff --git a/oldwiki/skins/openbox/lock_icon.gif b/oldwiki/skins/openbox/lock_icon.gif
new file mode 100644 (file)
index 0000000..9597cf4
Binary files /dev/null and b/oldwiki/skins/openbox/lock_icon.gif differ
diff --git a/oldwiki/skins/openbox/magnify-clip.png b/oldwiki/skins/openbox/magnify-clip.png
new file mode 100644 (file)
index 0000000..c6c7c68
Binary files /dev/null and b/oldwiki/skins/openbox/magnify-clip.png differ
diff --git a/oldwiki/skins/openbox/mail_icon.gif b/oldwiki/skins/openbox/mail_icon.gif
new file mode 100644 (file)
index 0000000..d83875d
Binary files /dev/null and b/oldwiki/skins/openbox/mail_icon.gif differ
diff --git a/oldwiki/skins/openbox/main-withphoophie.css b/oldwiki/skins/openbox/main-withphoophie.css
new file mode 100644 (file)
index 0000000..1d28899
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -12.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 12.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 11.6em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 11.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/oldwiki/skins/openbox/main.css b/oldwiki/skins/openbox/main.css
new file mode 100644 (file)
index 0000000..2780593
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -13.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 13.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 12.8em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 12.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/oldwiki/skins/openbox/news_icon.png b/oldwiki/skins/openbox/news_icon.png
new file mode 100644 (file)
index 0000000..529b2af
Binary files /dev/null and b/oldwiki/skins/openbox/news_icon.png differ
diff --git a/oldwiki/skins/openbox/null b/oldwiki/skins/openbox/null
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/oldwiki/skins/openbox/old.css b/oldwiki/skins/openbox/old.css
new file mode 100644 (file)
index 0000000..030feee
--- /dev/null
@@ -0,0 +1,989 @@
+/*
+** Mediawiki 'Tango' style sheet for CSS2-capable browsers.
+** License: GPL
+**
+** Based on 'monobook', Copyright Gabriel Wicke - http://wikidev.net/
+*/
+
+#globalWrapper {
+       padding: 0 20px 2em 2em;
+}
+#column-content {
+       margin: 0;
+       padding:0;
+}
+#content {
+       background: transparent url("tango-steps.png") no-repeat top right;
+       margin: 20px 0 0 0;
+       padding: 120px 170px 0 3em;
+       z-index: 2;
+}
+#column-one { 
+       padding-top: 2em; 
+       margin-top: 2em; 
+       border-top: 1px solid #aaa;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font-size: 85%;
+       line-height: 1.2em;
+       font-family: tahoma, bitstream vera sans, sans-serif;
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       /*
+       background: #f9f9f9 url("headbg.jpg") 0px 0px no-repeat;
+       background: #6b6c69 url("bg-bottom.gif") 0px 134px;
+       background-repeat: repeat-x;
+       */
+       background: #000 url("bg.gif") 0px 0px;
+       background-repeat: repeat-x;
+       color: #eee;
+       margin: 0 auto;
+}
+html>body {
+}
+
+.visualClear { clear: both; }
+
+/* general styles */
+
+table {
+}
+a {
+       text-decoration: none;
+       color: #f57900;
+       background: none;
+}
+a:visited { color: #ce5c00; }
+a:active { color: Orange; }
+a:hover { 
+       color: #fcaf3e;
+       text-decoration: underline; 
+}
+a.stub { color: #772233; }
+
+a.new,
+#p-personal a.new { color:#ba0000; }
+
+a.new:visited,
+#p-personal a.new:visited { color:#a55858; }
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+p {
+       margin: 0.8em 0em 1.0em;
+}
+
+p img { margin: 0; }
+
+hr {
+       height: 1px;
+       color: #444;
+       background-color: #444;
+       border: 0;
+       margin: 0.5em 0 0.5em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: normal;
+       font-family: times new roman, times, serif;
+       color: #888;
+       background: none;
+       padding: 0;
+       margin: 2em 20px 0.25em;
+}
+h1 { 
+       color: #aaa;
+       padding: 0 0 0.5em;
+       margin: 1.25em 0 0;
+       /*
+       margin: 0.75em 0 0;
+       position: relative; 
+       top: 0.75em;
+       */
+}
+/*
+h1 { font-size: 150%; }
+h2 { font-size: 125%; }
+*/
+h3, h4, h5, h6 { 
+}
+/*
+h3 { font-size: 132%; }
+h4 { font-size: 1.5%; }
+h5 { font-size: 100%; }
+h6 { font-size: 80%;  }
+*/
+
+ul { 
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: 0.3em 0 0 1.5em;
+       padding:0;
+       list-style-image: url("bullet.gif");
+}
+ol {
+       line-height: 1.5em;
+       margin: 0.3em 0 0 3.2em;
+       padding:0;
+       list-style-image: none;
+}
+li { margin-bottom: 0.1em; }
+dt { 
+       font-weight: bold; 
+       margin-bottom: 0.1em;
+}
+dl{
+       margin-top: 0.2em;
+       margin-bottom: 0.5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: 0.1em;
+}
+
+fieldset {
+       border: 1px solid #ccc;
+       border-width: 1px 0 0;
+       margin: 1em 0em 1em 0em;
+       padding: 0em 1em 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       font-weight: bold;
+       padding: 0.5em;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       padding: 0.1em;
+       overflow: auto;
+}
+/* hide this from ie/mac and konq2.2 */
+@media All {
+       head:first-child+body input {
+               visibility: visible;
+               border: 1px solid #2f6fab;  
+               color: Black;
+               vertical-align: middle;
+               padding: 0.2em;
+       }
+}
+input.historysubmit {
+       padding: 0 0.3em 0.3em 0.3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.5em;
+}
+input[type="radio"],
+input[type="checkbox"] { border:none; }
+select {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted Black;
+       color: Black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code { 
+       background-color: #333; 
+}
+pre {
+       font-family: bitstream vera sans mono, monospace;
+       font-size: 80%;
+       overflow: auto;
+       padding: 1em;
+       border: 1px dotted #888;
+       color: #fff;
+       background-color: #222;
+       line-height: 1.1em;
+}
+
+
+/*
+** the main content area
+*/
+
+#siteSub { display: none; }
+#contentSub {
+       font-size: 84%;
+       line-height: 1.2em;
+       color: #7d7d7d;
+}
+span.subpages { display: block; }
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; }
+#bodyContent h3,
+#bodyContent h4,
+#bodyContent h5 {
+       margin-bottom: 0.3em;
+}
+.firstHeading { margin-bottom:0.1em; }
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: Black;
+       font-weight: bold;
+       margin: 2em 0em 1em 0em;
+       padding: 0.5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 0.9em 0 0.9em;
+}
+#siteNotice p { margin: none; padding: none; }
+.error {
+       color: red;
+       font-size: larger;
+}
+#catlinks {
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0em;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * { font-size: 94%; }
+table.small { font-size: 100% }
+
+/*
+** content styles
+*/
+
+#toc { 
+       float: right;
+       margin: 0 1em 0.5em;
+       /*border:1px solid #2f6fab;*/
+       padding: 0.75em;
+       font-size: 95%;
+       border:1px solid #333;
+       -moz-border-radius: 2.5px;
+       background-color: #111;
+}
+#toc .tocindent { margin-left: 2em; }
+#toc .tocline { margin-bottom: 0px; }
+#toc p { margin: 0 }
+#toc .toctoggle { font-size: 94%; }
+#toc .editsection { 
+       margin-top: 0.7em; 
+       font-size: 94%;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right; 
+       margin: 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.floatright p { font-style: italic; } 
+div.floatleft, table.floatleft {
+       float: left; 
+       margin: 0.3em 0.5em 0.5em 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+div.floatleft p { font-style: italic; } 
+/* thumbnails */
+div.thumb {
+       margin-bottom: 0.5em;
+       border-style: solid; border-color: transparent;
+       width: auto;
+}
+div.thumb div {
+       border:1px solid #444;
+       padding: 3px !important;
+       background-color: #222;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+div.thumb div a img {
+       background-color: #eee;
+       border:1px solid #fff;
+}
+div.thumb div div.thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4;
+       padding: 0.3em 0 0.1em 0;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+       float: left;
+       margin-right:0.5em;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+.urlexpansion,
+.hiddenStructure {
+       display: none;
+}
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float:right; 
+       position:relative;
+       margin-left:1em; 
+       margin-bottom:1em;
+       text-align:center;
+}
+.toccolours { 
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       font-size: 95%;
+}
+div.townBox {
+       position:relative;
+       float:right;
+       background:transparent;
+       margin-left:1em;
+       border: 1px solid Grey;
+       padding:0.3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 0.3em 0; 
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+       margin: 0.1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment { color: gray; }
+#pagehistory span.user { 
+       margin-left: 1.4em;
+       margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li { border: 1px solid transparent; }
+#pagehistory li.selected { 
+       background-color:#f9f9f9;
+       border:1px dashed #aaaaaa;
+}
+/*
+** Diff rendering
+*/
+table.diff { background:transparent; }
+td.diff-otitle { background:#ffffff; }
+td.diff-ntitle { background:#ffffff; }
+td.diff-addedline { 
+       background:#ccffcc;
+       font-size: smaller;
+}
+td.diff-deletedline { 
+       background:#ffffaa;
+       font-size: smaller;
+}
+td.diff-context {
+       background:#eeeeee;
+       font-size: smaller;
+}
+span.diffchange { color: red; }
+
+/* 
+** keep the transparentspace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2 
+*/
+#bodyContent a[href ^="http://"],
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url("lock_icon.gif") center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url("mail_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url("news_icon.png") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url("file_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url("discussionitem_icon.gif")  center right no-repeat;
+       padding-right: 18px;
+}
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #3366bb;
+}
+#bodyContent a.external { color: #c95616; }
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 0.5em 0em;
+       padding: 0;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h5 { 
+       background: transparent;
+       padding: 0em 1em 0em 0.5em;
+       text-transform: lowercase;
+       display: inline;
+       font-size: 91%;
+       height: 1em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h6 { 
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0em 1em 0em 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background: transparent;
+       border-collapse: collapse;
+       padding: 0 0.8em 0.3em 0.5em;
+}
+.portlet h1, 
+.portlet h2, 
+.portlet h3, 
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url("bullet.gif");
+       font-size:95%;
+       list-style: none;
+       text-align: center;
+}
+.portlet li {
+       display: inline;
+       padding:0;
+       margin: 0 0 0 0;
+       margin-bottom: 0;
+}
+
+/* 
+** Logo properties 
+*/
+
+#p-logo {
+       /*    background-color: #333; */
+       z-index: 3;
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       width: 100%;
+       overflow: visible;
+       height: 140px;
+}
+#p-logo h5 { display: none; }
+#p-logo a {
+       position: relative;
+       display: block;
+       height: 140px;
+       width: 280px;
+       background-repeat: no-repeat;
+       background-position: 30px;
+}
+#p-logo a:hover {
+       text-decoration: none;
+}
+
+/*
+** the navbar at the top
+*/
+#p-navbar {
+       position: absolute;
+       top: 140px;
+       left: 0;
+       right: 0;
+       background-color: #d3dbe7;
+       border-bottom: 1px solid #a8b9cf;
+       padding: 4px;
+       opacity: 0.75;
+}
+
+.navlinks li {
+       vertical-align: middle;
+}
+.navlinks li a {
+       padding: 2pt 20pt;
+       margin: 1px;
+       color: #29416b;
+}
+.navlinks li a:hover {
+       background-color: #e2e7ef;
+       text-decoration: none;
+       -moz-border-radius: 2.5px;
+       border-radius: 2.5px;
+       color: #000;
+}
+
+/*
+** the navigation portlet
+*/
+
+#p-nav {
+       position:absolute;
+       top: 120px;
+       left: 30px;
+       z-index: 100;
+}
+#p-nav a {
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       font-style: italic;
+       text-transform: lowercase;
+       text-decoration: none;
+       display: block;
+       float: left;
+       padding: 3px 12px;
+       margin: 0;
+}
+
+/*
+** Search portlet
+*/
+#p-search {
+       position:relative;
+       z-index:3;
+}    
+#p-search h5 {
+       display: none;
+}
+#p-search .pBody {
+       text-align: center;
+}
+input.searchButton {
+       margin-top:1px;
+       padding: 0 0.4em !important;
+       font-size: 95%;
+       cursor: pointer;
+       background-color: #dfe7f0;
+}
+#searchInput {
+       width:10.9em;
+       margin: 0 0 0 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: 0.5em 0.4em 0.4em 0.4em;
+}
+
+/* 
+** the personal toolbar
+*/
+
+#p-personal {
+       width: 100%;
+       text-align: center;
+}
+
+#p-personal h5 {
+       display:none;
+}
+#p-personal .portlet,
+#p-personal .pBody {
+       border: none;
+}
+/* this is the ul contained in the portlet */
+#p-personal ul {
+}
+#p-personal li {
+       display: inline;
+       margin-left: 1em;
+       line-height: 1.2em;
+}
+#p-personal li a {
+       text-decoration: none;
+       color: #005896;
+       padding-bottom: 0.2em;
+       background: none;
+}
+#p-personal li a:hover {
+       background-color: transparent;
+       padding-bottom: 0.2em;
+       text-decoration: none;
+}
+
+/* the icon in front of the user name, single quotes
+in bg url to hide it from iemac */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background:  url('user.gif') top left no-repeat;
+       padding-left: 20px;
+       text-transform: none;
+}
+
+/*
+** the page-related actions- page/talk, edit etc 
+*/
+#p-cactions {
+       text-align: center;
+}
+#p-cactions h5 {
+       display: none;
+}
+#p-cactions ul {
+       display: inline;
+       overflow: visible;
+}
+#p-cactions ul li {
+       display: inline;
+}
+#p-cactions ul li a {
+       padding: 2px 5px;
+}
+/*
+#p-cactions {
+       top: 1.3em;
+       left: 11.5em;
+       margin: 0;
+       transparent-space:nowrap;
+       width: 76%;
+       line-height: 1.1em;
+       overflow: visible;
+       background: none;
+       border-collapse: collapse;
+       padding-left: 1em;
+       list-style: none;
+       font-size: 95%;
+}
+#p-cactions .hiddenStructure { display: none; }
+#p-cactions ul {
+       list-style: none;
+}
+#p-cactions li {
+       display: inline;
+       border: 1px solid #aaaaaa;
+       border-bottom: none;
+       padding: 0 0 0.1em 0;
+       margin: 0 0.3em 0 0;
+       overflow: visible;
+       background: transparent;
+}
+#p-cactions li.selected {
+       border-color: #fabd23;
+       padding: 0 0 0.2em 0;
+}
+*/
+#p-cactions li a {
+       /*
+       background-color: transparent;
+       */
+       color: #002bb8;
+       /*
+       border: none;
+       padding: 0 0.8em 0.3em 0.8em;
+       */
+       text-decoration: none;
+       text-transform: lowercase;
+       position: relative;
+       z-index: 0;
+       margin: 0;
+}
+/*
+#p-cactions .selected a { z-index: 3; }
+#p-cactions .new a { color:#ba0000; }
+#p-cactions li a:hover {
+       z-index: 3;
+       text-decoration: none;
+}
+#p-cactions h5 { display: none; }
+#p-cactions li.istalk { margin-right: 0; }
+#p-cactions li.istalk a { padding-right: 0.5em; }
+#p-cactions #ca-addsection a { 
+       padding-left: 0.4em;
+       padding-right: 0.4em;
+}
+*/
+/* offsets to distinguish the tab groups */
+/*
+li#ca-talk { margin-right: 1.5em; }
+li#ca-watch, li#ca-watch { margin-left: 1.5em; }
+*/
+li#ca-talk { margin-bottom: 1.5em; }
+li#ca-watch, li#ca-watch { margin-top: 1.5em; }
+#p-cactions .new a { color:#ba0000; }
+
+
+/*
+** the remaining portlets
+*/
+#p-tbx,
+#p-lang {
+       position:relative;
+       z-index:3;
+}
+
+/*
+** footer
+*/
+#footer {
+       text-align: center;
+       font-size: xx-small;
+       margin: 2em 0;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+/* hide from incapable browsers */
+/*
+head:first-child+body #footer li { transparent-space: nowrap; }
+*/
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc { 
+       float: left;
+       margin: 1em 1em 1em 1em;
+       width: 13em;
+       border: 1px solid #aaaaaa;
+       background-color: #fff;
+}
+#preftoc li { 
+       border: 1px solid transparent; 
+       list-style: none;
+}
+#preftoc li.selected { 
+       background-color: Highlight;
+       border:1px solid #aaaaaa;
+}
+#preftoc li.selected a {
+       color: HighlightText;
+}
+#preftoc a,
+#preftoc a:active {
+       text-decoration: none;
+       display: block;
+       color: #0014a6;
+       padding: 2px 4px;
+}
+#prefcontrol { 
+       clear: both;
+       float: left;
+       margin-top: 1em;
+}
+div.prefsectiontip { 
+       font-size: 95%;
+       margin-top: 1em;
+}
+fieldset.operaprefsection { margin-left: 15em }
+
+.prefsection label {
+}
+.prefsection div {
+       margin: 4pt 0;
+}
+
+/* 
+** IE/Mac fixes, hope to find a validating way to move this
+** to a separate stylesheet. This would work but doesn't validate: 
+** @import("IEMacFixes.css");
+*/
+* > html #p-cactions li.selected a { border-color: #fabd23; }
+/* footer icons need a fixed width */
+* > html #f-poweredbyico,
+* > html #f-copyrightico { width: 88px; }
+* > html #bodyContent,
+* > html #bodyContent pre {
+       overflow-x: auto;
+       width: 100%;
+       padding-bottom: 25px;
+}
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+/*
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+*/
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       /*
+       position: absolute;
+       left: 0;
+       top: 0;
+       */
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+
+.printfooter {
+       display: none;
+}
+
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+.portlet h5 {
+       display: none;
+}
+
+.editsection {
+       font-size: x-small;
+       color: #8ba2bf;
+}
+.editsection a:link,
+.editsection a:visited {
+       text-decoration: none;
+}
diff --git a/oldwiki/skins/openbox/openbox.gif b/oldwiki/skins/openbox/openbox.gif
new file mode 100644 (file)
index 0000000..508aab4
Binary files /dev/null and b/oldwiki/skins/openbox/openbox.gif differ
diff --git a/oldwiki/skins/openbox/openbox.png b/oldwiki/skins/openbox/openbox.png
new file mode 100644 (file)
index 0000000..839a14d
Binary files /dev/null and b/oldwiki/skins/openbox/openbox.png differ
diff --git a/oldwiki/skins/openbox/required.gif b/oldwiki/skins/openbox/required.gif
new file mode 100644 (file)
index 0000000..1d70814
Binary files /dev/null and b/oldwiki/skins/openbox/required.gif differ
diff --git a/oldwiki/skins/openbox/rtl.css b/oldwiki/skins/openbox/rtl.css
new file mode 100644 (file)
index 0000000..77b44ac
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+Right-to-left fixes for MonoBook.
+Places sidebar on right, tweaks various alignment issues.
+
+Works mostly ok nicely on Safari 1.2.1; fine in Mozilla.
+
+Safari bugs (1.2.1):
+* Tabs are still appearing in left-to-right order. (Try after localizing)
+
+Opera bugs (7.23 linux):
+* Some bits of ltr text (sidebar box titles) have forward and backward versions overlapping each other
+
+IE/mac bugs:
+* The thing barfs on Hebrew and Arabic anyway, so no point testing.
+
+Missing features due to lack of support:
+* external link icons, icon next to user name
+
+To test:
+* Opera6
+* IE 5.0
+* etc
+
+*/
+body,
+body * {
+    direction: rtl;
+/*    unicode-bidi: bidi-override;*/
+    unicode-bidi: embed;
+}
+#column-content {
+       margin: 0 -12.2em 0 0;
+        float: left;
+}
+#column-content #content{
+       margin-left: 0;
+       margin-right: 12.2em;
+    border-right: 1px solid #aaaaaa;
+    border-left: none;
+}
+html>body .portlet {
+    float: right;
+    clear: right;
+}
+/* recover IEMac (might be fine with the float, but usually it's close to IE */
+*>body .portlet {
+    float: none;
+    clear: none;
+}
+.pBody {
+    padding-right: 0.8em;
+    padding-left: 0.5em;
+}
+
+/* Fix alignment */
+.documentByLine,
+.portletDetails,
+.portletMore,
+#p-personal {
+       text-align: left;
+}
+
+div div.thumbcaption {
+       text-align: right;
+}
+
+div.magnify,
+#div.townBox,
+#p-logo {
+       left: auto;
+       right: 0;
+}
+#p-personal {
+       left: auto;
+       right: 0;
+}
+
+#p-cactions {
+       left: auto;
+       right: 11.5em;
+        padding-left: 0;
+        padding-right: 1em;
+}
+#p-cactions li {
+    margin-left: 0.3em;
+    margin-right: 0;
+    float: right;
+}
+* html #p-cactions li a {
+    display: block;
+    padding-bottom: 0;
+}
+* html #p-cactions li a:hover {
+    padding-bottom: 0.2em;
+}
+/* offsets to distinguish the tab groups */
+li#ca-talk {
+    margin-right: auto;
+    margin-left: 1.6em;
+}
+li#ca-watch,li#ca-unwatch {
+    margin-right: 1.6em !important;
+}
+
+/* Fix margins */
+/* top right bottom left */
+
+ul {
+       margin-left: 0;
+       margin-right: 1.5em;
+}
+ol {
+       margin-left: 0;
+       margin-right: 2.4em;
+}
+dd {
+       margin-left: 0;
+       margin-right: 1.6em;
+}
+#contentSub {
+       margin-right: 1em;
+       margin-left: 0;
+}
+.tocindent {
+       margin-left: 0;
+       margin-right: 2em;
+}
+div.tright {
+    clear: none;
+}
+div.tleft {
+    clear: left;
+}
+div.floatright, table.floatright {
+    clear: none;
+}
+div.floatleft, table.floatleft {
+    clear: left;
+}
+div.townBox {
+       margin-left: 0;
+       margin-right: 1em;
+}
+div.townBox dl dd {
+       margin-left: 0;
+       margin-right: 1.1em;
+}
+#p-personal li {
+       margin-left: 0;
+       margin-right: 1em;
+}
+
+li#ca-talk,
+li#ca-watch {
+       margin-right: auto;
+       margin-left: 1.6em;
+}
+
+#p-personal li {
+    float: left;
+}
+/* Fix link icons */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background: none;
+       padding-left: 0;
+}
+.external {
+    padding: 0 !important;
+    background: none !important;
+}
+#footer {
+    clear: both;
+}
+* html #footer {
+    margin-left: 0;
+    margin-right: 13.6em;
+    border-left: 0;
+    border-right: 1px solid #fabd23;
+} 
+* html #column-content { 
+    float: none;
+    margin-left: 0;
+    margin-right: 0;
+}
+* html #column-content #content {
+    margin-left: 0;
+    margin-top: 3em;
+}
+* html #column-one { right: 0; }
+
+/* js pref toc */
+#preftoc { float: right; }
+/* workaround for moz bug, displayed bullets on left side */
+#preftoc li { list-style: none; }
+#prefcontrol { float: right; }
+fieldset.prefsection,
+fieldset.operaprefsection { 
+    margin-left: 0 !important;
+    margin-right: 15em;
+}
diff --git a/oldwiki/skins/openbox/user.gif b/oldwiki/skins/openbox/user.gif
new file mode 100644 (file)
index 0000000..958c6a7
Binary files /dev/null and b/oldwiki/skins/openbox/user.gif differ
diff --git a/oldwiki/skins/openboxwiki/bg-bottom.gif b/oldwiki/skins/openboxwiki/bg-bottom.gif
new file mode 100644 (file)
index 0000000..81b27e2
Binary files /dev/null and b/oldwiki/skins/openboxwiki/bg-bottom.gif differ
diff --git a/oldwiki/skins/openboxwiki/bg.gif b/oldwiki/skins/openboxwiki/bg.gif
new file mode 100644 (file)
index 0000000..4015a0c
Binary files /dev/null and b/oldwiki/skins/openboxwiki/bg.gif differ
diff --git a/oldwiki/skins/openboxwiki/bullet.gif b/oldwiki/skins/openboxwiki/bullet.gif
new file mode 100644 (file)
index 0000000..6197b63
Binary files /dev/null and b/oldwiki/skins/openboxwiki/bullet.gif differ
diff --git a/oldwiki/skins/openboxwiki/css.diff b/oldwiki/skins/openboxwiki/css.diff
new file mode 100644 (file)
index 0000000..797c811
--- /dev/null
@@ -0,0 +1,45 @@
+--- old/main.css       Wed Apr  6 17:20:10 2005
++++ main.css   Thu Apr  7 15:45:14 2005
+@@ -6,6 +6,7 @@
+ */
+ #globalWrapper {
++      background: transparent url("tango-steps-dark.gif") no-repeat 100% 42px;
+       padding: 0;
+ }
+ #column-content {
+@@ -37,8 +38,8 @@
+ */
+ body {
+-      background: transparent url("tango-steps-dark.gif") no-repeat 100% 42px;
+-      background-color: #333;
++      background: transparent url("bg.gif") repeat-x top;
++      background-color: #33436a;
+       color: #eee;
+       font-size: 92%;
+       line-height: 1.4em;
+@@ -86,12 +87,14 @@
+ }
+ dd img {
+-      border: 5px solid #ccc;
++      border: 5px solid #ede38e;
+       -moz-border-radius: 3px;
+       float: left;
+       margin-right: 12px;
+       margin-bottom: 6px;
+       margin-top: 6px; 
++      padding: 1px;
++      background-color: #96842e;
+ }
+ dt, dd { clear: both; }
+@@ -119,6 +122,7 @@
+       margin: 0;
+ }
+ h2 {
++      color: #8fb171;
+       padding-left: 43px;
+       background: transparent url(tango-steps-heading.gif) no-repeat left bottom;
+ }
diff --git a/oldwiki/skins/openboxwiki/default-icon-theme.css b/oldwiki/skins/openboxwiki/default-icon-theme.css
new file mode 100644 (file)
index 0000000..f681802
--- /dev/null
@@ -0,0 +1,17 @@
+table.default-icon-theme td,th {
+       border-bottom: 1px solid #EEE;
+               margin: 0;
+                       padding: 4px;
+                               font-family: sans-serif;
+                                       vertical-align: middle;
+                                               color: #555;
+                                               }
+
+                                               table.default-icon-theme td.dit-icon {
+                                                       color: #999;
+                                                               text-align: center;
+                                                               }
+
+                                                               table.default-icon-theme td.dit-description {
+                                                                       font-size: x-small;
+                                                                       }
diff --git a/oldwiki/skins/openboxwiki/discussionitem_icon.gif b/oldwiki/skins/openboxwiki/discussionitem_icon.gif
new file mode 100644 (file)
index 0000000..ce57163
Binary files /dev/null and b/oldwiki/skins/openboxwiki/discussionitem_icon.gif differ
diff --git a/oldwiki/skins/openboxwiki/external.png b/oldwiki/skins/openboxwiki/external.png
new file mode 100644 (file)
index 0000000..dac9539
Binary files /dev/null and b/oldwiki/skins/openboxwiki/external.png differ
diff --git a/oldwiki/skins/openboxwiki/file_icon.gif b/oldwiki/skins/openboxwiki/file_icon.gif
new file mode 100644 (file)
index 0000000..9964800
Binary files /dev/null and b/oldwiki/skins/openboxwiki/file_icon.gif differ
diff --git a/oldwiki/skins/openboxwiki/headbg.gif b/oldwiki/skins/openboxwiki/headbg.gif
new file mode 100644 (file)
index 0000000..9408bff
Binary files /dev/null and b/oldwiki/skins/openboxwiki/headbg.gif differ
diff --git a/oldwiki/skins/openboxwiki/headbg.jpg b/oldwiki/skins/openboxwiki/headbg.jpg
new file mode 100644 (file)
index 0000000..9939153
Binary files /dev/null and b/oldwiki/skins/openboxwiki/headbg.jpg differ
diff --git a/oldwiki/skins/openboxwiki/icons.css b/oldwiki/skins/openboxwiki/icons.css
new file mode 100644 (file)
index 0000000..916cafd
--- /dev/null
@@ -0,0 +1,14 @@
+/* Icon Renderings */
+
+div.icons {
+       display: block;
+       float: left;
+       width: 300px;
+       position: relative;
+}
+
+div.icons h4 {
+       position: absolute;
+       bottom: 0px;
+       left: 0px;
+}
diff --git a/oldwiki/skins/openboxwiki/link_icon.gif b/oldwiki/skins/openboxwiki/link_icon.gif
new file mode 100644 (file)
index 0000000..70b20f7
Binary files /dev/null and b/oldwiki/skins/openboxwiki/link_icon.gif differ
diff --git a/oldwiki/skins/openboxwiki/lock_icon.gif b/oldwiki/skins/openboxwiki/lock_icon.gif
new file mode 100644 (file)
index 0000000..9597cf4
Binary files /dev/null and b/oldwiki/skins/openboxwiki/lock_icon.gif differ
diff --git a/oldwiki/skins/openboxwiki/magnify-clip.png b/oldwiki/skins/openboxwiki/magnify-clip.png
new file mode 100644 (file)
index 0000000..c6c7c68
Binary files /dev/null and b/oldwiki/skins/openboxwiki/magnify-clip.png differ
diff --git a/oldwiki/skins/openboxwiki/mail_icon.gif b/oldwiki/skins/openboxwiki/mail_icon.gif
new file mode 100644 (file)
index 0000000..d83875d
Binary files /dev/null and b/oldwiki/skins/openboxwiki/mail_icon.gif differ
diff --git a/oldwiki/skins/openboxwiki/main-withphoophie.css b/oldwiki/skins/openboxwiki/main-withphoophie.css
new file mode 100644 (file)
index 0000000..1d28899
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -12.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 12.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 11.6em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 11.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/oldwiki/skins/openboxwiki/main.css b/oldwiki/skins/openboxwiki/main.css
new file mode 100644 (file)
index 0000000..2780593
--- /dev/null
@@ -0,0 +1,1680 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+       #column-content {
+               width: 100%;
+               float: right;
+               margin: 0 0 .6em -13.2em;
+               padding: 0;
+       }
+       #content {
+               margin: 2.8em 0 0 13.2em;
+               padding: 0 1em 1.5em 1em;
+               position: relative;
+               z-index: 2;
+       }
+       #column-one {
+               padding-top: 95px;
+       }
+/* } */
+#content {
+       background: white;
+       color: black;
+       border: 1px solid #aaa;
+       border-right: none;
+       line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font: x-small sans-serif;
+       background: #ddd;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+       font-size: 127%;
+       width: 100%;
+       margin: 0;
+       padding: 0;
+}
+.visualClear {
+       clear: both;
+}
+
+/* general styles */
+
+table {
+       font-size: 100%;
+       color: black;
+       /* we don't want the bottom borders of <h2>s to be visible through
+          floated tables */
+       background-color: white;
+}
+a {
+       text-decoration: none;
+       color: #002bb8;
+       background: none;
+}
+a:visited {
+       color: #5a3696;
+}
+a:active {
+       color: #faa700;
+}
+a:hover {
+       text-decoration: underline;
+}
+a.stub {
+       color: #772233;
+}
+a.new, #p-personal a.new {
+       color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+       color: #a55858;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+/* @media screen, projection { */
+       p {
+               margin: .4em 0 .5em 0;
+               line-height: 1.5em;
+       }
+/* } */
+p img {
+       margin: 0;
+}
+
+hr {
+       height: 1px;
+       color: #aaa;
+       background-color: #aaa;
+       border: 0;
+       margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       color: black;
+       background: none;
+       font-weight: normal;
+       margin: 0;
+       padding-top: .5em;
+       padding-bottom: .17em;
+       border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+       border-bottom: none;
+       font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+       float: right;
+       margin-left: 5px;
+}
+
+ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: .3em 0 0 1.5em;
+       padding: 0;
+       list-style-image: url(bullet.gif);
+}
+ol {
+       line-height: 1.5em;
+       margin: .3em 0 0 3.2em;
+       padding: 0;
+       list-style-image: none;
+}
+li {
+       margin-bottom: .1em;
+}
+dt {
+       font-weight: bold;
+       margin-bottom: .1em;
+}
+dl {
+       margin-top: .2em;
+       margin-bottom: .5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: .1em;
+}
+
+fieldset {
+       border: 1px solid #2f6fab;
+       margin: 1em 0 1em 0;
+       padding: 0 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       padding: .5em;
+       font-size: 95%;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       width: 100%;
+       padding: .1em;
+}
+
+input.historysubmit {
+       padding: 0 .3em .3em .3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.6em;
+}
+select {
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted black;
+       color: black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code {
+       background-color: #f9f9f9;
+}
+pre {
+       padding: 1em;
+       border: 1px dashed #2f6fab;
+       color: black;
+       background-color: #f9f9f9;
+       line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+       #siteSub {
+               display: none;
+       }
+       #jump-to-nav {
+               display: none;
+       }
+/* } */
+
+#contentSub, #contentSub2 {
+       font-size: 84%;
+       line-height: 1.2em;
+       margin: 0 0 1.4em 1em;
+       color: #7d7d7d;
+       width: auto;
+}
+span.subpages {
+       display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+       margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+       margin-bottom: .3em;
+}
+.firstHeading {
+       margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: black;
+       font-weight: bold;
+       margin: 2em 0 1em;
+       padding: .5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 .9em;
+}
+#siteNotice p {
+       margin: 0;
+       padding: 0;
+}
+.error {
+       color: red;
+       font-size: larger;
+}
+.errorbox, .successbox {
+       font-size: larger;
+       border: 2px solid;
+       padding: .5em 1em;
+       float: left;
+       margin-bottom: 2em;
+       color: #000;
+}
+.errorbox {
+       border-color: red;
+       background-color: #fff2f2;
+}
+.successbox {
+       border-color: green;
+       background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+       font-size: 1em;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+#catlinks {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+       font-size: 94%;
+}
+table.small {
+       font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       text-align: center;
+}
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin-left: 0;
+       padding-left: 0;
+       text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.mw-warning {
+       margin-left: 50px;
+       margin-right: 50px;
+       text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right;
+       position: relative;
+       margin: 0 0 .5em .5em;
+       border: 0;
+/*
+       border: .5em solid white;
+       border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0 .5em .5em 0;
+       border: 0;
+/*
+       margin: .3em .5em .5em 0;
+       border: .5em solid white;
+       border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px !important;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+       display: none;
+       speak: none;
+}
+img.tex {
+       vertical-align: middle;
+}
+span.texhtml {
+       font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+       background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float: right;
+       position: relative;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+}
+.toccolours {
+       border: 1px solid #aaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+div.townBox {
+       position: relative;
+       float: right;
+       background: white;
+       margin-left: 1em;
+       border: 1px solid gray;
+       padding: .3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 .3em;
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: .4em 0 0;
+}
+div.townBox dl dd {
+       margin: .1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+#pagehistory span.user {
+       margin-left: 1.4em;
+       margin-right: .4em;
+}
+#pagehistory span.minor {
+       font-weight: bold;
+}
+#pagehistory li {
+       border: 1px solid white;
+}
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+       background-color: white;
+}
+td.diff-addedline {
+       background: #cfc;
+       font-size: smaller;
+}
+td.diff-deletedline {
+       background: #ffa;
+       font-size: smaller;
+}
+td.diff-context {
+       background: #eee;
+       font-size: smaller;
+}
+.diffchange {
+       color: red;
+       font-weight: bold;
+       text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url(lock_icon.gif) center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url(mail_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url(news_icon.png) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url(file_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url(discussionitem_icon.gif) center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+       background: url("audio.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+       background: url("video.png") center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+       background: url("document.png") center right no-repeat;
+       padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #36b;
+       background: none;
+       padding: 0;
+}
+#bodyContent a.external {
+       color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 .5em;
+       padding: 0;
+       float: none;
+       width: 12.8em;
+       overflow: hidden;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h5 {
+       background: transparent;
+       padding: 0 1em 0 .5em;
+       display: inline;
+       height: 1em;
+       text-transform: lowercase;
+       font-size: 91%;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.portlet h6 {
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0 1em 0 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       white-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background-color: white;
+       color: black;
+       border-collapse: collapse;
+       border: 1px solid #aaa;
+       padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url(bullet.gif);
+       font-size: 95%;
+}
+.portlet li {
+       padding: 0;
+       margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+       #p-logo {
+               top: 0;
+               left: 0;
+               position: absolute; /*needed to use z-index */
+               z-index: 3;
+               height: 95px;
+               width: 12em;
+               overflow: visible;
+       }
+       #p-logo h5 {
+               display: none;
+       }
+       #p-logo a,
+       #p-logo a:hover {
+               display: block;
+               height: 95px;
+               width: 12.2em;
+               background-repeat: no-repeat;
+               background-position: 35% 50% !important;
+               text-decoration: none;
+       }
+/* } */
+
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+       #p-navigation, #p-support, #p-community, #p-wiki, #p-tb {
+               position: relative;
+               z-index: 3;
+       }
+       #p-navigation a, #p-support a, #p-community a, #p-wiki a, #p-tb a {
+               display: block;
+       }
+       #p-navigation li.active a, #p-navigation li.active a:hover,
+               #p-support li.active a, #p-support li.active a:hover,
+               #p-community li.active a, #p-community li.active a:hover,
+               #p-wiki li.active a, #p-wiki li.active a:hover
+               #p-tb li.active a, #p-tb li.active a:hover
+       {
+               display: inline;
+       }
+/* } */
+
+#p-navigation .pBody, #p-support .pBody, #p-community .pBody, #p-wiki .pBody,
+       #p-tb .pBody
+{
+       padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover,
+       #p-support li.active a, #p-support li.active a:hover,
+       #p-community li.active a, #p-community li.active a:hover
+       #p-wiki li.active a, #p-wiki li.active a:hover
+       #p-tb li.active a, #p-tb li.active a:hover
+{
+       text-decoration: none;
+       font-weight: bold;
+}
+
+/*
+** the advertisement portlet
+*/
+
+/* @media screen, projection { */
+       #p-advertisement {
+               position: relative;
+               z-index: 3;
+       }
+       #p-advertisement .pBody>div {
+               margin: 3px;
+       }
+       #p-advertisement a {
+               
+       }
+       #p-advertisement li.active a, #p-advertisement li.active a:hover {
+               display: inline;
+       }
+/* } */
+
+#p-advertisement .pBody {
+       padding-right: 0;
+}
+
+#p-advertisement li.active a, #p-advertisement li.active a:hover {
+       text-decoration: none;
+       font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+       #p-search {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+input.searchButton {
+       margin-top: 1px;
+       font-size: 95%;
+}
+#searchGoButton {
+       padding-left: .5em;
+       padding-right: .5em;
+       font-weight: bold;
+}
+#searchInput {
+       width: 10.9em;
+       margin: 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: .5em .4em .4em .4em;
+       text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+       #p-personal {
+               position: absolute;
+               left: 0;
+               top: 0;
+               z-index: 0;
+       }
+       #p-personal {
+               width: 100%;
+               white-space: nowrap;
+               padding: 0;
+               margin: 0;
+               border: none;
+               background: none;
+               overflow: visible;
+               line-height: 1.2em;
+       }
+       #p-personal h5 {
+               display: none;
+       }
+       #p-personal .portlet,
+       #p-personal .pBody {
+               z-index: 0;
+               padding: 0;
+               margin: 0;
+               border: none;
+               overflow: visible;
+               background: none;
+       }
+/* this is the ul contained in the portlet */
+       #p-personal ul {
+               border: none;
+               line-height: 1.4em;
+               color: #2f6fab;
+               padding: 0 2em 0 3em;
+               margin: 0;
+               text-align: right;
+               list-style: none;
+               z-index: 0;
+               background: none;
+               cursor: default;
+       }
+       #p-personal li {
+               z-index: 0;
+               border: none;
+               padding: 0;
+               display: inline;
+               color: #2f6fab;
+               margin-left: 1em;
+               line-height: 1.2em;
+               background: none;
+       }
+       #p-personal li a {
+               text-decoration: none;
+               color: #005896;
+               padding-bottom: .2em;
+               background: none;
+       }
+       #p-personal li a:hover {
+               background-color: none;
+               padding-bottom: .2em;
+               text-decoration: none;
+       }
+       #p-personal li.active a:hover {
+               background-color: transparent;
+       }
+       /* the icon in front of the user name, single quotes
+       in bg url to hide it from iemac */
+       li#pt-userpage,
+       li#pt-anonuserpage,
+       li#pt-login {
+               background: url(user.gif) top left no-repeat;
+               padding-left: 20px;
+               text-transform: none;
+       }
+/* } */
+#p-personal ul {
+       text-transform: lowercase;
+}
+#p-personal li.active {
+       font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+       #p-cactions {
+               position: absolute;
+               top: 1.3em;
+               left: 12.5em;
+               margin: 0;
+               white-space: nowrap;
+               width: 76%;
+               line-height: 1.1em;
+               overflow: visible;
+               background: none;
+               border-collapse: collapse;
+               padding-left: 1em;
+               list-style: none;
+               font-size: 95%;
+       }
+       #p-cactions ul {
+               list-style: none;
+       }
+       #p-cactions li {
+               display: inline;
+               border: 1px solid #aaa;
+               border-bottom: none;
+               padding: 0 0 .1em 0;
+               margin: 0 .3em 0 0;
+               overflow: visible;
+               background: white;
+       }
+       #p-cactions li.selected {
+               border-color: #fabd23;
+               padding: 0 0 .2em 0;
+               font-weight: bold;
+       }
+       #p-cactions li a {
+               background-color: #fbfbfb;
+               color: #002bb8;
+               border: none;
+               padding: 0 .8em .3em;
+               position: relative;
+               z-index: 0;
+               margin: 0;
+               text-decoration: none;
+       }
+       #p-cactions li.selected a {
+               z-index: 3;
+               padding: 0 1em .2em!important;
+               background-color: white;
+       }
+       #p-cactions .new a {
+               color: #ba0000;
+       }
+       #p-cactions li a:hover {
+               z-index: 3;
+               text-decoration: none;
+               background-color: white;
+       }
+       #p-cactions h5 {
+               display: none;
+       }
+       #p-cactions li.istalk {
+               margin-right: 0;
+       }
+       #p-cactions li.istalk a {
+               padding-right: .5em;
+       }
+       #p-cactions #ca-addsection a {
+               padding-left: .4em;
+               padding-right: .4em;
+       }
+       /* offsets to distinguish the tab groups */
+       li#ca-talk {
+               margin-right: 1.6em;
+       }
+       li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+               margin-left: 1.6em;
+       }
+       #p-cactions .pBody {
+               font-size: 1em;
+               background-color: transparent;
+               color: inherit;
+               border-collapse: inherit;
+               border: 0;
+               padding: 0;
+       }
+/* } */
+#p-cactions .hiddenStructure {
+       display: none;
+}
+#p-cactions li a {
+       text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+       #p-tbx,
+       #p-lang {
+               position: relative;
+               z-index: 3;
+       }
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+       color: #999;
+}
+/*
+** footer
+*/
+#footer {
+       background-color: white;
+       border-top: 1px solid #fabd23;
+       border-bottom: 1px solid #fabd23;
+       margin: .6em 0 1em 0;
+       padding: .4em 0 1.2em 0;
+       text-align: center;
+       font-size: 90%;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+       margin: 0;
+       padding: 0;
+       width: 100%;
+       clear: both;
+}
+#preftoc li {
+       background-color: #f0f0f0;
+       color: #000;
+}
+/* @media screen, projection { */
+       #preftoc li {
+               margin: 1px -2px 1px 2px;
+               float: left;
+               padding: 2px 0 3px 0;
+               border: 1px solid #fff;
+               border-right-color: #716f64;
+               border-bottom: 0;
+               position: relative;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               z-index: 3;
+       }
+/* } */
+#preftoc li.selected {
+       font-weight: bold;
+       background-color: #f9f9f9;
+       border: 1px solid #aaa;
+       border-bottom: none;
+       cursor: default;
+       top: 1px;
+       padding-top: 2px;
+       margin-right: -3px;
+}
+#preftoc > li.selected {
+       top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #000;
+       padding: 0 .7em;
+       position: relative;
+       text-decoration: none;
+}
+#preftoc li.selected a {
+       cursor: default;
+       text-decoration: none;
+}
+#prefcontrol {
+       padding-top: 2em;
+       clear: both;
+}
+#preferences {
+       margin: 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em;
+       background-color: #F9F9F9;
+}
+.prefsection {
+       border: none;
+       padding: 0;
+       margin: 0;
+}
+.prefsection fieldset {
+       border: 1px solid #aaa;
+       float: left;
+       margin-right: 2em;
+}
+.prefsection legend {
+       font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+       background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+       .mainLegend {
+               display: none;
+       }
+/* } */
+div.prefsectiontip {
+       font-size: 95%;
+       margin-top: 0;
+       background-color: #FFC1C1;
+       padding: .2em .7em;
+       clear: both;
+}
+.btnSavePrefs {
+       font-weight: bold;
+       padding-left: .3em;
+       padding-right: .3em;
+}
+
+.preferences-login {
+       clear: both;
+       margin-bottom: 1.5em;
+}
+
+.prefcache {
+       font-size: 90%;
+       margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+       margin: 0 3em 1em 0;
+       border: 1px solid #aaa;
+       clear: both;
+       padding: 1.5em 2em;
+       background-color: #f9f9f9;
+       float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+       background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+       padding-top: 0;
+}
+
+div#userlogin .captcha {
+       border: 1px solid #bbb;
+       padding: 1.5em 2em;
+       width: 400px;
+       background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+       font-size: 85%;
+}
+
+#login-sectiontip {
+       font-size: 85%;
+       line-height: 1.2;
+       padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+       width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+       font-weight: bold;
+}
+
+/* @media screen, projection { */
+       /*
+       ** IE/Mac fixes, hope to find a validating way to move this
+       ** to a separate stylesheet. This would work but doesn't validate:
+       ** @import("IEMacFixes.css");
+       */
+       /* tabs: border on the a, not the div */
+       * > html #p-cactions li { border: none; }
+       * > html #p-cactions li a {
+               border: 1px solid #aaa;
+               border-bottom: none;
+       }
+       * > html #p-cactions li.selected a { border-color: #fabd23; }
+       /* footer icons need a fixed width */
+       * > html #f-poweredbyico,
+       * > html #f-copyrightico { width: 88px; }
+       * > html #bodyContent,
+       * > html #bodyContent pre {
+               overflow-x: auto;
+               width: 100%;
+               padding-bottom: 25px;
+       }
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       position: absolute;
+       left: 0;
+       top: 0;
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.printfooter {
+       display: none;
+}
+
+.not-patrolled {
+       background-color: #ffa;
+}
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+       font-weight: bold;
+}
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.searchmatch {
+       color: red;
+}
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #0f0;
+}
+
+table.gallery {
+       border: 1px solid #ccc;
+       margin: 2px;
+       padding: 2px;
+       background-color: white;
+}
+
+table.gallery tr {
+       vertical-align: top;
+}
+
+table.gallery td {
+       vertical-align: top;
+       background-color: #f9f9f9;
+       border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+       font-weight: bold;
+}
+table.gallery caption {
+       font-weight: bold;
+}
+
+div.gallerybox {
+       margin: 2px;
+}
+
+div.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       font-size: 94%;
+       padding: 2px 4px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-indent: 3em;
+       color: #c00;
+       border-bottom: 1px solid #aaa;
+       padding-bottom: 1em;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       margin: 0;
+       padding: 0;
+}
+
+.editExternally {
+       border: 1px solid gray;
+       background-color: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted, span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+.toggle {
+       margin-left: 2em;
+       text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 300px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 0.1em;
+       padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+input#wpSummary {
+       width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+       margin-right: 0.33em;
+}
+
+#editform .editOptions {
+       display: inline;
+}
+
+#wpSave {
+       font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+       border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+       border: 1px solid #000000;
+       background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+       background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+       background-color:#DDDDDD;
+}
+
+p.revision_saved {
+       color: green;
+       font-weight:bold;
+}
+
+#mw_trackbacks {
+       border: solid 1px #bbbbff;
+       background-color: #eeeeff;
+       padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+       border: 1px solid #ccc;
+       background: #fff;
+       padding: .2em 1em;
+       color: #000;
+}
+
+div#searchTargetContainer {
+       left:       10px;
+       top:        10px;
+       width:      90%;
+       background: white;
+}
+
+div#searchTarget {
+       padding:    3px;
+       margin:     5px;
+       background: #F0F0F0;
+       border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+       list-style: none;
+}
+
+div#searchTarget ul li:before {
+       color: orange;
+       content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+       margin: 1em;
+       padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+       border: 1px solid #A0A0A0;
+       padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+       background-color: #F0F0F0;
+       color: black;
+       padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+       height: 0.8em;
+       border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+       margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+       background-color: #ccc;
+       padding: 0.1em;
+}
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
diff --git a/oldwiki/skins/openboxwiki/news_icon.png b/oldwiki/skins/openboxwiki/news_icon.png
new file mode 100644 (file)
index 0000000..529b2af
Binary files /dev/null and b/oldwiki/skins/openboxwiki/news_icon.png differ
diff --git a/oldwiki/skins/openboxwiki/null b/oldwiki/skins/openboxwiki/null
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/oldwiki/skins/openboxwiki/old.css b/oldwiki/skins/openboxwiki/old.css
new file mode 100644 (file)
index 0000000..030feee
--- /dev/null
@@ -0,0 +1,989 @@
+/*
+** Mediawiki 'Tango' style sheet for CSS2-capable browsers.
+** License: GPL
+**
+** Based on 'monobook', Copyright Gabriel Wicke - http://wikidev.net/
+*/
+
+#globalWrapper {
+       padding: 0 20px 2em 2em;
+}
+#column-content {
+       margin: 0;
+       padding:0;
+}
+#content {
+       background: transparent url("tango-steps.png") no-repeat top right;
+       margin: 20px 0 0 0;
+       padding: 120px 170px 0 3em;
+       z-index: 2;
+}
+#column-one { 
+       padding-top: 2em; 
+       margin-top: 2em; 
+       border-top: 1px solid #aaa;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+       font-size: 85%;
+       line-height: 1.2em;
+       font-family: tahoma, bitstream vera sans, sans-serif;
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       /*
+       background: #f9f9f9 url("headbg.jpg") 0px 0px no-repeat;
+       background: #6b6c69 url("bg-bottom.gif") 0px 134px;
+       background-repeat: repeat-x;
+       */
+       background: #000 url("bg.gif") 0px 0px;
+       background-repeat: repeat-x;
+       color: #eee;
+       margin: 0 auto;
+}
+html>body {
+}
+
+.visualClear { clear: both; }
+
+/* general styles */
+
+table {
+}
+a {
+       text-decoration: none;
+       color: #f57900;
+       background: none;
+}
+a:visited { color: #ce5c00; }
+a:active { color: Orange; }
+a:hover { 
+       color: #fcaf3e;
+       text-decoration: underline; 
+}
+a.stub { color: #772233; }
+
+a.new,
+#p-personal a.new { color:#ba0000; }
+
+a.new:visited,
+#p-personal a.new:visited { color:#a55858; }
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+p {
+       margin: 0.8em 0em 1.0em;
+}
+
+p img { margin: 0; }
+
+hr {
+       height: 1px;
+       color: #444;
+       background-color: #444;
+       border: 0;
+       margin: 0.5em 0 0.5em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: normal;
+       font-family: times new roman, times, serif;
+       color: #888;
+       background: none;
+       padding: 0;
+       margin: 2em 20px 0.25em;
+}
+h1 { 
+       color: #aaa;
+       padding: 0 0 0.5em;
+       margin: 1.25em 0 0;
+       /*
+       margin: 0.75em 0 0;
+       position: relative; 
+       top: 0.75em;
+       */
+}
+/*
+h1 { font-size: 150%; }
+h2 { font-size: 125%; }
+*/
+h3, h4, h5, h6 { 
+}
+/*
+h3 { font-size: 132%; }
+h4 { font-size: 1.5%; }
+h5 { font-size: 100%; }
+h6 { font-size: 80%;  }
+*/
+
+ul { 
+       line-height: 1.5em;
+       list-style-type: square;
+       margin: 0.3em 0 0 1.5em;
+       padding:0;
+       list-style-image: url("bullet.gif");
+}
+ol {
+       line-height: 1.5em;
+       margin: 0.3em 0 0 3.2em;
+       padding:0;
+       list-style-image: none;
+}
+li { margin-bottom: 0.1em; }
+dt { 
+       font-weight: bold; 
+       margin-bottom: 0.1em;
+}
+dl{
+       margin-top: 0.2em;
+       margin-bottom: 0.5em;
+}
+dd {
+       line-height: 1.5em;
+       margin-left: 2em;
+       margin-bottom: 0.1em;
+}
+
+fieldset {
+       border: 1px solid #ccc;
+       border-width: 1px 0 0;
+       margin: 1em 0em 1em 0em;
+       padding: 0em 1em 1em 1em;
+       line-height: 1.5em;
+}
+legend {
+       font-weight: bold;
+       padding: 0.5em;
+}
+form {
+       border: none;
+       margin: 0;
+}
+
+textarea {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       padding: 0.1em;
+       overflow: auto;
+}
+/* hide this from ie/mac and konq2.2 */
+@media All {
+       head:first-child+body input {
+               visibility: visible;
+               border: 1px solid #2f6fab;  
+               color: Black;
+               vertical-align: middle;
+               padding: 0.2em;
+       }
+}
+input.historysubmit {
+       padding: 0 0.3em 0.3em 0.3em !important;
+       font-size: 94%;
+       cursor: pointer;
+       height: 1.7em !important;
+       margin-left: 1.5em;
+}
+input[type="radio"],
+input[type="checkbox"] { border:none; }
+select {
+       border: 1px solid #2f6fab;  
+       color: Black;
+       vertical-align: top;
+}
+abbr, acronym, .explain {
+       border-bottom: 1px dotted Black;
+       color: Black;
+       background: none;
+       cursor: help;
+}
+q {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}
+/* disabled for now
+blockquote {
+       font-family: Times, "Times New Roman", serif;
+       font-style: italic;
+}*/
+code { 
+       background-color: #333; 
+}
+pre {
+       font-family: bitstream vera sans mono, monospace;
+       font-size: 80%;
+       overflow: auto;
+       padding: 1em;
+       border: 1px dotted #888;
+       color: #fff;
+       background-color: #222;
+       line-height: 1.1em;
+}
+
+
+/*
+** the main content area
+*/
+
+#siteSub { display: none; }
+#contentSub {
+       font-size: 84%;
+       line-height: 1.2em;
+       color: #7d7d7d;
+}
+span.subpages { display: block; }
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; }
+#bodyContent h3,
+#bodyContent h4,
+#bodyContent h5 {
+       margin-bottom: 0.3em;
+}
+.firstHeading { margin-bottom:0.1em; }
+
+/* user notification thing */
+.usermessage {
+       background-color: #ffce7b;
+       border: 1px solid #ffa500;
+       color: Black;
+       font-weight: bold;
+       margin: 2em 0em 1em 0em;
+       padding: 0.5em 1em;
+       vertical-align: middle;
+}
+#siteNotice {
+       text-align: center;
+       font-size: 95%;
+       padding: 0 0.9em 0 0.9em;
+}
+#siteNotice p { margin: none; padding: none; }
+.error {
+       color: red;
+       font-size: larger;
+}
+#catlinks {
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       margin-top: 1em;
+       clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+       /* The summary text describing the document */
+       font-weight: bold;
+       display: block;
+       margin: 1em 0em;
+       line-height: 1.5em;
+}
+.documentByLine {
+       text-align: right;
+       font-size: 90%;
+       clear: both;
+       font-weight: normal;
+       color: #76797c;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * { font-size: 94%; }
+table.small { font-size: 100% }
+
+/*
+** content styles
+*/
+
+#toc { 
+       float: right;
+       margin: 0 1em 0.5em;
+       /*border:1px solid #2f6fab;*/
+       padding: 0.75em;
+       font-size: 95%;
+       border:1px solid #333;
+       -moz-border-radius: 2.5px;
+       background-color: #111;
+}
+#toc .tocindent { margin-left: 2em; }
+#toc .tocline { margin-bottom: 0px; }
+#toc p { margin: 0 }
+#toc .toctoggle { font-size: 94%; }
+#toc .editsection { 
+       margin-top: 0.7em; 
+       font-size: 94%;
+}
+
+/* images */
+div.floatright, table.floatright {
+       clear: right;
+       float: right; 
+       margin: 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.floatright p { font-style: italic; } 
+div.floatleft, table.floatleft {
+       float: left; 
+       margin: 0.3em 0.5em 0.5em 0;
+       position: relative;
+       border: 0.5em solid transparent;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+div.floatleft p { font-style: italic; } 
+/* thumbnails */
+div.thumb {
+       margin-bottom: 0.5em;
+       border-style: solid; border-color: transparent;
+       width: auto;
+}
+div.thumb div {
+       border:1px solid #444;
+       padding: 3px !important;
+       background-color: #222;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+div.thumb div a img {
+       background-color: #eee;
+       border:1px solid #fff;
+}
+div.thumb div div.thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4;
+       padding: 0.3em 0 0.1em 0;
+}
+div.magnify {
+       float: right;
+       border: none !important;
+       background: none !important;
+}
+div.magnify a, div.magnify img {
+       display: block;
+       border: none !important;
+       background: none !important;
+}
+div.tright {
+       clear: right;
+       float: right;
+       border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+       float: left;
+       margin-right:0.5em;
+       border-width: 0.5em 1.4em 0.8em 0;
+}
+.urlexpansion,
+.hiddenStructure {
+       display: none;
+}
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+       float:right; 
+       position:relative;
+       margin-left:1em; 
+       margin-bottom:1em;
+       text-align:center;
+}
+.toccolours { 
+       border:1px solid #aaaaaa;
+       background-color:#f9f9f9;
+       padding:5px;
+       font-size: 95%;
+}
+div.townBox {
+       position:relative;
+       float:right;
+       background:transparent;
+       margin-left:1em;
+       border: 1px solid Grey;
+       padding:0.3em;
+       width: 200px;
+       overflow: hidden;
+       clear: right;
+}
+div.townBox dl {
+       padding: 0;
+       margin: 0 0 0.3em 0; 
+       font-size: 96%;
+}
+div.townBox dl dt {
+       background: none;
+       margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+       margin: 0.1em 0 0 1.1em;
+       background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+       line-height: 1.4em;
+       margin: 0;
+       padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment { color: gray; }
+#pagehistory span.user { 
+       margin-left: 1.4em;
+       margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li { border: 1px solid transparent; }
+#pagehistory li.selected { 
+       background-color:#f9f9f9;
+       border:1px dashed #aaaaaa;
+}
+/*
+** Diff rendering
+*/
+table.diff { background:transparent; }
+td.diff-otitle { background:#ffffff; }
+td.diff-ntitle { background:#ffffff; }
+td.diff-addedline { 
+       background:#ccffcc;
+       font-size: smaller;
+}
+td.diff-deletedline { 
+       background:#ffffaa;
+       font-size: smaller;
+}
+td.diff-context {
+       background:#eeeeee;
+       font-size: smaller;
+}
+span.diffchange { color: red; }
+
+/* 
+** keep the transparentspace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2 
+*/
+#bodyContent a[href ^="http://"],
+#bodyContent a[href ^="gopher://"] {
+       background: url(external.png) center right no-repeat;
+       padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+       background: url("lock_icon.gif") center right no-repeat;
+       padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+       background: url("mail_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+       background: url("news_icon.png") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+       background: url("file_icon.gif") center right no-repeat;
+       padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+       background: url("discussionitem_icon.gif")  center right no-repeat;
+       padding-right: 18px;
+}
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+       color: #3366bb;
+}
+#bodyContent a.external { color: #c95616; }
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+       border: none;
+       margin: 0 0 0.5em 0em;
+       padding: 0;
+}
+.portlet h4 {
+       font-size: 95%;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h5 { 
+       background: transparent;
+       padding: 0em 1em 0em 0.5em;
+       text-transform: lowercase;
+       display: inline;
+       font-size: 91%;
+       height: 1em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.portlet h6 { 
+       background: #ffae2e;
+       border: 1px solid #2f6fab;
+       border-style: solid solid none solid;
+       padding: 0em 1em 0em 1em;
+       text-transform: lowercase;
+       display: block;
+       font-size: 1em;
+       height: 1.2em;
+       font-weight: normal;
+       transparent-space: nowrap;
+}
+.pBody {
+       font-size: 95%;
+       background: transparent;
+       border-collapse: collapse;
+       padding: 0 0.8em 0.3em 0.5em;
+}
+.portlet h1, 
+.portlet h2, 
+.portlet h3, 
+.portlet h4 {
+       margin: 0;
+       padding: 0;
+}
+.portlet ul {
+       line-height: 1.5em;
+       list-style-type: square;
+       list-style-image: url("bullet.gif");
+       font-size:95%;
+       list-style: none;
+       text-align: center;
+}
+.portlet li {
+       display: inline;
+       padding:0;
+       margin: 0 0 0 0;
+       margin-bottom: 0;
+}
+
+/* 
+** Logo properties 
+*/
+
+#p-logo {
+       /*    background-color: #333; */
+       z-index: 3;
+       position: absolute;
+       top: 0;
+       left: 0;
+       right: 0;
+       width: 100%;
+       overflow: visible;
+       height: 140px;
+}
+#p-logo h5 { display: none; }
+#p-logo a {
+       position: relative;
+       display: block;
+       height: 140px;
+       width: 280px;
+       background-repeat: no-repeat;
+       background-position: 30px;
+}
+#p-logo a:hover {
+       text-decoration: none;
+}
+
+/*
+** the navbar at the top
+*/
+#p-navbar {
+       position: absolute;
+       top: 140px;
+       left: 0;
+       right: 0;
+       background-color: #d3dbe7;
+       border-bottom: 1px solid #a8b9cf;
+       padding: 4px;
+       opacity: 0.75;
+}
+
+.navlinks li {
+       vertical-align: middle;
+}
+.navlinks li a {
+       padding: 2pt 20pt;
+       margin: 1px;
+       color: #29416b;
+}
+.navlinks li a:hover {
+       background-color: #e2e7ef;
+       text-decoration: none;
+       -moz-border-radius: 2.5px;
+       border-radius: 2.5px;
+       color: #000;
+}
+
+/*
+** the navigation portlet
+*/
+
+#p-nav {
+       position:absolute;
+       top: 120px;
+       left: 30px;
+       z-index: 100;
+}
+#p-nav a {
+       font-family: trebuchet ms, luxi sans, sans-serif;
+       font-style: italic;
+       text-transform: lowercase;
+       text-decoration: none;
+       display: block;
+       float: left;
+       padding: 3px 12px;
+       margin: 0;
+}
+
+/*
+** Search portlet
+*/
+#p-search {
+       position:relative;
+       z-index:3;
+}    
+#p-search h5 {
+       display: none;
+}
+#p-search .pBody {
+       text-align: center;
+}
+input.searchButton {
+       margin-top:1px;
+       padding: 0 0.4em !important;
+       font-size: 95%;
+       cursor: pointer;
+       background-color: #dfe7f0;
+}
+#searchInput {
+       width:10.9em;
+       margin: 0 0 0 0;
+       font-size: 95%;
+}
+#p-search .pBody {
+       padding: 0.5em 0.4em 0.4em 0.4em;
+}
+
+/* 
+** the personal toolbar
+*/
+
+#p-personal {
+       width: 100%;
+       text-align: center;
+}
+
+#p-personal h5 {
+       display:none;
+}
+#p-personal .portlet,
+#p-personal .pBody {
+       border: none;
+}
+/* this is the ul contained in the portlet */
+#p-personal ul {
+}
+#p-personal li {
+       display: inline;
+       margin-left: 1em;
+       line-height: 1.2em;
+}
+#p-personal li a {
+       text-decoration: none;
+       color: #005896;
+       padding-bottom: 0.2em;
+       background: none;
+}
+#p-personal li a:hover {
+       background-color: transparent;
+       padding-bottom: 0.2em;
+       text-decoration: none;
+}
+
+/* the icon in front of the user name, single quotes
+in bg url to hide it from iemac */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background:  url('user.gif') top left no-repeat;
+       padding-left: 20px;
+       text-transform: none;
+}
+
+/*
+** the page-related actions- page/talk, edit etc 
+*/
+#p-cactions {
+       text-align: center;
+}
+#p-cactions h5 {
+       display: none;
+}
+#p-cactions ul {
+       display: inline;
+       overflow: visible;
+}
+#p-cactions ul li {
+       display: inline;
+}
+#p-cactions ul li a {
+       padding: 2px 5px;
+}
+/*
+#p-cactions {
+       top: 1.3em;
+       left: 11.5em;
+       margin: 0;
+       transparent-space:nowrap;
+       width: 76%;
+       line-height: 1.1em;
+       overflow: visible;
+       background: none;
+       border-collapse: collapse;
+       padding-left: 1em;
+       list-style: none;
+       font-size: 95%;
+}
+#p-cactions .hiddenStructure { display: none; }
+#p-cactions ul {
+       list-style: none;
+}
+#p-cactions li {
+       display: inline;
+       border: 1px solid #aaaaaa;
+       border-bottom: none;
+       padding: 0 0 0.1em 0;
+       margin: 0 0.3em 0 0;
+       overflow: visible;
+       background: transparent;
+}
+#p-cactions li.selected {
+       border-color: #fabd23;
+       padding: 0 0 0.2em 0;
+}
+*/
+#p-cactions li a {
+       /*
+       background-color: transparent;
+       */
+       color: #002bb8;
+       /*
+       border: none;
+       padding: 0 0.8em 0.3em 0.8em;
+       */
+       text-decoration: none;
+       text-transform: lowercase;
+       position: relative;
+       z-index: 0;
+       margin: 0;
+}
+/*
+#p-cactions .selected a { z-index: 3; }
+#p-cactions .new a { color:#ba0000; }
+#p-cactions li a:hover {
+       z-index: 3;
+       text-decoration: none;
+}
+#p-cactions h5 { display: none; }
+#p-cactions li.istalk { margin-right: 0; }
+#p-cactions li.istalk a { padding-right: 0.5em; }
+#p-cactions #ca-addsection a { 
+       padding-left: 0.4em;
+       padding-right: 0.4em;
+}
+*/
+/* offsets to distinguish the tab groups */
+/*
+li#ca-talk { margin-right: 1.5em; }
+li#ca-watch, li#ca-watch { margin-left: 1.5em; }
+*/
+li#ca-talk { margin-bottom: 1.5em; }
+li#ca-watch, li#ca-watch { margin-top: 1.5em; }
+#p-cactions .new a { color:#ba0000; }
+
+
+/*
+** the remaining portlets
+*/
+#p-tbx,
+#p-lang {
+       position:relative;
+       z-index:3;
+}
+
+/*
+** footer
+*/
+#footer {
+       text-align: center;
+       font-size: xx-small;
+       margin: 2em 0;
+}
+#footer li {
+       display: inline;
+       margin: 0 1.3em;
+}
+/* hide from incapable browsers */
+/*
+head:first-child+body #footer li { transparent-space: nowrap; }
+*/
+#f-poweredbyico, #f-copyrightico {
+       margin: 0 8px;
+       position: relative;
+       top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+       float: right;
+       height: 1%;
+}
+#f-copyrightico {
+       float: left;
+       height: 1%;
+}
+
+/* js pref toc */
+#preftoc { 
+       float: left;
+       margin: 1em 1em 1em 1em;
+       width: 13em;
+       border: 1px solid #aaaaaa;
+       background-color: #fff;
+}
+#preftoc li { 
+       border: 1px solid transparent; 
+       list-style: none;
+}
+#preftoc li.selected { 
+       background-color: Highlight;
+       border:1px solid #aaaaaa;
+}
+#preftoc li.selected a {
+       color: HighlightText;
+}
+#preftoc a,
+#preftoc a:active {
+       text-decoration: none;
+       display: block;
+       color: #0014a6;
+       padding: 2px 4px;
+}
+#prefcontrol { 
+       clear: both;
+       float: left;
+       margin-top: 1em;
+}
+div.prefsectiontip { 
+       font-size: 95%;
+       margin-top: 1em;
+}
+fieldset.operaprefsection { margin-left: 15em }
+
+.prefsection label {
+}
+.prefsection div {
+       margin: 4pt 0;
+}
+
+/* 
+** IE/Mac fixes, hope to find a validating way to move this
+** to a separate stylesheet. This would work but doesn't validate: 
+** @import("IEMacFixes.css");
+*/
+* > html #p-cactions li.selected a { border-color: #fabd23; }
+/* footer icons need a fixed width */
+* > html #f-poweredbyico,
+* > html #f-copyrightico { width: 88px; }
+* > html #bodyContent,
+* > html #bodyContent pre {
+       overflow-x: auto;
+       width: 100%;
+       padding-bottom: 25px;
+}
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+/*
+* html #footer {margin-top: 0;}
+* html #column-content {
+       display: inline;
+       margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+*/
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+       float: none;
+}
+* > html #column-one {
+       /*
+       position: absolute;
+       left: 0;
+       top: 0;
+       */
+}
+* > html #footer {
+       margin-left: 13.2em;
+}
+
+.printfooter {
+       display: none;
+}
+
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+.portlet h5 {
+       display: none;
+}
+
+.editsection {
+       font-size: x-small;
+       color: #8ba2bf;
+}
+.editsection a:link,
+.editsection a:visited {
+       text-decoration: none;
+}
diff --git a/oldwiki/skins/openboxwiki/openbox.gif b/oldwiki/skins/openboxwiki/openbox.gif
new file mode 100644 (file)
index 0000000..508aab4
Binary files /dev/null and b/oldwiki/skins/openboxwiki/openbox.gif differ
diff --git a/oldwiki/skins/openboxwiki/openbox.png b/oldwiki/skins/openboxwiki/openbox.png
new file mode 100644 (file)
index 0000000..839a14d
Binary files /dev/null and b/oldwiki/skins/openboxwiki/openbox.png differ
diff --git a/oldwiki/skins/openboxwiki/required.gif b/oldwiki/skins/openboxwiki/required.gif
new file mode 100644 (file)
index 0000000..1d70814
Binary files /dev/null and b/oldwiki/skins/openboxwiki/required.gif differ
diff --git a/oldwiki/skins/openboxwiki/rtl.css b/oldwiki/skins/openboxwiki/rtl.css
new file mode 100644 (file)
index 0000000..77b44ac
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+Right-to-left fixes for MonoBook.
+Places sidebar on right, tweaks various alignment issues.
+
+Works mostly ok nicely on Safari 1.2.1; fine in Mozilla.
+
+Safari bugs (1.2.1):
+* Tabs are still appearing in left-to-right order. (Try after localizing)
+
+Opera bugs (7.23 linux):
+* Some bits of ltr text (sidebar box titles) have forward and backward versions overlapping each other
+
+IE/mac bugs:
+* The thing barfs on Hebrew and Arabic anyway, so no point testing.
+
+Missing features due to lack of support:
+* external link icons, icon next to user name
+
+To test:
+* Opera6
+* IE 5.0
+* etc
+
+*/
+body,
+body * {
+    direction: rtl;
+/*    unicode-bidi: bidi-override;*/
+    unicode-bidi: embed;
+}
+#column-content {
+       margin: 0 -12.2em 0 0;
+        float: left;
+}
+#column-content #content{
+       margin-left: 0;
+       margin-right: 12.2em;
+    border-right: 1px solid #aaaaaa;
+    border-left: none;
+}
+html>body .portlet {
+    float: right;
+    clear: right;
+}
+/* recover IEMac (might be fine with the float, but usually it's close to IE */
+*>body .portlet {
+    float: none;
+    clear: none;
+}
+.pBody {
+    padding-right: 0.8em;
+    padding-left: 0.5em;
+}
+
+/* Fix alignment */
+.documentByLine,
+.portletDetails,
+.portletMore,
+#p-personal {
+       text-align: left;
+}
+
+div div.thumbcaption {
+       text-align: right;
+}
+
+div.magnify,
+#div.townBox,
+#p-logo {
+       left: auto;
+       right: 0;
+}
+#p-personal {
+       left: auto;
+       right: 0;
+}
+
+#p-cactions {
+       left: auto;
+       right: 11.5em;
+        padding-left: 0;
+        padding-right: 1em;
+}
+#p-cactions li {
+    margin-left: 0.3em;
+    margin-right: 0;
+    float: right;
+}
+* html #p-cactions li a {
+    display: block;
+    padding-bottom: 0;
+}
+* html #p-cactions li a:hover {
+    padding-bottom: 0.2em;
+}
+/* offsets to distinguish the tab groups */
+li#ca-talk {
+    margin-right: auto;
+    margin-left: 1.6em;
+}
+li#ca-watch,li#ca-unwatch {
+    margin-right: 1.6em !important;
+}
+
+/* Fix margins */
+/* top right bottom left */
+
+ul {
+       margin-left: 0;
+       margin-right: 1.5em;
+}
+ol {
+       margin-left: 0;
+       margin-right: 2.4em;
+}
+dd {
+       margin-left: 0;
+       margin-right: 1.6em;
+}
+#contentSub {
+       margin-right: 1em;
+       margin-left: 0;
+}
+.tocindent {
+       margin-left: 0;
+       margin-right: 2em;
+}
+div.tright {
+    clear: none;
+}
+div.tleft {
+    clear: left;
+}
+div.floatright, table.floatright {
+    clear: none;
+}
+div.floatleft, table.floatleft {
+    clear: left;
+}
+div.townBox {
+       margin-left: 0;
+       margin-right: 1em;
+}
+div.townBox dl dd {
+       margin-left: 0;
+       margin-right: 1.1em;
+}
+#p-personal li {
+       margin-left: 0;
+       margin-right: 1em;
+}
+
+li#ca-talk,
+li#ca-watch {
+       margin-right: auto;
+       margin-left: 1.6em;
+}
+
+#p-personal li {
+    float: left;
+}
+/* Fix link icons */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+       background: none;
+       padding-left: 0;
+}
+.external {
+    padding: 0 !important;
+    background: none !important;
+}
+#footer {
+    clear: both;
+}
+* html #footer {
+    margin-left: 0;
+    margin-right: 13.6em;
+    border-left: 0;
+    border-right: 1px solid #fabd23;
+} 
+* html #column-content { 
+    float: none;
+    margin-left: 0;
+    margin-right: 0;
+}
+* html #column-content #content {
+    margin-left: 0;
+    margin-top: 3em;
+}
+* html #column-one { right: 0; }
+
+/* js pref toc */
+#preftoc { float: right; }
+/* workaround for moz bug, displayed bullets on left side */
+#preftoc li { list-style: none; }
+#prefcontrol { float: right; }
+fieldset.prefsection,
+fieldset.operaprefsection { 
+    margin-left: 0 !important;
+    margin-right: 15em;
+}
diff --git a/oldwiki/skins/openboxwiki/user.gif b/oldwiki/skins/openboxwiki/user.gif
new file mode 100644 (file)
index 0000000..958c6a7
Binary files /dev/null and b/oldwiki/skins/openboxwiki/user.gif differ
diff --git a/oldwiki/skins/simple b/oldwiki/skins/simple
new file mode 120000 (symlink)
index 0000000..7920ede
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/skins/simple
\ No newline at end of file
diff --git a/oldwiki/thumb.php b/oldwiki/thumb.php
new file mode 120000 (symlink)
index 0000000..a6f3760
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/thumb.php
\ No newline at end of file
diff --git a/oldwiki/trackback.php b/oldwiki/trackback.php
new file mode 120000 (symlink)
index 0000000..75788ec
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/trackback.php
\ No newline at end of file
diff --git a/oldwiki/wiki.phtml b/oldwiki/wiki.phtml
new file mode 120000 (symlink)
index 0000000..e735a4f
--- /dev/null
@@ -0,0 +1 @@
+/var/lib/mediawiki/wiki.phtml
\ No newline at end of file
diff --git a/rss.xml b/rss.xml
new file mode 120000 (symlink)
index 0000000..de6e69e
--- /dev/null
+++ b/rss.xml
@@ -0,0 +1 @@
+rss/news
\ No newline at end of file
diff --git a/rss/cache/index.html b/rss/cache/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/rss/config/planet.xml b/rss/config/planet.xml
new file mode 100644 (file)
index 0000000..cffa55f
--- /dev/null
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feeds>
+<feed>
+  <name>Adam Bellinson</name>
+  <planet>
+    <www>http://www.threadbox.net</www>
+    <rss>http://feeds.feedburner.com/threadbox</rss>
+  </planet>
+  <image>thread.png</image>
+  <nick>thread</nick>
+</feed>
+<feed>
+  <name>Akkana Peck</name>
+  <planet>
+    <www>http://shallowsky.com/blog</www>
+    <rss>http://shallowsky.com/blog/index.rss</rss>
+  </planet>
+  <mini>
+    <www>http://twitter.com/akkakk</www>
+    <rss>http://twitter.com/statuses/user_timeline/48417042.atom</rss>
+  </mini>
+  <image></image>
+  <nick>akk</nick>
+</feed>
+<feed>
+  <name>Andrew Williams</name>
+  <mini>
+    <www>http://identi.ca/nikdoof/</www>
+    <rss>http://identi.ca/nikdoof/rss</rss>
+  </mini>
+  <image></image>
+  <nick></nick>
+</feed>
+<feed>
+  <name>Brandon Cash</name>
+  <planet>
+    <www>http://blog.brandoncash.net</www>
+    <rss>http://blog.brandoncash.net/rss</rss>
+  </planet>
+  <mini>
+    <www>http://twitter.com/brandoncash</www>
+    <rss>http://twitter.com/statuses/user_timeline/17181890.atom</rss>
+  </mini>
+  <nick>cai</nick>
+  <image>cai.png</image>
+</feed>
+<feed>
+  <name>Calvin Wong</name>
+  <planet>
+    <www>http://debian-administration.org/users/deadcat/weblog</www>
+    <rss>http://www.debian-administration.org/weblog/feeds/deadcat</rss>
+  </planet>
+  <nick>deadcat</nick>
+  <image>deadcat.png</image>
+</feed>
+<feed>
+  <name>Christopher W.</name>
+  <planet>
+    <www>http://www.linuxinfusion.com/</www>
+    <rss>http://www.linuxinfusion.com/feed</rss>
+  </planet>
+  <mini>
+    <www>http://identi.ca/moparx</www>
+    <rss>http://identi.ca/moparx/rss</rss>
+  </mini>
+  <nick>moparx</nick>
+  <image></image>
+</feed>
+<feed>
+  <name>Crimeboy</name>
+  <planet>
+    <www>http://celo.wordpress.com/</www>
+    <rss>http://celo.wordpress.com/feed/rss/</rss>
+  </planet>
+  <nick>crimeboy</nick>
+  <image></image>
+</feed>
+<feed>
+  <name>Dave Foster</name>
+  <planet>
+    <www>http://www.minuslab.net/d</www>
+    <rss>http://www.minuslab.net/d/?feed=rss2</rss>
+  </planet>
+  <mini>
+    <www>http://twitter.com/m4re</www>
+    <rss>http://twitter.com/statuses/user_timeline/18455974.atom</rss>
+  </mini>
+  <nick>m4re</nick>
+  <image>m4r3.png</image>
+</feed>
+<feed>
+  <name>David Barr</name>
+  <planet>
+    <www>http://david.chalkskeletons.com/blog</www>
+    <rss>http://david.chalkskeletons.com/blog/?feed=rss2</rss>
+  </planet>
+  <mini>
+    <www>http://twitter.com/david_barr</www>
+    <rss>http://twitter.com/statuses/user_timeline/14423164.atom</rss>
+  </mini>
+  <nick>mulberry</nick>
+  <image>dpb.png</image>
+</feed>
+<feed>
+  <name>David Shakaryan</name>
+  <planet>
+    <www></www>
+    <rss>http://www.ompty.org/omposter/rss.xml</rss>
+  </planet>
+  <nick>omp</nick>
+  <image>omp.png</image>
+</feed>
+<feed>
+  <name>Javeed Shaikh</name>
+  <planet>
+    <www></www>
+    <rss>http://syscrash.ca/bblog/rss.php?ver=2</rss>
+  </planet>
+  <nick>syscrash2k</nick>
+  <image>syscrash.png</image>
+</feed>
+<feed>
+  <name>K Mandla</name>
+  <planet>
+    <www>http://kmandla.wordpress.com/</www>
+    <rss>http://kmandla.wordpress.com/feed/</rss>
+  </planet>
+  <nick>KMandla</nick>
+  <image></image>
+</feed>
+<feed>
+  <name>Kyle McMartin</name>
+  <planet>
+    <www></www>
+    <rss>http://blog.kyle.mcmartin.ca/?feed=rss2</rss>
+  </planet>
+  <nick>kyle</nick>
+  <image>kyle.png</image>
+</feed>
+<feed>
+  <name>Lostson</name>
+  <planet>
+    <www>http://lostsonsvault.org/geek</www>
+    <rss>http://lostsonsvault.org/geek/?feed=rss2</rss>
+  </planet>
+  <nick>lostson</nick>
+  <image>lostson.png</image>
+</feed>
+<feed>
+  <name>Michael Ramm</name>
+  <planet>
+    <www>http://blog.1manit.net/</www>
+    <rss>http://blog.1manit.net/category/openbox/feed</rss>
+  </planet>
+  <mini>
+    <www>http://identi.ca/michaelramm/</www>
+    <rss>http://identi.ca/michaelramm/rss</rss>
+  </mini>
+  <nick></nick>
+  <image>templertux75.png</image>
+</feed>
+<feed>
+  <name>Michael Thung</name>
+  <planet>
+    <www></www>
+    <rss>http://switch-case.org/rss.xml</rss>
+  </planet>
+  <mini>
+    <www>http://twitter.com/postlogic</www>
+    <rss>http://twitter.com/statuses/user_timeline/14292405.atom</rss>
+  </mini>
+  <nick>postlogic</nick>
+  <image></image>
+</feed>
+<feed>
+  <name>Miklos Bacso</name>
+  <planet>
+    <www>http://miklos.ca/log</www>
+    <rss>http://feeds.feedburner.com/memento_log</rss>
+  </planet>
+  <nick>miklos</nick>
+  <image>miklos.png</image>
+</feed>
+<feed>
+  <name>Nicol&#225;s Reynolds</name>
+  <planet>
+    <www>http://send-fruit.com.ar/</www>
+    <rss>http://feeds.feedburner.com/send-fruit</rss>
+  </planet>
+  <nick></nick>
+  <image>nich.png</image>
+</feed>
+<feed>
+  <name>Og Maciel</name>
+  <planet>
+    <www>http://www.ogmaciel.com/</www>
+    <rss>http://www.ogmaciel.com/?feed=rss2</rss>
+  </planet>
+  <mini>
+    <www>http://identi.ca/ogmaciel</www>
+    <rss>http://identi.ca/ogmaciel/rss</rss>
+  </mini>
+  <nick>OgMaciel</nick>
+  <image>ogmaciel.png</image>
+</feed>
+<feed>
+  <name>Oliver Kraitschy</name>
+  <planet>
+    <www></www>
+    <rss>http://www.okraits.de/blog/?feed=rss2</rss>
+  </planet>
+  <nick>okraits</nick>
+  <image>okraits.png</image>
+</feed>
+<feed>
+  <name>Philip Newborough</name>
+  <planet>
+    <www>http://crunchbang.org/</www>
+    <rss>http://crunchbang.org/feed/</rss>
+  </planet>
+  <mini>
+    <www>http://identi.ca/corenominal</www>
+    <rss>http://identi.ca/corenominal/rss</rss>
+  </mini>
+  <nick></nick>
+  <image>philip.png</image>
+</feed>
+<feed>
+  <name>Sebastian Sareyko</name>
+  <planet>
+    <www></www>
+    <rss>http://nooms.de/blog/feed/</rss>
+  </planet>
+  <nick>smoon</nick>
+  <image>smoon.png</image>
+</feed>
+<feed>
+  <name>Spencer French</name>
+  <planet>
+    <www>http://ingvildr.wordpress.com/</www>
+    <rss>http://ingvildr.wordpress.com/feed/</rss>
+  </planet>
+  <nick>ingvildr</nick>
+  <image>spencer.png</image>
+</feed>
+<feed>
+  <name>Tim Riley</name>
+  <planet>
+    <www>http://openmonkey.com/</www>
+    <rss>http://feeds.feedburner.com/BlahBlahWoofWoof</rss>
+  </planet>
+  <mini>
+    <www>http://twitter.com/timriley</www>
+    <rss>http://twitter.com/statuses/user_timeline/12341.atom</rss>
+  </mini>
+  <nick>Safari_Al</nick>
+  <image>saf.png</image>
+</feed>
+<feed>
+  <name>Tutku DALMAZ</name>
+  <planet>
+    <www></www>
+    <rss>http://tutkudalmaz.org/gunluk/?feed=rss2&amp;cat=7</rss>
+  </planet>
+  <nick></nick>
+  <image></image>
+</feed>
+<feed>
+  <name>Will Simpson</name>
+  <mini>
+    <www>http://identi.ca/willsimpson</www>
+    <rss>http://identi.ca/willsimpson/rss</rss>
+  </mini>
+  <nick></nick>
+  <image></image>
+</feed>
+<feed>
+  <name>appropedia</name>
+  <planet>
+    <www>http://blogs.appropedia.org/</www>
+    <rss>http://blogs.appropedia.org/tag/openbox/feed/</rss>
+  </planet>
+  <nick></nick>
+  <image></image>
+</feed>
+<feed>
+  <name>ghost1227</name>
+  <planet>
+    <www>http://workshop.ghost1227.com/</www>
+    <rss>http://workshop.ghost1227.com/feed/</rss>
+  </planet>
+  <nick></nick>
+  <image></image>
+</feed>
+<feed>
+  <name>urukrama</name>
+  <www>http://urukrama.wordpress.com/</www>
+  <rss>http://urukrama.wordpress.com/feed/</rss>
+  <nick>urukrama</nick>
+  <image></image>
+</feed>
+</feeds>
diff --git a/rss/heads/benp.png b/rss/heads/benp.png
new file mode 100644 (file)
index 0000000..1d22a24
Binary files /dev/null and b/rss/heads/benp.png differ
diff --git a/rss/heads/benp2.png b/rss/heads/benp2.png
new file mode 100644 (file)
index 0000000..e10cdcf
Binary files /dev/null and b/rss/heads/benp2.png differ
diff --git a/rss/heads/bf-old.png b/rss/heads/bf-old.png
new file mode 100644 (file)
index 0000000..58ef0fb
Binary files /dev/null and b/rss/heads/bf-old.png differ
diff --git a/rss/heads/bf.gif b/rss/heads/bf.gif
new file mode 100644 (file)
index 0000000..c35546f
Binary files /dev/null and b/rss/heads/bf.gif differ
diff --git a/rss/heads/cai.png b/rss/heads/cai.png
new file mode 100644 (file)
index 0000000..5e182f3
Binary files /dev/null and b/rss/heads/cai.png differ
diff --git a/rss/heads/darth.png b/rss/heads/darth.png
new file mode 100644 (file)
index 0000000..0274613
Binary files /dev/null and b/rss/heads/darth.png differ
diff --git a/rss/heads/deadcat.png b/rss/heads/deadcat.png
new file mode 100644 (file)
index 0000000..02fa4f6
Binary files /dev/null and b/rss/heads/deadcat.png differ
diff --git a/rss/heads/dpb---.png b/rss/heads/dpb---.png
new file mode 100644 (file)
index 0000000..b3dab06
Binary files /dev/null and b/rss/heads/dpb---.png differ
diff --git a/rss/heads/dpb.png b/rss/heads/dpb.png
new file mode 100644 (file)
index 0000000..dc41c3d
Binary files /dev/null and b/rss/heads/dpb.png differ
diff --git a/rss/heads/hackergotchi.png b/rss/heads/hackergotchi.png
new file mode 100644 (file)
index 0000000..958e8d5
Binary files /dev/null and b/rss/heads/hackergotchi.png differ
diff --git a/rss/heads/icon5hy.png b/rss/heads/icon5hy.png
new file mode 100644 (file)
index 0000000..f3de571
Binary files /dev/null and b/rss/heads/icon5hy.png differ
diff --git a/rss/heads/jamesturner.png b/rss/heads/jamesturner.png
new file mode 100644 (file)
index 0000000..4bcdf0c
Binary files /dev/null and b/rss/heads/jamesturner.png differ
diff --git a/rss/heads/jmc.png b/rss/heads/jmc.png
new file mode 100644 (file)
index 0000000..ee2a8f0
Binary files /dev/null and b/rss/heads/jmc.png differ
diff --git a/rss/heads/kyle.png b/rss/heads/kyle.png
new file mode 100644 (file)
index 0000000..770f71b
Binary files /dev/null and b/rss/heads/kyle.png differ
diff --git a/rss/heads/lostson.png b/rss/heads/lostson.png
new file mode 100644 (file)
index 0000000..8688f3f
Binary files /dev/null and b/rss/heads/lostson.png differ
diff --git a/rss/heads/m4r3.png b/rss/heads/m4r3.png
new file mode 100644 (file)
index 0000000..b98ca3e
Binary files /dev/null and b/rss/heads/m4r3.png differ
diff --git a/rss/heads/marco.png b/rss/heads/marco.png
new file mode 100644 (file)
index 0000000..663057a
Binary files /dev/null and b/rss/heads/marco.png differ
diff --git a/rss/heads/miklos.png b/rss/heads/miklos.png
new file mode 100644 (file)
index 0000000..3bfd7a9
Binary files /dev/null and b/rss/heads/miklos.png differ
diff --git a/rss/heads/nich.png b/rss/heads/nich.png
new file mode 100644 (file)
index 0000000..4faf18e
Binary files /dev/null and b/rss/heads/nich.png differ
diff --git a/rss/heads/noimage.png b/rss/heads/noimage.png
new file mode 100644 (file)
index 0000000..5e9b210
Binary files /dev/null and b/rss/heads/noimage.png differ
diff --git a/rss/heads/ogmaciel.png b/rss/heads/ogmaciel.png
new file mode 100644 (file)
index 0000000..d943b4e
Binary files /dev/null and b/rss/heads/ogmaciel.png differ
diff --git a/rss/heads/okraits.png b/rss/heads/okraits.png
new file mode 100644 (file)
index 0000000..4f0e24a
Binary files /dev/null and b/rss/heads/okraits.png differ
diff --git a/rss/heads/omp.png b/rss/heads/omp.png
new file mode 100644 (file)
index 0000000..b1790eb
Binary files /dev/null and b/rss/heads/omp.png differ
diff --git a/rss/heads/pat.png b/rss/heads/pat.png
new file mode 100644 (file)
index 0000000..d948b2e
Binary files /dev/null and b/rss/heads/pat.png differ
diff --git a/rss/heads/philip.png b/rss/heads/philip.png
new file mode 100644 (file)
index 0000000..eb85dd9
Binary files /dev/null and b/rss/heads/philip.png differ
diff --git a/rss/heads/quandar.png b/rss/heads/quandar.png
new file mode 100644 (file)
index 0000000..ad2ffc2
Binary files /dev/null and b/rss/heads/quandar.png differ
diff --git a/rss/heads/quandar_.png b/rss/heads/quandar_.png
new file mode 100644 (file)
index 0000000..2c8cbe3
Binary files /dev/null and b/rss/heads/quandar_.png differ
diff --git a/rss/heads/rezza2.png b/rss/heads/rezza2.png
new file mode 100644 (file)
index 0000000..1389223
Binary files /dev/null and b/rss/heads/rezza2.png differ
diff --git a/rss/heads/saf.png b/rss/heads/saf.png
new file mode 100644 (file)
index 0000000..bb59c16
Binary files /dev/null and b/rss/heads/saf.png differ
diff --git a/rss/heads/simonaw.png b/rss/heads/simonaw.png
new file mode 100644 (file)
index 0000000..5c1c383
Binary files /dev/null and b/rss/heads/simonaw.png differ
diff --git a/rss/heads/smoon.png b/rss/heads/smoon.png
new file mode 100644 (file)
index 0000000..438628b
Binary files /dev/null and b/rss/heads/smoon.png differ
diff --git a/rss/heads/smoon2.png b/rss/heads/smoon2.png
new file mode 100644 (file)
index 0000000..ee26d9f
Binary files /dev/null and b/rss/heads/smoon2.png differ
diff --git a/rss/heads/spencer.png b/rss/heads/spencer.png
new file mode 100644 (file)
index 0000000..edfefbe
Binary files /dev/null and b/rss/heads/spencer.png differ
diff --git a/rss/heads/syscrash.png b/rss/heads/syscrash.png
new file mode 100644 (file)
index 0000000..8987c29
Binary files /dev/null and b/rss/heads/syscrash.png differ
diff --git a/rss/heads/templertux75.png b/rss/heads/templertux75.png
new file mode 100644 (file)
index 0000000..fffb525
Binary files /dev/null and b/rss/heads/templertux75.png differ
diff --git a/rss/heads/thread.png b/rss/heads/thread.png
new file mode 100644 (file)
index 0000000..ae92a11
Binary files /dev/null and b/rss/heads/thread.png differ
diff --git a/rss/index.html b/rss/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/rss/local/.xml.commits b/rss/local/.xml.commits
new file mode 100644 (file)
index 0000000..88017cd
--- /dev/null
@@ -0,0 +1,504 @@
+<?xml version="1.0"?>
+<feed>
+ <title>Openbox Commits</title>
+ <link>http://icculus.org/openbox/develop.shtml</link>
+ <description>Commit log for Openbox and ObConf</description>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/2214f1</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;acf9a2341d23&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/ (4 files in 2 dirs):                      &lt;/div&gt;         &lt;div&gt;             add an inotify watcher for directories (doesnt work without inotify yet)</text>
+  <title>add an inotify watcher for directories (doesnt work without inotify yet)</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>5594a2d911378bcfe5882b3ac2336da5</id>
+  <date>1275610200</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/221412</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;2e94af28e4c1&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/link.c:                      &lt;/div&gt;         &lt;div&gt;             save the list of mime types listed as supported by an application</text>
+  <title>save the list of mime types listed as supported by an application</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>f029a1b717e7551be9eb79814513bead</id>
+  <date>1275602335</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/2212fd</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;b025a0268f30&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/ (ddparse.c ddparse.h link.c link.h):                      &lt;/div&gt;         &lt;div&gt;             parse app Categories better.  parse a list of strings into a gchar**</text>
+  <title>parse app Categories better. parse a list of strings into a gchar**</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>416434e310513b8c650d14c17c98fe8a</id>
+  <date>1275602334</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/221226</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;78a8f407a94d&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/link.c:                      &lt;/div&gt;         &lt;div&gt;             parse Categories tag and save them as an array of GQuarks</text>
+  <title>parse Categories tag and save them as an array of GQuarks</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>94711b0212c5a1d44e4192c3cff0271e</id>
+  <date>1275599503</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/2210b1</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;a6141fe7a489&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/ (ddparse.c ddparse.h link.c):                      &lt;/div&gt;         &lt;div&gt;             &lt;pre&gt; improved .desktop parsing.
+
+properly (and quickly) check for existence of required keys
+figure out what an app can open from its exec key
+validate the %fields in an app's exec key&lt;/pre&gt;</text>
+  <title>improved .desktop parsing. properly (and quickly) check for existence of...</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>d059e33e94d2397331362438751e28d6</id>
+  <date>1275596265</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220ffa</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;d9d65b73853d&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/paths.c:                      &lt;/div&gt;         &lt;div&gt;             free the user's group ids</text>
+  <title>free the user's group ids</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>75a686444a0a5f04474d942cccf63ef1</id>
+  <date>1275596261</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220f4a</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;19e051a46601&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/paths.c:                      &lt;/div&gt;         &lt;div&gt;             free the path dirs</text>
+  <title>free the path dirs</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>742167bc848f2f5d4960845e97913e86</id>
+  <date>1275596255</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220e85</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;475961e17fd5&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/link.c:                      &lt;/div&gt;         &lt;div&gt;             parse Path, Terminal, and StartupNotify</text>
+  <title>parse Path, Terminal, and StartupNotify</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>4d4d9b5d1ad8a52dd5e0921e75c4324b</id>
+  <date>1274501469</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220de2</link>
+  <text>Commit by &lt;strong&gt;mikachu&lt;/strong&gt;              on wip/foreach             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;19e2f84949e9&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/:                      &lt;/div&gt;         &lt;div&gt;             forced update</text>
+  <title>forced update</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>e6b73e062816de96b11cc9fc2850c56b</id>
+  <date>1274501432</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220d0e</link>
+  <text>Commit by &lt;strong&gt;mikachu&lt;/strong&gt;              on wip/foreach             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;19e2f84949e9&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/openbox/actions/if.c:                      &lt;/div&gt;         &lt;div&gt;             Add &lt;samegroup&gt; condition to ForEach</text>
+  <title>Add &lt;samegroup&gt; condition to ForEach</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>2d8f19dd5005df2da9770f4f8ae58b6a</id>
+  <date>1274501361</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220c24</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;0c8c9caba6f5&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obt/ (ddparse.c ddparse.h link.c link.h):                      &lt;/div&gt;         &lt;div&gt;             parse OnlyShowIn/NotShowIn</text>
+  <title>parse OnlyShowIn/NotShowIn</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>b52c3c0f5c743492c3bd99ac1a94a006</id>
+  <date>1274501036</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220b81</link>
+  <text>Commit by &lt;strong&gt;mikachu&lt;/strong&gt;              on wip/foreach             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;f11074c1a8b7&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/:                      &lt;/div&gt;         &lt;div&gt;             forced update</text>
+  <title>forced update</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>0dc230d0cebcdba17c64f7c61554a206</id>
+  <date>1274497973</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/2209d9</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;632eb082277e&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/openbox/client.c:                      &lt;/div&gt;         &lt;div&gt;             &lt;pre&gt; allow new windows on other desktops to get focused if specified in a per-app rule
+
+you can not client_active() with user=false and desktop=true and activate things on other desktops, by the general focus steal restrictions, if you wanted to do that sorta thing&lt;/pre&gt;</text>
+  <title>allow new windows on other desktops to get focused if specified in a per-app...</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>a3ba4dc8bdc8bbc86a157ab69a659cc5</id>
+  <date>1274489814</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/22093f</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on cgl             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;47e79932412d&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/:                      &lt;/div&gt;         &lt;div&gt;             forced update</text>
+  <title>forced update</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>d5b0d8fcb59776833374a9994c155f5f</id>
+  <date>1274489791</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220798</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on cgl             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;fecb6ff952a5&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/openbox/client.c:                      &lt;/div&gt;         &lt;div&gt;             &lt;pre&gt; allow new windows on other desktops to get focused if specified in a per-app rule
+
+you can not client_active() with user=false and desktop=true and activate things on other desktops, by the general focus steal restrictions, if you wanted to do that sorta thing&lt;/pre&gt;</text>
+  <title>allow new windows on other desktops to get focused if specified in a per-app...</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>6ba40e098edab5c689b055cdf9f957c8</id>
+  <date>1274489738</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/220630</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on cgl             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;47e79932412d&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/obtheme/ (lexer.l obtheme.c obtheme.h parser.y):                      &lt;/div&gt;         &lt;div&gt;             &lt;pre&gt; fix header includes in obtheme
+
+some should point to other dirs, and some need to point to the renamed
+parser.y's new output parser.h&lt;/pre&gt;</text>
+  <title>fix header includes in obtheme some should point to other dirs, and some need to...</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>b032b03690d304c18ec851739b22d0e7</id>
+  <date>1274485539</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/22044f</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on cgl             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;daea270a0cb4&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/ (10 files in 2 dirs):                      &lt;/div&gt;         &lt;div&gt;             &lt;pre&gt; Add obtheme/ to the build system
+
+Had to rename the .y file so it didn't clash
+Added a Makefile stub in the directory to run the top level Makefile&lt;/pre&gt;</text>
+  <title>Add obtheme/ to the build system Had to rename the .y file so it didn't clash...</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>f9ead5e72cf49bac7d6e8ea6c62507c8</id>
+  <date>1274485538</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/2203b5</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on cgl             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;1f29db294a28&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/:                      &lt;/div&gt;         &lt;div&gt;             forced update</text>
+  <title>forced update</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>795d106a1278f0bd299f9fb9ca2b8b74</id>
+  <date>1274485509</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/22031a</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;fa39954c9dd5&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/:                      &lt;/div&gt;         &lt;div&gt;             forced update</text>
+  <title>forced update</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>799c28fab5c64dc62ecc3bfda9db787f</id>
+  <date>1274480262</date>
+ </item>
+ <item>
+  <name>Openbox</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Openbox/.message/2201ed</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on work             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;973456488981&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/openbox/client.c:                      &lt;/div&gt;         &lt;div&gt;             &lt;pre&gt; don't need a force_reply when changing the decor for a window
+
+it will send a configurenotify if the client's rootwindow position changed&lt;/pre&gt;</text>
+  <title>don't need a force_reply when changing the decor for a window it will send a...</title>
+  <feedurl>http://icculus.org/openbox</feedurl>
+  <feedtitle>Openbox</feedtitle>
+  <id>48069c9d2c074349f6652a5c27a3662e</id>
+  <date>1274480182</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/12a4c</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;500163e2c74c&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/src/archive.c:                      &lt;/div&gt;         &lt;div&gt;             remove unneeded strdup</text>
+  <title>remove unneeded strdup</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>1b01acc7f49336eded1826edac5e29b8</id>
+  <date>1268167879</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/12840</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;b0465895c15c&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/src/obconf.glade:                      &lt;/div&gt;         &lt;div&gt;             don't use a non-zero page size for some spinners (Fix bug #4540)</text>
+  <title>don't use a non-zero page size for some spinners (Fix bug #4540)</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>e7e7cba34df20ec8e6287b9965fa89ec</id>
+  <date>1266024123</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/12625</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;e3545ed4e522&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/src/preview_update.c:                      &lt;/div&gt;         &lt;div&gt;             don't set the theme preview if a null is returned (trying to fix bug #3285)</text>
+  <title>don't set the theme preview if a null is returned (trying to fix bug #3285)</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>6268c5344376fb0408341bb1b53ca6f0</id>
+  <date>1261441963</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/1243a</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;971d263ae89a&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/.gitignore:                      &lt;/div&gt;         &lt;div&gt;             add some configure stuff to .gitignore</text>
+  <title>add some configure stuff to .gitignore</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>10cfebc32c9ae389e09c89b21253412f</id>
+  <date>1261440579</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/1220d</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;c6024d2c7801&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/src/ (6 files):                      &lt;/div&gt;         &lt;div&gt;             use the new obt_xml stuff</text>
+  <title>use the new obt_xml stuff</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>616960ef1daad6c8d2de3ce9d58ac19c</id>
+  <date>1261440575</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/11d05</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;a88014c057ab&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/src/ (7 files):                      &lt;/div&gt;         &lt;div&gt;             Add the Inactive OSD font, and the primaryMonitor options</text>
+  <title>Add the Inactive OSD font, and the primaryMonitor options</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>5f5242f82f6d0c5bdeefe1dbb77aea95</id>
+  <date>1261439670</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/11f83</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;ec757ef0ca19&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/ (11 files in 2 dirs):                      &lt;/div&gt;         &lt;div&gt;             Use the openbox 3.5 libs</text>
+  <title>Use the openbox 3.5 libs</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>3fc7749a51ae40dbb35ce07d021763c3</id>
+  <date>1261439670</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/11af6</link>
+  <text>Commit by &lt;strong&gt;lon&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;c8ac23e5d752&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/ (LINGUAS zh_CN.po):                      &lt;/div&gt;         &lt;div&gt;             Add a Simplified Chinese(zh_CN) translation for obconf-2.0.3</text>
+  <title>Add a Simplified Chinese(zh_CN) translation for obconf-2.0.3</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>29d099ddf3aa38f5932b3e00d99ed120</id>
+  <date>1261429608</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/11682</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;88889ed33863&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/ (cs.po de.po fr.po pt_BR.po):                      &lt;/div&gt;         &lt;div&gt;             update the po files.  remoev fuzzy strings from cs and de languages</text>
+  <title>update the po files. remoev fuzzy strings from cs and de languages</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>b22dab5bd43eeb01228df53b2ec47495</id>
+  <date>1235073994</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/118af</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;c662efb2b24b&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/ (LINGUAS ru.po):                      &lt;/div&gt;         &lt;div&gt;             &lt;pre&gt; a russion translation submission
+
+there are still some missing strings, and it needs keyboard shortcuts, but there it is&lt;/pre&gt;</text>
+  <title>a russion translation submission there are still some missing strings, and it...</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>f6c349a548ec6ab64281c8cd8686f8f0</id>
+  <date>1235073983</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/1148f</link>
+  <text>Commit by &lt;strong&gt;mario.blaettermann&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;ff02b1f6eba1&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/ (LINGUAS de.po):                      &lt;/div&gt;         &lt;div&gt;             add a german translation</text>
+  <title>add a german translation</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>19248f110fe4c6d11b91f5d404fc4733</id>
+  <date>1210033982</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/11299</link>
+  <text>Commit by &lt;strong&gt;ogmaciel&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;a6a7b582d380&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/pt_BR.po:                      &lt;/div&gt;         &lt;div&gt;             update for the brasilian portuguese translation</text>
+  <title>update for the brasilian portuguese translation</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>1f16cc397f2fb293b0629586f6629446</id>
+  <date>1204820224</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/110b0</link>
+  <text>Commit by &lt;strong&gt;nocbos&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;f481b7c562f7&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/fr.po:                      &lt;/div&gt;         &lt;div&gt;             More updates for the French translation</text>
+  <title>More updates for the French translation</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>1b41a8fb30dcb8ddba32ddce6b53b561</id>
+  <date>1204524650</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/10e50</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;0e14d59af873&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/ (10 files):                      &lt;/div&gt;         &lt;div&gt;             add new strings to the po files</text>
+  <title>add new strings to the po files</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>a2c670578cee5b56c97ee53693848cdb</id>
+  <date>1204523049</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/10c72</link>
+  <text>Commit by &lt;strong&gt;nocbos&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;f6b511b5ac70&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/fr.po:                      &lt;/div&gt;         &lt;div&gt;             Update the French translation</text>
+  <title>Update the French translation</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>9df1b9b6c8c95524f299850372f148ef</id>
+  <date>1204522811</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/10a76</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;a8d3572dbad7&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/ (LINGUAS pt_BR.po):                      &lt;/div&gt;         &lt;div&gt;             add a portugeuse (brasilian) translation</text>
+  <title>add a portugeuse (brasilian) translation</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>fe73d1c69a7fa97f6dc494fafdffaa32</id>
+  <date>1204492730</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/10872</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;03aadf423b4e&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/src/ (obconf.glade strings.c):                      &lt;/div&gt;         &lt;div&gt;             add a nice decription of what the dock is</text>
+  <title>add a nice decription of what the dock is</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>116b8d86f090ab85bb5b724b390a60ba</id>
+  <date>1204453431</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/10686</link>
+  <text>Commit by &lt;strong&gt;mektup&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;524d7f2845c2&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/tr.po:                      &lt;/div&gt;         &lt;div&gt;             update the turkish translation for 2.0.3</text>
+  <title>update the turkish translation for 2.0.3</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>e02c73afa72ab08abf35e45b50c2f962</id>
+  <date>1202970996</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/1041c</link>
+  <text>Commit by &lt;strong&gt;danakj&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;4f30d1a655dd&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/ (9 files):                      &lt;/div&gt;         &lt;div&gt;             add the new strings to .po files and remove fuzzy stuff</text>
+  <title>add the new strings to .po files and remove fuzzy stuff</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>2a6717d5c3dfb1167d5cb9f0cf16ba6e</id>
+  <date>1202970815</date>
+ </item>
+ <item>
+  <name>ObConf</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://cia.vc/stats/project/Obconf/.message/1023e</link>
+  <text>Commit by &lt;strong&gt;mikachu&lt;/strong&gt;              on master             &lt;span&gt; :: &lt;/span&gt;                          r&lt;b&gt;31b9a663d2ba&lt;/b&gt;             &lt;b&gt;&lt;/b&gt;/po/sv.po:                      &lt;/div&gt;         &lt;div&gt;             Update swedish translation.</text>
+  <title>Update swedish translation.</title>
+  <feedurl>http://icculus.org/openbox/index.php/ObConf</feedurl>
+  <feedtitle>ObConf</feedtitle>
+  <id>083e0b238da88dee8deaf6c05a585c11</id>
+  <date>1202754667</date>
+ </item>
+</feed>
diff --git a/rss/mini/.xml b/rss/mini/.xml
new file mode 100644 (file)
index 0000000..c09c50e
--- /dev/null
@@ -0,0 +1,822 @@
+<?xml version="1.0"?>
+<feed>
+ <title>Mini Planet Openbox</title>
+ <link>http://icculus.org/openbox/discuss-miniplanet.shtml</link>
+ <description>Tweets and dents from around the Openbox planet</description>
+ <item>
+  <name>Tim Riley</name>
+  <nick>Safari_Al</nick>
+  <image>http://a3.twimg.com/profile_images/676474399/timriley_at_beach__square__normal.png</image>
+  <link>http://twitter.com/timriley/statuses/15393957998</link>
+  <text>timriley: RT @rentmonkey: Starting a big weekend of development work. So far today: beautiful lease documents for NSW, zipped lease bundles, and u ...</text>
+  <title>timriley: RT @rentmonkey: Starting a big weekend of development work. So far today: beautiful lease documents for NSW, zipped lease bundles, and u ...</title>
+  <feedurl>http://twitter.com/timriley</feedurl>
+  <feedtitle>Twitter / timriley</feedtitle>
+  <id>56769589e8960aa1450ebbc60bf4a8af</id>
+  <date>1275642213</date>
+ </item>
+ <item>
+  <name>Tim Riley</name>
+  <nick>Safari_Al</nick>
+  <image>http://a3.twimg.com/profile_images/676474399/timriley_at_beach__square__normal.png</image>
+  <link>http://twitter.com/timriley/statuses/15392444797</link>
+  <text>timriley: RT @jimwhimpey: If cabs were cheaper I'm sure a lot less people would own cars and a lot less taxi drivers would be sitting in ranks doi ...</text>
+  <title>timriley: RT @jimwhimpey: If cabs were cheaper I'm sure a lot less people would own cars and a lot less taxi drivers would be sitting in ranks doi ...</title>
+  <feedurl>http://twitter.com/timriley</feedurl>
+  <feedtitle>Twitter / timriley</feedtitle>
+  <id>9c5344c5a90614656bf10e9ecc997787</id>
+  <date>1275640338</date>
+ </item>
+ <item>
+  <name>Tim Riley</name>
+  <nick>Safari_Al</nick>
+  <image>http://a3.twimg.com/profile_images/676474399/timriley_at_beach__square__normal.png</image>
+  <link>http://twitter.com/timriley/statuses/15353242790</link>
+  <text>timriley: Zumba at the morning workout. Need hip replacement.</text>
+  <title>timriley: Zumba at the morning workout. Need hip replacement.</title>
+  <feedurl>http://twitter.com/timriley</feedurl>
+  <feedtitle>Twitter / timriley</feedtitle>
+  <id>e2f0c8a8f6a94b756437aecb6d5620a9</id>
+  <date>1275615544</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>http://a1.twimg.com/profile_images/68918690/m4r3-square_normal.png</image>
+  <link>http://twitter.com/m4re/statuses/15326110669</link>
+  <text>m4re: &quot;Argentines should relax because to beat this team our rivals will have to put all their beef on the grill.&quot; -Diego the wise</text>
+  <title>m4re: &quot;Argentines should relax because to beat this team our rivals will have to put all their beef on the grill.&quot; -Diego the wise</title>
+  <feedurl>http://twitter.com/m4re</feedurl>
+  <feedtitle>Twitter / m4re</feedtitle>
+  <id>dedc4de85db62cbdad9cc42748817ab7</id>
+  <date>1275587319</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>http://a1.twimg.com/profile_images/643616246/avatar_normal.jpg</image>
+  <link>http://twitter.com/david_barr/statuses/15322213668</link>
+  <text>david_barr: I'm just like a real grown up with my R and MySQL, I actually look like I know what I'm doing, which i don't.</text>
+  <title>david_barr: I'm just like a real grown up with my R and MySQL, I actually look like I know what I'm doing, which i don't.</title>
+  <feedurl>http://twitter.com/david_barr</feedurl>
+  <feedtitle>Twitter / david_barr</feedtitle>
+  <id>61adc3e3eb6f962c5bbe8395c5b68dbf</id>
+  <date>1275583294</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>http://a1.twimg.com/profile_images/643616246/avatar_normal.jpg</image>
+  <link>http://twitter.com/david_barr/statuses/15264461049</link>
+  <text>david_barr: Woo drinking!</text>
+  <title>david_barr: Woo drinking!</title>
+  <feedurl>http://twitter.com/david_barr</feedurl>
+  <feedtitle>Twitter / david_barr</feedtitle>
+  <id>d00e3a5d04e03b996bc69f9bd9f1f07e</id>
+  <date>1275512396</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>http://a1.twimg.com/profile_images/643616246/avatar_normal.jpg</image>
+  <link>http://twitter.com/david_barr/statuses/15237683603</link>
+  <text>david_barr: I need to stop eating so many sweet snacks and drinking sweet caffeine drinks in the morning or I will get a serious case of sugar leg.</text>
+  <title>david_barr: I need to stop eating so many sweet snacks and drinking sweet caffeine drinks in the morning or I will get a serious case of sugar leg.</title>
+  <feedurl>http://twitter.com/david_barr</feedurl>
+  <feedtitle>Twitter / david_barr</feedtitle>
+  <id>474af2fcd140a3529a59da5192127924</id>
+  <date>1275481075</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>http://a1.twimg.com/profile_images/643616246/avatar_normal.jpg</image>
+  <link>http://twitter.com/david_barr/statuses/15187598116</link>
+  <text>david_barr: Everyday I seem to say this: “Well, yeah, they hate me, but it’s not really my fault...” What if, maybe, it *is* my fault? (It's not.)</text>
+  <title>david_barr: Everyday I seem to say this: “Well, yeah, they hate me, but it’s not really my fault...” What if, maybe, it *is* my fault? (It's not.)</title>
+  <feedurl>http://twitter.com/david_barr</feedurl>
+  <feedtitle>Twitter / david_barr</feedtitle>
+  <id>386f0d900855412cd0c9256d1bda4b15</id>
+  <date>1275422872</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>http://a1.twimg.com/profile_images/643616246/avatar_normal.jpg</image>
+  <link>http://twitter.com/david_barr/statuses/15129236650</link>
+  <text>david_barr: Shadow of a Vampire: you have the longest boringest opening credits i have ever seen, make with the olde school vampiring already.</text>
+  <title>david_barr: Shadow of a Vampire: you have the longest boringest opening credits i have ever seen, make with the olde school vampiring already.</title>
+  <feedurl>http://twitter.com/david_barr</feedurl>
+  <feedtitle>Twitter / david_barr</feedtitle>
+  <id>7eff441f7072d3b0cb8403edc8505249</id>
+  <date>1275350697</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>http://a1.twimg.com/profile_images/603741854/2859_78386729543_512349543_1619665_532969_n_normal.jpg</image>
+  <link>http://twitter.com/brandoncash/statuses/15128579582</link>
+  <text>brandoncash: Scott Pilgrim vs. The World looks beyond bad ass: http://trailers.apple.com/trailers/universal/scottpilgrimvstheworld/</text>
+  <title>brandoncash: Scott Pilgrim vs. The World looks beyond bad ass: http://trailers.apple.com/trailers/universal/scottpilgrimvstheworld/</title>
+  <feedurl>http://twitter.com/brandoncash</feedurl>
+  <feedtitle>Twitter / brandoncash</feedtitle>
+  <id>238bd94c45cae4c46145b1744169a4c5</id>
+  <date>1275349839</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://identi.ca/notice/34284736</link>
+  <text>I am at work. I am not at home listening to !&lt;span&gt;&lt;a href=&quot;http://identi.ca/group/186/id&quot; title=&quot;Linux Outlaws Podcast (linuxoutlaws)&quot;&gt;&lt;span&gt;LinuxOutlaws&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; with @&lt;span&gt;&lt;a href=&quot;http://identi.ca/user/31762&quot; title=&quot;Becky Newborough&quot;&gt;&lt;span&gt;bobobex&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;. This is not an ideal situation. :(</text>
+  <title>corenominal: I am at work. I am not at home listening to !LinuxOutlaws with @bobobex. This is not an ideal situation. :(</title>
+  <feedurl>http://identi.ca/corenominal</feedurl>
+  <feedtitle>corenominal timeline</feedtitle>
+  <id>5b7e6c1a98c596bf56721eed2b7fae5e</id>
+  <date>1275347669</date>
+ </item>
+ <item>
+  <name>Michael Thung</name>
+  <nick>postlogic</nick>
+  <image>http://a1.twimg.com/profile_images/55645828/Photo_1_normal.jpg</image>
+  <link>http://twitter.com/postlogic/statuses/15123956166</link>
+  <text>postlogic: Playing around with MeeGo on my netbook. It's blazingly fast, even when running from a USB dongle.</text>
+  <title>postlogic: Playing around with MeeGo on my netbook. It's blazingly fast, even when running from a USB dongle.</title>
+  <feedurl>http://twitter.com/postlogic</feedurl>
+  <feedtitle>Twitter / postlogic</feedtitle>
+  <id>b34140aa34465077d4c2adbb428cfcb3</id>
+  <date>1275344034</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://identi.ca/notice/34267884</link>
+  <text>♺ @&lt;span&gt;&lt;a href=&quot;http://identi.ca/user/35355&quot; title=&quot;linode&quot;&gt;&lt;span&gt;linode&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;, We are investigating network issues in our Dallas TX datacenter; please monitor &lt;a href=&quot;http://linode.typepad.com/&quot; title=&quot;http://linode.typepad.com/&quot; rel=&quot;external&quot;&gt;http://linode.typepad.com&lt;/a&gt;</text>
+  <title>corenominal: ♺ @linode, We are investigating network issues in our Dallas TX datacenter; please monitor http://linode.typepad.com</title>
+  <feedurl>http://identi.ca/corenominal</feedurl>
+  <feedtitle>corenominal timeline</feedtitle>
+  <id>3d25fdcc5c8a36c5139069f05c768aa1</id>
+  <date>1275336974</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://identi.ca/notice/34266108</link>
+  <text>The &lt;a href=&quot;http://crunchbanglinux.org/&quot; title=&quot;http://crunchbanglinux.org/&quot; rel=&quot;external&quot;&gt;crunchbanglinux.org&lt;/a&gt; site has gone !&lt;span&gt;&lt;a href=&quot;http://identi.ca/group/20/id&quot; title=&quot;CrunchBang Linux (crunchbang)&quot;&gt;&lt;span&gt;CrunchBang&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; -- a problem with the provider means it is unreachable atm. More info when I get it.</text>
+  <title>corenominal: The crunchbanglinux.org site has gone !CrunchBang -- a problem with the provider means it is unreachable atm. More info when I get it.</title>
+  <feedurl>http://identi.ca/corenominal</feedurl>
+  <feedtitle>corenominal timeline</feedtitle>
+  <id>b9ecda6e792b66f8a61d26ba042a0239</id>
+  <date>1275335769</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://identi.ca/notice/34201602</link>
+  <text>Why oh why can I not get Google Chrome to render fonts without fuzz? :(</text>
+  <title>corenominal: Why oh why can I not get Google Chrome to render fonts without fuzz? :(</title>
+  <feedurl>http://identi.ca/corenominal</feedurl>
+  <feedtitle>corenominal timeline</feedtitle>
+  <id>bdd21d615eb30ab4d76cb9ad4d252834</id>
+  <date>1275294333</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://identi.ca/notice/34191630</link>
+  <text>Panic over, I have fixed what I broke. :)</text>
+  <title>corenominal: Panic over, I have fixed what I broke. :)</title>
+  <feedurl>http://identi.ca/corenominal</feedurl>
+  <feedtitle>corenominal timeline</feedtitle>
+  <id>2e15caa3219fe82747d022b04f6c4db0</id>
+  <date>1275285933</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://identi.ca/notice/34182949</link>
+  <text>Oops, I think I broke something. :/</text>
+  <title>corenominal: Oops, I think I broke something. :/</title>
+  <feedurl>http://identi.ca/corenominal</feedurl>
+  <feedtitle>corenominal timeline</feedtitle>
+  <id>d6f54869f156729cd82e4713694d9306</id>
+  <date>1275278526</date>
+ </item>
+ <item>
+  <name>Andrew Williams</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/34046985</link>
+  <text>Uh oh #&lt;span&gt;&lt;a href=&quot;http://identi.ca/tag/eurovision&quot; rel=&quot;tag&quot;&gt;eurovision&lt;/a&gt;&lt;/span&gt;</text>
+  <title>nikdoof: Uh oh #eurovision</title>
+  <feedurl>http://identi.ca/nikdoof</feedurl>
+  <feedtitle>nikdoof timeline</feedtitle>
+  <id>93565ea3994c5369c485da570bce0d8f</id>
+  <date>1275177248</date>
+ </item>
+ <item>
+  <name>Andrew Williams</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/34046813</link>
+  <text>Greece, They've took their dance moves from ginyu force, oh dear #&lt;span&gt;&lt;a href=&quot;http://identi.ca/tag/eurovision&quot; rel=&quot;tag&quot;&gt;eurovision&lt;/a&gt;&lt;/span&gt;</text>
+  <title>nikdoof: Greece, They've took their dance moves from ginyu force, oh dear #eurovision</title>
+  <feedurl>http://identi.ca/nikdoof</feedurl>
+  <feedtitle>nikdoof timeline</feedtitle>
+  <id>69f0d7a50f25ddf46df5beadc83d55de</id>
+  <date>1275177110</date>
+ </item>
+ <item>
+  <name>Andrew Williams</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/34045829</link>
+  <text>DRAMA #&lt;span&gt;&lt;a href=&quot;http://identi.ca/tag/eurovision&quot; rel=&quot;tag&quot;&gt;eurovision&lt;/a&gt;&lt;/span&gt;</text>
+  <title>nikdoof: DRAMA #eurovision</title>
+  <feedurl>http://identi.ca/nikdoof</feedurl>
+  <feedtitle>nikdoof timeline</feedtitle>
+  <id>db8aa36f7a755af8a9d21247b2572bfa</id>
+  <date>1275176487</date>
+ </item>
+ <item>
+  <name>Andrew Williams</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/34045077</link>
+  <text>Belgium entry, perfect starbucks music #&lt;span&gt;&lt;a href=&quot;http://identi.ca/tag/eurovision&quot; rel=&quot;tag&quot;&gt;eurovision&lt;/a&gt;&lt;/span&gt;</text>
+  <title>nikdoof: Belgium entry, perfect starbucks music #eurovision</title>
+  <feedurl>http://identi.ca/nikdoof</feedurl>
+  <feedtitle>nikdoof timeline</feedtitle>
+  <id>3ef6a21e4a2378868d4f4066e5ba942d</id>
+  <date>1275176048</date>
+ </item>
+ <item>
+  <name>Andrew Williams</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/34044816</link>
+  <text>NICKLEBACK, NOOOOO #&lt;span&gt;&lt;a href=&quot;http://identi.ca/tag/eurovision&quot; rel=&quot;tag&quot;&gt;eurovision&lt;/a&gt;&lt;/span&gt;</text>
+  <title>nikdoof: NICKLEBACK, NOOOOO #eurovision</title>
+  <feedurl>http://identi.ca/nikdoof</feedurl>
+  <feedtitle>nikdoof timeline</feedtitle>
+  <id>1383a73f4d9c51fd3060549ab2c0ba68</id>
+  <date>1275175813</date>
+ </item>
+ <item>
+  <name>Andrew Williams</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/34044711</link>
+  <text>NEXT! #&lt;span&gt;&lt;a href=&quot;http://identi.ca/tag/eurovision&quot; rel=&quot;tag&quot;&gt;eurovision&lt;/a&gt;&lt;/span&gt;</text>
+  <title>nikdoof: NEXT! #eurovision</title>
+  <feedurl>http://identi.ca/nikdoof</feedurl>
+  <feedtitle>nikdoof timeline</feedtitle>
+  <id>b32fd3c3e87e3ef02f674aa30df4f7d6</id>
+  <date>1275175707</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>http://a1.twimg.com/profile_images/643616246/avatar_normal.jpg</image>
+  <link>http://twitter.com/david_barr/statuses/14911039051</link>
+  <text>david_barr: Part of me is both ruing and lamenting falling over the other night, that part of me is my knee.</text>
+  <title>david_barr: Part of me is both ruing and lamenting falling over the other night, that part of me is my knee.</title>
+  <feedurl>http://twitter.com/david_barr</feedurl>
+  <feedtitle>Twitter / david_barr</feedtitle>
+  <id>7cdd110fa8229c5f107a2848235514a4</id>
+  <date>1275072670</date>
+ </item>
+ <item>
+  <name>Tim Riley</name>
+  <nick>Safari_Al</nick>
+  <image>http://a3.twimg.com/profile_images/676474399/timriley_at_beach__square__normal.png</image>
+  <link>http://twitter.com/timriley/statuses/14871548802</link>
+  <text>timriley: Thought I was splurging when I bought a copy of The Economist this morning. Little did I know I would get an iPad just two hours later.</text>
+  <title>timriley: Thought I was splurging when I bought a copy of The Economist this morning. Little did I know I would get an iPad just two hours later.</title>
+  <feedurl>http://twitter.com/timriley</feedurl>
+  <feedtitle>Twitter / timriley</feedtitle>
+  <id>f8d38f495d1ce37cffe6cadf7e88cf58</id>
+  <date>1275022860</date>
+ </item>
+ <item>
+  <name>Tim Riley</name>
+  <nick>Safari_Al</nick>
+  <image>http://a3.twimg.com/profile_images/676474399/timriley_at_beach__square__normal.png</image>
+  <link>http://twitter.com/timriley/statuses/14738179254</link>
+  <text>timriley: Canberra Ruby Crew #roro meeting is on TONIGHT! See you there: http://bit.ly/cWSsLY</text>
+  <title>timriley: Canberra Ruby Crew #roro meeting is on TONIGHT! See you there: http://bit.ly/cWSsLY</title>
+  <feedurl>http://twitter.com/timriley</feedurl>
+  <feedtitle>Twitter / timriley</feedtitle>
+  <id>e000a97280c13f19d8d0087df7822fa3</id>
+  <date>1274858853</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>http://a1.twimg.com/profile_images/68918690/m4r3-square_normal.png</image>
+  <link>http://twitter.com/m4re/statuses/14711283330</link>
+  <text>m4re: Off to the US vs Czech Republic football match in E. Hartford!</text>
+  <title>m4re: Off to the US vs Czech Republic football match in E. Hartford!</title>
+  <feedurl>http://twitter.com/m4re</feedurl>
+  <feedtitle>Twitter / m4re</feedtitle>
+  <id>d817917d3823611facc00ad1fb8cf125</id>
+  <date>1274828217</date>
+ </item>
+ <item>
+  <name>Michael Thung</name>
+  <nick>postlogic</nick>
+  <image>http://a1.twimg.com/profile_images/55645828/Photo_1_normal.jpg</image>
+  <link>http://twitter.com/postlogic/statuses/14691167279</link>
+  <text>postlogic: RT @vampus: når jeg leser ordene &quot;røykmonster&quot; og &quot;magisk lys&quot; om en tv-serie, føler jeg at jeg likevel ikke var helt &quot;Lost&quot; ved å ikke  ...</text>
+  <title>postlogic: RT @vampus: når jeg leser ordene &quot;røykmonster&quot; og &quot;magisk lys&quot; om en tv-serie, føler jeg at jeg likevel ikke var helt &quot;Lost&quot; ved å ikke  ...</title>
+  <feedurl>http://twitter.com/postlogic</feedurl>
+  <feedtitle>Twitter / postlogic</feedtitle>
+  <id>889da2f56509cec21caaaa66462b86ab</id>
+  <date>1274806899</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>http://a1.twimg.com/profile_images/68918690/m4r3-square_normal.png</image>
+  <link>http://twitter.com/m4re/statuses/14646032662</link>
+  <text>m4re: So it's been nearly 2 years, but we're finally getting engagement pictures done tonight. Love you!</text>
+  <title>m4re: So it's been nearly 2 years, but we're finally getting engagement pictures done tonight. Love you!</title>
+  <feedurl>http://twitter.com/m4re</feedurl>
+  <feedtitle>Twitter / m4re</feedtitle>
+  <id>be4ba161db338dbc8c62649116bc9e87</id>
+  <date>1274748063</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>http://a1.twimg.com/profile_images/68918690/m4r3-square_normal.png</image>
+  <link>http://twitter.com/m4re/statuses/14625368709</link>
+  <text>m4re: We've got one extra ticket for the USA vs Czech game in East Hartford tomorrow night, get at me.</text>
+  <title>m4re: We've got one extra ticket for the USA vs Czech game in East Hartford tomorrow night, get at me.</title>
+  <feedurl>http://twitter.com/m4re</feedurl>
+  <feedtitle>Twitter / m4re</feedtitle>
+  <id>4cfc8ac6a386dd757ae35a5758803caa</id>
+  <date>1274724606</date>
+ </item>
+ <item>
+  <name>Tim Riley</name>
+  <nick>Safari_Al</nick>
+  <image>http://a3.twimg.com/profile_images/676474399/timriley_at_beach__square__normal.png</image>
+  <link>http://twitter.com/timriley/statuses/14554685158</link>
+  <text>timriley: Signed up for @hoptoadapp and have experienced some appalling performance. Timeouts &amp; errors abound. Hope it gets better from here.</text>
+  <title>timriley: Signed up for @hoptoadapp and have experienced some appalling performance. Timeouts &amp; errors abound. Hope it gets better from here.</title>
+  <feedurl>http://twitter.com/timriley</feedurl>
+  <feedtitle>Twitter / timriley</feedtitle>
+  <id>b3e510006f70507062cf31cc7fc3aeba</id>
+  <date>1274633378</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>http://a1.twimg.com/profile_images/68918690/m4r3-square_normal.png</image>
+  <link>http://twitter.com/m4re/statuses/14507525250</link>
+  <text>m4re: Champions league final, Edogg's graduation party directly after, sweet Saturday.</text>
+  <title>m4re: Champions league final, Edogg's graduation party directly after, sweet Saturday.</title>
+  <feedurl>http://twitter.com/m4re</feedurl>
+  <feedtitle>Twitter / m4re</feedtitle>
+  <id>1b3f620d7489a7ce2a3c094547b6309e</id>
+  <date>1274565114</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>http://a1.twimg.com/profile_images/68918690/m4r3-square_normal.png</image>
+  <link>http://twitter.com/m4re/statuses/14437097598</link>
+  <text>m4re: YOU WIN, INTERNET</text>
+  <title>m4re: YOU WIN, INTERNET</title>
+  <feedurl>http://twitter.com/m4re</feedurl>
+  <feedtitle>Twitter / m4re</feedtitle>
+  <id>d2478dc1593f06729c69cdeac1328693</id>
+  <date>1274472114</date>
+ </item>
+ <item>
+  <name>Michael Thung</name>
+  <nick>postlogic</nick>
+  <image>http://a1.twimg.com/profile_images/55645828/Photo_1_normal.jpg</image>
+  <link>http://twitter.com/postlogic/statuses/14355677924</link>
+  <text>postlogic: Having fun playing Torchlight</text>
+  <title>postlogic: Having fun playing Torchlight</title>
+  <feedurl>http://twitter.com/postlogic</feedurl>
+  <feedtitle>Twitter / postlogic</feedtitle>
+  <id>f3bd6bf1e6735042c3f12d7e3b3eb879</id>
+  <date>1274370232</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>http://a3.twimg.com/profile_images/340709425/moabgotchi73_normal.png</image>
+  <link>http://twitter.com/akkakk/statuses/14302664584</link>
+  <text>akkakk: In virtualbox's New VM wizard, if you name your new VM &quot;lenny&quot; it automatically guesses you want Debian Linux. Nice!</text>
+  <title>akkakk: In virtualbox's New VM wizard, if you name your new VM &quot;lenny&quot; it automatically guesses you want Debian Linux. Nice!</title>
+  <feedurl>http://twitter.com/akkakk</feedurl>
+  <feedtitle>Twitter / akkakk</feedtitle>
+  <id>f3bbf70db2083a89e8574b96052afe54</id>
+  <date>1274299763</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>http://a3.twimg.com/profile_images/340709425/moabgotchi73_normal.png</image>
+  <link>http://twitter.com/akkakk/statuses/14254918258</link>
+  <text>akkakk: RT @anitaborg_org @ydn: Yahoo! Code Like a Girl tees are now available at the online Y! Company store.  http://bit.ly/aNxLFh #techwomen</text>
+  <title>akkakk: RT @anitaborg_org @ydn: Yahoo! Code Like a Girl tees are now available at the online Y! Company store.  http://bit.ly/aNxLFh #techwomen</title>
+  <feedurl>http://twitter.com/akkakk</feedurl>
+  <feedtitle>Twitter / akkakk</feedtitle>
+  <id>47be4f6450cc548bfe632f774a4dd5e8</id>
+  <date>1274237131</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>http://a3.twimg.com/profile_images/340709425/moabgotchi73_normal.png</image>
+  <link>http://twitter.com/akkakk/statuses/14187769710</link>
+  <text>akkakk: Just discovered marble ... very nice KDE mapping app that can cache tiles so it can even work offline.</text>
+  <title>akkakk: Just discovered marble ... very nice KDE mapping app that can cache tiles so it can even work offline.</title>
+  <feedurl>http://twitter.com/akkakk</feedurl>
+  <feedtitle>Twitter / akkakk</feedtitle>
+  <id>7d97fa607951a0586967668b0d53c1d4</id>
+  <date>1274150153</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>http://a3.twimg.com/profile_images/340709425/moabgotchi73_normal.png</image>
+  <link>http://twitter.com/akkakk/statuses/14172777338</link>
+  <text>akkakk: RT @newscientist: Pinocchio frog &amp; world's smallest species of kangaroo discovered in Papua New Guinea http://bit.ly/bFbiR0</text>
+  <title>akkakk: RT @newscientist: Pinocchio frog &amp; world's smallest species of kangaroo discovered in Papua New Guinea http://bit.ly/bFbiR0</title>
+  <feedurl>http://twitter.com/akkakk</feedurl>
+  <feedtitle>Twitter / akkakk</feedtitle>
+  <id>9eb2c6de7fd6de90a8ea53b1d569fea7</id>
+  <date>1274130565</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>http://a3.twimg.com/profile_images/340709425/moabgotchi73_normal.png</image>
+  <link>http://twitter.com/akkakk/statuses/14077184194</link>
+  <text>akkakk: Lovely view tonight of Venus and the crescent moon, with lots of earthshine.</text>
+  <title>akkakk: Lovely view tonight of Venus and the crescent moon, with lots of earthshine.</title>
+  <feedurl>http://twitter.com/akkakk</feedurl>
+  <feedtitle>Twitter / akkakk</feedtitle>
+  <id>f58f0def049fe2c677347991e94e79a5</id>
+  <date>1273997591</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>http://a3.twimg.com/profile_images/340709425/moabgotchi73_normal.png</image>
+  <link>http://twitter.com/akkakk/statuses/13893134506</link>
+  <text>akkakk: RT @EFF: Cool graphics from The New York Times on Facebook and privacy: http://eff.org/r.4kq</text>
+  <title>akkakk: RT @EFF: Cool graphics from The New York Times on Facebook and privacy: http://eff.org/r.4kq</title>
+  <feedurl>http://twitter.com/akkakk</feedurl>
+  <feedtitle>Twitter / akkakk</feedtitle>
+  <id>3702ad797ce99a7479cb3886da450636</id>
+  <date>1273737931</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>http://a1.twimg.com/profile_images/603741854/2859_78386729543_512349543_1619665_532969_n_normal.jpg</image>
+  <link>http://twitter.com/brandoncash/statuses/13568723408</link>
+  <text>brandoncash: You've just gotta love those Google Chrome guys: http://www.youtube.com/watch?v=nCgQDjiotG0</text>
+  <title>brandoncash: You've just gotta love those Google Chrome guys: http://www.youtube.com/watch?v=nCgQDjiotG0</title>
+  <feedurl>http://twitter.com/brandoncash</feedurl>
+  <feedtitle>Twitter / brandoncash</feedtitle>
+  <id>89391c89c6ac2c660dcf8e20cb2b4872</id>
+  <date>1273279587</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>http://a1.twimg.com/profile_images/603741854/2859_78386729543_512349543_1619665_532969_n_normal.jpg</image>
+  <link>http://twitter.com/brandoncash/statuses/13425000406</link>
+  <text>brandoncash: Why, yes, Google, that's exactly what I wanted! http://twitpic.com/1l8yq9</text>
+  <title>brandoncash: Why, yes, Google, that's exactly what I wanted! http://twitpic.com/1l8yq9</title>
+  <feedurl>http://twitter.com/brandoncash</feedurl>
+  <feedtitle>Twitter / brandoncash</feedtitle>
+  <id>8f2d33fa1d7a8820610211b25e91e24a</id>
+  <date>1273078953</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>http://a1.twimg.com/profile_images/603741854/2859_78386729543_512349543_1619665_532969_n_normal.jpg</image>
+  <link>http://twitter.com/brandoncash/statuses/13423012311</link>
+  <text>brandoncash: Watch.  Now.  http://www.youtube.com/watch?v=20QBe43tyVM</text>
+  <title>brandoncash: Watch.  Now.  http://www.youtube.com/watch?v=20QBe43tyVM</title>
+  <feedurl>http://twitter.com/brandoncash</feedurl>
+  <feedtitle>Twitter / brandoncash</feedtitle>
+  <id>fd6f4ff72deea4052aa013f0263bbd64</id>
+  <date>1273076436</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://identi.ca/notice/31047523</link>
+  <text>if there's one quote you should remember for today: &quot;Chuck Norris CAN touch MC Hammer!&quot;</text>
+  <title>ogmaciel: if there's one quote you should remember for today: &quot;Chuck Norris CAN touch MC Hammer!&quot;</title>
+  <feedurl>http://identi.ca/ogmaciel</feedurl>
+  <feedtitle>ogmaciel timeline</feedtitle>
+  <id>1386fb5bf4e87397b13b636aef25be63</id>
+  <date>1273015207</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://identi.ca/notice/30795637</link>
+  <text>Uploading the final batch of pictures to Picasa, completing the process of uploading 10+ years of pictures to a storage I can easily share</text>
+  <title>ogmaciel: Uploading the final batch of pictures to Picasa, completing the process of uploading 10+ years of pictures to a storage I can easily share</title>
+  <feedurl>http://identi.ca/ogmaciel</feedurl>
+  <feedtitle>ogmaciel timeline</feedtitle>
+  <id>cb4c28514c5fe207933f99b2f3018834</id>
+  <date>1272827903</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://identi.ca/notice/30527352</link>
+  <text>can't believe the @RedWings are getting their butts kicked!</text>
+  <title>ogmaciel: can't believe the @RedWings are getting their butts kicked!</title>
+  <feedurl>http://identi.ca/ogmaciel</feedurl>
+  <feedtitle>ogmaciel timeline</feedtitle>
+  <id>0c9abd848a017b15d65961fa31b4ebe6</id>
+  <date>1272605590</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://identi.ca/notice/30512456</link>
+  <text>now I really mean it</text>
+  <title>ogmaciel: now I really mean it</title>
+  <feedurl>http://identi.ca/ogmaciel</feedurl>
+  <feedtitle>ogmaciel timeline</feedtitle>
+  <id>500c90c4735d8474a7d52cb96d30689d</id>
+  <date>1272594143</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://identi.ca/notice/30511979</link>
+  <text>ok, now I really am leaving work</text>
+  <title>ogmaciel: ok, now I really am leaving work</title>
+  <feedurl>http://identi.ca/ogmaciel</feedurl>
+  <feedtitle>ogmaciel timeline</feedtitle>
+  <id>afaee6113443c80d71631195d8c94235</id>
+  <date>1272593942</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://identi.ca/notice/30507384</link>
+  <text>wish my day had been more productive</text>
+  <title>ogmaciel: wish my day had been more productive</title>
+  <feedurl>http://identi.ca/ogmaciel</feedurl>
+  <feedtitle>ogmaciel timeline</feedtitle>
+  <id>8bed727ef48c252b396b9f20a2275ed9</id>
+  <date>1272591793</date>
+ </item>
+ <item>
+  <name>Michael Thung</name>
+  <nick>postlogic</nick>
+  <image>http://a1.twimg.com/profile_images/55645828/Photo_1_normal.jpg</image>
+  <link>http://twitter.com/postlogic/statuses/12899777301</link>
+  <text>postlogic: Playing around with my brand spanking new ASUS Eee 1005PE. Finished installing Xubuntu 10.04 RC on it. Looking good! Gonna optimize now.</text>
+  <title>postlogic: Playing around with my brand spanking new ASUS Eee 1005PE. Finished installing Xubuntu 10.04 RC on it. Looking good! Gonna optimize now.</title>
+  <feedurl>http://twitter.com/postlogic</feedurl>
+  <feedtitle>Twitter / postlogic</feedtitle>
+  <id>d3e0c3947465d2958bedc684e86cec79</id>
+  <date>1272323930</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>http://a1.twimg.com/profile_images/603741854/2859_78386729543_512349543_1619665_532969_n_normal.jpg</image>
+  <link>http://twitter.com/brandoncash/statuses/12860692846</link>
+  <text>brandoncash: Teamed up with a couple other flixellers to make this little gem for #ld48 - http://bit.ly/ctqTLR No sleep for two days means lots of bugs!</text>
+  <title>brandoncash: Teamed up with a couple other flixellers to make this little gem for #ld48 - http://bit.ly/ctqTLR No sleep for two days means lots of bugs!</title>
+  <feedurl>http://twitter.com/brandoncash</feedurl>
+  <feedtitle>Twitter / brandoncash</feedtitle>
+  <id>798a764ab404df6592905d317a08b7a8</id>
+  <date>1272266088</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>http://a1.twimg.com/profile_images/603741854/2859_78386729543_512349543_1619665_532969_n_normal.jpg</image>
+  <link>http://twitter.com/brandoncash/statuses/12830009951</link>
+  <text>brandoncash: So much left to do, and only 9 and a half hours until the end of #ld48</text>
+  <title>brandoncash: So much left to do, and only 9 and a half hours until the end of #ld48</title>
+  <feedurl>http://twitter.com/brandoncash</feedurl>
+  <feedtitle>Twitter / brandoncash</feedtitle>
+  <id>e5de9f98ebf580ddd6d8329503a00b28</id>
+  <date>1272227168</date>
+ </item>
+ <item>
+  <name>Michael Thung</name>
+  <nick>postlogic</nick>
+  <image>http://a1.twimg.com/profile_images/55645828/Photo_1_normal.jpg</image>
+  <link>http://twitter.com/postlogic/statuses/12636612807</link>
+  <text>postlogic: Finally got home! Yay!</text>
+  <title>postlogic: Finally got home! Yay!</title>
+  <feedurl>http://twitter.com/postlogic</feedurl>
+  <feedtitle>Twitter / postlogic</feedtitle>
+  <id>8aac2f929dc42244858b3c6c9a2a4c01</id>
+  <date>1271954785</date>
+ </item>
+ <item>
+  <name>Michael Thung</name>
+  <nick>postlogic</nick>
+  <image>http://a1.twimg.com/profile_images/55645828/Photo_1_normal.jpg</image>
+  <link>http://twitter.com/postlogic/statuses/12565305187</link>
+  <text>postlogic: Got tickets for a flight home tonight. Arrived in Amsterdam after close to 25 hours of travelling. Now we're at a shitty, cheap hotel.</text>
+  <title>postlogic: Got tickets for a flight home tonight. Arrived in Amsterdam after close to 25 hours of travelling. Now we're at a shitty, cheap hotel.</title>
+  <feedurl>http://twitter.com/postlogic</feedurl>
+  <feedtitle>Twitter / postlogic</feedtitle>
+  <id>a667db3f546a061b89b9819833b75299</id>
+  <date>1271852136</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/16020136</link>
+  <text>Keeping groups clear of Spam accounts is time consuming :(</text>
+  <title>moparx: Keeping groups clear of Spam accounts is time consuming :(</title>
+  <feedurl>http://identi.ca/moparx</feedurl>
+  <feedtitle>moparx timeline</feedtitle>
+  <id>632d26734776c1b0584f0f43a8935f32</id>
+  <date>1259896608</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/15752543</link>
+  <text>Acquired an Atari 1040STe and a Atari QC-1438S Monitor today. Unfortunately, the monitor doesn't seem to want to power up :(</text>
+  <title>moparx: Acquired an Atari 1040STe and a Atari QC-1438S Monitor today. Unfortunately, the monitor doesn't seem to want to power up :(</title>
+  <feedurl>http://identi.ca/moparx</feedurl>
+  <feedtitle>moparx timeline</feedtitle>
+  <id>e79a4de4646183dbea568c3151de516b</id>
+  <date>1259537345</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/15229561</link>
+  <text>I purchased the new Super Mario Bros for the Wii earlier and I am enjoying it so far. They did a pretty good job on it.</text>
+  <title>moparx: I purchased the new Super Mario Bros for the Wii earlier and I am enjoying it so far. They did a pretty good job on it.</title>
+  <feedurl>http://identi.ca/moparx</feedurl>
+  <feedtitle>moparx timeline</feedtitle>
+  <id>99b1ea0fa2d865f2480ee4455c8f332f</id>
+  <date>1258789326</date>
+ </item>
+ <item>
+  <name>Michael Ramm</name>
+  <nick></nick>
+  <image>rss/heads/templertux75.png</image>
+  <link>http://identi.ca/notice/11496569</link>
+  <text>1ManIT Post: Official Gmail Blog: Choosing a smart password &lt;a href=&quot;http://bit.ly/4rF9a0&quot; rel=&quot;external&quot;&gt;http://bit.ly/4rF9a0&lt;/a&gt;</text>
+  <title>michaelramm: 1ManIT Post: Official Gmail Blog: Choosing a smart password http://bit.ly/4rF9a0</title>
+  <feedurl>http://identi.ca/michaelramm</feedurl>
+  <feedtitle>michaelramm timeline</feedtitle>
+  <id>65aa12c3b85ddcb34decc5a9a02ae364</id>
+  <date>1254907482</date>
+ </item>
+ <item>
+  <name>Michael Ramm</name>
+  <nick></nick>
+  <image>rss/heads/templertux75.png</image>
+  <link>http://identi.ca/notice/10584349</link>
+  <text>1ManIT Post: Contra vs Duck Hunt: If Konami Developed Duck Hunt - Docking Bay 94 &lt;a href=&quot;http://bit.ly/13G3aX&quot; rel=&quot;external&quot;&gt;http://bit.ly/13G3aX&lt;/a&gt;</text>
+  <title>michaelramm: 1ManIT Post: Contra vs Duck Hunt: If Konami Developed Duck Hunt - Docking Bay 94 http://bit.ly/13G3aX</title>
+  <feedurl>http://identi.ca/michaelramm</feedurl>
+  <feedtitle>michaelramm timeline</feedtitle>
+  <id>57aa92b487ebdea38461a5e335197f0b</id>
+  <date>1253733876</date>
+ </item>
+ <item>
+  <name>Michael Ramm</name>
+  <nick></nick>
+  <image>rss/heads/templertux75.png</image>
+  <link>http://identi.ca/notice/10584337</link>
+  <text>1ManIT Post: Misdirected Spyware Infects Ohio Hospital - Business Center from PC World &lt;a href=&quot;http://bit.ly/1UePoc&quot; rel=&quot;external&quot;&gt;http://bit.ly/1UePoc&lt;/a&gt;</text>
+  <title>michaelramm: 1ManIT Post: Misdirected Spyware Infects Ohio Hospital - Business Center from PC World http://bit.ly/1UePoc</title>
+  <feedurl>http://identi.ca/michaelramm</feedurl>
+  <feedtitle>michaelramm timeline</feedtitle>
+  <id>f59307053b076cb4bcebffdcc6117022</id>
+  <date>1253733864</date>
+ </item>
+ <item>
+  <name>Michael Ramm</name>
+  <nick></nick>
+  <image>rss/heads/templertux75.png</image>
+  <link>http://identi.ca/notice/10584304</link>
+  <text>1ManIT Post: 20 Top Bookmarklets to Get the Most from Your Browser from Web.AppStorm &lt;a href=&quot;http://bit.ly/drVvE&quot; rel=&quot;external&quot;&gt;http://bit.ly/drVvE&lt;/a&gt;</text>
+  <title>michaelramm: 1ManIT Post: 20 Top Bookmarklets to Get the Most from Your Browser from Web.AppStorm http://bit.ly/drVvE</title>
+  <feedurl>http://identi.ca/michaelramm</feedurl>
+  <feedtitle>michaelramm timeline</feedtitle>
+  <id>ff3913365e77626aaf3159ccac28e393</id>
+  <date>1253733847</date>
+ </item>
+ <item>
+  <name>Michael Ramm</name>
+  <nick></nick>
+  <image>rss/heads/templertux75.png</image>
+  <link>http://identi.ca/notice/10471654</link>
+  <text>1ManIT Post: DateLine Memory Leak? &lt;a href=&quot;http://bit.ly/12E7hR&quot; rel=&quot;external&quot;&gt;http://bit.ly/12E7hR&lt;/a&gt;</text>
+  <title>michaelramm: 1ManIT Post: DateLine Memory Leak? http://bit.ly/12E7hR</title>
+  <feedurl>http://identi.ca/michaelramm</feedurl>
+  <feedtitle>michaelramm timeline</feedtitle>
+  <id>fb9fa9b9c93947bbb76c500bd7678ca2</id>
+  <date>1253582703</date>
+ </item>
+ <item>
+  <name>Michael Ramm</name>
+  <nick></nick>
+  <image>rss/heads/templertux75.png</image>
+  <link>http://identi.ca/notice/10471641</link>
+  <text>1ManIT Post: Notepod: The sketchbook for your app ideas &lt;a href=&quot;http://bit.ly/uLAtA&quot; rel=&quot;external&quot;&gt;http://bit.ly/uLAtA&lt;/a&gt;</text>
+  <title>michaelramm: 1ManIT Post: Notepod: The sketchbook for your app ideas http://bit.ly/uLAtA</title>
+  <feedurl>http://identi.ca/michaelramm</feedurl>
+  <feedtitle>michaelramm timeline</feedtitle>
+  <id>a5726fa74c674541aafaf76f5e80398a</id>
+  <date>1253582687</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/8498310</link>
+  <text>Damaged my Cowon iAudio 7 and have to buy a new one. :(</text>
+  <title>moparx: Damaged my Cowon iAudio 7 and have to buy a new one. :(</title>
+  <feedurl>http://identi.ca/moparx</feedurl>
+  <feedtitle>moparx timeline</feedtitle>
+  <id>05d01e75623179e80c3b8703eb452abe</id>
+  <date>1250813507</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/7043023</link>
+  <text>I acquired a Sun Microsystems Ultra 5 Workstation today. :)</text>
+  <title>moparx: I acquired a Sun Microsystems Ultra 5 Workstation today. :)</title>
+  <feedurl>http://identi.ca/moparx</feedurl>
+  <feedtitle>moparx timeline</feedtitle>
+  <id>9b5ed655bc9acd5a21e3de3614dadb01</id>
+  <date>1248645394</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/5361344</link>
+  <text>Acquired a Dell Optiplex SX270 for $15. Pondering what to do with is as I already have an SX260 running as a file server.</text>
+  <title>moparx: Acquired a Dell Optiplex SX270 for $15. Pondering what to do with is as I already have an SX260 running as a file server.</title>
+  <feedurl>http://identi.ca/moparx</feedurl>
+  <feedtitle>moparx timeline</feedtitle>
+  <id>6fba882b8ba3c5e9afdcad987f09d5a8</id>
+  <date>1245134180</date>
+ </item>
+ <item>
+  <name>Will Simpson</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/2273403</link>
+  <text>Love the simplicity of Crunchbang.</text>
+  <title>willsimpson: Love the simplicity of Crunchbang.</title>
+  <feedurl>http://identi.ca/willsimpson</feedurl>
+  <feedtitle>willsimpson timeline</feedtitle>
+  <id>30c466d838bb8e8a3701d9a7da9efa1a</id>
+  <date>1234508715</date>
+ </item>
+ <item>
+  <name>Will Simpson</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://identi.ca/notice/1613185</link>
+  <text>Getting ready for reading group. We are onto Upside Down Zen by Susan Murphy. She points today to a poem - &lt;a href=&quot;http://tinyurl.com/96nqo8&quot;&gt;http://tinyurl.com/96nqo8&lt;/a&gt;</text>
+  <title>willsimpson: Getting ready for reading group. We are onto Upside Down Zen by Susan Murphy. She points today to a poem - http://tinyurl.com/96nqo8</title>
+  <feedurl>http://identi.ca/willsimpson</feedurl>
+  <feedtitle>willsimpson timeline</feedtitle>
+  <id>1ed61f9eb3720a98d4c6c83168f0b8b4</id>
+  <date>1230405636</date>
+ </item>
+</feed>
diff --git a/rss/mini/index.php b/rss/mini/index.php
new file mode 120000 (symlink)
index 0000000..65e566a
--- /dev/null
@@ -0,0 +1 @@
+../xmltorss.php
\ No newline at end of file
diff --git a/rss/news/.xml b/rss/news/.xml
new file mode 100644 (file)
index 0000000..c0890e5
--- /dev/null
@@ -0,0 +1,402 @@
+<?xml version="1.0"?>
+<feed>
+ <title>Openbox News</title>
+ <link>http://openbox.org/wiki/Openbox:News</link>
+ <description>News for the Openbox window manager</description>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.11_released</link>
+  <text>&lt;p&gt;
+In case you're going to be bored this valentines day, we've made another Openbox 3.4 release, so you can spend your day with Openbox.
+  &lt;/p&gt;&lt;p&gt;
+There are a number of bug fixes in this release, and continued improvements to menu behaviour.  The coolest thing however, is changes to the the focus cycling (Alt-Tab) dialog.  It is now dynamic as windows appear/disappear while focus cycling.  We've got some more really cool changes coming up for in in the 3.5 series as well so stay tuned for those.
+  &lt;/p&gt;&lt;p&gt;
+As you may have noticed, we are also moving our web hosting to a new site, which is allowing us to use the openbox.org domain fully.  As such, the http://icculus.org/openbox site has moved to http://openbox.org since a few weeks ago.
+  &lt;/p&gt;&lt;p&gt;
+You can see the full changelog here: http://openbox.org/wiki/Openbox:Changelog
+And download the latest before it hits youre distribution here: http://openbox.org/wiki/Openbox:Download
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.11 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>da83b26064fcec5d61e13757075bbd76</id>
+  <date>1265676578</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.10_released</link>
+  <text>&lt;p&gt;
+We just can't get enough of the Openbox 3.4 series.  Today we're happy to release version Openbox 3.4.10.
+  &lt;/p&gt;&lt;p&gt;
+This is a minor bugfix + new features release, mostly focused on Openbox menu behaviours.  Here's the complete changelog:
+  &lt;/p&gt;&lt;p&gt;
+    &lt;ul&gt;
+    &lt;li&gt;Improve keyboard navigation in Openbox menus.
+    &lt;/li&gt;
+    &lt;li&gt;Add a --root option and a manpage for obxprop.
+    &lt;/li&gt;
+    &lt;li&gt;Use a negative value for submenuShowDelay and submenuHideDelay to cause an infinite delay.  This means you have to click to show a submenu, rather than just hover over it.
+    &lt;/li&gt;
+    &lt;li&gt;Improved code for submenu show/hide delay.  Added the submenuHideDelay config file option, under the &quot;menu&quot; section.
+    &lt;/li&gt;
+    &lt;li&gt;Fixed bug #4464 (Typo in openbox-gnome-session script).
+    &lt;/li&gt;
+    &lt;li&gt;Fixed bug #4436 (Focusing a window used to stop focus cycling).
+    &lt;/li&gt;
+    &lt;li&gt;Renamed obprop to obxprop due to collision with Open Babel (See bug #4419).
+    &lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/p&gt;&lt;p&gt;
+You can download the new release from here:
+http://openbox.org/wiki/Openbox:Download
+  &lt;/p&gt;&lt;p&gt;
+p.s. Happy new year !
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.10 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>86c9ac5cf2d70e5a67d213772e929965</id>
+  <date>1264877186</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.9_released</link>
+  <text>&lt;p&gt;
+I present to you all Openbox version 3.4.9.
+  &lt;/p&gt;&lt;p&gt;
+You can view all the detailed changes here:
+http://icculus.org/openbox/index.php/Openbox:Changelog#3.4.9
+and download it from here:
+http://icculus.org/openbox/index.php/Openbox:Download
+  &lt;/p&gt;&lt;p&gt;
+This release is expected to be the last of the 3.4 series, with some forward-looking changes coming in future releases.
+  &lt;/p&gt;&lt;p&gt;
+We've improved interoperability with gnome-session so that GNOME/Openbox should work correcly &quot;out of the box&quot; on newer distributions again.
+  &lt;/p&gt;&lt;p&gt;
+I got a second monitor, and so ended up spending a lot of time improving behaviour for multi-monitor setups.  This culminated in the primaryMonitor option in the rc.xml config file.  This option dictates where Openbox will show popups such as the one for cycling windows with Alt-Tab.
+  &lt;/p&gt;&lt;p&gt;
+We've added _OB_ROLE, _OB_NAME, and _OB_CLASS hints on all windows, to help with making application rules in the rc.xml.  Also, we've added a new &quot;obprop&quot; command to help you read these properties off of a window.
+  &lt;/p&gt;&lt;p&gt;
+And lastly, Openbox menus should be a little more friendly now, as submenus do not hide immediately anymore, allowing you to skip across items in a menu in order to reach the submenu.
+  &lt;/p&gt;&lt;p&gt;
+Thank you to all the users who gave feedback in bug reports and tested things.  You all helped a lot in making this release.
+  &lt;/p&gt;&lt;p&gt;
+Happy holidays, and happy Openboxing.
+  &lt;/p&gt;&lt;p&gt;
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.9 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>2250d410274e8de1726935a6b94b2294</id>
+  <date>1261171290</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.8_released</link>
+  <text>&lt;p&gt;
+It's been a while but we're pleased to announce a new Openbox release.
+  &lt;/p&gt;&lt;p&gt;
+You can view all the detailed changes here:
+http://icculus.org/openbox/index.php/Openbox:Changelog#3.4.8
+and download it from here:
+http://icculus.org/openbox/index.php/Openbox:Download
+  &lt;/p&gt;&lt;p&gt;
+Largely this release fixes bugs reported by users, especially in terms of focusing new windows, or through the _NET_ACTIVE_WINDOW message used by pagers/panels etc.
+  &lt;/p&gt;&lt;p&gt;
+GNOME/Openbox (aka openbox-gnome-session) should work out of the box again, with newer versions (&gt; 2.22) of GNOME.
+  &lt;/p&gt;&lt;p&gt;
+Many translations have been updated, and three new translations are now included: Danish, Turkish, and Lithuanian.  (Thank you, translators!)
+  &lt;/p&gt;&lt;p&gt;
+Google Chrome will now work correctly when you toggle it between using system borders or its own.
+  &lt;/p&gt;&lt;p&gt;
+Struts with multiple monitors should work better now.  More changes will come, pending some discussion in the wm-spec mailing list.  We're working to make struts/panels as flexible as possible with multiple monitors.
+  &lt;/p&gt;&lt;p&gt;
+We've added support for clicking through shaped windows.
+  &lt;/p&gt;&lt;p&gt;
+We no longer will try hard to prevent focus from moving while a keyboard grab is in place.  In practice this should help make fewer surprises for our users, but may cause buggy applications to track their focus incorrectly.  We're hoping that the buggy apps are in the minority by this point.
+  &lt;/p&gt;&lt;p&gt;
+And lastly, the Exit and SessionLogout actions have similar functionality, so we've decided to merge them together.  Both actions still exist but they both do the right thing based on how you are running Openbox.
+  &lt;/p&gt;&lt;p&gt;
+Cheers.
+  &lt;/p&gt;&lt;p&gt;
+  &lt;/p&gt;&lt;p&gt;
+  &lt;/p&gt;&lt;p&gt;
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.8 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>af52fa553bb5f4be63586e5ebc191bc0</id>
+  <date>1260324293</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.7.1_released</link>
+  <text>&lt;p&gt;
+After three pre-releases I made some last minute breaking and released 3.4.7, soon after which I did some last minute unbreaking and released 3.4.7.1.
+  &lt;/p&gt;&lt;p&gt;
+You can view all the detailed changes here:
+http://icculus.org/openbox/index.php/Openbox:Changelog#3.4.7.1
+and download it from here:
+http://icculus.org/openbox/index.php/Openbox:Download
+  &lt;/p&gt;&lt;p&gt;
+The change which I suspect will cause us the most trouble is that _NET_ACTIVE_WINDOW now shows the window on the current desktop, so pagers/panels should send a desktop change message first.  Probably some of them don't and people will send bug reports. Send them to the pager/panel author instead please :).
+  &lt;/p&gt;&lt;p&gt;
+Other user noticable changes include a new default window icon and prompt windows that openbox will show on syntax errors. They can also be used to ask for confirmation before exiting or running an execute action.
+  &lt;/p&gt;&lt;p&gt;
+The default menu.xml file has been updated to be a bit more sensible and hopefully includes more useful items now than before. Menus got some more theme settings too, you can now customize the look of separator lines, and the offset of submenus in the x- and y-dimension separately.
+  &lt;/p&gt;&lt;p&gt;
+On the backend side, the Vertical, SplitVertical, Horizontal and Pyramid gradients got some speed impromevents, and an icon cache was introduced to reduce memory usage. Lots of small bugs were also fixed.
+  &lt;/p&gt;&lt;p&gt;
+Have fun!
+  &lt;/p&gt;&lt;p&gt;
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.7.1 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>d6c25a5de0f71cbdde7fb1b77a79f3c1</id>
+  <date>1208460427</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.6.1_released</link>
+  <text>&lt;p&gt;
+Openbox 3.4.6.1 has been released.  This is a small bug-fix release that fixes a number of issues found in version 3.4.6.
+  &lt;/p&gt;&lt;p&gt;
+It also includes updates to the new Clearlooks theme, which improve the visual look of any openbox popup dialogs.
+  &lt;/p&gt;&lt;p&gt;
+Two small new features have found their way into this release as well:
+  &lt;/p&gt;&lt;p&gt;
+A new &lt;manageDesktops&gt; option in the menu portion of rc.xml, which allows you to enable or disable the &quot;Manage Desktops&quot; portion of the combined-client-list-menu (Middle-click on the desktop)
+  &lt;/p&gt;&lt;p&gt;
+For per-app settings, the &lt;position&gt; tag has a new attribute called &quot;force&quot;, which lets you force a window to be positioned at the given coordinates, even if it says you asked it to go somewhere else.  This gives you a way to work around buggy applications that always place themselves awkwardly without any option to do otherwise.
+  &lt;/p&gt;&lt;p&gt;
+An example of this is:
+  &lt;position force=&quot;yes&quot;&gt;
+    &lt;x&gt;-0&lt;/x&gt;
+    &lt;y&gt;0&lt;/y&gt;
+  &lt;/position&gt;
+  &lt;/p&gt;&lt;p&gt;
+The full changelog is here: http://icculus.org/openbox/index.php/Openbox:Changelog#3.4.6.1
+  &lt;/p&gt;&lt;p&gt;
+And downloads are available here: http://icculus.org/openbox/index.php/Openbox:Download#Openbox
+  &lt;/p&gt;&lt;p&gt;
+Cheers!
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.6.1 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>0813210b0f3e0a53451c9d4e7f8c0cea</id>
+  <date>1202291455</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.6_and_ObConf_2.0.3_released</link>
+  <text>&lt;p&gt;
+Openbox 3.4.6 and ObConf 2.0.3 have been released for mass consumption!
+  &lt;/p&gt;&lt;p&gt;
+This Openbox release introduces a new look!  The Clearlooks theme has been updated to match the latest GTK Clearlooks engine.  As well Openbox and ObConf are both sporting shiny new icons.
+  &lt;/p&gt;&lt;p&gt;
+Translations have been updated for both Openbox and ObConf, as well as some new ones, including:
+    &lt;ul&gt;
+    &lt;li&gt;New Basque translation for Openbox
+    &lt;/li&gt;
+    &lt;li&gt;New Norwegian translation for ObConf
+    &lt;/li&gt;
+    &lt;li&gt;New Turkish translation for ObConf
+    &lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/p&gt;&lt;p&gt;
+Also included in this Openbox release are a number of new features:
+    &lt;ul&gt;
+    &lt;li&gt;The &quot;NextWindow&quot;, &quot;PreviousWindow&quot;, and &quot;DirectionalFocus*&quot; actions have two new options: &quot;raise&quot; and &quot;bar&quot;.  The &quot;raise&quot; option will temporarily raise windows to the front of the screenas you cycle through them, and the &quot;bar&quot; option allows you to turn off the focus cycling target indicator.  These options are described in the documentation here: http://icculus.org/openbox/index.php/Help:Actions#NextWindow
+    &lt;/li&gt;
+    &lt;li&gt;A new &lt;monitor&gt; option for window placement, which gives you the option to place new windows on the active monitor, or the monitor where the mouse is, instead of on any monitor (for Xinerama/TwinView multi-monitor setups) 
+    &lt;/li&gt;
+    &lt;li&gt;New options for placing the window move/resize coordinates window in a fixed position on screen, rather than relative to the window being moved or resized 
+    &lt;/li&gt;
+    &lt;li&gt;Application windows which support the appropriate protocols will now show [Not Responding] in their titlebars when the application has frozen up.  By closing the window while the [Not Responding] message is visible, Openbox will kill the window's process, allowing you to kill frozen applications without dropping to the command line.  If the window still won't close after the first try, a further close attempt will use kill -9.
+    &lt;/li&gt;
+    &lt;li&gt;We added a new &lt;wmclass&gt; option for the execute action's startup-notification. This lets you tell Openbox that the application will map a window with the specified class - for applications that do not support startup-notification natively. This new option is desribed in the documentation here: http://icculus.org/openbox/index.php/Help:Actions#Startup_notification
+    &lt;/li&gt;
+    &lt;li&gt;A new --config-file command line option, which can be used to load an alternate configuration file.  ObConf 2.0.3 will automatically open the same configuration file.
+    &lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/p&gt;&lt;p&gt;
+For Openbox 3.4.6, we have also made a large number of usability improvements under the hood, especially for Xinerama/TwinView desktops, and fixed a number of bugs.
+  &lt;/p&gt;&lt;p&gt;
+The ObConf 2.0.3 release has a whole new look, with the tabs moved over to the side of the window.  This release adds support for all of the latest features introduced in Openbox 3.4.4, 3.4.5, and 3.4.6.
+  &lt;/p&gt;&lt;p&gt;
+Full changelogs can be found here:
+  &lt;/p&gt;&lt;p&gt;
+Openbox - http://icculus.org/openbox/index.php/Openbox:Changelog#3.4.6
+  &lt;/p&gt;&lt;p&gt;
+ObConf - http://icculus.org/openbox/index.php/ObConf:Changelog#2.0.3
+  &lt;/p&gt;&lt;p&gt;
+Downloads are available from the website:
+http://icculus.org/openbox/index.php/Openbox:Download
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.6 and ObConf 2.0.3 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>307867e2501a205d27519ed5a6832d4e</id>
+  <date>1201992798</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.5_released</link>
+  <text>&lt;p&gt;
+Openbox 3.4.5 released.
+  &lt;/p&gt;&lt;p&gt;
+This release fixes some very minor memory leaks, updates Finnish, Russian, German and French translations, adds a new Hungarian translation, fixes a crash when trying to access the More... menu of client-list-combined-menu and some minor bug fixes.
+  &lt;/p&gt;&lt;p&gt;
+Downloads are available from the website: http://icculus.org/openbox/index.php/Openbox:Download
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.5 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>75b85edda71dd4c5525c7145a1f91ec5</id>
+  <date>1199650413</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.4_released</link>
+  <text>&lt;p&gt;
+Openbox 3.4.4 is ready for action.
+  &lt;/p&gt;&lt;p&gt;
+This release largely focuses on bug-fixes, with a few brand new things:
+    &lt;ul&gt;
+    &lt;li&gt;The vertical and horizontal padding sizes can now be specified independently in themes (See http://icculus.org/openbox/index.php/Help:Themes#window.client.padding.height)
+    &lt;/li&gt;
+    &lt;li&gt;A notification is now displayed when you switch desktops, similar to the old desktop switching dialog.  You can configure how long it appears for, or turn it off if you want.  This option will be presented in the next ObConf release.
+    &lt;/li&gt;
+    &lt;li&gt;New focus stealing prevention that doesn't suck.  It seemed like it couldn't be done, but now focus stealing prevention should only trigger if you are actually, actively, working in another window.
+    &lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/p&gt;&lt;p&gt;
+On top of these, a large number of bug fixes and usability improvements have been added.  You can read the full changelog here: http://icculus.org/openbox/index.php/Openbox:Changelog#3.4.4
+  &lt;/p&gt;&lt;p&gt;
+Downloads are available from the website: http://icculus.org/openbox/index.php/Openbox:Download
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.4 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>3589daf418eb855aaf3d828d50eaeb3f</id>
+  <date>1186280080</date>
+ </item>
+ <item>
+  <name></name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://openbox.org/wiki/Openbox:News#Openbox_3.4.3_and_ObConf_2.0.2_released</link>
+  <text>&lt;p&gt;
+Introducing the one and only fantabulous Openbox 3.4.3!
+  &lt;/p&gt;&lt;p&gt;
+It's been just over a month since 3.4.2 was released, and we have a whole lot of new things for you all.
+  &lt;/p&gt;&lt;p&gt;
+The full changelog is available on the website, here: http://openbox.org/index.php/Openbox:Changelog#3.4.3
+  &lt;/p&gt;&lt;p&gt;
+It's a little bit long so we'll highlight some of the important stuff.  This might get long too.
+  &lt;/p&gt;&lt;p&gt;
+First off, Openbox has now been translated to Ukrainian.  We now have Openbox available in 24 different languages/localizations!
+  &lt;/p&gt;&lt;p&gt;
+New actions for what we're calling &quot;dynamic desktops&quot;.  These actions let you add and remove desktops with actions.  What's especially new and interesting is the ability to insert and remove desktops in the middle instead of only at the end.  So if you want a new Desktop 2, you can just insert one, and all your other desktops will shuffle down one. These actions are AddDesktopLast, RemoveDesktopLast, AddDesktopCurrent, RemoveDesktopCurrent.  They are all listed on the website: http://openbox.org/index.php/Help:Actions
+  &lt;/p&gt;&lt;p&gt;
+The client list menus (Middle click on the desktop background) have new entries for adding and removing desktops.
+  &lt;/p&gt;&lt;p&gt;
+Smart window placement now comes with a &quot;center&quot; option, to have it center windows when it is placing them, rather than putting them in the top left corner.  ObConf 2.0.2 will let you change this option.
+  &lt;/p&gt;&lt;p&gt;
+The new MoveResizeTo action.  This action lets you move or resize a window, and is very Xinerama-aware.  You can use it to move a window to any specific monitor.  As well, you can use it to move a window to any edge of any monitor!  See the documentation for details on how to use it: http://openbox.org/index.php/Help:Actions#MoveResizeTo
+  &lt;/p&gt;&lt;p&gt;
+Windows will no longer be focused when they raise themselves.  This was a nice idea but it caused a lot of headaches for people, so it will no longer be there.
+  &lt;/p&gt;&lt;p&gt;
+The MoveFromEdge actions have been rolled into the MoveToEdge actions, so you don't need two sets of bindings to move a window to any edge.
+  &lt;/p&gt;&lt;p&gt;
+Themes can now specify all 4 colors used for SplitVertical gradients if they wish to.  See the theme specification for details: http://openbox.org/index.php/Help:Themes#SplitVertical_gradients
+  &lt;/p&gt;&lt;p&gt;
+Openbox is now extremely clever with regard to partial struts.  This means, for instance, if you have a panal that doesn't cover the whole bottom of you screen, you will be able to fully use the areas to the sides of the panel.  This is especially important for Xinerama setups, where you have a panel that is on only one monitor.  Maximizing a window on a monitor without a panel will now work as expected - it can ignore the panel on the other monitor.
+  &lt;/p&gt;&lt;p&gt;
+The MoveToCenter action has been improved for Xinerama support, but has been obsoleted by the MoveResizeTo action which can do this and more.  It will likely be removed in a future release.
+  &lt;/p&gt;&lt;p&gt;
+A few deprecated actions have been removed:
+    &lt;ul&gt;
+    &lt;li&gt;ShowDesktop and UnshowDesktop (Use ToggleShowDesktop instead)
+    &lt;/li&gt;
+    &lt;li&gt;ResizeRelativeVert and ResizeRelativeHorz (Use ResizeRelative instead)
+    &lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/p&gt;&lt;p&gt;
+You can now drag a window between desktops.  When you are moving a window and drag it to the edge of the screen, Openbox will flip to the next desktop for you.
+  &lt;/p&gt;&lt;p&gt;
+The desktop switching dialog has been removed in this release.  Many people were confused that Openbox didn't switch desktops instantly.  We'd like to find a way to bring the dialog back, maybe in a new form, in the future.
+  &lt;/p&gt;&lt;p&gt;
+The DirectionalFocus actions have been changed.  You can now make intereactive actions that don't use a modifier key.  So if you used these actions in a non-interactive way, they will no longer behave as they used to.  The DirectionalTarget actions have been added which let you move focus in the same fashion, but non-interactively (i.e. it moves as soon as you run the action).
+  &lt;/p&gt;&lt;p&gt;
+The NextWindow, PreviousWindow, DirectionalFocus and DirectionalTarget actions can now be customized if you don't like their default behavior.  By default, these actions will Focus, Raise, and Unshade the window you select with them.  Now, you can use the &lt;finalactions&gt; option to specify which actions you'd like to perform.  You can add more actions that the default 3 if you'd like to, or maybe just not have the window raise anymore.  See the documentation for mroe details on how to do this: http://openbox.org/index.php/Help:Actions#NextWindow
+  &lt;/p&gt;&lt;p&gt;
+Keyboard moving has been greatly improved.  Now when moving a window with the keyboard, you can use Shift and Control to change how the window is moved:
+    &lt;ul&gt;
+    &lt;li&gt;Control-arrow will move the window by only 1 pixel at a time
+    &lt;/li&gt;
+    &lt;li&gt;Shift-arrow will jump the window to the next edge (just as the MoveToEdge actions work).
+    &lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/p&gt;&lt;p&gt;
+Keyboard resizing has also been greatly improved.  You can now resize any edge of a window instead of only the bottom/right edges:
+    &lt;ul&gt;
+    &lt;li&gt;The first arrow will choose an edge to resize (then you can grow or shrink the window on that edge)
+    &lt;/li&gt;
+    &lt;li&gt;Hitting an arrow perpendicular to your selected edge will choose a different edge to resize
+    &lt;/li&gt;
+    &lt;li&gt;Shift-arrow will grow/shrink the window to the next edge (just as GrowToEdge actions work)
+    &lt;/li&gt;
+    &lt;li&gt;Control arrow will grow/shrink the window by only 1 pixel
+    &lt;/li&gt;
+    &lt;/ul&gt;
+  &lt;/p&gt;&lt;p&gt;
+You can now specify the shortcut keys in your menus, instead of just using the first letter in the string.  Use an underscore to specify the shortcut in the label.  For example, label=&quot;XTe_rm&quot; would make 'r' the shortcut key to run XTerm in your menu.
+  &lt;/p&gt;&lt;p&gt;
+You can now specify margins in the Openbox config file.  These margins are areas of the screen which maximized windows will not cover, and where new windows will not be placed.  Use these if you want to keep a portion of your desktop background visible all the time - for instance, if you run Conky and want to always be able to see it.  ObConf 2.0.2 will let you configure these.
+  &lt;/p&gt;&lt;p&gt;
+The Execute action has changed a little.  You can now specify the command to be run with the &lt;command&gt; option.  The default bindings and menu have been changed to use this.  However, the old &lt;execute&gt; option will still work too.
+  &lt;/p&gt;&lt;p&gt;
+The Decorate and Undecorate actions have been added to compliment the ToggleDecorations action.
+  &lt;/p&gt;&lt;p&gt;
+You can now use per-app settings to place a window on any edge of the screen.  The position options take values similar to -geometry for X applications.  &quot;-n&quot; uses the far edge, &quot;+n&quot; uses the near edge, so for example &lt;position&gt;&lt;x&gt;-0&lt;/x&gt;&lt;y&gt;-0&lt;/y&gt;&lt;/position&gt; would place the window in the bottom right corner.  You can use &quot;--n&quot; and &quot;+-n&quot; to specify negative numbers.
+  &lt;/p&gt;&lt;p&gt;
+---------------------------------------
+  &lt;/p&gt;&lt;p&gt;
+Along with this release comes ObConf 2.0.2, which includes bug fixes and support for the latest features added in Openbox 3.4.3.  This release also upgrades ObConf to the Openbox 3.4.3 libraries, and you will need to upgrade in order to use ObConf with Openbox 3.4.3.
+  &lt;/p&gt;&lt;p&gt;
+The full changelog for ObConf 2.0.2 is available here: http://openbox.org/index.php/ObConf:Changelog#2.0.2
+  &lt;/p&gt;&lt;p&gt;
+---------------------------------------
+  &lt;/p&gt;&lt;p&gt;
+You can download the new Openbox and ObConf releases from the Openbox website: http://openbox.org/index.php/Openbox:Download
+  &lt;/p&gt;&lt;p&gt;
+Cheers!
+  &lt;/p&gt;</text>
+  <title>Openbox 3.4.3 and ObConf 2.0.2 released</title>
+  <feedurl>http://openbox.org/wiki/Openbox:News</feedurl>
+  <feedtitle>Openbox News</feedtitle>
+  <id>b43fcc6ddc8b501e6e9c414592736590</id>
+  <date>1185132683</date>
+ </item>
+</feed>
diff --git a/rss/news/index.php b/rss/news/index.php
new file mode 120000 (symlink)
index 0000000..65e566a
--- /dev/null
@@ -0,0 +1 @@
+../xmltorss.php
\ No newline at end of file
diff --git a/rss/planet/.xml b/rss/planet/.xml
new file mode 100644 (file)
index 0000000..4ddfe13
--- /dev/null
@@ -0,0 +1,931 @@
+<?xml version="1.0"?>
+<feed>
+ <title>Planet Openbox</title>
+ <link>http://icculus.org/openbox/discuss-planet.shtml</link>
+ <description>Blog entries from around the Openbox planet</description>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://feedproxy.google.com/~r/JournalOfAnOpenSourcee/~3/TlCYU55f4zs/</link>
+  <text>&lt;p&gt;I&amp;#8217;m the proud father of two voracious young readers! From very early on I was able to instill into my daughters the pleasure of reading books. They also happen to be girly girls, so while most kids ask for toys and video games for their birthdays, mine ask for books and clothes/shoes!&lt;/p&gt;
+&lt;p&gt;During third grade my oldest daughter happened to pick up &amp;#8220;&lt;a href=&quot;http://www.heatherdakota.com/4.html&quot;&gt;Emma&amp;#8217;s very busy week&lt;/a&gt;&amp;#8221; by &lt;strong&gt;Heather Dakota&lt;/strong&gt; from her school&amp;#8217;s library and just couldn&amp;#8217;t put it down! I believe that throughout the entire third grade she must have borrowed this book at least &lt;strong&gt;6 times&lt;/strong&gt;! As a young kid, I remember I could read some books that I really enjoyed over and over, enjoying it every single time as if I were reading it for the first time. She must have gotten this from me. &lt;img src=&quot;http://www.ogmaciel.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; /&gt; &lt;/p&gt;
+&lt;p&gt;So now with the Summer break fast approaching she has asked me to buy&lt;br /&gt;
+her own copy of the book. Again, I usually get all of my books from the public library but those I fall in love with, I just got to have them, so she must have gotten it from me too! I sat down in front of the computer and searched on &lt;strong&gt;Amazon&lt;/strong&gt;, &lt;strong&gt;Barnes and Noble&lt;/strong&gt;, &lt;strong&gt;Borders&lt;/strong&gt;, &lt;strong&gt;Books on Press&lt;/strong&gt;, etc, but just could not find a single reference or a way to buy &amp;#8220;Emma&amp;#8217;s very busy week&amp;#8221;.&lt;/p&gt;
+&lt;p&gt;So I did what everyone does when in doubt and spent some time &amp;#8216;Googling&amp;#8217; around until I came across &lt;strong&gt;Heather Dakota&lt;/strong&gt;&amp;#8217;s &lt;a href=&quot;http://www.heatherdakota.com/index.html&quot;&gt;web site&lt;/a&gt;. Feeling that I had already exhausted my options, I figured I&amp;#8217;d drop her an email and see if she could help us find a place where we could buy the book.&lt;/p&gt;
+&lt;p&gt;That same day I was pleasantly surprised to receive an email from Heather with a generous offer: she happened to have an extra copy of the book at her house and asked me if I&amp;#8217;d mind if she sent it autographed to my daughter! Better yet, she was meeting the illustrator the very next day and said she would also get it autographed!&lt;/p&gt;
+&lt;p&gt;I profusely thanked her for the offer and decided I would not break the news to my daughter and see how  she would react when she received the package in the mail.&lt;/p&gt;
+&lt;div&gt;&lt;a href=&quot;http://www.ogmaciel.com/wp-content/uploads/2010/06/dscn0262.jpg&quot;&gt;&lt;img title=&quot;&quot;Emma's very busy week&quot; book&quot; src=&quot;http://www.ogmaciel.com/wp-content/uploads/2010/06/dscn0262-300x225.jpg&quot; alt=&quot;&quot;Emma's very busy week&quot; book&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p&gt;&quot;Emma&amp;#39;s very busy week&quot; book&lt;/p&gt;&lt;/div&gt;
+&lt;p&gt;Needless to say, she was in heaven when she received the package yesterday!!! The book was promptly devoured while I took my dog to training class and she&amp;#8217;s planning to read it again today!&lt;/p&gt;
+&lt;p&gt;Thank you Heather for making my daughter&amp;#8217;s day! I thank you from the bottom of my heart and we are all looking forward to your next book!&lt;/p&gt;
+&lt;div&gt;
+&lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=TlCYU55f4zs:qeVRYA4z2VU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=TlCYU55f4zs:qeVRYA4z2VU:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?i=TlCYU55f4zs:qeVRYA4z2VU:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=TlCYU55f4zs:qeVRYA4z2VU:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=7Q72WNTAKBA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=TlCYU55f4zs:qeVRYA4z2VU:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?i=TlCYU55f4zs:qeVRYA4z2VU:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=TlCYU55f4zs:qeVRYA4z2VU:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
+&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/JournalOfAnOpenSourcee/~4/TlCYU55f4zs&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</text>
+  <title>Emma’s Very Busy Week</title>
+  <feedurl>http://www.ogmaciel.com</feedurl>
+  <feedtitle>Journal of an Open Sourcee</feedtitle>
+  <id>ead63516aeee46f552b50115be8abc82</id>
+  <date>1275678053</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://feedproxy.google.com/~r/JournalOfAnOpenSourcee/~3/3c-IyOBMG_s/</link>
+  <text>&lt;a href=&quot;http://farm2.static.flickr.com/1143/1369658074_a56ad5bad6_m_d.jpg&quot;&gt;&lt;img title=&quot;Sad Trombone&quot; src=&quot;http://farm2.static.flickr.com/1143/1369658074_a56ad5bad6_m_d.jpg&quot; alt=&quot;Sad Trombone&quot; width=&quot;240&quot; height=&quot;171&quot; /&gt;&lt;/a&gt;&lt;p&gt;Sad Trombone&lt;/p&gt;&lt;/div&gt;
+&lt;p&gt;After several weeks agonizing over how to afford a trip to attend &lt;strong&gt;GUADEC 2010&lt;/strong&gt;, I have finally arrived at the conclusion that I won&amp;#8217;t be able to make it. Due to my current financial situation and obligations as a father of two, it would be unrealistic to hop on a plane and go to this event right now for me. Unfortunately none of the organizations I approached were able to offer me any type of financial support, understandable due to today&amp;#8217;s economy issues.&lt;/p&gt;
+&lt;p&gt;I want to thank the amazing crew behind the &lt;strong&gt;GNOME Travel Committee&lt;/strong&gt; for a very generous offer and for being so patient and allowing me to take a bit of time to make my decision.&lt;/p&gt;
+&lt;p&gt;I also want to thank the &lt;strong&gt;organizers&lt;/strong&gt; for choosing my presentation and keeping me updated with the tentative schedule for the event. I&amp;#8217;m really sorry I won&amp;#8217;t be able to present it and I can only hope that someone else can fill in the vacancy.&lt;/p&gt;
+&lt;p&gt;Finally, I wish you all a wonderful event and I will be watching from the sidelines for the many amazing things that are sure to come out of GUADEC.&lt;/p&gt;
+&lt;div&gt;
+&lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=3c-IyOBMG_s:mchQdNQxwVE:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=3c-IyOBMG_s:mchQdNQxwVE:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?i=3c-IyOBMG_s:mchQdNQxwVE:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=3c-IyOBMG_s:mchQdNQxwVE:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=7Q72WNTAKBA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=3c-IyOBMG_s:mchQdNQxwVE:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?i=3c-IyOBMG_s:mchQdNQxwVE:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=3c-IyOBMG_s:mchQdNQxwVE:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;</text>
+  <title>Not Going to GUADEC 2010</title>
+  <feedurl>http://www.ogmaciel.com</feedurl>
+  <feedtitle>Journal of an Open Sourcee</feedtitle>
+  <id>e18185e58ebfb6eadb09d33063b6cffb</id>
+  <date>1275602913</date>
+ </item>
+ <item>
+  <name>K Mandla</name>
+  <nick>KMandla</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://kmandla.wordpress.com/2010/06/03/compiling-effortlessly-sort-of/</link>
+  <text>&lt;p&gt;It took me a while, but I finally ironed out my upgrade from kernel 2.6.30.7 to 2.6.34 this morning, on my &lt;a href=&quot;http://kmandla.wordpress.com/hardware#FMV-5120&quot;&gt;Pentium machine&lt;/a&gt;. Ordinarily I don&amp;#8217;t wait so long to make a jump, but things were going very well with 2.6.30.7, and since there is rarely any good reason to shift up, I let it stagnate for a while.&lt;/p&gt;
+&lt;p&gt;But fear of obsolescence is a powerful thing, and realizing I had a kernel that dated back the better part of a year made me a little queasy. I know in the back of my mind that a 14-year-old machine has little to benefit between a kernel written in September 2009 and one written a few weeks ago, but it seemed worth the effort.&lt;/p&gt;
+&lt;p&gt;Not that it was a huge effort though. Usually I roll configuration between kernels with &lt;code&gt;make oldconfig&lt;/code&gt;, but this time I started from a clean page, and pruned out all the unnecessary parts. It took me a little while to fine-tune the framebuffer and a network parts, and the sound was the last thing I needed to fix. And now it&amp;#8217;s done.&lt;/p&gt;
+&lt;p&gt;The odd part of the entire experience, and the reason why I mention it here, is that while the machine is slowly and faithfully correcting the modules I set, there&amp;#8217;s no slowdown or lag or performance hit. That&amp;#8217;s strange to me because on other hardware, for example my long-running &lt;a href=&quot;http://kmandla.wordpress.com/2009/10/02/so-long-old-friend/&quot;&gt;Inspiron&lt;/a&gt;, compiling or building a kernel more or less precluded using the machine outside of very trivial tasks.&lt;/p&gt;
+&lt;p&gt;But this Pentium barely notices. Memory use peaks around 22-29Mb (alongside all the other software I normally run) and the CPU is pegged at 100 percent of course, but I can still type at normal speed, switch windows in screen or ttys at the console, manage remote systems with ssh, etc., etc., and not notice any stutter or lapse.&lt;/p&gt;
+&lt;p&gt;I wonder why that is?&lt;/p&gt;
+&lt;p&gt;Of course, this is all moot point because it still takes 20 minutes to compile a single sound module, and most of a day and night to build an entire kernel. Praising it for not lagging while it meanders through the chore of building new software is like praising a snail for traveling in a straight line for a day. You&amp;#8217;re still frighteningly slow, and hardly covered any distance.&lt;/p&gt;
+&lt;p&gt;But it does mean that troubleshooting is a little easier, even if it takes longer. I can wait 20 minutes for a module to build, see if it works, and then go back to what I was doing without waiting or needing to switch machines.&lt;/p&gt;
+&lt;p&gt;And all that being said, if there are a large number of packages to update or if there is a particularly large program to build (such as gcc), I yank the drive and connect it over USB to &lt;a href=&quot;http://kmandla.wordpress.com/hardware#X60s&quot;&gt;the fast computer&lt;/a&gt;. That&amp;#8217;s why I bought the fast one, and I&amp;#8217;m not such a glutton for punishment that I have to build software for days and days at 120Mhz. There are limits to my fanaticism. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_twisted.gif&quot; alt=&quot;:twisted:&quot; /&gt; &lt;/p&gt;
+&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kmandla.wordpress.com/4515/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kmandla.wordpress.com/4515/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kmandla.wordpress.com/4515/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kmandla.wordpress.com/4515/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kmandla.wordpress.com/4515/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kmandla.wordpress.com/4515/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kmandla.wordpress.com/4515/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kmandla.wordpress.com/4515/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kmandla.wordpress.com/4515/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kmandla.wordpress.com/4515/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kmandla.wordpress.com&amp;blog=353512&amp;post=4515&amp;subd=kmandla&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>Compiling effortlessly … sort of</title>
+  <feedurl>http://kmandla.wordpress.com</feedurl>
+  <feedtitle>Motho ke motho ka botho</feedtitle>
+  <id>51a380a2255b6ba26b5710c4a1ae5562</id>
+  <date>1275538930</date>
+ </item>
+ <item>
+  <name>K Mandla</name>
+  <nick>KMandla</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://kmandla.wordpress.com/2010/06/02/the-code-monkey-script-project/</link>
+  <text>&lt;p&gt;&lt;a href=&quot;https://wiki.ubuntu.com/tom.swartz07&quot; target=&quot;_blank&quot;&gt;Tom Swartz&lt;/a&gt; is heading up a small project called Code Monkey, which collects useful scripts into a package. As it stands there are about 10 small scripts in Code Monkey, ranging from bash one-liners, to python scripts that inject Google Reader subscriptions into conky, to a world sunlight map wallpaper fetcher. &lt;/p&gt;
+&lt;p&gt;The scripts aren&amp;#8217;t necessarily intended for command-line only use, although one or two, like the rsync backup script, could run either in a terminal emulator or completely free of a graphical environment.&lt;/p&gt;
+&lt;p&gt;Tom is looking for suggestions or ideas, and if you have one you&amp;#8217;d like to submit (or if you just want to see what he has collected already), you could contact him through the &lt;a href=&quot;https://edge.launchpad.net/codemonkey/&quot; target=&quot;_blank&quot;&gt;Launchpad page for Code Monkey&lt;/a&gt;, or probably catch his eye with a post to &lt;a href=&quot;http://ubuntuforums.org/showthread.php?t=1499303&quot; target=&quot;_blank&quot;&gt;this thread&lt;/a&gt; in the Ubuntu Forums.&lt;/p&gt;
+&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kmandla.wordpress.com/4512/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kmandla.wordpress.com/4512/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kmandla.wordpress.com/4512/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kmandla.wordpress.com/4512/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kmandla.wordpress.com/4512/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kmandla.wordpress.com/4512/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kmandla.wordpress.com/4512/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kmandla.wordpress.com/4512/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kmandla.wordpress.com/4512/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kmandla.wordpress.com/4512/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kmandla.wordpress.com&amp;blog=353512&amp;post=4512&amp;subd=kmandla&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>The Code Monkey script project</title>
+  <feedurl>http://kmandla.wordpress.com</feedurl>
+  <feedtitle>Motho ke motho ka botho</feedtitle>
+  <id>a7b9cf2e6542961b1edf1068d411c8d8</id>
+  <date>1275459431</date>
+ </item>
+ <item>
+  <name>K Mandla</name>
+  <nick>KMandla</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://kmandla.wordpress.com/2010/06/01/three-floppy-based-distros/</link>
+  <text>&lt;p&gt;This might sound strange, but I generally don&amp;#8217;t endorse the floppy distros that are still available here and there on the Internet, and as a general rule, still work fine. I don&amp;#8217;t hold any prejudice toward them, but I find that they&amp;#8217;re out of date, intended for specific hardware arrangements, or just a bit too &amp;#8230; personalized. &lt;/p&gt;
+&lt;p&gt;I can vouch for two or three as possibilities though, if you&amp;#8217;re working with hardware that is terrifically old, or extremely underpowered. Usually these are offered as solutions to machines with very, very little memory (4Mb or 8Mb) , and if that&amp;#8217;s the case they will probably be lifesavers. &lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://www.micheleandreoli.it/mulinux/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;muLinux&lt;/strong&gt;&lt;/a&gt; is mentioned quite often as a possibility for older machines, and actually, if you have a working CD drive, this might be a better solution for you.&lt;/p&gt;
+&lt;p&gt;I had to use the ISO version of muLinux 14.0 because the installer scripts packaged in the floppy version wouldn&amp;#8217;t run for me on an Arch-based system. The ISO version was no disappointment though, and technically you&amp;#8217;ll probably get more in that 68Mb than you would from floppy after floppy. &lt;/p&gt;
+&lt;p&gt;muLinux has several versions with an array of add-ons that will get you closer to what you want the machine to do. Everything is text-driven from the startup, but there is support for an early graphical desktop, and the console system has a lot of software that you&amp;#8217;ll probably find useful. Once it&amp;#8217;s up and running, it can clone itself to a hard drive, and if you cross your fingers, it will boot up into a native system.&lt;/p&gt;
+&lt;p&gt;It&amp;#8217;s still rather old though, with the 2.0.36 kernel and gcc 2.7.2.1. If you install it you might have some luck bringing everything up to current, but that might be a huge, uphill task.&lt;/p&gt;
+&lt;p&gt;For a strictly floppy-based distro, &lt;a href=&quot;http://www.volny.cz/basiclinux/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;BasicLinux&lt;/strong&gt;&lt;/a&gt; is a good example. One floppy boots the system, and the other is a compressed file tree. Memory use is trivial, with only about 4Mb or so taken up. &lt;/p&gt;
+&lt;p&gt;Amazingly this also has a graphical desktop that will give you JWM and a few utilities, to include (of all things) a slideshow presentation tool (works great on &lt;a href=&quot;http://kmandla.wordpress.com/hardware#FMV-5120&quot;&gt;this machine&lt;/a&gt;, too). So if you really want to score some geek points, you can boot this up on the dual-core laptop in your office, and give the budget report on the overhead projector with BasicLinux. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_eek.gif&quot; alt=&quot;:shock:&quot; /&gt; &lt;/p&gt;
+&lt;p&gt;It&amp;#8217;s still quite a bit out of date though, so it&amp;#8217;s usefulness beyond budget meetings, troubleshooting or data recovery is shaky &amp;#8230; and considering that much has changed in file systems and hardware, a 2.2.26 kernel might not be able to get to that hard drive like you want. &lt;/p&gt;
+&lt;p&gt;On the other hand, this one has strong PCMCIA support, so if you&amp;#8217;re riding the information wave on an old NE2000 network card, like I am, then this will be great for checking e-mail or looking up technical specifications.&lt;/p&gt;
+&lt;p&gt;Probably the one floppy distro that I would consider keeping around is &lt;a href=&quot;http://blueflops.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;blueflops&lt;/strong&gt;&lt;/a&gt;, and it&amp;#8217;s for that same reason &amp;#8212; hardware support. Another two-floppy adventure, this one lists quite a few network cards as options, particularly for desktops. And since blueflops has the 2.6.18-ck1 kernel, I would almost consider using that as a jumping-off point for upgrading to a current kernel. Almost.&lt;/p&gt;
+&lt;p&gt;blueflops says it will run on an i386 with 8Mb and swap, and I&amp;#8217;ve tried it on machines with only 16Mb and gotten fair results. The software list isn&amp;#8217;t as long as some of the others, but it will probably get you online and from there, you can decide on your direction. &lt;/p&gt;
+&lt;p&gt;For my own part, I have had much better luck getting older machines running with customized, transplanted systems built with newer software, than by bending someone else&amp;#8217;s floppy-based system to my will. There&amp;#8217;s no reason not to try these things though, since it could possibly be what keeps a machine out of a landfill. And hey, maybe a current, up-to-date floppy-based distro can be my next project. &amp;#8230; &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_rolleyes.gif&quot; alt=&quot;:roll:&quot; /&gt; &lt;/p&gt;
+&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kmandla.wordpress.com/4510/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kmandla.wordpress.com/4510/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kmandla.wordpress.com/4510/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kmandla.wordpress.com/4510/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kmandla.wordpress.com/4510/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kmandla.wordpress.com/4510/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kmandla.wordpress.com/4510/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kmandla.wordpress.com/4510/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kmandla.wordpress.com/4510/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kmandla.wordpress.com/4510/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kmandla.wordpress.com&amp;blog=353512&amp;post=4510&amp;subd=kmandla&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>Three floppy-based distros</title>
+  <feedurl>http://kmandla.wordpress.com</feedurl>
+  <feedtitle>Motho ke motho ka botho</feedtitle>
+  <id>cc6e7e1855d5968397e3c53b68ef5b99</id>
+  <date>1275361430</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://shallowsky.com/blog/writing/kdenlive2.html</link>
+  <text>I've been so busy with
+&lt;a href=&quot;http://www.libregraphicsmeeting.org/2010/&quot;&gt;Libre Graphics
+Meeting&lt;/a&gt; -- a whirlwind of GIMP caucuses, open source graphics,
+free art and sharing of ideas --
+that I forgot to notice that part 2 of my kdenlive
+article was up on Linux Planet.
+&lt;p&gt;
+&lt;a href=&quot;http://www.linuxplanet.com/linuxplanet/tutorials/7079/1/&quot;&gt;Making
+Movies in Linux with Kdenlive, part 2: Spice up Those Kdenlive Videos&lt;/a&gt;.</text>
+  <title>Kdenlive part 2: adding transitions, sounds and titles to your movies</title>
+  <feedurl>http://shallowsky.com/blog</feedurl>
+  <feedtitle>Shallow Thoughts</feedtitle>
+  <id>d10c23329fa7ab4a5cd38d0421c0dd7d</id>
+  <date>1275230700</date>
+ </item>
+ <item>
+  <name>Og Maciel</name>
+  <nick>OgMaciel</nick>
+  <image>rss/heads/ogmaciel.png</image>
+  <link>http://feedproxy.google.com/~r/JournalOfAnOpenSourcee/~3/qh_V0J3GBRM/</link>
+  <text>&lt;p&gt;&lt;img title=&quot;Week in Review&quot; src=&quot;http://bit.ly/DogReview&quot; alt=&quot;Week in Review&quot; width=&quot;286&quot; height=&quot;307&quot; /&gt;&lt;/p&gt;
+&lt;p&gt;Here’s what happened this week:&lt;/p&gt;
+&lt;h2&gt;&lt;a title=&quot;Permanent Link to The Maze Runner&quot; rel=&quot;bookmark&quot; href=&quot;http://www.ogmaciel.com/?p=1079&quot;&gt;The Maze Runner&lt;/a&gt;&lt;/h2&gt;
+&lt;p&gt;This past March I started a new routine to my Sunday mornings: shortly after breakfast with the kids, I flip my laptop open and start reading the &lt;a href=&quot;http://www.nytimes.com/pages/books/index.html&quot;&gt;Books&lt;/a&gt; section[...]&lt;/p&gt;
+&lt;h2&gt;&lt;a title=&quot;Permanent Link to Django Developer Kit 1.2.1&quot; rel=&quot;bookmark&quot; href=&quot;http://www.ogmaciel.com/?p=1089&quot;&gt;Django Developer Kit 1.2.1&lt;/a&gt;&lt;/h2&gt;
+&lt;p&gt;I have just released the &lt;a href=&quot;http://www.rpath.org/web/project/djangodevkit&quot;&gt;Django Developer Kit 1.2.1&lt;/a&gt; appliance to match with the release of &lt;a href=&quot;http://djangoproject.com&quot;&gt;Django&lt;/a&gt; &lt;strong&gt;1.2.1&lt;/strong&gt;! Check this &lt;a href=&quot;http://www.djangoproject.com/weblog/2010/may/24/121/&quot;&gt;page&lt;/a&gt; for[...]&lt;/p&gt;
+&lt;h2&gt;&lt;a title=&quot;Permanent Link to For The Win!&quot; rel=&quot;bookmark&quot; href=&quot;http://www.ogmaciel.com/?p=1084&quot;&gt;For The Win!&lt;/a&gt;&lt;/h2&gt;
+&lt;p&gt;Sunday I was lucky enough to have the chance of attending a book reading (well, a passage actually) by &lt;a href=&quot;http://craphound.com/&quot;&gt;Cory Doctorow&lt;/a&gt;! The event took place at &lt;a href=&quot;http://www.flyleafbooks.com/&quot;&gt;Flyleaf Books&lt;/a&gt; right here in&lt;strong&gt;Chapel Hill&lt;/strong&gt;, a charming independent book store[...]&lt;/p&gt;
+&lt;h2&gt;&lt;a title=&quot;Permanent Link to Django 1.2 E-Commerce&quot; rel=&quot;bookmark&quot; href=&quot;http://www.ogmaciel.com/?p=1092&quot;&gt;Django 1.2 E-Commerce&lt;/a&gt;&lt;/h2&gt;
+&lt;p&gt;Just received my complimentary copy of the book “&lt;a href=&quot;http://www.packtpub.com/django-1-2-e-commerce-build-powerful-applications/book?utm_source=ogmaciel.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_003454&quot;&gt;Django 1.2 E-Commerce&lt;/a&gt;” from &lt;a href=&quot;http://packtpub.com&quot;&gt;Packt Publishing&lt;/a&gt;! From the book’s overview[...]&lt;/p&gt;
+&lt;div&gt;
+&lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=qh_V0J3GBRM:tLjkbsTLkdI:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=qh_V0J3GBRM:tLjkbsTLkdI:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?i=qh_V0J3GBRM:tLjkbsTLkdI:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=qh_V0J3GBRM:tLjkbsTLkdI:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=7Q72WNTAKBA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=qh_V0J3GBRM:tLjkbsTLkdI:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?i=qh_V0J3GBRM:tLjkbsTLkdI:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?a=qh_V0J3GBRM:tLjkbsTLkdI:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/JournalOfAnOpenSourcee?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
+&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/JournalOfAnOpenSourcee/~4/qh_V0J3GBRM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</text>
+  <title>Week in Review: May 24th – May 28th, 2010</title>
+  <feedurl>http://www.ogmaciel.com</feedurl>
+  <feedtitle>Journal of an Open Sourcee</feedtitle>
+  <id>7c56749e42b8df6ff64a11d3d66ec566</id>
+  <date>1275159603</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://crunchbang.org/archives/2010/05/28/my-dad-is-a-linux-user/</link>
+  <text>&lt;p&gt;&lt;em&gt;Foreword: Thank you to everybody who commented on my previous post, &amp;#34;&lt;a href=&quot;http://crunchbang.org/archives/2010/05/23/dear-lazyweb-please-help-persuade-my-dad-to-move-to-linux/ &quot; title=&quot;Dear LazyWeb, please help persuade my dad to move to Linux&quot;&gt;Dear LazyWeb, please help persuade my dad to move to Linux&lt;/a&gt;&amp;#34; &amp;#8212; I really was not expecting so many helpful and constructive comments and I was slightly overwhelmed by the response. So, thank you to everyone who responded and helped to convince my dad to move to Linux, you rock!&lt;/em&gt;&lt;/p&gt;
+
+&lt;hr /&gt;
+
+&lt;p&gt;Yesterday, I installed &lt;a href=&quot;http://www.linuxmint.com/ &quot; title=&quot;Linux Mint&quot;&gt;Linux Mint&lt;/a&gt; on my dad&amp;#39;s laptop. With the exception of a couple of bits of poorly supported hardware, the installation went without a hitch. I think my dad was genuinely pleased with his new Linux installation and he commented that it was definitely faster than the old Windows XP installation, he added that he thought it looked fairly easy to use too.&lt;/p&gt;
+
+&lt;p&gt;Anyhow, before performing the installation, I evaluated both the latest releases of &lt;a href=&quot;http:www.ubuntu.com &quot; title=&quot;Ubuntu Linux&quot;&gt;Ubuntu&lt;/a&gt; and Linux Mint in live sessions. I used both sessions for about half a day each and I came to the conclusion that my dad would probably be more comfortable using Linux Mint. I have no real scientific evidence to support my conclusion, but I figured that because my dad had always used Windows, he would prefer Mint&amp;#39;s default set-up. Mint also had a few other things going for it:&lt;/p&gt;
+
+&lt;ul&gt;
+&lt;li&gt;&lt;p&gt;It came pre-installed with a bunch of media codecs and Flash support. I know this is only a quick install of the &amp;#34;ubuntu-restricted-extras&amp;#34; package on Ubuntu, but it was nice for me not to have to do it.&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Mint did not come with &lt;a href=&quot;http://f-spot.org/ &quot; title=&quot;F-Spot&quot;&gt;F-Spot&lt;/a&gt;, at least I am pretty sure it did not. So, it was easy to install &lt;a href=&quot;http://yorba.org/shotwell/ &quot; title=&quot;Open source photo manager for GNOME&quot;&gt;Shotwell&lt;/a&gt;. My dad takes a lot of photos and Shotwell seems like a really nice photo management application; it is quick, stylish and easy to use. I think my dad was rather impressed with it.&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;I know this is subjective, but Mint just looked more professional. The default theme and wallpaper is very stylish and it made Ubuntu look rather garish in comparison, even with its new look. Again, I know this is subjective and only a cosmetic issue, but I did not want to spend any time modifying themes, button placements and icons etcetera, so Mint won.&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;Lastly, and somewhat obviously, Linux Mint is effectively Ubuntu, but with some additional goodness, so there was no logical reason not to choose it for my dad.&lt;/p&gt;&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Regarding the two bits of poorly supported hardware, the first was my dad&amp;#39;s Microsoft LifeCam webcam. My parents use &lt;a href=&quot;http://www.skype.com/ &quot; title=&quot;Skype&quot;&gt;Skype&lt;/a&gt; to make video calls to their grandchildren, so it was important to make sure this worked. I managed to get video working with the LifeCam and Skype, but it was a fugly hack and anyway, I could not get the built-in microphone to work. So, I popped out and purchased a &lt;a href=&quot;http://www.logitech.com/en-gb/webcam_communications/webcams/devices/5865 &quot; title=&quot;Logitech C200 webcam&quot;&gt;Logitech C200 webcam&lt;/a&gt;, which worked out of the box, result. The second bit of dodgy hardware was a Lexmark printer, which I completely failed to get working. I have advised my dad on purchasing a &lt;a href=&quot;http://ur1.ca/03uj6 &quot; title=&quot;HP Deskjet D1660 Printer&quot;&gt;cheap replacement HP printer&lt;/a&gt;, which he was happy to pay for and order. I know this particular printer works out of the box, because &lt;a href=&quot;http://bobobex.org &quot; title=&quot;Her indoors&quot;&gt;bobobex&lt;/a&gt; and I ordered one for Emma so that she could print her school homework. The printer worked the instant it was attached, without any hassles.&lt;/p&gt;
+
+&lt;p&gt;To conclude this post, for my dad&amp;#39;s computer usage, which basically involves using the web, communicating via Skype and organising his digital photographs, I think my dad will be very happy with his new Linux installation, at least I hope he will. It is far &lt;em&gt;too early to tell whether or not he will actually be happy with it long-term&lt;/em&gt;, but I will post some updates, if I have anything to report.&lt;/p&gt;
+
+&lt;p&gt;P.S. On reading this post back to myself, it occurred to me that some people might read it as an &amp;#34;Ubuntu vs. Mint&amp;#34; rant. It is not meant to be, both Ubuntu and Linux Mint are really good distributions, they are not &lt;a href=&quot;http://crunchbanglinux.org &quot; title=&quot;CrunchBang Linux&quot;&gt;CrunchBang&lt;/a&gt;, but they are still great. And of course, none of the aforementioned would be anything without &lt;a href=&quot;http://www.debian.org&quot;&gt;Debian&lt;/a&gt;, but that is a whole other story, best left for a separate post. :P&lt;/p&gt;
+
+    &lt;p&gt;Tags: &lt;a href=&quot;http://crunchbang.org/tags/hardware/&quot; title=&quot;Browse all posts tagged with “hardware”&quot;&gt;hardware&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/linux/&quot; title=&quot;Browse all posts tagged with “linux”&quot;&gt;linux&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/mint/&quot; title=&quot;Browse all posts tagged with “mint”&quot;&gt;mint&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/printer/&quot; title=&quot;Browse all posts tagged with “printer”&quot;&gt;printer&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/ubuntu/&quot; title=&quot;Browse all posts tagged with “ubuntu”&quot;&gt;ubuntu&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/webcam/&quot; title=&quot;Browse all posts tagged with “webcam”&quot;&gt;webcam&lt;/a&gt;&lt;/p&gt;</text>
+  <title>My dad is a Linux user</title>
+  <feedurl>http://crunchbang.org/</feedurl>
+  <feedtitle>CrunchBang</feedtitle>
+  <id>70947615164a06c16712aa06224ca099</id>
+  <date>1275096556</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://crunchbang.org/archives/2010/05/23/dear-lazyweb-please-help-persuade-my-dad-to-move-to-linux/</link>
+  <text>&lt;p&gt;I was at my parent&amp;#39;s house last night and my dad starting moaning again about the speed of his laptop. My dad often moans about how slow his laptop has become, but just recently he has been moaning about it every time I see him. Hardware wise, there is nothing wrong with his laptop and it is quite a respectable machine. The problem is that his machine is still running the same installation of Windows XP that came installed when he purchased it, several years ago. As many of us are well aware, XP can be quite a fast OS, but after some years of use, it can become extremely slow and painful to use. So, I have offered to help backup my dad&amp;#39;s data and install Linux.&lt;/p&gt;
+
+&lt;p&gt;My dad has tentatively accepted my offer, but I am sure he is not entirely convinced that this &amp;#34;Linux&amp;#34; thing is any good; I was slightly surprised when he asked, &amp;#34;Will the internet work?&amp;#34; Also, whilst I am probably the most computer literate person my dad knows, I say that without meaning to sound big-headed, I get the feeling that my dad would be more inclined to accept advice from a PC World salesman than he would from me.&lt;/p&gt;
+
+&lt;p&gt;So, I thought some you might be able to help me to persuade my dad that installing Linux on his laptop would be a good idea. It would be great if lots of people could &lt;strong&gt;give just one example of why installing Linux will be beneficial.&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;Thank you for your assistance! :)&lt;/p&gt;
+
+&lt;p&gt;P.S. To the best of my knowledge, my dad has never used Linux on the desktop before. I will be installing a version of &lt;a href=&quot;http://www.ubuntu.com/ &quot; title=&quot;Ubuntu Linux&quot;&gt;Ubuntu&lt;/a&gt;, I will not be installing &lt;a href=&quot;http://www.crunchbanglinux.org/ &quot; title=&quot;CrunchBang Linux&quot;&gt;CrunchBang&lt;/a&gt;. I will give my dad a demonstration of Ubuntu in a live session before performing the install.&lt;/p&gt;
+
+&lt;p&gt;P.P.S. Obviously, in the interest of fairness, I would also like to know if you think that installing Linux on my dad&amp;#39;s laptop is not a good idea.&lt;/p&gt;
+
+&lt;p&gt;P.P.P.S. To the best of my knowledge, my dad does not own or use any peripheral hardware which should not work well under Linux (read iPods, iPhones etc.)&lt;/p&gt;
+
+    &lt;p&gt;Tags: &lt;a href=&quot;http://crunchbang.org/tags/linux/&quot; title=&quot;Browse all posts tagged with “linux”&quot;&gt;linux&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/ubuntu/&quot; title=&quot;Browse all posts tagged with “ubuntu”&quot;&gt;ubuntu&lt;/a&gt;&lt;/p&gt;</text>
+  <title>Dear LazyWeb, please help persuade my dad to move to Linux</title>
+  <feedurl>http://crunchbang.org/</feedurl>
+  <feedtitle>CrunchBang</feedtitle>
+  <id>ad4aaaa968adbec90d2a87476cdc5b3b</id>
+  <date>1274618702</date>
+ </item>
+ <item>
+  <name>Miklos Bacso</name>
+  <nick>miklos</nick>
+  <image>rss/heads/miklos.png</image>
+  <link>http://feedproxy.google.com/~r/memento_log/~3/iJXWMyFXQvk/google-tribute-to-pacman.html</link>
+  <text>&lt;a href=&quot;http://googleblog.blogspot.com/2010/05/celebrating-pac-mans-30th-birthday.html&quot;&gt;http://googleblog.blogspot.com/2010/05/celebrating-pac-mans-30th-birthday.html&lt;/a&gt;&lt;br /&gt;
+&lt;a href=&quot;http://news.cnet.com/8301-13772_3-20005528-52.html&quot;&gt;http://news.cnet.com/8301-13772_3-20005528-52.html&lt;/a&gt;</text>
+  <title>Google tribute to PacMan's 30th birthday</title>
+  <feedurl>http://www.miklos.ca/log</feedurl>
+  <feedtitle>Log - Miklos Bacso</feedtitle>
+  <id>fd050269d9903b65441ee752475b0257</id>
+  <date>1274487496</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://www.linuxinfusion.com/google-announces-webm-open-and-royalty-free-codec</link>
+  <text>&lt;p&gt;Google has open-sourced their VP8 video codec and announced &lt;a href=&quot;http://www.webmproject.org/&quot; title=&quot;The WebM Project&quot;&gt;The WebM Project&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;The new file format combines the VP8 video codec with Vorbis and will play within your web browser using HTML5.&lt;br /&gt;
+It is a huge win for proponents of open web standards.&lt;/p&gt;
+&lt;p&gt;Information on accessing the Git repository for the source code is readily available at:&lt;br /&gt;
+&lt;a href=&quot;http://www.webmproject.org/code/&quot;&gt;http://www.webmproject.org/code/&lt;/a&gt;&lt;/p&gt;</text>
+  <title>Google announces WebM, an open and royalty-free codec</title>
+  <feedurl>http://www.linuxinfusion.com</feedurl>
+  <feedtitle>Linux Infusion</feedtitle>
+  <id>6abdc57d11850cc66164b2f307a6fb37</id>
+  <date>1274314391</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://www.linuxinfusion.com/arch-linux-201005-snapshots-released</link>
+  <text></text>
+  <title>Arch Linux 2010.05 Snapshots Released</title>
+  <feedurl>http://www.linuxinfusion.com</feedurl>
+  <feedtitle>Linux Infusion</feedtitle>
+  <id>59519b95fd3077eeaf2330c06fd685b2</id>
+  <date>1274241714</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://shallowsky.com/blog/writing/kdenlive1.html</link>
+  <text>A couple of weeks ago, I shot a lot of short video clips with my
+digital camera at an indoor fun fly (in the intervals when I wasn't
+crashing around with the other crazy pilots).
+&lt;p&gt;
+But then ... what to do with a bunch of disconnected video clips?
+I've uploaded short clips to youtube before, but never extracted the
+good parts and edited them together. And most video editing programs
+look pretty complex.
+&lt;p&gt;
+The answer turned out to be kdenlive, which was surprisingly easy to
+use -- once I got past one initial bug. So I wrote up the details.
+Part I, covering the basics of how to get started and combine clips,
+is on Linux Planet:
+&lt;a href=&quot;http://www.linuxplanet.com/linuxplanet/tutorials/7064/1/&quot;&gt;Making
+Movies in Linux with Kdenlive&lt;/a&gt;.
+&lt;p&gt;
+Watch for part II in a couple of weeks, where I'll cover transition
+effects, music and titles.</text>
+  <title>Kdenlive -- the easy way to make movies</title>
+  <feedurl>http://shallowsky.com/blog</feedurl>
+  <feedtitle>Shallow Thoughts</feedtitle>
+  <id>d55d2d6acbcba439469fa2510ef9c589</id>
+  <date>1273818300</date>
+ </item>
+ <item>
+  <name>Miklos Bacso</name>
+  <nick>miklos</nick>
+  <image>rss/heads/miklos.png</image>
+  <link>http://feedproxy.google.com/~r/memento_log/~3/amJek5q0eY8/rona-ms-bike-tour-2010.html</link>
+  <text>Here we go again! The &lt;a href=&quot;http://www.mssociety.ca/ontario/bike_niagara.htm&quot;&gt;75km fundraising bike ride&lt;/a&gt; for &lt;a href=&quot;http://en.wikipedia.org/wiki/Multiple_sclerosis&quot;&gt;Multiple Sclerosis&lt;/a&gt; is coming up once again... Please pledge me by clicking &lt;a href=&quot;http://jui.cc/Tg&quot;&gt;here&lt;/a&gt; (or the big blue button below.) You can send your donation any time between now and August 22nd.&lt;br /&gt;&lt;br /&gt;
+&lt;a href=&quot;http://jui.cc/Tg&quot;&gt;Pledge Me Online&lt;/a&gt;</text>
+  <title>Rona MS Bike Tour 2010</title>
+  <feedurl>http://www.miklos.ca/log</feedurl>
+  <feedtitle>Log - Miklos Bacso</feedtitle>
+  <id>62c9a2bda3bb591ed04573a16779c483</id>
+  <date>1273625451</date>
+ </item>
+ <item>
+  <name>Akkana Peck</name>
+  <nick>akk</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://shallowsky.com/blog/linux/kernel/lucid-udev.html</link>
+  <text>Ubuntu's latest release, 10.04 &quot;Lucid Lynx&quot;, really seems remarkably
+solid. It boots much faster than any Ubuntu of the past three years,
+and has some other nice improvements too.
+&lt;p&gt;
+But like every release, they made some pointless random undocumented
+changes that broke stuff. The most frustrating has been getting my
+front-panel flash card reader to work under Lucid's new udev,
+so I could read SD cards from my camera and PDA.
+&lt;p&gt;
+The SD card slot shows up as &lt;i&gt;/dev/sdb&lt;/i&gt;, but unless there's a card
+plugged in at boot time, there's no &lt;i&gt;/dev/sdb1&lt;/i&gt; that you can
+actually mount.
+
+&lt;h3&gt;hal vs udisks&lt;/h3&gt;
+&lt;p&gt;
+Prior to Lucid, the &quot;approved&quot; way of creating sdb1 was to
+let &lt;i&gt;hald-addons-storage&lt;/i&gt; poll every USB device every so
+often, to see if anyone has plugged in a card and if so, check its
+partition table and create appropriate devices.
+&lt;p&gt;
+That's a lot of polling -- and in any case, hald isn't standard on
+Lucid, and even when it's installed, it sometimes runs and sometimes
+doesn't. (I haven't figured out what controls whether it decides to run).
+Hal isn't even supposed to be needed on Lucid -- it's supposed to use
+&lt;strike&gt;devicekit&lt;/strike&gt; &lt;i&gt;(renamed to)&lt;/i&gt; udisks for that.
+&lt;p&gt;
+Except I guess they couldn't quite figure out how to get udisks working
+in time, so they patched things together so that on Gnome systems, hald
+does the same old polling stuff -- and on non Gnome systems, well,
+maybe it does and maybe it doesn't. And maybe you can't read your
+camera cards. Oh well!
+
+&lt;h3&gt;udev rules&lt;/h3&gt;
+&lt;p&gt;
+But on systems prior to Lucid there was another way:
+make a udev rule to create sdb1 through sdb15 every time. I have an older
+&lt;a href=&quot;http://shallowsky.com/blog/linux/udev-cardreaders-update.html&quot;&gt;article
+on setting up udev rules for multicard readers&lt;/a&gt;, but none of my old
+udev rules worked on Lucid.
+&lt;p&gt;
+After many rounds of &lt;code&gt;udevadm info -a -p /block/sdb&lt;/code&gt; 
+and &lt;code&gt;udevadm test /block/sdb&lt;/code&gt;, &lt;code&gt;service udev restart&lt;/code&gt;, 
+and many reboots, I finally found a rule that worked.
+&lt;p&gt;
+Create a &lt;i&gt;/etc/udev/rules.d/71-multicard-reader.rules&lt;/i&gt; file
+containing the following:
+&lt;pre wrap&gt;
+# Create all devices for multicard reader:
+KERNEL==&quot;sd[b-g]&quot;, SUBSYSTEMS==&quot;usb&quot;, ATTRS{idVendor}==&quot;1d6b&quot;, ATTRS{idProduct}==&quot;0002&quot;, OPTIONS+=&quot;all_partitions,last_rule&quot;
+&lt;/pre&gt;
+&lt;p&gt;
+Replace the 1d6b and 0002 with the vendor and product of your own device,
+as determined with &lt;code&gt;udevadm info -a -p /block/sdb&lt;/code&gt; ... and
+don't be tempted to use the vendor and device ID you get from lsusb,
+because those are different.
+&lt;p&gt;
+What &lt;i&gt;didn't&lt;/i&gt; work that used to? String matches. Some of them.
+For example, this worked:
+&lt;pre wrap&gt;
+KERNEL==&quot;sd[b-g]&quot;, SUBSYSTEMS==&quot;scsi&quot;, ATTRS{model}==&quot;*SD*&quot;, NAME{all_partitions}=&quot;sdcard&quot;
+&lt;/pre&gt;
+but these didn't:
+&lt;pre wrap&gt;
+KERNEL==&quot;sd[b-g]&quot;, SUBSYSTEMS==&quot;scsi&quot;, ATTRS{model}==&quot;*SD*Reader*&quot;, NAME{all_partitions}=&quot;sd-card&quot;
+KERNEL==&quot;sd[a-g]&quot;, SUBSYSTEMS==&quot;scsi&quot;, ATTRS{model}==&quot;USB SD Reader   &quot;, NAME{all_partitions}=&quot;card-sd&quot;
+&lt;/pre&gt;
+&lt;p&gt;
+According to &lt;code&gt;udevadm info&lt;/code&gt;, the model is &quot;USB SD Reader   &quot; (three
+spaces at the end). But somehow &quot;*SD*&quot; matches this while &quot;*SD*Reader*&quot;
+and the exact string do not. Go figure.
+
+&lt;h3&gt;Numeric order&lt;/h3&gt;
+&lt;p&gt;
+I'd like to have this rule run earlier, so it runs before
+&lt;i&gt;/lib/udev/rules.d/60-persistent-storage.rules&lt;/i&gt; and could use
+OPTIONS+=&quot;last_rule&quot; to keep the persistent storage rules from firing
+(they run a lot of unnecessary external programs for each device).
+But if I rename the rule from 71-multicard-reader.rules to 59-,
+it doesn't run at all. Why? Shrug. It's not like &lt;code&gt;udevadm test&lt;/code&gt;
+will tell me.
+
+&lt;h3&gt;Other things I love (not) about the new udev&lt;/h3&gt;
+
+&lt;ul&gt;
+&lt;li&gt;I love how if you give the &lt;code&gt;udevadm info&lt;/code&gt; arguments in the wrong
+order, -p -a, it means something else and gives an error message.
+&lt;li&gt;I love how &lt;code&gt;udevadm test&lt;/code&gt; doesn't actually test the same
+rules udev will use, so it's completely unrelated to anything.
+&lt;li&gt;I love the complete lack of documentation on things like string
+matching and how the numeric order is handled.
+&lt;li&gt;I love how you can't match both the device name (a string) and
+the USB IDs in the same rule, because one is SUBSYSTEMS==&quot;scsi&quot; and the
+other is SUBSYSTEMS==&quot;usb&quot;.
+&lt;li&gt;Finally, I love how there's no longer any way to test udev rules on
+a running system -- if you want it to actually create new devices, you
+have to reboot for each new test.
+&lt;code&gt;service udev restart&lt;/code&gt; and 
+&lt;code&gt;udevadm control --reload-rules&lt;/code&gt;
+don't touch existing devices.
+Gives me that warm feeling like maybe I'm not missing out on the full
+Windows experience by using Linux.
+&lt;/ul&gt;</text>
+  <title>The new udev in Lucid</title>
+  <feedurl>http://shallowsky.com/blog</feedurl>
+  <feedtitle>Shallow Thoughts</feedtitle>
+  <id>120f9bde895ef2487724e7da93ff9e07</id>
+  <date>1273481460</date>
+ </item>
+ <item>
+  <name>Lostson</name>
+  <nick>lostson</nick>
+  <image>rss/heads/lostson.png</image>
+  <link>http://lostsonsvault.org/geek/?p=360</link>
+  <text>&lt;p&gt;&lt;a rel=&quot;lightbox&quot; href=&quot;http://lostsonsvault.org/geek/wp-content/uploads/2010/05/30604_389376473802_562743802_4220677_3874344_n.jpg&quot;&gt;&lt;img src=&quot;http://lostsonsvault.org/geek/wp-content/uploads/2010/05/30604_389376473802_562743802_4220677_3874344_n-300x225.jpg&quot; alt=&quot;skye&quot; title=&quot;skye&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
+&lt;p&gt;To my dearest daughter Skye &lt;/p&gt;
+&lt;p&gt;         You were born on Friday May 7 2010 at 1:06pm, it was a rainy day and I firmly believe that was because the angels above were crying as you depart from among their midst to join your mother and me to begin your life. Their tears of loss go along with my tears of joy as you enter my life anew.  It was a long nine months as I waited and watched your mother grow. I went to all the doctor appointments and saw all the ultrasound pictures and as time went by I became more and more anxious to see you. &lt;/p&gt;
+&lt;p&gt; You seemed to have decided that you were gonna come out early with no disregard for the fact that it was too early and your little body was just not ready to take on the world just quite yet. So we spent time with the doctors trying to keep you in the womb to give you more time to develop and be ready to hit the ground running when you got here. And wouldn&amp;#8217;t you know after all that time spent to get you the best chance of this and we get the all clear from the doc you get stubborn and won&amp;#8217;t come, ahh stubborness a trait I think you got from me, albeit probably not a good one. But alas here you are now and your life begins.&lt;/p&gt;
+&lt;p&gt;  So as your father I thought I would try and fill you in on some things that you may need to know as you grow.  You have three brothers and three sisters. All of whom have been anxious to see you as well. So far your siblings have made this family what it is,   and with the addition of you our family just got a whole lot richer.&lt;/p&gt;
+&lt;p&gt; Let me start by saying that as your father I am gonna do everything I can to make your life as rich and happy as I can.  I have visualized tea parties in my head complete with the extension of my pinky finger and I just break out into a big smile. Somehow that seems so wrong but yet so very right. I&amp;#8217;m sure it wont take you long to realize that your Dad is a pretty strange guy. My interests are wide and varied, I like to sit and watch classic movies with mom, and hopefully you soon too. I have a very strange sense of humor and often times you may not understand it and I can almost see the quizzical look on your face in my head as I write this.  I&amp;#8217;m sure your mom, siblings and grandparents will be able to tell you all kinds of stories as you grow up of the strange and stupid things I have done. And as you grow i&amp;#8217;m sure the questions about my various scars, strange sayings and other things will come up and I will fill you in the best I can. &lt;/p&gt;
+&lt;p&gt; Well lets get to life &amp;#8211; life in general is not easy never has been never will be, but I will help you with whatever I can. There is a movie I like to watch, it is called Forrest Gump, it has two of my favorite all time characters in it. One of course is Forrest Gump, he is simple man not the brightest but his outlook on life(mostly taught to him by his mother) is one of the most refreshing I have ever seen in my life. It is very basic and simple, things happen and you deal with them. Forrest ends up with quite a life, now remember Skye this is a work of fiction, but movies, books, and music are great inspirational tools albeit fictional or factual. So for me I would say keep things simple and see the bright side of life. Do the best at whatever you are doing at that moment and revel in the joy of doing whatever it is that makes you happy. Make sure I approve of it first though! &lt;/p&gt;
+&lt;p&gt; Now life is not always peaches &amp;#038; cream though, people are not always nice and things sometimes happen and life gets tough. Enter Lieutenant Dan &amp;#8211; probably my all time favorite character. LT Dan has had some trouble in his life things have not gone his way.  But at one point Lt Dan and Forrest are on a boat and facing down a hurricane that is sure to destroy everything in its path. LT Dan climbs to the crow&amp;#8217;s nest straps himself in and faces the storm head on, with gusto.  Yelling at mother nature and god to do their worst. Some people would say that LT Dan wanted to die, I however disagree LT Dan wanted the heaven&amp;#8217;s and earth to know he was there to stay no matter what they threw at him and there was no stopping him. It was a turning point in LT Dan&amp;#8217;s life.  I have taken great inspiration from LT Dan&amp;#8217;s story and is how I like to think of myself when facing problems. I would like you to do the same do not fear difficulties do not shy away from the unknown. Let the heaven&amp;#8217;s and earth know you are here and you will stomp them down and prove the universe wrong, no matter what they throw at you, and always remember that if you need an extra LT Dan to give you some help I will be here. We can strap ourselves in together and scream away and show the world what you can do.&lt;/p&gt;
+&lt;p&gt; Now I know that as a father I am not perfect and I will fail and probably fail miserably. I would like to apologize ahead of time and only say I am human and bound to make mistakes. But I am sure your mother will straighten me out as soon as she can. Your mother is good at keeping me in line, and I think she gets some enjoyment out of kicking my butt on occasion. &lt;/p&gt;
+&lt;p&gt; I&amp;#8217;m sure as the years go by we will argue and disagree on many things, what time you will be home, what boys you are gonna date, and so on and so on. No matter how bad we fight just remember my love is always forgiving and eternal. You will always be this little tiny girl laying here taking a nap as I write this. You see a father always see&amp;#8217;s his kids as those little ones who need our protection and we can be quite fierce about this especially me. Please know I don&amp;#8217;t do this out of spite or just to be mean. I love you and want the best for you I don&amp;#8217;t want to see you hurt or upset. So if I am sitting in my lay Z Boy in my boxers polishing a shotgun when you bring that first boy home for me to meet please don&amp;#8217;t be surprised. Although I am pretty sure your mom will not let me get away with that one. Although what a story to tell your kids though huh ?&lt;/p&gt;
+&lt;p&gt; It is really hard to sit down and write everything out about how the past day has felt. Watching you being born was amazing, your mother and I both in tears and emotionally spent and drained but laughing and excited to see you. The emotions run fast furious and very deep.  Our Family is large and has now gotten even larger now with the addition of you. Which only means life in itself has only gotten even better.  Your brothers and sisters and now you have given me such an apreciation for life, it is unfathomable to imagine my life without any of you. &lt;/p&gt;
+&lt;p&gt; I better wrap this up by now you are figuring out your Dad is long winded although I never talk out loud much. I hope I can be a father you can be proud of. A father you will be happy to see and spend time with. I will always love you no matter what. Its forever your place now as one of Daddy&amp;#8217;s Little Girls.&lt;/p&gt;
+&lt;p&gt; Love Dad&lt;/p&gt;</text>
+  <title>a letter to my daughter</title>
+  <feedurl>http://lostsonsvault.org/geek</feedurl>
+  <feedtitle>lostsonsvault</feedtitle>
+  <id>9dbfc1cc20d8929b94914d9e90fe7a76</id>
+  <date>1273423947</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>rss/heads/cai.png</image>
+  <link>http://blog.brandoncash.net/post/579494908</link>
+  <text>&lt;p&gt;So the Google Chrome guys put together this really awesome video…&lt;/p&gt;</text>
+  <title>So the Google Chrome guys put together this really awesome...</title>
+  <feedurl>http://blog.brandoncash.net/</feedurl>
+  <feedtitle>Brandon Cash</feedtitle>
+  <id>bdc953a514b04ae1256bb4d6d79cead1</id>
+  <date>1273278694</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>rss/heads/cai.png</image>
+  <link>http://blog.brandoncash.net/post/578787795</link>
+  <text>&lt;p&gt;I’ve made a few key updates to the &lt;a title=&quot;Sexy CSS Buttons&quot; href=&quot;http://experiments.brandoncash.net/sexybuttons/&quot;&gt;Sexy CSS Buttons&lt;/a&gt;.  Namely, I’ve added transitions for Mozilla (&lt;span&gt;-moz-transition&lt;/span&gt;, introduced in Firefox 3.7) and Opera (&lt;span&gt;-o-transition&lt;/span&gt;, introduced in Opera 10.50).  I don’t plan on updating the original post,  but I will sum up the changes here.&lt;/p&gt;
+&lt;p&gt;Instead of just having the &lt;span&gt;-webkit-transition&lt;/span&gt; block in &lt;span&gt;input[type=button], button&lt;/span&gt;, we now have three blocks:&lt;/p&gt;
+&lt;p&gt;-webkit-transition: background-color 0.2s ease-in-out,&lt;br/&gt;     color 0.2s ease-in-out,&lt;br/&gt;     -webkit-box-shadow 0.2s ease-in-out;&lt;br/&gt; -moz-transition: background-color 0.2s ease-in-out,&lt;br/&gt;     color 0.2s ease-in-out,&lt;br/&gt;     -moz-box-shadow 0.2s ease-in-out;&lt;br/&gt; -o-transition: background-color 0.2s ease-in-out,&lt;br/&gt;     color 0.2s ease-in-out,&lt;br/&gt;     box-shadow 0.2s ease-in-out;&lt;/p&gt;
+&lt;p&gt;We will also need to update the transition duration for the click state, &lt;span&gt;input[type=button]:active, button:active&lt;/span&gt;:&lt;/p&gt;
+&lt;p&gt;-webkit-transition-duration: 0.0s;&lt;br/&gt; -moz-transition-duration: 0.0s;&lt;br/&gt; -o-transition-duration: 0.0s;&lt;/p&gt;
+&lt;p&gt;And now your buttons are ready for Mozilla and Opera transitions!&lt;/p&gt;</text>
+  <title>Updates to the CSS3 buttons</title>
+  <feedurl>http://blog.brandoncash.net/</feedurl>
+  <feedtitle>Brandon Cash</feedtitle>
+  <id>10306fdf938ab509284c20ae9178f1c8</id>
+  <date>1273254420</date>
+ </item>
+ <item>
+  <name>Miklos Bacso</name>
+  <nick>miklos</nick>
+  <image>rss/heads/miklos.png</image>
+  <link>http://feedproxy.google.com/~r/memento_log/~3/RD7An4pMml4/googles-new-look.html</link>
+  <text>&lt;a href=&quot;http://googleblog.blogspot.com/2010/05/spring-metamorphosis-googles-new-look.html&quot;&gt;http://googleblog.blogspot.com/2010/05/spring-metamorphosis-googles-new-look.html&lt;/a&gt;</text>
+  <title>Google's new look</title>
+  <feedurl>http://www.miklos.ca/log</feedurl>
+  <feedtitle>Log - Miklos Bacso</feedtitle>
+  <id>6fa234e5134e10bd1cfa051a830e2450</id>
+  <date>1273130970</date>
+ </item>
+ <item>
+  <name>Brandon Cash</name>
+  <nick>cai</nick>
+  <image>rss/heads/cai.png</image>
+  <link>http://blog.brandoncash.net/post/572707821</link>
+  <text>&lt;p&gt;We’ve all seen it—you’re on a page with a really amazing design, and select some text for some reason or another.  The selected text is then styled with some default background color, clashing with the amazing design.&lt;/p&gt;
+&lt;p&gt;Naturally, there is a CSS solution.  WebKit and Opera developers can use the &lt;span&gt;::selection&lt;/span&gt; pseudo element, and Mozilla developers can use &lt;span&gt;::-moz-selection&lt;/span&gt;.  Here is an example which changes the background color of all selected elements to a very translucent white:&lt;/p&gt;
+&lt;p&gt;*::selection {&lt;br/&gt;     background-color: rgba(255, 255, 255, 0.1);&lt;br/&gt; }&lt;/p&gt;
+&lt;p&gt;No longer does your highlighted text need to clash with your design!&lt;/p&gt;</text>
+  <title>CSS Tip: Styling Selected Text</title>
+  <feedurl>http://blog.brandoncash.net/</feedurl>
+  <feedtitle>Brandon Cash</feedtitle>
+  <id>a81f75cb4ce4497040f1c2b01534f44f</id>
+  <date>1273049820</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>rss/heads/dpb.png</image>
+  <link>http://david.chalkskeletons.com/blog/?p=65</link>
+  <text>&lt;p&gt;More procrastination instead of doing what i am supposed to i did this:&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://david.chalkskeletons.com/files/pics/elob.png&quot;&gt;Screenshot&lt;/a&gt; (sort of)&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://david.chalkskeletons.com/files/themes/Dear%20Watson.tar.gz&quot;&gt;Tarball&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;It&amp;#8217;s an openbox version of the &lt;a href=&quot;http://www.elementary-project.com/&quot;&gt;Elementary theme&lt;/a&gt;&lt;/p&gt;</text>
+  <title>Elementary</title>
+  <feedurl>http://david.chalkskeletons.com/blog</feedurl>
+  <feedtitle>david.chalkskeletons.com</feedtitle>
+  <id>06b1483d1ff88cea892bffe022d3e0f0</id>
+  <date>1271192215</date>
+ </item>
+ <item>
+  <name>ghost1227</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://workshop.ghost1227.com/2010/04/isle-of-man-arch-logo/</link>
+  <text>&lt;p&gt;A new custom Arch logo based on the Isle of Man flag.&lt;/p&gt;
+&lt;p&gt;&lt;center&gt;&lt;a title=&quot;Isle of Man Arch Logo&quot; href=&quot;http://workshop.ghost1227.com/CustomArchLogos/Flags/Isle_Of_Man.png&quot; rel=&quot;lightbox[348]&quot;&gt;&lt;img title=&quot;Isle of Man Arch Logo&quot; src=&quot;http://workshop.ghost1227.com/CustomArchLogos/Flags/Isle_Of_Man.png&quot; alt=&quot;Isle of Man Arch Logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+Note: There is a rating embedded within this post, please visit this post to rate it.</text>
+  <title>Isle of Man Arch Logo</title>
+  <feedurl>http://workshop.ghost1227.com</feedurl>
+  <feedtitle>Ghost1227's Workshop</feedtitle>
+  <id>26e4f054b4439e0b7e615dcc113469b2</id>
+  <date>1270124087</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>rss/heads/m4r3.png</image>
+  <link>http://www.minuslab.net/d/?p=193</link>
+  <text>&lt;p&gt;Continuing where I &lt;a href=&quot;http://www.minuslab.net/d/?p=171&quot;&gt;left off&lt;/a&gt; with FMCrests, I had offloaded a lot of logic in the script and left it up to the base SVG to describe a lot more of itself.  I realized the same could be done in order to properly style the patterns with fills and outline colors.  I used to have to require a big list of every pattern in the script, and then by hand sort them into lists where some need fills only, some need fills and outlines, etc.  Now, the document simply tells it what it needs based on the presence of a positive stroke-width.  Reducing the script further is always the goal!&lt;/p&gt;</text>
+  <title>FMCrests: internal cleanups</title>
+  <feedurl>http://www.minuslab.net/d</feedurl>
+  <feedtitle>minusblag</feedtitle>
+  <id>af94e79ec0187a4e16ae84a6bb1517d0</id>
+  <date>1269739071</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>rss/heads/m4r3.png</image>
+  <link>http://www.minuslab.net/d/?p=187</link>
+  <text>&lt;p&gt;Earlier, when I wrote about the &lt;a href=&quot;http://www.minuslab.net/d/?p=96&quot;&gt;Sinatra staging area&lt;/a&gt; I had set up, I had mentioned a project that I had worked on there but hadn&amp;#8217;t made public yet.  That project was a precursor to the FMCrests project.  It was meant to serve a similar purpose, to provide logos for users on a site to differentiate them.  Its unofficial title is the &lt;a href=&quot;http://stage.minuslab.net/flags/&quot;&gt;Flag Combinator&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;For the upcoming &lt;a href=&quot;http://www.minuslab.net/d/?p=100&quot;&gt;World Cup pick&amp;#8217;em site&lt;/a&gt;, I wanted to have a way for the users to show their allegiances (often times more than one country), and it reminded me of the Enemy Territory days and &lt;a href=&quot;http://clanbase.ggl.com/news.php&quot;&gt;Clanbase&lt;/a&gt;&amp;#8217;s method of identifying player nationalities.  Next to every name was a stylized small flag icon, and some people got to make their own.  I thought it would be pretty neat to be able to have a service that automatically combines two flags in various ways, so after some experimenting with imagemagick, I created a few masks that can be used to combine two flags.&lt;/p&gt;
+&lt;p&gt;This was my first real project with Sinatra, and is what turned me onto the project in the first place.  This is not a world class service (and I hope it doesn&amp;#8217;t get linked around, it likely won&amp;#8217;t), but if you have a need to make a small flag icon, knock yourself out.  Here&amp;#8217;s some samples:&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-irelanditaly.png&quot;&gt;&lt;img title=&quot;flag-irelanditaly&quot; src=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-irelanditaly.png&quot; alt=&quot;&quot; width=&quot;18&quot; height=&quot;12&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-serbiajapan.png&quot;&gt;&lt;img title=&quot;flag-serbiajapan&quot; src=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-serbiajapan.png&quot; alt=&quot;&quot; width=&quot;18&quot; height=&quot;12&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-swedenestonia.png&quot;&gt;&lt;img title=&quot;flag-swedenestonia&quot; src=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-swedenestonia.png&quot; alt=&quot;&quot; width=&quot;18&quot; height=&quot;12&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-usascotland.png&quot;&gt;&lt;img title=&quot;flag-usascotland&quot; src=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/flag-usascotland.png&quot; alt=&quot;&quot; width=&quot;18&quot; height=&quot;12&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</text>
+  <title>Flag Combinator</title>
+  <feedurl>http://www.minuslab.net/d</feedurl>
+  <feedtitle>minusblag</feedtitle>
+  <id>4e5801a49b41259b9ae92c5a0a1aecfc</id>
+  <date>1269672662</date>
+ </item>
+ <item>
+  <name>Dave Foster</name>
+  <nick>m4re</nick>
+  <image>rss/heads/m4r3.png</image>
+  <link>http://www.minuslab.net/d/?p=181</link>
+  <text>&lt;p&gt;Continuing with yesterday&amp;#8217;s tools theme, today I decided to see what it would take to get &lt;a href=&quot;http://vim.wikia.com/wiki/256_colors_in_vim&quot;&gt;vim in a terminal to work with 256 colors&lt;/a&gt;.  I use gnome-terminal, and turns out it is as easy as doing in vim:&lt;/p&gt;
+&lt;pre&gt;
+set t_Co=256
+&lt;/pre&gt;
+&lt;p&gt;Nice!  Here&amp;#8217;s a shot of my terminal with the desert256 color scheme:&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/vim256.png&quot;&gt;&lt;img title=&quot;vim256&quot; src=&quot;http://www.minuslab.net/d/wp-content/uploads/2010/03/vim256-150x150.png&quot; alt=&quot;&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;I typically use gvim when writing code, but lately as I&amp;#8217;ve done more Rails stuff, I&amp;#8217;ve been using vim inside of GNU screen, with a few related screens next to each other, switching between them with F11 and F12.  This became a pretty handy setup for working with Rails apps, especially as I can do it from Windows machines using Putty.&lt;/p&gt;
+&lt;p&gt;This introduces a few more variables into the equation, Putty and screen.  Imagine my surprise when Putty Just Worked &amp;#8482; as well as gnome-terminal did!&lt;/p&gt;
+&lt;p&gt;As for screen, a recompile with the &amp;#8211;enable-colors256 configure flag specified was all it took.  I installed to my home dir on l3ib so as not to disturb the system screen, although if it works ok renamed to a different binary name like &amp;#8220;screen256&amp;#8243; i may install it to /usr/local.  Much props to &lt;a href=&quot;http://www.jukie.net/bart/blog/256-colour-xterm&quot;&gt;this blag entry&lt;/a&gt;.  His instructions make debian actually seem rather easy to use (I&amp;#8217;m not familiar with it), and the screenrc is necessary to pull things together.  I still need to put my keybinds back in, but it looks like I have a sweet setup for Rails hacking now!&lt;/p&gt;</text>
+  <title>256 Color Mode in Vim</title>
+  <feedurl>http://www.minuslab.net/d</feedurl>
+  <feedtitle>minusblag</feedtitle>
+  <id>d118678f63051934c33d2fccf03b4d17</id>
+  <date>1269590744</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>rss/heads/dpb.png</image>
+  <link>http://david.chalkskeletons.com/blog/?p=62</link>
+  <text>&lt;p&gt;To conclude my flirtation with ubuntu themes for openbox here is Ambiance:&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://david.chalkskeletons.com/files/pics/ambiance.png&quot;&gt;screenshot&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://david.chalkskeletons.com/files/themes/Ambiance.obt&quot;&gt;file&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;I&amp;#8217;m not really that in love with either of the themes, and i&amp;#8217;m not sure how well they have really work within the openbox theme system, but it&amp;#8217;s nice to have stuff that matches, right?&lt;/p&gt;</text>
+  <title>Openbox Ambiance</title>
+  <feedurl>http://david.chalkskeletons.com/blog</feedurl>
+  <feedtitle>david.chalkskeletons.com</feedtitle>
+  <id>289373de27b54ecbdfa951a0d7e87cd1</id>
+  <date>1269531169</date>
+ </item>
+ <item>
+  <name>David Barr</name>
+  <nick>mulberry</nick>
+  <image>rss/heads/dpb.png</image>
+  <link>http://david.chalkskeletons.com/blog/?p=56</link>
+  <text>&lt;p&gt;As an optimist, I assume that the reason no one really likes my &lt;a href=&quot;http://david.chalkskeletons.com/ecru/&quot;&gt;Ecru theme&lt;/a&gt; is because it uses the gtk mist engine (not that it is shit). So to remedy this I&amp;#8217;ve gone the complete other way and made a murrine engine version, and you&amp;#8217;ll need git murrine I think, as we speak.&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://david.chalkskeletons.com/files/themes/ecroob.tar.gz&quot;&gt;file&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://david.chalkskeletons.com/files/themes/ecroob.tar.gz&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://david.chalkskeletons.com/files/pics/ecroob.png&quot;&gt;screenshot&lt;/a&gt;&lt;/p&gt;</text>
+  <title>Ecroob GTK Theme</title>
+  <feedurl>http://david.chalkskeletons.com/blog</feedurl>
+  <feedtitle>david.chalkskeletons.com</feedtitle>
+  <id>14ec057cbee7ba3f579a0f6a0a8833f9</id>
+  <date>1269291888</date>
+ </item>
+ <item>
+  <name>Adam Bellinson</name>
+  <nick>thread</nick>
+  <image>rss/heads/thread.png</image>
+  <link>http://www.threadbox.net/2010/03/21/ath-esw10jpn-vs-jh13-pro/</link>
+  <text>&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/8930743@N02/3131483565/&quot;&gt;&lt;img title=&quot;ATH-ESW10JPN, RSA SR-71A, HR Ultra Micro DAC&quot; src=&quot;http://farm4.static.flickr.com/3294/3131483565_a35e8467e9_m.jpg&quot; alt=&quot;&quot; width=&quot;240&quot; height=&quot;180&quot; /&gt;&lt;/a&gt;Someone on Head-Fi asked me to compare the ESW10JPN to the JH13, so I decided to just share my thoughts with a wider audience.&lt;/p&gt;
+&lt;p&gt;The ESW10JPN, with its rich, wood cups, is a beautiful headphone. It is very light and has a grip on the head that is just right. The supraaural design does fatigue the ears eventually, but it takes a lot longer than I thought it would before I purchased. This is in part due to swivel of the cups and how I can position them to put the pressure on different parts of the ears and head throughout a session. I also like how they are easy to put on and off, and are comfortable to wear around the neck.&lt;/p&gt;
+&lt;p&gt;When I first tried the pair of my friend&amp;#8217;s, I was very struck with the &amp;#8220;energy&amp;#8221; in the mids and highs. It is a very detailed headphone with a presentation that is very pleasing for many genres. There is great, well-textured bass, but it is not the centerpiece of this sound signature. Acoustic instruments &amp;#8212; like the shimmer of strings &amp;#8212; sound very vivid and enjoyable. The isolation isn&amp;#8217;t great, so I wouldn&amp;#8217;t want to use them some place noisy. I&amp;#8217;m glad I got a pair of these limited edition headphones before the 1500 were gobbled up. I still really enjoy them.&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/8930743@N02/3747859416/&quot;&gt;&lt;img title=&quot;JH13, UE11&quot; src=&quot;http://farm4.static.flickr.com/3494/3747859416_462d0f33ae_m.jpg&quot; alt=&quot;&quot; width=&quot;240&quot; height=&quot;180&quot; /&gt;&lt;/a&gt;The JH13, by contrast, is an IEM. They have great isolation. (Though, interestingly, it&amp;#8217;s not quite as good as foam tips on universal fit IEMs.) They have a perfectly formed, custom fit for your ear canals, so their uniform pressure throughout your ear easily lets them &amp;#8220;disappear&amp;#8221;. Compared to the ease of taking the ESW10JPN on and off, a custom IEM like the JH13 is a bit more work. Once you get the hang of it, inserting and removing the JH13 is pretty fast and easy, though (only a couple seconds) but it is a bit more abrasive. And I always wipe earwax and debris from the tips before inserting. With the right fit (JHA has a great track record) and well-adjusted ears (only a few days to a week or so for new wearers) I think the JH13&amp;#8217;s are incredibly comfortable. I can wear them for many hours without issue.&lt;/p&gt;
+&lt;p&gt;The sound is simply incredible. The JH13 is still the best headphone I have and at least among the best I&amp;#8217;ve ever heard. It must be those 6 custom spec drivers working side-by-side that give me such a detailed, immersive view into the recording with soundstage that is simply astonishing for an IEM. Historically, it seems that a full-size headphone is needed for this type soundstage, but the detail of the JH13 seems to compensate for their &amp;#8220;shortcoming&amp;#8221; that they bypass the outer ear and send the sound directly into your eardrums. The first thing a new JH13 owner seems to notice is how HUGE the sound seems to be. The JH13 has some of the best extension on the top and bottom ends of any headphone. The sound signature sides on ruthlessly neutral, but with a bit of a bump in the sub-bass for low end impact that I really enjoy. The bass is massive and detailed, but it never oversteps its bounds like it does when I switch to the UE11.&lt;/p&gt;
+&lt;p&gt;When I compare the sound of the two head-to-head, there is simply no doubt that the JH13 is the clear winner. Not only does this IEM have a very neutral response curve that doesn&amp;#8217;t really favor any genre over another, but it maintains a euphonic sound with anything I throw at it! The isolation assures that you&amp;#8217;re starting with a quiet background, and the music is just so clear and beautiful. At the end of the day, I&amp;#8217;m apt to say that while the ESW10JPN excels at its strong points and can be a very enjoyable can for many things (particularly jazz and acoustic music) the JH13 just seems to perform perfectly in so many ways.&lt;/p&gt;
+&lt;p&gt;Both headphones sound great right from an MP3 player&amp;#8217;s headphone output, but they also improve with a good amp. The JH13 scales extremely well with better equipment as it seems to sap up and really deliver on exactly what it is fed.&lt;/p&gt;
+&lt;p&gt;I love my ESW10 very much&amp;#8230; I just love my JH13 more. :)&lt;/p&gt;
+&lt;p&gt;I also started a &lt;a href=&quot;http://www.head-fi.org/forums/f103/ath-esw10jpn-vs-jh13-pro-my-review-478801/&quot;&gt;thread on Head-Fi&lt;/a&gt; with this review.&lt;/p&gt;</text>
+  <title>ATH-ESW10JPN vs JH13 Pro</title>
+  <feedurl>http://www.threadbox.net</feedurl>
+  <feedtitle>Threadbox.net</feedtitle>
+  <id>a83ada77063af0d53d513ce352da7742</id>
+  <date>1269162709</date>
+ </item>
+ <item>
+  <name>ghost1227</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://workshop.ghost1227.com/2010/02/us-military-arch-logos/</link>
+  <text>&lt;p&gt;For those of you that don&amp;#8217;t know, I spent a good few years in the Marines. As such, I thought it was high time I put together a set of logos dedicated to the Armed Forces of the United States (if anyone served in the military of another country I am more than happy to do the same for you). Enjoy!&lt;br /&gt;
+&lt;a href=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/Army.png&quot; title=&quot;US Army Arch Logo&quot; rel=&quot;lightbox[329]&quot;&gt;&lt;img title=&quot;US Army Arch Logo&quot; src=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/Army.png&quot; alt=&quot;&quot; width=&quot;215&quot; height=&quot;215&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/Navy.png&quot; title=&quot;US Navy Arch Logo&quot; rel=&quot;lightbox[329]&quot;&gt;&lt;img title=&quot;US Navy Arch Logo&quot; src=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/Navy.png&quot; alt=&quot;&quot; width=&quot;215&quot; height=&quot;215&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
+&lt;a href=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/AirForce.png&quot; title=&quot;US Air Force Arch Logo&quot; rel=&quot;lightbox[329]&quot;&gt;&lt;img title=&quot;US Air Force Arch Logo&quot; src=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/AirForce.png&quot; alt=&quot;&quot; width=&quot;215&quot; height=&quot;215&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/USMC.png&quot; title=&quot;US Marines Arch Logo&quot; rel=&quot;lightbox[329]&quot;&gt;&lt;img title=&quot;US Marines Arch Logo&quot; src=&quot;http://workshop.ghost1227.com/CustomArchLogos/Military/USMC.png&quot; alt=&quot;&quot; width=&quot;215&quot; height=&quot;215&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</text>
+  <title>US Military Arch Logos</title>
+  <feedurl>http://workshop.ghost1227.com</feedurl>
+  <feedtitle>Ghost1227's Workshop</feedtitle>
+  <id>872d37722cf446c0012ea7333f8c62cf</id>
+  <date>1266675749</date>
+ </item>
+ <item>
+  <name>Philip Newborough</name>
+  <nick></nick>
+  <image>rss/heads/philip.png</image>
+  <link>http://crunchbang.org/archives/2010/02/20/debian-and-ubuntu-on-my-acer-aspire-one-d150/</link>
+  <text>&lt;p&gt;A few weeks ago, I won an &lt;a href=&quot;http://www.acer.com/aspireone/style.html &quot; title=&quot;Acer Aspire One D150&quot;&gt;Acer Aspire One D150&lt;/a&gt; on Ebay. For anyone not in the know, it is a netbook with a 10.1 inch screen. Apparently, the machine was an unwanted Christmas present and the owner had not used it very much, if at all. The machine was listed on Ebay with a relatively low starting price and it attracted very little attention. I ended up winning the machine for £155, which was a bit of a steal. In fact, I felt kind of guilty for winning it at that price and so I sent an email to the owner asking him if he would like to relist it. He replied saying that he was fine with the result of the auction, but I could tell his reply was written with gritted teeth.&lt;/p&gt;
+
+&lt;p&gt;Anyhow, I should get to the purpose of this post; as far as I am aware, the Acer Aspire One D150 is currently only available to purchase with Windows XP pre-installed, there is not a Linux version available, at least I have not been able to find one. So, if anyone is wondering whether or not &lt;a href=&quot;http://www.debian.org &quot; title=&quot;Debian, the universal operating system.&quot;&gt;Debian&lt;/a&gt; or &lt;a href=&quot;http://www.ubuntu.com &quot; title=&quot;Linux for human beings.&quot;&gt;Ubuntu&lt;/a&gt; work on these machines, I can confirm that they do, and very nicely too. I am currently running Debian Squeeze on my machine and everything works just fine, I cannot recall having a single issue with it. I have also tried the latest Ubuntu Lucid alpha release and that also works swimmingly.&lt;/p&gt;
+
+&lt;p&gt;As for the machine itself, I am not going to attempt to write any type of review, but I will say that for the price, it is a great bit of kit and it is perfectly usable as a day to day system. Having said that, I actually wanted this machine to act as a cheap replacement for an existing power-hungry home server, a role which I think it will serve quite well.&lt;/p&gt;
+
+    &lt;p&gt;Tags: &lt;a href=&quot;http://crunchbang.org/tags/debian/&quot; title=&quot;Browse all posts tagged with “debian”&quot;&gt;debian&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/hardware/&quot; title=&quot;Browse all posts tagged with “hardware”&quot;&gt;hardware&lt;/a&gt;, &lt;a href=&quot;http://crunchbang.org/tags/ubuntu/&quot; title=&quot;Browse all posts tagged with “ubuntu”&quot;&gt;ubuntu&lt;/a&gt;&lt;/p&gt;</text>
+  <title>Debian &amp; Ubuntu on my Acer Aspire One D150</title>
+  <feedurl>http://crunchbang.org/</feedurl>
+  <feedtitle>CrunchBang</feedtitle>
+  <id>6dfd46e502f44d9b728d98b687eae2ce</id>
+  <date>1266644754</date>
+ </item>
+ <item>
+  <name>ghost1227</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://workshop.ghost1227.com/2010/02/vietnam-arch-logo/</link>
+  <text>&lt;p&gt;A new custom Arch logo based on the Vietnam flag.&lt;/p&gt;
+&lt;p&gt;&lt;center&gt;&lt;a title=&quot;Vietnam Arch Logo&quot; href=&quot;http://workshop.ghost1227.com/CustomArchLogos/Flags/Vietnam.png&quot; rel=&quot;lightbox[326]&quot;&gt;&lt;img title=&quot;Vietnam Arch Logo&quot; src=&quot;http://workshop.ghost1227.com/CustomArchLogos/Flags/Vietnam.png&quot; alt=&quot;Vietnam Arch Logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+Note: There is a rating embedded within this post, please visit this post to rate it.</text>
+  <title>Vietnam Arch Logo</title>
+  <feedurl>http://workshop.ghost1227.com</feedurl>
+  <feedtitle>Ghost1227's Workshop</feedtitle>
+  <id>2d5d3f7ea3bb3a20d4f266a732a2a6fb</id>
+  <date>1266276456</date>
+ </item>
+ <item>
+  <name>Lostson</name>
+  <nick>lostson</nick>
+  <image>rss/heads/lostson.png</image>
+  <link>http://lostsonsvault.org/geek/?p=349</link>
+  <text>&lt;p&gt; Well with all the buzz about google buzz competing with the likes of Facebook and Twitter a new thought occurred to me. What the heck ever happened to IRC ? You know good ol Internet Relay Chat ? Let us compare some of the similarities shall we. For instance on most of the social networking sites I can become a member or fan of a group, I can do that exact same thing by joining a channel on a IRC server, which is usually populated with people I want to talk with right ? Must be because I joined the channel. &lt;/p&gt;
+&lt;p&gt; Next say someone in this channel is a butthead and I really don&amp;#8217;t want to listen to them anymore, so I use the /ignore command and they magically go away. Much like blocking someone on a social website. Now they can probably still see what I am saying but I no longer have to deal with them. Pretty nice feature huh. Now lets say I want to only talk to one particular person, I can then institute a dialog with this person, so now it is just me and them talking about whatever we wish to talk about without interruption.&lt;/p&gt;
+&lt;p&gt; Most IRC servers have a message system or memo service that you can use to leave a note for a friend, Hmm sounds alot like posting a status or something to one of these other social sites to me.  You can also register your nickname so no one else on that particular IRC server can use the same nick as you. Is this all starting to sound very familiar ?&lt;/p&gt;
+&lt;p&gt; Some other points to mention is that some IRC networks allow encryption via ssl, so for those who hold their privacy near and dear to their heart can encrypt their sessions as well. Also if I want to post pics or a good article I read I can merely post the link in the channel and all my new found friends can enjoy. Even most media players have a irc script that will post the song you are listening to in the channel you are in. Wow does this not about cover all of the inglorious spam you wish to spread to the planet ? You can whoa wait for it &amp;#8212;- create your very own channel, yep you read that right your very own channel. With its own topic and operators and everything. Wow what a novel idea huh ?&lt;/p&gt;
+&lt;p&gt; With that said I have been using IRC for years now and it is still my preferred way to communicate even over instant messaging which is basically again just over glorified IRC.  So my question persists social networking ? Why yes I do I use IRC everyday all day!&lt;/p&gt;</text>
+  <title>social networking um IRC</title>
+  <feedurl>http://lostsonsvault.org/geek</feedurl>
+  <feedtitle>lostsonsvault</feedtitle>
+  <id>6b6c20ff4ae31ceb261e78ce2f1a72e2</id>
+  <date>1265964363</date>
+ </item>
+ <item>
+  <name>Lostson</name>
+  <nick>lostson</nick>
+  <image>rss/heads/lostson.png</image>
+  <link>http://lostsonsvault.org/geek/?p=345</link>
+  <text>&lt;p&gt; Well as usual on my weekends off I try to get to one of my many projects but this weekend I suffer from slackeritis. I had all the best intentions of getting to some things but I didn&amp;#8217;t. Every time I sat down I just didn&amp;#8217;t have the normal fuel I do for getting things done, and when I am feeling that way it just doesn&amp;#8217;t pay to try as it wont work anyway. So I took this weekend off just kinda laying around the house, went out with family, watched the super bowl and really not much else. Could be all the snow we are getting today that has just put me in kind of a foul mood, who knows. Hopefully this will go away soon and I will get back to my normal insane list of projects I have that I wish to get done.  Hope your projects are going better than mine, so til next time then, remember CentOS isn&amp;#8217;t just for servers ya know&amp;#8230;&lt;/p&gt;</text>
+  <title>Slackeritis</title>
+  <feedurl>http://lostsonsvault.org/geek</feedurl>
+  <feedtitle>lostsonsvault</feedtitle>
+  <id>7aaf4140ef44168b9104a4e0c83e35ab</id>
+  <date>1265784607</date>
+ </item>
+ <item>
+  <name>Adam Bellinson</name>
+  <nick>thread</nick>
+  <image>rss/heads/thread.png</image>
+  <link>http://www.threadbox.net/2010/02/07/im-still-here-engaged/</link>
+  <text>&lt;p&gt;&lt;a rel=&quot;lightbox&quot; href=&quot;http://www.threadbox.net/wp-content/uploads/2010/02/photo.jpeg&quot;&gt;&lt;img src=&quot;http://www.threadbox.net/wp-content/uploads/2010/02/photo-244x300.jpg&quot; alt=&quot;&quot; title=&quot;Adam and Julie&quot; width=&quot;244&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;Hello again, Internet! It&amp;#8217;s been a while since the last update, so I thought I&amp;#8217;d drop in and act like I still have a blog. First and foremost, I need to mention something I&amp;#8217;m ecstatic about.&lt;/p&gt;
+&lt;p&gt;On the beautiful palindrome Saturday of 01/02/2010, I proposed to Julie, my girlfriend of four years. Since she accepted, I now must get used to calling her my fiancé!&lt;/p&gt;
+&lt;p&gt;We&amp;#8217;re planning on having the big day in September of 2011, so we have plenty of time to figure out exactly what we want. But wow &amp;#8212; I&amp;#8217;m now finding just how complicated all this planning is. :)&lt;/p&gt;
+&lt;p&gt;Yay for Julie and me! Thanks, everyone, for the kind wishes.&lt;/p&gt;</text>
+  <title>I’m Still Here (&amp; Engaged!)</title>
+  <feedurl>http://www.threadbox.net</feedurl>
+  <feedtitle>Threadbox.net</feedtitle>
+  <id>fc5129bd827669479d77fbad5cfcb702</id>
+  <date>1265613232</date>
+ </item>
+ <item>
+  <name>Christopher W.</name>
+  <nick>moparx</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://www.linuxinfusion.com/happy-new-year-2010</link>
+  <text>&lt;p&gt;Happy new year to everyone.&lt;/p&gt;</text>
+  <title>Happy New Year 2010</title>
+  <feedurl>http://www.linuxinfusion.com</feedurl>
+  <feedtitle>Linux Infusion</feedtitle>
+  <id>5e958e18fa6206f08679ad030f3995c1</id>
+  <date>1262401009</date>
+ </item>
+ <item>
+  <name>Adam Bellinson</name>
+  <nick>thread</nick>
+  <image>rss/heads/thread.png</image>
+  <link>http://www.threadbox.net/2009/12/08/my-favorite-android-apps/</link>
+  <text>&lt;p&gt;So I&amp;#8217;ve owned the Motorola Droid for just over a month now, and I&amp;#8217;m just loving it. Yes, the phone isn&amp;#8217;t without its shortcomings, but many of them are getting fixed via software updates. I don&amp;#8217;t really want to post another review since there &lt;a href=&quot;http://www.engadget.com/2009/10/30/motorola-droid-review/&quot;&gt;are&lt;/a&gt; a &lt;a href=&quot;http://gizmodo.com/5396168/motorola-droid-review&quot;&gt;bunch&lt;/a&gt; of &lt;a href=&quot;http://www.ubergizmo.com/15/archives/2009/11/motorola-droid-review.html&quot;&gt;good&lt;/a&gt; &lt;a href=&quot;http://www.pcmag.com/article2/0,2817,2354951,00.asp&quot;&gt;ones&lt;/a&gt; already, but rather list my very favorite apps.&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;strong&gt;ConnectBot&lt;/strong&gt; is an truly excellent ssh client with plenty of features &amp;#8212; including easy ssh tunnel managing!&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Dolphin&lt;/strong&gt; is a good replacement web browser with lots of fancy features.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;NewsRob&lt;/strong&gt; is the best way I&amp;#8217;ve found to read RSS. It syncs with Google Reader (like NetNewsWire on my Mac!) and offers a very comfortable way to navigate and read the news.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Google Voice&lt;/strong&gt;, if you can get an invite, is amazing: free phone calls / texts in and out, visual voicemail, vm transcriptions, call recording&amp;#8230;&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Google Listen&lt;/strong&gt; is a really great podcast downloader/player.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;HandyCalc&lt;/strong&gt; is a very powerful calculator with graphing, algebra, and unit conversion features.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Google Sky Map&lt;/strong&gt; turns your phone into a guide to the sky. By reading from the accelerometer and compass sensors in the phone, this app shows what should be seen in the sky when looking in the phone&amp;#8217;s oriented direction.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Pandora&lt;/strong&gt;, &lt;strong&gt;Last.fm&lt;/strong&gt;, &lt;strong&gt;StreamFurious&lt;/strong&gt;, and &lt;strong&gt;Jamendo&lt;/strong&gt; are all great apps for streaming music down to your phone. &lt;strong&gt;Amdroid&lt;/strong&gt; lets me connect to my Ampache instance on the server back home and stream anything from my collection.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Qik&lt;/strong&gt; lets me stream (and archive) live video from my phone.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;SwiFTP&lt;/strong&gt; starts up a simple ftp daemon that I can connect to from my PC to manage files on the SD card. This is more convenient than plugging it in.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Mythmote&lt;/strong&gt; lets me remote control my MythTV DVR software on the TV.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;SqueezeDroid&lt;/strong&gt; lets me remote control my SqueezeBox.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;TransDroid&lt;/strong&gt; lets me remote control my torrents running on the server.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Seesmic&lt;/strong&gt; is a nicer Twitter client than &lt;strong&gt;Twidroid&lt;/strong&gt;, I think. Maybe not as many features, but it&amp;#8217;s clean, totally free, and includes bit.ly API support.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;Meebo IM&lt;/strong&gt; is my favorite IM application of the bunch. It supports all the major networks.&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;MixZing&lt;/strong&gt; is a great improvement over the native media player, though I haven&amp;#8217;t been playing local media much on my Droid. I wouldn&amp;#8217;t really want to use my Droid as my primary media player. While the built-in speaker is quite good, the headphone output is not the best from a portable.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;The Android user base is currently growing by leaps and bounds with the release of the Droid and other exciting new phones. It seems like every day there&amp;#8217;s a great new app and several updates to existing apps. I&amp;#8217;m very much enjoying being a part of it!&lt;/p&gt;</text>
+  <title>My Favorite Android Apps</title>
+  <feedurl>http://www.threadbox.net</feedurl>
+  <feedtitle>Threadbox.net</feedtitle>
+  <id>c997094f0232526b106e7d5aee0a915b</id>
+  <date>1260325267</date>
+ </item>
+ <item>
+  <name>appropedia</name>
+  <nick></nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://blogs.appropedia.org/2009/04/20/lightweight-linux/</link>
+  <text>&lt;p&gt;A fellow Appropedian asked me about options for lightweight Linux distros, for using on old hardware. Thought I'd share my response here.&lt;/p&gt;
+&lt;p&gt;My knowledge is limited, but what I've learnt:&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt; Join a local &lt;a title=&quot;http://humlug.org/&quot; rel=&quot;nofollow&quot; href=&quot;http://humlug.org/&quot;&gt;LUG&lt;/a&gt; - look out for days when they help people install Linux. Beware of installing Linux when you won't be face-to-face with Linux geeks for a long time, especially if you're doing something more problematic like installing on a laptop - I made this mistake, and it was a horrible time sink. Online support doesn't cut it.&lt;/li&gt;
+&lt;li&gt; Vector &amp; other Slackware distros don't seem user friendly, and neither does DSL (Damn Small Linux) - I looked into it, but with only about 2 years experience in Linux, I didn't feel up to any of these choices. With more experience, and the backing of geek friends, it may be an option for you. (DSL is also a much older distro, with much older packages a.k.a. program versions, but it works on &lt;em&gt;very&lt;/em&gt; limited hardware, and is possibly more reliable than other ultralight distros such as Puppy Linux).&lt;/li&gt;
+&lt;li&gt;I recommend Openbox (window manager) and &lt;a title=&quot;http://lxde.org/&quot; rel=&quot;nofollow&quot; href=&quot;http://lxde.org/&quot;&gt;LXDE&lt;/a&gt; (desktop environment using Openbox - meaning Openbox is the lighter of these two light options). These are really nice and lean - lighter than XFCE, but nicer to use. Expect to see these become more popular. You can add them to any distro, but where they're not one of the standard options, in some cases there can be clashes (probably a bigger problem on a laptop).&lt;/li&gt;
+&lt;li&gt; I like to find a distro where it's set up to be lean, but it's easy to use.&lt;/li&gt;
+&lt;li&gt; I'm not hung up on installing &quot;free&quot; (open source) only - I want Skype and I want video codecs. (I install Linux firstly because I want an operating system that does what I need, not to make a statement.) Ubuntu makes for a little hassle with this - you have to add repositories and certain packages (programs and codecs), and the new user doesn't know this - they just wonder why things don't work. Debian makes it really hard work for a newbie, especially if any of your hardware doesn't have a perfectly free (open source) driver.&lt;/li&gt;
+&lt;li&gt; I strongly prefer something that is at least based on a major distro, and uses the package repositories of that distro. There's the potential for better support and in theory for bug fixing (Ubuntu is buggy anyway, in my experience, but it does have good support). It also means far more software choice. This, with the previous points, leaves me with one distro:&lt;/li&gt;
+&lt;li&gt; &lt;a title=&quot;http://crunchbanglinux.org/&quot; rel=&quot;nofollow&quot; href=&quot;http://crunchbanglinux.org/&quot;&gt;CrunchBang Linux&lt;/a&gt;: it's based on Ubuntu, but uses Openbox, but with some very cool usability tweaks, including partial use of LXDE. It also comes with Skype and video codecs installed. This is the only distro I know that comes with Openbox by default (excluding Debian and Knoppix which I don't recommend - see below). I'm not usually a fan of Ubuntu, for several reasons including bugginess when I used it in the past - but in spite of that, it's working quite well for me at the moment, and it has an &lt;a href=&quot;http://identi.ca/group/crunchbang&quot;&gt;active&lt;/a&gt; and &lt;a href=&quot;http://crunchbanglinux.org/forums/&quot;&gt;helpful&lt;/a&gt; community. This is the most promising distro I've used.&lt;/li&gt;
+&lt;li&gt; Debian 5.0 comes with with LXDE as one of its standard options, which means it has Openbox - but Debian was unnecessarily difficult for me. When it didn't even recognize the hard disk on my ThinkPad, I thought: if this is a sign of how things work in Debian, I'm trying something else.&lt;/li&gt;
+&lt;li&gt;And Knoppix also comes with LXDE standard.  It's not designed for installation to hard disk though, unless you &lt;em&gt;really&lt;/em&gt; know Linux. However, it's apparently a great rescue disk, with a reputation for hardware recognition - the MacGyver of Linux distros - so I keep a Knoppix LiveCD handy, just in case. (I'd try the CrunchBang LiveCD first, but if things are really screwed up and that doesn't work, I'll try Knoppix.)&lt;/li&gt;
+&lt;li&gt; I've heard good things about &lt;a title=&quot;http://www.puppylinux.org/&quot; rel=&quot;nofollow&quot; href=&quot;http://www.puppylinux.org/&quot;&gt;Puppy Linux&lt;/a&gt; - it was flaky when I tried it ~2006, but may have improved. It's also kind of a backwater in Linux development - a lot of non-standard stuff, running as root by default (which sounds like a bad idea to me and to many Linux people), with its own kind of installation, and far fewer packages than a major distro. So unless you need to go super-light (even lighter than Crunchbang) I wouldn't recommend it.&lt;/li&gt;
+&lt;li&gt;I just discovered &lt;a title=&quot;http://www.puppylinux.org/downloads/puplets/boxpup&quot; rel=&quot;nofollow&quot; href=&quot;http://www.puppylinux.org/downloads/puplets/boxpup&quot;&gt;boxpup&lt;/a&gt; - looks like Puppy with Openbox. I'm guessing it's a bit harder than CrunchBang, with less package choices, but probably even lighter than CrunchBang. I would still have some concerns about bugginess, security, package choice and maybe usability, but if you're keen, you could try it out with some help from your LUG.&lt;/li&gt;
+&lt;li&gt; Anything I've said related to something being hard to use (e.g. Debian) becomes much less of an issue if you have geeky friends close by and/or belong to a LUG. My preference though: Get something you can mostly handle yourself. You'll still need help, but there's no need to make it harder than necessary.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;So join a LUG, check out CrunchBang, and enjoy Linux!&lt;/p&gt;
+&lt;p&gt;Thanks to Jon Camfield for his input at &lt;a href=&quot;http://www.appropedia.org/User_talk:Steven_M.#E-waste_Installing_Linux_on_old_PCs&quot;&gt;the talk page where this started&lt;/a&gt;.&lt;/p&gt;
+&lt;div&gt;&lt;a href=&quot;http://digg.com/submit?url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&amp;title=Lightweight+Linux&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/digg.png&quot; alt=&quot;Digg This&quot; title=&quot;Digg This&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.reddit.com/submit?url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&amp;title=Lightweight+Linux&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/reddit.png&quot; alt=&quot;Reddit This&quot; title=&quot;Reddit This&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&amp;title=Lightweight+Linux&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/stumbleupon.png&quot; alt=&quot;Stumble Now!&quot; title=&quot;Stumble Now!&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&amp;headline=Lightweight+Linux&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/yahoo_buzz.png&quot; alt=&quot;Buzz This&quot; title=&quot;Buzz This&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.dzone.com/links/add.html?title=Lightweight+Linux&amp;url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/dzone.png&quot; alt=&quot;Vote on DZone&quot; title=&quot;Vote on DZone&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.facebook.com/sharer.php?t=Lightweight+Linux&amp;u=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/facebook.png&quot; alt=&quot;Share on Facebook&quot; title=&quot;Share on Facebook&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://delicious.com/save?title=Lightweight+Linux&amp;url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/delicious.png&quot; alt=&quot;Bookmark this on Delicious&quot; title=&quot;Bookmark this on Delicious&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.dotnetkicks.com/kick/?title=Lightweight+Linux&amp;url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/dotnetkicks.png&quot; alt=&quot;Kick It on DotNetKicks.com&quot; title=&quot;Kick It on DotNetKicks.com&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://dotnetshoutout.com/Submit?title=Lightweight+Linux&amp;url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/dotnetshoutout.png&quot; alt=&quot;Shout it&quot; title=&quot;Shout it&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&amp;title=Lightweight+Linux&amp;summary=&amp;source=&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/linkedin.png&quot; alt=&quot;Share on LinkedIn&quot; title=&quot;Share on LinkedIn&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.technorati.com/faves?add=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/technorati.png&quot; alt=&quot;Bookmark this on Technorati&quot; title=&quot;Bookmark this on Technorati&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://twitter.com/home?status=Reading+http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/twitter.png&quot; alt=&quot;Post on Twitter&quot; title=&quot;Post on Twitter&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.google.com/reader/link?url=http%3A%2F%2Fblogs.appropedia.org%2F2009%2F04%2F20%2Flightweight-linux%2F&amp;title=Lightweight+Linux&quot;&gt;&lt;img src=&quot;http://blogs.appropedia.org/wp-content/plugins/light-social/google_buzz.png&quot; alt=&quot;Google Buzz (aka. Google Reader)&quot; title=&quot;Google Buzz (aka. Google Reader)&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;</text>
+  <title>Lightweight Linux</title>
+  <feedurl>http://blogs.appropedia.org</feedurl>
+  <feedtitle>Appropedia Blog » Openbox</feedtitle>
+  <id>c25a226db010133b21e8105f1c5ee1d6</id>
+  <date>1240280465</date>
+ </item>
+ <item>
+  <name>Nicolás Reynolds</name>
+  <nick></nick>
+  <image>rss/heads/nich.png</image>
+  <link>http://feedproxy.google.com/~r/send-fruit/~3/esfjKu4Sc_c/</link>
+  <text>&lt;a href=&quot;http://send-fruit.com.ar/uploads/3010082128ju1.jpg&quot;&gt;&lt;img src=&quot;http://send-fruit.com.ar/includes/thumb.php?file=../uploads/3010082128ju1.jpg&amp;max_width=500&amp;max_height=500&amp;quality=100&quot; alt=&quot;3010082128ju1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;cosas feas que pasan a veces :/               &lt;div&gt;
+&lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=EQdnD9PF&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=41&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=H9u0DL3i&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=45&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=aGrZx87g&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=50&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=uhUtfL8t&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?i=uhUtfL8t&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
+&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/send-fruit/~4/esfjKu4Sc_c&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</text>
+  <title>cosas feas que pasan a veces :/</title>
+  <feedurl>http://send-fruit.com.ar</feedurl>
+  <feedtitle>send-fruit</feedtitle>
+  <id>7d642240e15d82fd20e1af24d69cd1d4</id>
+  <date>1225481899</date>
+ </item>
+ <item>
+  <name>Nicolás Reynolds</name>
+  <nick></nick>
+  <image>rss/heads/nich.png</image>
+  <link>http://feedproxy.google.com/~r/send-fruit/~3/j7-YGjYuxYs/</link>
+  <text>&lt;a href=&quot;http://send-fruit.com.ar/uploads/bashhermanos.jpg&quot;&gt;&lt;img src=&quot;http://send-fruit.com.ar/includes/thumb.php?file=../uploads/bashhermanos.jpg&amp;max_width=500&amp;max_height=500&amp;quality=100&quot; alt=&quot;bashhermanos.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Box!             &lt;div&gt;
+&lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=SjZHRDrL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=41&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=6ot5CJqb&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=45&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=hplkk0IZ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=50&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=2uIRwups&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?i=2uIRwups&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
+&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/send-fruit/~4/j7-YGjYuxYs&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</text>
+  <title>Box!</title>
+  <feedurl>http://send-fruit.com.ar</feedurl>
+  <feedtitle>send-fruit</feedtitle>
+  <id>6b31775afdaa4fe1d66db8c8d5d9b543</id>
+  <date>1224269117</date>
+ </item>
+ <item>
+  <name>Nicolás Reynolds</name>
+  <nick></nick>
+  <image>rss/heads/nich.png</image>
+  <link>http://feedproxy.google.com/~r/send-fruit/~3/4SokUDO-5ss/</link>
+  <text>&lt;p&gt;Soft que llegó para quedarse, como quien dice:&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;&lt;a href=&quot;http://wiki.archlinux.org/index.php/Proxy_routing_with_Tor_and_Privoxy&quot; title=&quot;Privoxy&quot; rel=&quot;nofollow&quot;&gt;Privoxy&lt;/a&gt;: Proxy orientado la privacidad (ni anuncios, ni javascript molesto, ni páginas porno ¬¬)&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;http://wiki.archlinux.org/index.php/Post_Installation_Tips#Speeding_up_DNS_queries&quot; title=&quot;dnsmasq&quot; rel=&quot;nofollow&quot;&gt;dnsmasq&lt;/a&gt;: Caché de DNS&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/arora/&quot; title=&quot;Arora&quot; rel=&quot;nofollow&quot;&gt;Arora&lt;/a&gt;: Browser basado en QT4 (ya tenía las librerías instaladas...) y WebKit, liviano y con navegación privada&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;http://unkart.ovh.org/ncmpcpp/&quot; title=&quot;ncmpcpp&quot; rel=&quot;nofollow&quot;&gt;ncmpcpp&lt;/a&gt;: Es un quilombo pronunciarlo, pero es el reemplazo de ncmpc, el cliente de MPD en ncurses. Es más lindo y todavía está en desarrollo.&lt;/li&gt;
+&lt;li&gt;Un script hecho en casa que crea playlists para MPD en base a búsquedas en skreemr.com :D&lt;/li&gt;
+
+&lt;/ul&gt;            &lt;div&gt;
+&lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=QQUvIAwu&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=41&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=cV2AYpAo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=45&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=FjQ8YBZd&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?d=50&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/send-fruit?a=s9ZZptTj&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/send-fruit?i=s9ZZptTj&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
+&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/send-fruit/~4/4SokUDO-5ss&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</text>
+  <title>Nuevo software</title>
+  <feedurl>http://send-fruit.com.ar</feedurl>
+  <feedtitle>send-fruit</feedtitle>
+  <id>0be2202ad8c753b3aa0124a994bd8230</id>
+  <date>1224054132</date>
+ </item>
+ <item>
+  <name>Spencer French</name>
+  <nick>ingvildr</nick>
+  <image>rss/heads/spencer.png</image>
+  <link>http://ingvildr.wordpress.com/2006/08/25/back-to-ob/</link>
+  <text>&lt;p&gt;after a bit of a window manager adventure i&amp;#8217;m back to openbox (excuse to post screenshot).&lt;/p&gt;
+&lt;p&gt;ob theme = gehtehbox (mod of rezza&amp;#8217;s candybox)&lt;/p&gt;
+&lt;p&gt;gtk theme = gilouche-grey (by smoon with a few tweaks by me)&lt;/p&gt;
+&lt;p&gt;&lt;img src=&quot;http://img100.imageshack.us/img100/6829/obcvsgilouchegreyez9.png&quot; alt=&quot;screenshot&quot; height=&quot;120&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;
+&lt;p&gt;(right click &gt; view image for full size)&lt;/p&gt;
+&lt;br /&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/ingvildr.wordpress.com/8/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/ingvildr.wordpress.com/8/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ingvildr.wordpress.com/8/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ingvildr.wordpress.com/8/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ingvildr.wordpress.com/8/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ingvildr.wordpress.com/8/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ingvildr.wordpress.com/8/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ingvildr.wordpress.com/8/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ingvildr.wordpress.com/8/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ingvildr.wordpress.com/8/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ingvildr.wordpress.com/8/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ingvildr.wordpress.com/8/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ingvildr.wordpress.com&amp;blog=230709&amp;post=8&amp;subd=ingvildr&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>back to ob</title>
+  <feedurl>http://ingvildr.wordpress.com</feedurl>
+  <feedtitle>ingvildr's blog</feedtitle>
+  <id>967f1eae76ef9cae84c58d522e0849fd</id>
+  <date>1156526114</date>
+ </item>
+ <item>
+  <name>Spencer French</name>
+  <nick>ingvildr</nick>
+  <image>rss/heads/spencer.png</image>
+  <link>http://ingvildr.wordpress.com/2006/06/16/getting-back-to-speed/</link>
+  <text>&lt;p&gt;over the past week or 2 i have been doing a shit load of college work so i was away from my computer alot, i come back and fancy giving rr64 a try but to my delight it wipes my whole storage partition. Looking to an upside i give xfs a try and so far it seems very fast and stable, picture previews come up almost instantly. In the process of my hdd wipe tho i lost alot of ob and gtk themes i was working on so it will be a while before i produce anymore themes.&amp;nbsp; Oh yea i also just updated the openbox-cvs aur pkg to include rezza&amp;#39;s new client padding patch, enjoy.&lt;/p&gt;
+&lt;br /&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/ingvildr.wordpress.com/7/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/ingvildr.wordpress.com/7/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ingvildr.wordpress.com/7/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ingvildr.wordpress.com/7/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ingvildr.wordpress.com/7/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ingvildr.wordpress.com/7/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ingvildr.wordpress.com/7/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ingvildr.wordpress.com/7/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ingvildr.wordpress.com/7/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ingvildr.wordpress.com/7/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ingvildr.wordpress.com/7/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ingvildr.wordpress.com/7/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ingvildr.wordpress.com&amp;blog=230709&amp;post=7&amp;subd=ingvildr&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>getting back to speed</title>
+  <feedurl>http://ingvildr.wordpress.com</feedurl>
+  <feedtitle>ingvildr's blog</feedtitle>
+  <id>e7db6f2b668780ef4155c3a62895bde7</id>
+  <date>1150465276</date>
+ </item>
+ <item>
+  <name>Spencer French</name>
+  <nick>ingvildr</nick>
+  <image>rss/heads/spencer.png</image>
+  <link>http://ingvildr.wordpress.com/2006/05/28/gravity-and-aerialsob/</link>
+  <text>&lt;p&gt;Been away for a bit doing college work so here are two new themes i made today, one is based on cimi&amp;#39;s &lt;a href=&quot;http://www.kde-look.org/content/show.php?content=39886&quot;&gt;aerials&lt;/a&gt; theme and the other is my own creation.&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://www.box.net/public/muhmravgpt&quot;&gt;Gravity&lt;/a&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://www.box.net/public/6ha4pzqtzc&quot;&gt;AerialsOB&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://img346.imageshack.us/my.php?image=200605281842541280x1024scrot6b.png&quot;&gt;Gravity Screenshot&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://img83.imageshack.us/my.php?image=200605281914131280x1024scrot3v.png&quot;&gt;AerialsOB Screenshot&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
+&lt;br /&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/ingvildr.wordpress.com/6/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/ingvildr.wordpress.com/6/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ingvildr.wordpress.com/6/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ingvildr.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ingvildr.wordpress.com/6/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ingvildr.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ingvildr.wordpress.com/6/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ingvildr.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ingvildr.wordpress.com/6/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ingvildr.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ingvildr.wordpress.com/6/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ingvildr.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ingvildr.wordpress.com&amp;blog=230709&amp;post=6&amp;subd=ingvildr&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>Gravity and AerialsOB</title>
+  <feedurl>http://ingvildr.wordpress.com</feedurl>
+  <feedtitle>ingvildr's blog</feedtitle>
+  <id>fdfb65853f7cb02f4be41e796d81de5d</id>
+  <date>1148865931</date>
+ </item>
+ <item>
+  <name>Calvin Wong</name>
+  <nick>deadcat</nick>
+  <image>rss/heads/deadcat.png</image>
+  <link>http://debian-administration.org/users/deadcat/weblog/2</link>
+  <text>man, the guys in #openbox have loads of cool themes. i&amp;#39;ve been trying out most of them and currently sticking with the clearlooks with split gradient. &lt;br /&gt; heres the sources.list line if anyone want the package gtk2-engines-clearlooks: &lt;br /&gt; deb &lt;a href=&quot;http://debian.sshonly.sytes.net/&quot; rel=&quot;nofollow&quot;&gt;http://debian.sshonly.sytes.net&lt;/a&gt; unstable/</text>
+  <title>Planet Openbox</title>
+  <feedurl>http://debian-administration.org/users/deadcat/weblog</feedurl>
+  <feedtitle>Weblogs for deadcat</feedtitle>
+  <id>94559270b42dcdfc827748b248aeefb8</id>
+  <date>1145235540</date>
+ </item>
+ <item>
+  <name>Calvin Wong</name>
+  <nick>deadcat</nick>
+  <image>rss/heads/deadcat.png</image>
+  <link>http://debian-administration.org/users/deadcat/weblog/1</link>
+  <text>anyone installed xcompmgr and transset from experimental onto their unstable box? it works fine, BUT root-tail outputs dont get refresh and the text just displays on top of previous outputs. big problem, i like root-tail A ALOT!!! (= &lt;br /&gt; and some apps like the wm applets, mplayer flickers when i run 3ddesktop, works fine without xcompmgr running... </text>
+  <title>xcompmgr and transset in experimental</title>
+  <feedurl>http://debian-administration.org/users/deadcat/weblog</feedurl>
+  <feedtitle>Weblogs for deadcat</feedtitle>
+  <id>7684015e38a6cc59e84e9de86cd529bf</id>
+  <date>1138687200</date>
+ </item>
+ <item>
+  <name>Crimeboy</name>
+  <nick>crimeboy</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://celo.wordpress.com/2008/12/30/pekmenu/</link>
+  <text>Pekmenu é um shellscript que gera a partir de um arquivo de texto um menu dinamico de programas. O arquivo de texto localizado em ~/.menu contém por linha o nome do aplicativo, a categoria, e comando para executa-lo (este entre aspas duplas) , ex.: gimp graphics &amp;#8220;gimp&amp;#8221; irssi chat &amp;#8220;xterm -e irssi -c freenode&amp;#8221; pidgin [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=celo.wordpress.com&amp;blog=11852&amp;post=109&amp;subd=celo&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>pekmenu</title>
+  <feedurl>http://celo.wordpress.com</feedurl>
+  <feedtitle>crimeboy</feedtitle>
+  <id>fdcc5db8dc81a30b7f01131fa7c98a0e</id>
+  <date>0</date>
+ </item>
+ <item>
+  <name>Crimeboy</name>
+  <nick>crimeboy</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://celo.wordpress.com/2008/12/31/pekmenu-e/</link>
+  <text>Pekmenu is a shell script that is able to generate a dynamic applications menu from a text file. This file is placed in ~/.menu and it contains one application per line, each line containing the application name, its category as well as its execution command (quoted with &amp;#8220;&amp;#8221;), ie.: gimp graphics &amp;#8220;gimp&amp;#8221; irssi chat &amp;#8220;xterm [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=celo.wordpress.com&amp;blog=11852&amp;post=120&amp;subd=celo&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>pekmenu-en</title>
+  <feedurl>http://celo.wordpress.com</feedurl>
+  <feedtitle>crimeboy</feedtitle>
+  <id>0827828da562f024b8558f440e454180</id>
+  <date>0</date>
+ </item>
+ <item>
+  <name>Crimeboy</name>
+  <nick>crimeboy</nick>
+  <image>rss/heads/noimage.png</image>
+  <link>http://celo.wordpress.com/2008/10/25/my-next-keyboad/</link>
+  <text>&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=celo.wordpress.com&amp;blog=11852&amp;post=95&amp;subd=celo&amp;ref=&amp;feed=1&quot; /&gt;</text>
+  <title>My next keyboard</title>
+  <feedurl>http://celo.wordpress.com</feedurl>
+  <feedtitle>crimeboy</feedtitle>
+  <id>36bbb60ff4db5f41fad675385fe22e7b</id>
+  <date>0</date>
+ </item>
+</feed>
diff --git a/rss/planet/index.php b/rss/planet/index.php
new file mode 120000 (symlink)
index 0000000..65e566a
--- /dev/null
@@ -0,0 +1 @@
+../xmltorss.php
\ No newline at end of file
diff --git a/rss/refresh.php b/rss/refresh.php
new file mode 100644 (file)
index 0000000..892fb1e
--- /dev/null
@@ -0,0 +1,97 @@
+<?
+header('Content-type: text/html');
+
+require_once('../h/agg.php'); // my rss to xml aggregator
+
+print "<h2>Loading Config...</h2>\n";
+
+// the config file for planet and miniplanet
+$xml = simplexml_load_file('config/planet.xml');
+if (!$xml) {
+  print "<div><b>Error</b> loading config/planet.xml</div>";
+  exit;
+}
+
+$feeds = array();
+
+foreach ($xml->feed as $f) {
+  if ($f->planet->rss)
+    $feeds[] = array( 'url' => (string)$f->planet->rss,
+                      'name' => (string)$f->name,
+                      'image' => (string)$f->image,
+                      'nick' => (string)$f->nick);
+}
+
+$out = 'planet/.xml';
+$tmp = $out.'.w';
+$fh = fopen($tmp, 'w');
+print "<h2>Reading Planet Openbox Feeds...</h2>\n";
+$data = agg($feeds,
+            'Planet Openbox',
+            'http://icculus.org/openbox/discuss-planet.shtml',
+            'Blog entries from around the Openbox planet',
+            3, false);
+if (fwrite($fh, $data))
+  rename($tmp, $out);
+else
+  print "<div><b>Error</b> writing $out</div>";
+
+$feeds = array();
+
+foreach ($xml->feed as $f) {
+  if ($f->mini->rss)
+    $feeds[] = array( 'url' => (string)$f->mini->rss,
+                      'name' => (string)$f->name,
+                      'image' => (string)$f->image,
+                      'nick' => (string)$f->nick);
+}
+
+$out = 'mini/.xml';
+$tmp = $out.'.w';
+$fh = fopen($tmp, 'w');
+print "<h2>Reading Mini Planet Openbox Feeds...</h2>\n";
+$data = agg($feeds,
+            'Mini Planet Openbox',
+            'http://icculus.org/openbox/discuss-miniplanet.shtml',
+            'Tweets and dents from around the Openbox planet',
+            6, true);
+if (fwrite($fh, $data))
+  rename($tmp, $out);
+else
+  print "<div><b>Error</b> writing $out</div>";
+
+$feeds = array(
+  array( 'url' => 'http://cia.vc/stats/project/Openbox/.rss',
+         'name' => 'Openbox'),
+  array( 'url' => 'http://cia.vc/stats/project/Obconf/.rss',
+         'name' => 'ObConf'));
+
+$out = 'local/.xml.commits';
+$tmp = $out.'.w';
+$fh = fopen($tmp, 'w');
+print "<h2>Reading Openbox Commits Feeds...</h2>\n";
+$data = agg($feeds,
+            'Openbox Commits',
+            'http://icculus.org/openbox/develop.shtml',
+            'Commit log for Openbox and ObConf',
+            30, false);
+if (fwrite($fh, $data))
+  rename($tmp, $out);
+else
+  print "<div><b>Error</b> writing $out</div>";
+
+
+// take this out one day when we replace the old site
+$out = 'news/.xml';
+$tmp = $out.'.w';
+$fh = fopen($tmp, 'w');
+print "<h2>Reading Openbox News Feed...</h2>\n";
+$data = agg_single('http://icculus.org/openbox/rss.xml',
+                   30, false);
+if (fwrite($fh, $data))
+  rename($tmp, $out);
+else
+  print "<div><b>Error</b> writing $out</div>";
+
+print "<h2>Done.</h2>\n";
+?>
\ No newline at end of file
diff --git a/rss/xmltorss.php b/rss/xmltorss.php
new file mode 100644 (file)
index 0000000..a2208b8
--- /dev/null
@@ -0,0 +1,35 @@
+<?
+
+$xml = simplexml_load_file('.xml');
+
+$w = new XMLWriter();
+$w->openMemory();
+$w->startDocument('1.0');
+$w->setIndent(4);
+
+$w->startElement('rss');
+$w->writeAttribute('version', '2.0');
+
+$w->startElement('channel');
+
+if ($xml->item) {
+  $w->writeElement('title', $xml->title);
+  $w->writeElement('description', $xml->description);
+  $w->writeElement('link', $xml->link);
+
+  foreach ($xml->item as $i) {
+    $w->startElement('item');
+    $w->writeElement('title', $i->title);
+    $w->writeElement('description', $i->text);
+    $w->writeElement('link', $i->link);
+    if ($i->name) $w->writeElement('author', $i->name);
+    $w->writeElement('pubDate', date('r', (int)$i->date));
+    $w->endElement();
+  }
+}
+$w->endElement(); // channel
+$w->endElement(); //rss
+
+header('Content-type: text/xml');
+print $w->outputMemory();
+?>
\ No newline at end of file
diff --git a/search.php b/search.php
new file mode 100644 (file)
index 0000000..fe51457
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+$title='Search Results';
+$breadcrumb=array('Home', '.', 'Help', 'help.php');
+?>
+
+<html>
+  <?php include('head.php') ?>
+  <link rel="stylesheet" type="text/css" href="css/help.css" />
+</head>
+
+<?php include('top.php') ?>
+
+<?php splash_title('images/splash/search.png', $title, true); ?>
+
+<?php include('content.php') ?>
+
+<div id="cse-search-results"></div>
+<script type="text/javascript">
+  var googleSearchIframeName = "cse-search-results";
+  var googleSearchFormName = "cse-search-box";
+  var googleSearchFrameWidth = 970;
+  var googleSearchDomain = "www.google.com";
+  var googleSearchPath = "/cse";
+</script>
+<script type="text/javascript"
+  src="http://www.google.com/afsonline/show_afs_search.js"></script>
+
+<?php include('bottom.php') ?>
diff --git a/top.php b/top.php
new file mode 100644 (file)
index 0000000..6a8da78
--- /dev/null
+++ b/top.php
@@ -0,0 +1,28 @@
+<body>
+<div id="main">
+
+<div id="top">
+  <a name="top" id="toplink"></a>
+  <span style="float: left; visibility: hidden;">.</span>
+  <a style="text-decoration: none;" href=".">
+    <div id="logo"></div>
+  </a>
+
+  <div id="breadcrumb">
+    <div><?php include('h/breadcrumb.php'); ?></div>
+  </div>    
+
+</div> <!--top-->
+
+<div id="menu">
+  <ul>
+     <li class="home"><a href=".">Home</a></li>
+     <li class="download"><a href="download.php">Download</a></li>
+<!--     <li class="start"><a href="start.php">Start</a></li>-->
+     <li class="help"><a href="help.php">Help</a></li>
+     <li class="discuss"><a href="discuss.php">Discuss</a></li>
+     <li class="develop"><a href="develop.php">Develop</a></li>
+  </ul>
+</div> <!--menu-->
+
+<div class="clear"></div>