<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://stock.wikimaxi.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mory</id>
	<title>Wikimini Stock - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://stock.wikimaxi.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mory"/>
	<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/wiki/Special:Contributions/Mory"/>
	<updated>2026-04-20T08:15:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/sv&amp;diff=157654</id>
		<title>Main Page/sv</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/sv&amp;diff=157654"/>
		<updated>2017-09-02T07:17:01Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Välkommen på Wikimini Stock!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock är en enorm &#039;&#039;&#039;databas med fria bilder&#039;&#039;&#039; för barn &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(och äldre personer)&amp;lt;/span&amp;gt;! Den innehåller mer än &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; fotografier och illustrationer noggrant organiserade i 570 tematiska kategorier. De flesta av dem är [[Wikimini:Terms of Use|fritt användbar]]!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Hitta en bild&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
   &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Dagens bild • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|En sengångare uppflugen i ett träd]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Visste du att? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Varje vecka, en ny upptäckt med en bild&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valhajen är den största fisken för närvarande lever på jorden. Den väger flera ton och kan mäta upp till 18 meter lång.&lt;br /&gt;
&lt;br /&gt;
18 meter, det är så länge som två skolbussar!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://sv.wikimini.org/wiki/Valhaj Läs mer]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Bilder från trådar • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 tematiska kategorier&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation/sv}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Komplett trädvy&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Val • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Galleries of särskilt utvalda bilder&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Ritningar efter Wikiminauts|alt=Ritningar efter Wikiminauts]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Ritningar efter Wikiminauts]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Flaggor i världen‎|alt=Flaggor]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Flaggor i världen‎]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Baby djur med sina mödrar|alt=Baby djur med sina mödrar]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Baby djur med sina mödrar]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Barn och tonår stjärnor|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Barn och tonår stjärnor]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Människokroppen|alt=Människokroppen]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Människokroppen]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Kända monument|alt=Kända monument]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Kända monument]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Optiska illusioner|alt=Optiska illusioner]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Optiska illusioner]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Recors djur|alt=Recors djur]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Recors djur]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Fler gallerier i våra [[:Category:Topics|tematiska kategorier]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ En [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;bild&amp;lt;/span&amp;gt;]] säger mer än tusen ord ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Konfucius • 6: e århundradet f.Kr.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=ler man|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Hjälp oss! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Människor som du&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visste du att den här bilden databasen underhålls av frivilliga?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock är en webbplats baserad på allas samarbete och delaktighet. Alla bilder är valda, beskrivs och klassificeras av användare i alla åldrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Upptäck våra [[Special:ContributionScores|bästa arkivarier]], &amp;lt;br /&amp;gt; och hur du kan [[Help:How to participate|engagera dig]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=157653</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=157653"/>
		<updated>2017-09-02T07:08:42Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will affect users of the Vector skin */&lt;br /&gt;
&lt;br /&gt;
/* ----- General layout and design ----------------------- */&lt;br /&gt;
&lt;br /&gt;
#globalWrapper {&lt;br /&gt;
	max-width: 1140px;&lt;br /&gt;
	margin-left: auto;&lt;br /&gt;
	margin-right: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#column-one {&lt;br /&gt;
	position: relative !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media all and (max-width: 700px) {&lt;br /&gt;
	#column-one, #footer { display: none; }&lt;br /&gt;
	#content { margin-left: 0 !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
	margin: 0 2.2em;&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-cactions {&lt;br /&gt;
	margin-left: 5.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-cactions li  {&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-cactions li:hover {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pBody {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	-webkit-border-radius: 20px;&lt;br /&gt;
	-moz-border-radius: 20px;&lt;br /&gt;
	-o-border-radius: 20px;&lt;br /&gt;
	-ms-border-radius: 20px;&lt;br /&gt;
	-khtml-border-radius: 20px;&lt;br /&gt;
	border-radius: 20px;&lt;br /&gt;
	padding: 5px;&lt;br /&gt;
	margin: 0.5em 0 0.8em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo {&lt;br /&gt;
	left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#content {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	min-height: 300px;&lt;br /&gt;
        margin-top: 20px;&lt;br /&gt;
	margin-left: 10.4em;&lt;br /&gt;
	padding: 20px 30px;&lt;br /&gt;
	-webkit-border-radius: 20px;&lt;br /&gt;
	-moz-border-radius: 20px;&lt;br /&gt;
	-o-border-radius: 20px;&lt;br /&gt;
	-ms-border-radius: 20px;&lt;br /&gt;
	-khtml-border-radius: 20px;&lt;br /&gt;
	border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	border-bottom: 0;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	line-height: 1.1em;&lt;br /&gt;
	margin: 1em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h1 { font-size: 240%; }&lt;br /&gt;
h2 { font-size: 175%; border-left: 8px solid #fabd23; padding-left: 10px; display: inline-block; }&lt;br /&gt;
h3 { font-size: 165%; }&lt;br /&gt;
h4 { font-size: 145%; }&lt;br /&gt;
h5 { font-size: 115%; font-weight: bold; }&lt;br /&gt;
h6 { font-size: 100%; font-weight: bold; }&lt;br /&gt;
&lt;br /&gt;
h1#firstHeading, h1#firstHeading2 {&lt;br /&gt;
	font-size: 240%;&lt;br /&gt;
	margin-bottom: 1em;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
	padding-bottom: 0.3em;&lt;br /&gt;
	padding-top: 0;&lt;br /&gt;
	color: #444444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.firstHeading:first-letter {&lt;br /&gt;
	background-color: #444444;&lt;br /&gt;
	color: white;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	float: left;&lt;br /&gt;
	font-size: 1.3em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	letter-spacing: -1px;&lt;br /&gt;
	margin-right: 3px;&lt;br /&gt;
	padding: 5px 6px 5px 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*.page-Main_Page h1#firstHeading2 {&lt;br /&gt;
	padding-top: 0;&lt;br /&gt;
}*/&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page object p {&lt;br /&gt;
	background-image: url(https://stock.wikimini.org/w/assets/carousel/background-no_flash.jpg);&lt;br /&gt;
	width:430px;&lt;br /&gt;
	height:420px;&lt;br /&gt;
	color:#ccc;&lt;br /&gt;
	font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form#searchbox {&lt;br /&gt;
	padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form#searchbox input {&lt;br /&gt;
	font-size: 1.3em;&lt;br /&gt;
	margin:5px;&lt;br /&gt;
	padding:4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form#searchbox input#mw-inputbox-ns6,&lt;br /&gt;
form#searchbox label {&lt;br /&gt;
	display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.subtitle {&lt;br /&gt;
	display: block;&lt;br /&gt;
	margin-left: 6px;&lt;br /&gt;
	color: #888;&lt;br /&gt;
	font-size: 45%;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: #fff;&lt;br /&gt;
	border: #cdcdcd 1px dashed;&lt;br /&gt;
	border-style: none none dashed;&lt;br /&gt;
	color: #fff;&lt;br /&gt;
	margin: 2.3em 0 2em 0;&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p {&lt;br /&gt;
	margin: .8em 0 1em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchGoButton {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.clear {&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.readmore {&lt;br /&gt;
	margin: 1.5em .8em 1.3em 3em;&lt;br /&gt;
	background: url(https://stock.wikimini.org/w/images/9/9f/Puce-rouge2.gif) no-repeat left top;&lt;br /&gt;
	padding-left: 32px;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ----- 2 columns page layout ----------------------- */&lt;br /&gt;
&lt;br /&gt;
.ColContainer {&lt;br /&gt;
	width:100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.LeftColumn  {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
.RightColumn {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	float:right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Min-width 2 columns page layout ----------------------- */&lt;br /&gt;
&lt;br /&gt;
.RespColContainer {&lt;br /&gt;
	width:100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.RespLeftColumn  {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	min-width: 430px;&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
.RespRightColumn {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	min-width: 430px;&lt;br /&gt;
	float:right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media all and (max-width: 1170px) {&lt;br /&gt;
	.RespLeftColumn  {&lt;br /&gt;
		width:450px;&lt;br /&gt;
		float:none;&lt;br /&gt;
		display:block;&lt;br /&gt;
		position:relative;&lt;br /&gt;
		margin-left:auto;&lt;br /&gt;
		margin-right:auto;&lt;br /&gt;
	}&lt;br /&gt;
	.RespRightColumn {&lt;br /&gt;
		width:450px;&lt;br /&gt;
		float:none;&lt;br /&gt;
		display:block;&lt;br /&gt;
		position:relative;&lt;br /&gt;
		margin-left:auto;&lt;br /&gt;
		margin-right:auto;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Files pages ----------------------- */&lt;br /&gt;
&lt;br /&gt;
ul#filetoc {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#file {&lt;br /&gt;
	font-size: 11px;&lt;br /&gt;
	margin-bottom: 16px;&lt;br /&gt;
	padding: 0px 50px 20px;&lt;br /&gt;
	border-bottom: 1px solid #ccc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#file img {&lt;br /&gt;
	padding-bottom: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2#filehistory {&lt;br /&gt;
	border-top: 2px solid #ccc;&lt;br /&gt;
	border-left: 0;&lt;br /&gt;
	padding-top: 40px;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Thumbnails ----------------------- */&lt;br /&gt;
&lt;br /&gt;
div.thumb {&lt;br /&gt;
	margin-bottom: 1em;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	padding: 20px 22px !important;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
	text-align: center !important;&lt;br /&gt;
	/*box-shadow: 0px 0px 6px #bbb inset;*/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
html .thumbimage {&lt;br /&gt;
	border: 1px solid #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
html .thumbimage:hover {&lt;br /&gt;
	opacity:.8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
html .thumbcaption {&lt;br /&gt;
	text-align: center !important;&lt;br /&gt;
	padding: 5px;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
	color: #888888;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.magnify, div.magnify a, div.magnify img {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.tright {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.tleft {&lt;br /&gt;
	margin-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Other images ----------------------- */&lt;br /&gt;
&lt;br /&gt;
div.floatright {&lt;br /&gt;
	margin: 0 0 2em 2em;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.floatleft {&lt;br /&gt;
	margin: 0 2em 2em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Galeries ----------------------- */&lt;br /&gt;
&lt;br /&gt;
table.gallery {&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.gallery td {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	padding: 18px 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.gallerybox div.thumb {&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.gallerybox div.thumb:hover {&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	box-shadow: 0px 0px 6px #bbb inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.gallerytext {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	color: #888;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Visual indexes of images on main page (&amp;quot;thumbs-table&amp;quot;) ----------------------- */&lt;br /&gt;
&lt;br /&gt;
.thumbs-table th {&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table th img {&lt;br /&gt;
	background-color: #fff;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
	float: left;&lt;br /&gt;
	padding-right: 10px;&lt;br /&gt;
	margin-right: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table h3 {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table .subtitle {&lt;br /&gt;
	color: #888;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table h3:hover .subtitle {&lt;br /&gt;
	background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table a:hover {&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Réinitialisation de certains styles non désirés pour les thumbs: */&lt;br /&gt;
.thumbs-table .thumb,&lt;br /&gt;
.thumbs-table .thumbinner,&lt;br /&gt;
.thumbs-table .thumbimage,&lt;br /&gt;
.thumbs-table .tright,&lt;br /&gt;
.thumbs-table .tleft {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0 !important;&lt;br /&gt;
	border: 0;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	clear: none;&lt;br /&gt;
	float: none;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .thumbinner {&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .magnify {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Affichage de la légende (caption) sur l&#039;image */&lt;br /&gt;
.thumbs-table .thumbinner {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .thumbcaption {&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	max-height: 3em; /* = 3 lignes de texte en line-height = 1em)*/&lt;br /&gt;
	background-color: rgba(0,0,0,0.6);&lt;br /&gt;
	text-align: left !important;&lt;br /&gt;
	color: #fff;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	line-height: 1.1em;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	text-overflow: ellipsis;&lt;br /&gt;
	-o-text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .thumbinner:hover .thumbcaption {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table .thumbcaption a.internal{&lt;br /&gt;
     color: #FFF !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ----- Categories ----------------------- */&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories h3 {&lt;br /&gt;
	display: none;&lt;br /&gt;
	/* These headings didn&#039;t make sense with our custom sortkeys (all beginning with letter &amp;quot;C&amp;quot;) */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Category tree styling (works in conjonction with:&lt;br /&gt;
    &amp;gt; [[MediaWiki:Categorytree-expand-bullet]],&lt;br /&gt;
    &amp;gt; [[MediaWiki:Categorytree-collapse-bullet]]&lt;br /&gt;
    &amp;gt; [[MediaWiki:Categorytree-empty-bullet]] */&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories ul {&lt;br /&gt;
	list-style: none none;&lt;br /&gt;
	margin-left: 0.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories span.CategoryTreeBullet {&lt;br /&gt;
	background: url(https://stock.wikimini.org/w/images/folder-horizontal-open.png) no-repeat left top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories span.CategoryTreeBullet span {&lt;br /&gt;
	color:transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories .CategoryTreeItem span:last-child {&lt;br /&gt;
	color: #888;&lt;br /&gt;
	display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.CategoryTreeChildren {&lt;br /&gt;
	margin-left: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Templates -------------------- */&lt;br /&gt;
&lt;br /&gt;
/* Template:Lang */&lt;br /&gt;
&lt;br /&gt;
#lang-header {&lt;br /&gt;
	margin-bottom: 16px;&lt;br /&gt;
	zoom: 1;&lt;br /&gt;
	filter: alpha(opacity=70);&lt;br /&gt;
	opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header:hover {&lt;br /&gt;
	zoom: 1;&lt;br /&gt;
	filter: alpha(opacity=100);&lt;br /&gt;
	opacity: 1.0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header ul {&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0 20px 0 24px;&lt;br /&gt;
	float:left;&lt;br /&gt;
	background: url(&#039;https://stock.wikimini.org/w/images/thumb/5/5c/Globe_icon.png/16px-Globe_icon.png&#039;) no-repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header li {&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header li:after {&lt;br /&gt;
	content: &amp;quot;\007C&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header li:last-child:after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Footer ----------------------- */&lt;br /&gt;
&lt;br /&gt;
#f-poweredbyico {&lt;br /&gt;
	display:none&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Remove distraction and unnecessary clutter ----------------------- */&lt;br /&gt;
&lt;br /&gt;
/* Options in the edit form */&lt;br /&gt;
&lt;br /&gt;
.editOptions #wpSummaryLabel,&lt;br /&gt;
.editOptions input#wpSummary,&lt;br /&gt;
.editOptions input#wpMinoredit,&lt;br /&gt;
.editOptions input#wpWatchthis,&lt;br /&gt;
.editOptions input#wpDiff,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
&lt;br /&gt;
/* More options in upload page */&lt;br /&gt;
#mw-upload-table input#wpWatchthis,&lt;br /&gt;
#mw-upload-table input#wpIgnoreWarning,&lt;br /&gt;
#mw-upload-table label[for=wpWatchthis],&lt;br /&gt;
#mw-upload-table label[for=wpIgnoreWarning] {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Unused namespaces in advanced search form */&lt;br /&gt;
/* (talk pages are being replaced by LiquidThreads) */&lt;br /&gt;
&lt;br /&gt;
form#powersearch input#mw-search-ns1,&lt;br /&gt;
form#powersearch label[for=mw-search-ns1],&lt;br /&gt;
form#powersearch input#mw-search-ns7,&lt;br /&gt;
form#powersearch label[for=mw-search-ns7],&lt;br /&gt;
form#powersearch input#mw-search-ns13,&lt;br /&gt;
form#powersearch label[for=mw-search-ns13],&lt;br /&gt;
form#powersearch input#mw-search-ns3,&lt;br /&gt;
form#powersearch label[for=mw-search-ns3],&lt;br /&gt;
form#powersearch input#mw-search-ns9,&lt;br /&gt;
form#powersearch label[for=mw-search-ns9],&lt;br /&gt;
form#powersearch input#mw-search-ns15,&lt;br /&gt;
form#powersearch label[for=mw-search-ns15],&lt;br /&gt;
form#powersearch input#mw-search-ns5,&lt;br /&gt;
form#powersearch label[for=mw-search-ns5],&lt;br /&gt;
form#powersearch input#mw-search-ns11,&lt;br /&gt;
form#powersearch label[for=mw-search-ns11],&lt;br /&gt;
form#powersearch input#mw-search-ns91,&lt;br /&gt;
form#powersearch label[for=mw-search-ns91],&lt;br /&gt;
form#powersearch input#mw-search-ns92,&lt;br /&gt;
form#powersearch label[for=mw-search-ns92],&lt;br /&gt;
form#powersearch input#mw-search-ns93,&lt;br /&gt;
form#powersearch label[for=mw-search-ns93] {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Links pointing to anonyous user&#039;s page and talk page */&lt;br /&gt;
&lt;br /&gt;
li#pt-anonuserpage,&lt;br /&gt;
li#pt-anontalk {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &amp;quot;Rename&amp;quot; link on user pages */&lt;br /&gt;
&lt;br /&gt;
body.ns-2 li#ca-move {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &amp;quot;Edit&amp;quot; button on category pages (to prevent newbies to edit these pages and mess up sortkeys */&lt;br /&gt;
.ns-14 #ca-edit {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Toolbox */&lt;br /&gt;
&lt;br /&gt;
li#t-whatlinkshere,&lt;br /&gt;
li#t-recentchangeslinked,&lt;br /&gt;
li#t-print,&lt;br /&gt;
li#t-permalink,&lt;br /&gt;
li#t-log {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Below is some CSS code that was included into the Wikimini skin that we also need here ----------------------- */&lt;br /&gt;
&lt;br /&gt;
/* ============================= Wikimini Boîte déroulante ====================== */&lt;br /&gt;
&lt;br /&gt;
div.BoxenVerschmelzen,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
        margin: 0px;&lt;br /&gt;
        padding: 2px;&lt;br /&gt;
        border: 1px solid #aaaaaa;&lt;br /&gt;
        text-align: center;&lt;br /&gt;
        border-collapse: collapse;&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.BoxenVerschmelzen div.NavFrame {&lt;br /&gt;
        border-style: none;&lt;br /&gt;
        border-style: hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
        border-top-style: none;&lt;br /&gt;
        border-top-style: hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
        background-color: #ffffff;&lt;br /&gt;
        margin: 0px;&lt;br /&gt;
        padding: 2px;&lt;br /&gt;
        float: left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
        height: 1.6em;&lt;br /&gt;
        font-weight: bold;&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
        background-color: #efefef;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p {&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavContent {&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
        margin: 0px;&lt;br /&gt;
        padding: 0px;&lt;br /&gt;
        line-height: 1px;&lt;br /&gt;
        clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.NavToggle {&lt;br /&gt;
&lt;br /&gt;
   font-size: x-small;&lt;br /&gt;
   float:right;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
canvas img{&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   height: 100px;&lt;br /&gt;
   border: 2px solid #ffffff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-personal-signature {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
fieldset#mw-prefsection-rendering-skin {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-rendering-files {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-rendering-diffs {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-rendering-advancedrendering {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-userlogin-help {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=157652</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.css&amp;diff=157652"/>
		<updated>2017-09-02T07:07:06Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will affect users of the Vector skin */&lt;br /&gt;
&lt;br /&gt;
/* ----- General layout and design ----------------------- */&lt;br /&gt;
&lt;br /&gt;
#globalWrapper {&lt;br /&gt;
	max-width: 1140px;&lt;br /&gt;
	margin-left: auto;&lt;br /&gt;
	margin-right: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#column-one {&lt;br /&gt;
	position: relative !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media all and (max-width: 700px) {&lt;br /&gt;
	#column-one, #footer { display: none; }&lt;br /&gt;
	#content { margin-left: 0 !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
	margin: 0 2.2em;&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-cactions {&lt;br /&gt;
	margin-left: 5.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-cactions li  {&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-cactions li:hover {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pBody {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	-webkit-border-radius: 20px;&lt;br /&gt;
	-moz-border-radius: 20px;&lt;br /&gt;
	-o-border-radius: 20px;&lt;br /&gt;
	-ms-border-radius: 20px;&lt;br /&gt;
	-khtml-border-radius: 20px;&lt;br /&gt;
	border-radius: 20px;&lt;br /&gt;
	padding: 5px;&lt;br /&gt;
	margin: 0.5em 0 0.8em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo {&lt;br /&gt;
	left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#content {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	min-height: 300px;&lt;br /&gt;
        margin-top: 20px;&lt;br /&gt;
	margin-left: 10.4em;&lt;br /&gt;
	padding: 20px 30px;&lt;br /&gt;
	-webkit-border-radius: 20px;&lt;br /&gt;
	-moz-border-radius: 20px;&lt;br /&gt;
	-o-border-radius: 20px;&lt;br /&gt;
	-ms-border-radius: 20px;&lt;br /&gt;
	-khtml-border-radius: 20px;&lt;br /&gt;
	border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	border-bottom: 0;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	line-height: 1.1em;&lt;br /&gt;
	margin: 1em 0 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h1 { font-size: 240%; }&lt;br /&gt;
h2 { font-size: 175%; border-left: 8px solid #fabd23; padding-left: 10px; display: inline-block; }&lt;br /&gt;
h3 { font-size: 165%; }&lt;br /&gt;
h4 { font-size: 145%; }&lt;br /&gt;
h5 { font-size: 115%; font-weight: bold; }&lt;br /&gt;
h6 { font-size: 100%; font-weight: bold; }&lt;br /&gt;
&lt;br /&gt;
h1#firstHeading, h1#firstHeading2 {&lt;br /&gt;
	font-size: 240%;&lt;br /&gt;
	margin-bottom: 1em;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
	padding-bottom: 0.3em;&lt;br /&gt;
	padding-top: 0;&lt;br /&gt;
	color: #444444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.firstHeading:first-letter {&lt;br /&gt;
	background-color: #444444;&lt;br /&gt;
	color: white;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	float: left;&lt;br /&gt;
	font-size: 1.3em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	letter-spacing: -1px;&lt;br /&gt;
	margin-right: 3px;&lt;br /&gt;
	padding: 5px 6px 5px 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*.page-Main_Page h1#firstHeading2 {&lt;br /&gt;
	padding-top: 0;&lt;br /&gt;
}*/&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page object p {&lt;br /&gt;
	background-image: url(https://stock.wikimini.org/w/assets/carousel/background-no_flash.jpg);&lt;br /&gt;
	width:430px;&lt;br /&gt;
	height:420px;&lt;br /&gt;
	color:#ccc;&lt;br /&gt;
	font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form#searchbox {&lt;br /&gt;
	padding: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form#searchbox input {&lt;br /&gt;
	font-size: 1.3em;&lt;br /&gt;
	margin:5px;&lt;br /&gt;
	padding:4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form#searchbox input#mw-inputbox-ns6,&lt;br /&gt;
form#searchbox label {&lt;br /&gt;
	display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.subtitle {&lt;br /&gt;
	display: block;&lt;br /&gt;
	margin-left: 6px;&lt;br /&gt;
	color: #888;&lt;br /&gt;
	font-size: 45%;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: #fff;&lt;br /&gt;
	border: #cdcdcd 1px dashed;&lt;br /&gt;
	border-style: none none dashed;&lt;br /&gt;
	color: #fff;&lt;br /&gt;
	margin: 2.3em 0 2em 0;&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p {&lt;br /&gt;
	margin: .8em 0 1em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchGoButton {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.clear {&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.readmore {&lt;br /&gt;
	margin: 1.5em .8em 1.3em 3em;&lt;br /&gt;
	background: url(https://stock.wikimini.org/w/images/9/9f/Puce-rouge2.gif) no-repeat left top;&lt;br /&gt;
	padding-left: 32px;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ----- 2 columns page layout ----------------------- */&lt;br /&gt;
&lt;br /&gt;
.ColContainer {&lt;br /&gt;
	width:100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.LeftColumn  {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
.RightColumn {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	float:right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Min-width 2 columns page layout ----------------------- */&lt;br /&gt;
&lt;br /&gt;
.RespColContainer {&lt;br /&gt;
	width:100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.RespLeftColumn  {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	min-width: 430px;&lt;br /&gt;
	float:left;&lt;br /&gt;
}&lt;br /&gt;
.RespRightColumn {&lt;br /&gt;
	width:50%;&lt;br /&gt;
	min-width: 430px;&lt;br /&gt;
	float:right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media all and (max-width: 1170px) {&lt;br /&gt;
	.RespLeftColumn  {&lt;br /&gt;
		width:450px;&lt;br /&gt;
		float:none;&lt;br /&gt;
		display:block;&lt;br /&gt;
		position:relative;&lt;br /&gt;
		margin-left:auto;&lt;br /&gt;
		margin-right:auto;&lt;br /&gt;
	}&lt;br /&gt;
	.RespRightColumn {&lt;br /&gt;
		width:450px;&lt;br /&gt;
		float:none;&lt;br /&gt;
		display:block;&lt;br /&gt;
		position:relative;&lt;br /&gt;
		margin-left:auto;&lt;br /&gt;
		margin-right:auto;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Files pages ----------------------- */&lt;br /&gt;
&lt;br /&gt;
ul#filetoc {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#file {&lt;br /&gt;
	font-size: 11px;&lt;br /&gt;
	margin-bottom: 16px;&lt;br /&gt;
	padding: 0px 50px 20px;&lt;br /&gt;
	border-bottom: 1px solid #ccc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#file img {&lt;br /&gt;
	padding-bottom: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2#filehistory {&lt;br /&gt;
	border-top: 2px solid #ccc;&lt;br /&gt;
	border-left: 0;&lt;br /&gt;
	padding-top: 40px;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Thumbnails ----------------------- */&lt;br /&gt;
&lt;br /&gt;
div.thumb {&lt;br /&gt;
	margin-bottom: 1em;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	padding: 20px 22px !important;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
	text-align: center !important;&lt;br /&gt;
	/*box-shadow: 0px 0px 6px #bbb inset;*/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
html .thumbimage {&lt;br /&gt;
	border: 1px solid #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
html .thumbimage:hover {&lt;br /&gt;
	opacity:.8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
html .thumbcaption {&lt;br /&gt;
	text-align: center !important;&lt;br /&gt;
	padding: 5px;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
	color: #888888;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.magnify, div.magnify a, div.magnify img {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.tright {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.tleft {&lt;br /&gt;
	margin-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Other images ----------------------- */&lt;br /&gt;
&lt;br /&gt;
div.floatright {&lt;br /&gt;
	margin: 0 0 2em 2em;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.floatleft {&lt;br /&gt;
	margin: 0 2em 2em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Galeries ----------------------- */&lt;br /&gt;
&lt;br /&gt;
table.gallery {&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.gallery td {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	padding: 18px 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.gallerybox div.thumb {&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.gallerybox div.thumb:hover {&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	box-shadow: 0px 0px 6px #bbb inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.gallerytext {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	color: #888;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Visual indexes of images on main page (&amp;quot;thumbs-table&amp;quot;) ----------------------- */&lt;br /&gt;
&lt;br /&gt;
.thumbs-table th {&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table th img {&lt;br /&gt;
	background-color: #fff;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
	float: left;&lt;br /&gt;
	padding-right: 10px;&lt;br /&gt;
	margin-right: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table h3 {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table .subtitle {&lt;br /&gt;
	color: #888;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table h3:hover .subtitle {&lt;br /&gt;
	background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table a:hover {&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Réinitialisation de certains styles non désirés pour les thumbs: */&lt;br /&gt;
.thumbs-table .thumb,&lt;br /&gt;
.thumbs-table .thumbinner,&lt;br /&gt;
.thumbs-table .thumbimage,&lt;br /&gt;
.thumbs-table .tright,&lt;br /&gt;
.thumbs-table .tleft {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0 !important;&lt;br /&gt;
	border: 0;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	clear: none;&lt;br /&gt;
	float: none;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .thumbinner {&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .magnify {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Affichage de la légende (caption) sur l&#039;image */&lt;br /&gt;
.thumbs-table .thumbinner {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .thumbcaption {&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	max-height: 3em; /* = 3 lignes de texte en line-height = 1em)*/&lt;br /&gt;
	background-color: rgba(0,0,0,0.6);&lt;br /&gt;
	text-align: left !important;&lt;br /&gt;
	color: #fff;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	line-height: 1.1em;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	text-overflow: ellipsis;&lt;br /&gt;
	-o-text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.thumbs-table .thumbinner:hover .thumbcaption {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.thumbs-table .thumbcaption a.internal{&lt;br /&gt;
     color: #FFF !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ----- Categories ----------------------- */&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories h3 {&lt;br /&gt;
	display: none;&lt;br /&gt;
	/* These headings didn&#039;t make sense with our custom sortkeys (all beginning with letter &amp;quot;C&amp;quot;) */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Category tree styling (works in conjonction with:&lt;br /&gt;
    &amp;gt; [[MediaWiki:Categorytree-expand-bullet]],&lt;br /&gt;
    &amp;gt; [[MediaWiki:Categorytree-collapse-bullet]]&lt;br /&gt;
    &amp;gt; [[MediaWiki:Categorytree-empty-bullet]] */&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories ul {&lt;br /&gt;
	list-style: none none;&lt;br /&gt;
	margin-left: 0.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories span.CategoryTreeBullet {&lt;br /&gt;
	background: url(http://stock.wikimini.org/w/images/folder-horizontal-open.png) no-repeat left top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories span.CategoryTreeBullet span {&lt;br /&gt;
	color:transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories .CategoryTreeItem span:last-child {&lt;br /&gt;
	color: #888;&lt;br /&gt;
	display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.CategoryTreeChildren {&lt;br /&gt;
	margin-left: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Templates -------------------- */&lt;br /&gt;
&lt;br /&gt;
/* Template:Lang */&lt;br /&gt;
&lt;br /&gt;
#lang-header {&lt;br /&gt;
	margin-bottom: 16px;&lt;br /&gt;
	zoom: 1;&lt;br /&gt;
	filter: alpha(opacity=70);&lt;br /&gt;
	opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header:hover {&lt;br /&gt;
	zoom: 1;&lt;br /&gt;
	filter: alpha(opacity=100);&lt;br /&gt;
	opacity: 1.0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header ul {&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0 20px 0 24px;&lt;br /&gt;
	float:left;&lt;br /&gt;
	background: url(&#039;http://stock.wikimini.org/w/images/thumb/5/5c/Globe_icon.png/16px-Globe_icon.png&#039;) no-repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header li {&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header li:after {&lt;br /&gt;
	content: &amp;quot;\007C&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#lang-header li:last-child:after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Footer ----------------------- */&lt;br /&gt;
&lt;br /&gt;
#f-poweredbyico {&lt;br /&gt;
	display:none&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Remove distraction and unnecessary clutter ----------------------- */&lt;br /&gt;
&lt;br /&gt;
/* Options in the edit form */&lt;br /&gt;
&lt;br /&gt;
.editOptions #wpSummaryLabel,&lt;br /&gt;
.editOptions input#wpSummary,&lt;br /&gt;
.editOptions input#wpMinoredit,&lt;br /&gt;
.editOptions input#wpWatchthis,&lt;br /&gt;
.editOptions input#wpDiff,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
&lt;br /&gt;
/* More options in upload page */&lt;br /&gt;
#mw-upload-table input#wpWatchthis,&lt;br /&gt;
#mw-upload-table input#wpIgnoreWarning,&lt;br /&gt;
#mw-upload-table label[for=wpWatchthis],&lt;br /&gt;
#mw-upload-table label[for=wpIgnoreWarning] {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Unused namespaces in advanced search form */&lt;br /&gt;
/* (talk pages are being replaced by LiquidThreads) */&lt;br /&gt;
&lt;br /&gt;
form#powersearch input#mw-search-ns1,&lt;br /&gt;
form#powersearch label[for=mw-search-ns1],&lt;br /&gt;
form#powersearch input#mw-search-ns7,&lt;br /&gt;
form#powersearch label[for=mw-search-ns7],&lt;br /&gt;
form#powersearch input#mw-search-ns13,&lt;br /&gt;
form#powersearch label[for=mw-search-ns13],&lt;br /&gt;
form#powersearch input#mw-search-ns3,&lt;br /&gt;
form#powersearch label[for=mw-search-ns3],&lt;br /&gt;
form#powersearch input#mw-search-ns9,&lt;br /&gt;
form#powersearch label[for=mw-search-ns9],&lt;br /&gt;
form#powersearch input#mw-search-ns15,&lt;br /&gt;
form#powersearch label[for=mw-search-ns15],&lt;br /&gt;
form#powersearch input#mw-search-ns5,&lt;br /&gt;
form#powersearch label[for=mw-search-ns5],&lt;br /&gt;
form#powersearch input#mw-search-ns11,&lt;br /&gt;
form#powersearch label[for=mw-search-ns11],&lt;br /&gt;
form#powersearch input#mw-search-ns91,&lt;br /&gt;
form#powersearch label[for=mw-search-ns91],&lt;br /&gt;
form#powersearch input#mw-search-ns92,&lt;br /&gt;
form#powersearch label[for=mw-search-ns92],&lt;br /&gt;
form#powersearch input#mw-search-ns93,&lt;br /&gt;
form#powersearch label[for=mw-search-ns93] {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Links pointing to anonyous user&#039;s page and talk page */&lt;br /&gt;
&lt;br /&gt;
li#pt-anonuserpage,&lt;br /&gt;
li#pt-anontalk {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &amp;quot;Rename&amp;quot; link on user pages */&lt;br /&gt;
&lt;br /&gt;
body.ns-2 li#ca-move {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &amp;quot;Edit&amp;quot; button on category pages (to prevent newbies to edit these pages and mess up sortkeys */&lt;br /&gt;
.ns-14 #ca-edit {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Toolbox */&lt;br /&gt;
&lt;br /&gt;
li#t-whatlinkshere,&lt;br /&gt;
li#t-recentchangeslinked,&lt;br /&gt;
li#t-print,&lt;br /&gt;
li#t-permalink,&lt;br /&gt;
li#t-log {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ----- Below is some CSS code that was included into the Wikimini skin that we also need here ----------------------- */&lt;br /&gt;
&lt;br /&gt;
/* ============================= Wikimini Boîte déroulante ====================== */&lt;br /&gt;
&lt;br /&gt;
div.BoxenVerschmelzen,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
        margin: 0px;&lt;br /&gt;
        padding: 2px;&lt;br /&gt;
        border: 1px solid #aaaaaa;&lt;br /&gt;
        text-align: center;&lt;br /&gt;
        border-collapse: collapse;&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.BoxenVerschmelzen div.NavFrame {&lt;br /&gt;
        border-style: none;&lt;br /&gt;
        border-style: hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
        border-top-style: none;&lt;br /&gt;
        border-top-style: hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
        background-color: #ffffff;&lt;br /&gt;
        margin: 0px;&lt;br /&gt;
        padding: 2px;&lt;br /&gt;
        float: left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
        height: 1.6em;&lt;br /&gt;
        font-weight: bold;&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
        background-color: #efefef;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p {&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavContent {&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
        font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
        margin: 0px;&lt;br /&gt;
        padding: 0px;&lt;br /&gt;
        line-height: 1px;&lt;br /&gt;
        clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.NavToggle {&lt;br /&gt;
&lt;br /&gt;
   font-size: x-small;&lt;br /&gt;
   float:right;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
canvas img{&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   height: 100px;&lt;br /&gt;
   border: 2px solid #ffffff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-personal-signature {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
fieldset#mw-prefsection-rendering-skin {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-rendering-files {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-rendering-diffs {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fieldset#mw-prefsection-rendering-advancedrendering {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-userlogin-help {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157651</id>
		<title>Main Page/en</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157651"/>
		<updated>2017-09-02T06:47:37Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Welcome on Wikimini Stock!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock is a huge &#039;&#039;&#039;database of free images&#039;&#039;&#039; for kids &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(and older folks)&amp;lt;/span&amp;gt;! It contains more than &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographs and illustrations carefully organized into 570 thematic categories. Most of them are [[Wikimini:Terms of Use|freely usable]]!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Find an image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;tags&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Picture of the day • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|A sloth perched in a tree]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Did you know? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Every week, a new discovery with a picture&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The whale shark is the largest fish currently living on Earth. It weighs several tons and can measure up to 18 meters long.&lt;br /&gt;
&lt;br /&gt;
18 meters, that&#039;s as long as two school buses!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine Learn more &#039;&#039;(French)&#039;&#039;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images by topics • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 thematic categories&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Complete tree view&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Selections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Galleries of specially selected images&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Drawings by Wikiminauts|alt=Drawings by Wikiminauts]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Drawings by Wikiminauts]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Flags of the world‎|alt=Flags]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Flags of the world‎]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Baby animals with their mothers|alt=Mother and baby gorilla]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Baby animals with their mothers]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Child and teen stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Child and teen stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Human body|alt=Human body]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Human body]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Famous monuments|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Famous monuments]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Optical illusion|alt=Optical illusion]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Optical illusions]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animal records|alt=Cheetah]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animal records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
More galleries in our [[:Category:Topics|thematic categories]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ A [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;picture&amp;lt;/span&amp;gt;]] is worth a thousand words ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • 6th century BC&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Smiling man|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Help us! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;People like you&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Did you know that this image database is maintained by volunteers?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock is a website based on everyone&#039;s collaboration and participation. All images are selected, described and classified by users of all ages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Discover our [[Special:ContributionScores|best archivists]], &amp;lt;br /&amp;gt; and how you can [[Help:How to participate|get involved yourself]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157650</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157650"/>
		<updated>2017-09-02T06:45:58Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Bienvenue sur Wikimini Stock&amp;amp;nbsp;!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock est une gigantesque &#039;&#039;&#039;banque d&#039;images gratuites&#039;&#039;&#039; pour enfants &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(et plus grands)&amp;lt;/span&amp;gt;&amp;amp;nbsp;! Elle contient plus de &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographies et illustrations soigneusement organisées en 570 catégories thématiques. Pratiquement toutes sont [[Wikimini:Terms of Use|libres d&#039;utilisation]]&amp;amp;nbsp;!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Chercher une image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tags&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Image du jour • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|Un paresseux perché sur son arbre]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Le savais-tu&amp;amp;nbsp;? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Une découverte en image chaque semaine&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;&#039;requin baleine&#039;&#039;&#039; est le plus grand poisson vivant actuellement sur Terre. Il pèse plusieurs tonnes et peut mesurer jusqu&#039;à 18 mètres.&lt;br /&gt;
&lt;br /&gt;
18 mètres, c&#039;est presque la longueur de deux autobus scolaires&amp;amp;nbsp;!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine En savoir plus]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images par sujets • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 catégories thématiques&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Arborescence complète&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Sélections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des galeries d&#039;images spécialement sélectionnées&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Dessins des Wikiminautes|alt=Dessins des Wikiminautes]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Dessins des Wikiminautes]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Drapeaux des pays du monde|alt=Drapeaux]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Drapeaux des pays du monde]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Bébés animaux et leur mère|alt=Mère et son bébé gorille]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Bébés animaux et leur mère]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Enfants et ados stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Enfants et ados stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Corps humain|alt=Corps humain]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Corps humain]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Monuments célèbres|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Monuments célèbres]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Illusions d&#039;optique|alt=Illusion d&#039;optique]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Illusions d&#039;optique]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animaux de tous les records|alt=Guépard]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animaux de tous les records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Plus de galeries dans nos [[:Category:Topics|catégories thématiques]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ Une [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;image&amp;lt;/span&amp;gt;]] vaut mille mots ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • VIe s. av. J.-C.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Homme souriant|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Aidez-nous ! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des gens comme vous&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Saviez-vous que cette banque d&#039;images est maintenue par des volontaires ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock est un site basé sur la collaboration et la participation de tous. Toutes les images y sont sélectionnées, décrites et classées par des internautes de tous âges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Découvrez nos [[Special:ContributionScores|meilleurs archivistes]] &amp;lt;br /&amp;gt;et comment spontanément [[Help:How to participate|participer à votre tour]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157649</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157649"/>
		<updated>2017-09-02T06:44:01Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Bienvenue sur Wikimini Stock&amp;amp;nbsp;!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock est une gigantesque &#039;&#039;&#039;banque d&#039;images gratuites&#039;&#039;&#039; pour enfants &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(et plus grands)&amp;lt;/span&amp;gt;&amp;amp;nbsp;! Elle contient plus de &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographies et illustrations soigneusement organisées en 570 catégories thématiques. Pratiquement toutes sont [[Wikimini:Terms of Use|libres d&#039;utilisation]]&amp;amp;nbsp;!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Chercher une image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tags&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Image du jour • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|Un paresseux perché sur son arbre]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Le savais-tu&amp;amp;nbsp;? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Une découverte en image chaque semaine&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;&#039;requin baleine&#039;&#039;&#039; est le plus grand poisson vivant actuellement sur Terre. Il pèse plusieurs tonnes et peut mesurer jusqu&#039;à 18 mètres.&lt;br /&gt;
&lt;br /&gt;
18 mètres, c&#039;est presque la longueur de deux autobus scolaires&amp;amp;nbsp;!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine En savoir plus]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images par sujets • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 catégories thématiques&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Arborescence complète&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Sélections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des galeries d&#039;images spécialement sélectionnées&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Dessins des Wikiminautes|alt=Dessins des Wikiminautes]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Dessins des Wikiminautes]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Drapeaux des pays du monde|alt=Drapeaux]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Drapeaux des pays du monde]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Bébés animaux et leur mère|alt=Mère et son bébé gorille]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Bébés animaux et leur mère]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Enfants et ados stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Enfants et ados stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Corps humain|alt=Corps humain]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Corps humain]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Monuments célèbres|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Monuments célèbres]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Illusions d&#039;optique|alt=Illusion d&#039;optique]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Illusions d&#039;optique]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animaux de tous les records|alt=Guépard]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animaux de tous les records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Plus de galeries dans nos [[:Category:Topics|catégories thématiques]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ Une [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;image&amp;lt;/span&amp;gt;]] vaut mille mots ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • VIe s. av. J.-C.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Homme souriant|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Aidez-nous ! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des gens comme vous&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Saviez-vous que cette banque d&#039;images est maintenue par des volontaires ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock est un site basé sur la collaboration et la participation de tous. Toutes les images y sont sélectionnées, décrites et classées par des internautes de tous âges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Découvrez nos [[Special:ContributionScores|meilleurs archivistes]] &amp;lt;br /&amp;gt;et comment spontanément [[Help:How to participate|participer à votre tour]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157648</id>
		<title>Main Page/en</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157648"/>
		<updated>2017-09-02T06:41:59Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Welcome on Wikimini Stock!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock is a huge &#039;&#039;&#039;database of free images&#039;&#039;&#039; for kids &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(and older folks)&amp;lt;/span&amp;gt;! It contains more than &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographs and illustrations carefully organized into 570 thematic categories. Most of them are [[Wikimini:Terms of Use|freely usable]]!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Find an image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;tags&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Picture of the day • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|A sloth perched in a tree]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Did you know? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Every week, a new discovery with a picture&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The whale shark is the largest fish currently living on Earth. It weighs several tons and can measure up to 18 meters long.&lt;br /&gt;
&lt;br /&gt;
18 meters, that&#039;s as long as two school buses!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine Learn more &#039;&#039;(French)&#039;&#039;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images by topics • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 thematic categories&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Complete tree view&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Selections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Galleries of specially selected images&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Drawings by Wikiminauts|alt=Drawings by Wikiminauts]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Drawings by Wikiminauts]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Flags of the world‎|alt=Flags]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Flags of the world‎]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Baby animals with their mothers|alt=Mother and baby gorilla]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Baby animals with their mothers]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Child and teen stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Child and teen stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Human body|alt=Human body]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Human body]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Famous monuments|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Famous monuments]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Optical illusion|alt=Optical illusion]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Optical illusions]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animal records|alt=Cheetah]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animal records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
More galleries in our [[:Category:Topics|thematic categories]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ A [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;picture&amp;lt;/span&amp;gt;]] is worth a thousand words ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • 6th century BC&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Smiling man|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Help us! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;People like you&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Did you know that this image database is maintained by volunteers?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock is a website based on everyone&#039;s collaboration and participation. All images are selected, described and classified by users of all ages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Discover our [[Special:ContributionScores|best archivists]], &amp;lt;br /&amp;gt; and how you can [[Help:How to participate|get involved yourself]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page&amp;diff=157647</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page&amp;diff=157647"/>
		<updated>2017-09-02T06:13:14Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Language detection based on the value of the MediaWiki:about system message --&amp;gt;&lt;br /&gt;
{{#switch: {{int:about}}&lt;br /&gt;
 | À propos     = {{:{{FULLPAGENAME}}/fr}}&lt;br /&gt;
 | Om           = {{:{{FULLPAGENAME}}/sv}}&lt;br /&gt;
 | #default     = {{:{{FULLPAGENAME}}/en}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157486</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157486"/>
		<updated>2017-02-25T10:26:08Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* License choice-You are the author&lt;br /&gt;
** Self-made-Wikimini | License choice-Self-made-Wikimini&lt;br /&gt;
** Self-made-CC BY-SA | License choice-Self-made-CC BY-SA&lt;br /&gt;
* License choice-You are not the author&lt;br /&gt;
** License choice-Authorized by a license&lt;br /&gt;
*** CC BY | License choice-CC BY&lt;br /&gt;
*** CC BY-ND | License choice-CC BY-ND&lt;br /&gt;
*** CC BY-SA | License choice-CC BY-SA&lt;br /&gt;
*** CC BY-NC | License choice-CC BY-NC&lt;br /&gt;
*** CC BY-NC-ND | License choice-CC BY-NC-ND&lt;br /&gt;
*** CC BY-NC-SA | License choice-CC BY-NC-SA&lt;br /&gt;
*** CC0 | License choice-CC0}}&lt;br /&gt;
*** GNU | License choice-GNU}}&lt;br /&gt;
*** FAL | License choice-Free Art License&lt;br /&gt;
** License choice-Authorized for another reason&lt;br /&gt;
*** Public domain | License choice-Public domain&lt;br /&gt;
*** Special permission | License choice-Special permission&lt;br /&gt;
** License choice-Special cases&lt;br /&gt;
*** Fair use | License choice-Fair use&lt;br /&gt;
** License choice-Unauthorized&lt;br /&gt;
*** Missing copyright information | License choice-Missing copyright information&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157485</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157485"/>
		<updated>2017-02-25T10:02:30Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        } catch(e) {&lt;br /&gt;
          //something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157484</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157484"/>
		<updated>2017-02-25T09:53:50Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{int:License choice-You are the author}}&lt;br /&gt;
** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}}&lt;br /&gt;
** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}&lt;br /&gt;
* {{int:License choice-You are not the author}}&lt;br /&gt;
** {{int:License choice-Authorized by a license}}&lt;br /&gt;
*** CC BY | {{int:License choice-CC BY}}&lt;br /&gt;
*** CC BY-ND | {{int:License choice-CC BY-ND}}&lt;br /&gt;
*** CC BY-SA | {{int:License choice-CC BY-SA}}&lt;br /&gt;
*** CC BY-NC | {{int:License choice-CC BY-NC}}&lt;br /&gt;
*** CC BY-NC-ND | {{int:License choice-CC BY-NC-ND}}&lt;br /&gt;
*** CC BY-NC-SA | {{int:License choice-CC BY-NC-SA}}&lt;br /&gt;
*** CC0 | {{int:License choice-CC0}}&lt;br /&gt;
*** GNU | {{int:License choice-GNU}}&lt;br /&gt;
*** FAL | {{int:License choice-Free Art License}}&lt;br /&gt;
** {{int:License choice-Authorized for another reason}}&lt;br /&gt;
*** Public domain | {{int:License choice-Public domain}}&lt;br /&gt;
*** Special permission | {{int:License choice-Special permission}}&lt;br /&gt;
** {{int:License choice-Special cases}}&lt;br /&gt;
*** Fair use | {{int:License choice-Fair use}}&lt;br /&gt;
** {{int:License choice-Unauthorized}}&lt;br /&gt;
*** Missing copyright information | {{int:License choice-Missing copyright information}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157483</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157483"/>
		<updated>2017-02-25T09:51:37Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{License choice-You are the author}}&lt;br /&gt;
** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}}&lt;br /&gt;
** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}&lt;br /&gt;
* {{int:License choice-You are not the author}}&lt;br /&gt;
** {{int:License choice-Authorized by a license}}&lt;br /&gt;
*** CC BY | {{int:License choice-CC BY}}&lt;br /&gt;
*** CC BY-ND | {{int:License choice-CC BY-ND}}&lt;br /&gt;
*** CC BY-SA | {{int:License choice-CC BY-SA}}&lt;br /&gt;
*** CC BY-NC | {{int:License choice-CC BY-NC}}&lt;br /&gt;
*** CC BY-NC-ND | {{int:License choice-CC BY-NC-ND}}&lt;br /&gt;
*** CC BY-NC-SA | {{int:License choice-CC BY-NC-SA}}&lt;br /&gt;
*** CC0 | {{int:License choice-CC0}}&lt;br /&gt;
*** GNU | {{int:License choice-GNU}}&lt;br /&gt;
*** FAL | {{int:License choice-Free Art License}}&lt;br /&gt;
** {{int:License choice-Authorized for another reason}}&lt;br /&gt;
*** Public domain | {{int:License choice-Public domain}}&lt;br /&gt;
*** Special permission | {{int:License choice-Special permission}}&lt;br /&gt;
** {{int:License choice-Special cases}}&lt;br /&gt;
*** Fair use | {{int:License choice-Fair use}}&lt;br /&gt;
** {{int:License choice-Unauthorized}}&lt;br /&gt;
*** Missing copyright information | {{int:License choice-Missing copyright information}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157482</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157482"/>
		<updated>2017-02-23T18:43:58Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        } catch(e) {&lt;br /&gt;
          //something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses/fr&amp;diff=157481</id>
		<title>MediaWiki:Licenses/fr</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses/fr&amp;diff=157481"/>
		<updated>2017-02-23T17:54:22Z</updated>

		<summary type="html">&lt;p&gt;Mory: Replaced content with &amp;quot;-&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses/fr&amp;diff=157480</id>
		<title>MediaWiki:Licenses/fr</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses/fr&amp;diff=157480"/>
		<updated>2017-02-23T17:52:32Z</updated>

		<summary type="html">&lt;p&gt;Mory: Created page with &amp;quot;* {{int:License choice-You are the author}} ** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}} ** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{int:License choice-You are the author}}&lt;br /&gt;
** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}}&lt;br /&gt;
** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}&lt;br /&gt;
* {{int:License choice-You are not the author}}&lt;br /&gt;
** {{int:License choice-Authorized by a license}}&lt;br /&gt;
*** CC BY | {{int:License choice-CC BY}}&lt;br /&gt;
*** CC BY-ND | {{int:License choice-CC BY-ND}}&lt;br /&gt;
*** CC BY-SA | {{int:License choice-CC BY-SA}}&lt;br /&gt;
*** CC BY-NC | {{int:License choice-CC BY-NC}}&lt;br /&gt;
*** CC BY-NC-ND | {{int:License choice-CC BY-NC-ND}}&lt;br /&gt;
*** CC BY-NC-SA | {{int:License choice-CC BY-NC-SA}}&lt;br /&gt;
*** CC0 | {{int:License choice-CC0}}&lt;br /&gt;
*** GNU | {{int:License choice-GNU}}&lt;br /&gt;
*** FAL | {{int:License choice-Free Art License}}&lt;br /&gt;
** {{int:License choice-Authorized for another reason}}&lt;br /&gt;
*** Public domain | {{int:License choice-Public domain}}&lt;br /&gt;
*** Special permission | {{int:License choice-Special permission}}&lt;br /&gt;
** {{int:License choice-Special cases}}&lt;br /&gt;
*** Fair use | {{int:License choice-Fair use}}&lt;br /&gt;
** {{int:License choice-Unauthorized}}&lt;br /&gt;
*** Missing copyright information | {{int:License choice-Missing copyright information}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157479</id>
		<title>MediaWiki:Jquery.treeview.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157479"/>
		<updated>2017-02-23T16:24:13Z</updated>

		<summary type="html">&lt;p&gt;Mory: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157478</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157478"/>
		<updated>2017-02-23T16:23:48Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157477</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157477"/>
		<updated>2017-02-23T16:19:31Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157476</id>
		<title>MediaWiki:Jquery.treeview.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157476"/>
		<updated>2017-02-23T16:18:27Z</updated>

		<summary type="html">&lt;p&gt;Mory: Created page with &amp;quot;/*  * Treeview 1.4.2 - jQuery plugin to hide and show branches of a tree  *  * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/  *  * Copyright Jörn Zaefferer  *...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * Treeview 1.4.2 - jQuery plugin to hide and show branches of a tree&lt;br /&gt;
 *&lt;br /&gt;
 * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright Jörn Zaefferer&lt;br /&gt;
 * Released under the MIT license:&lt;br /&gt;
 *   http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
;(function($) {&lt;br /&gt;
&lt;br /&gt;
	// TODO rewrite as a widget, removing all the extra plugins&lt;br /&gt;
	$.extend($.fn, {&lt;br /&gt;
		swapClass: function(c1, c2) {&lt;br /&gt;
			var c1Elements = this.filter(&#039;.&#039; + c1);&lt;br /&gt;
			this.filter(&#039;.&#039; + c2).removeClass(c2).addClass(c1);&lt;br /&gt;
			c1Elements.removeClass(c1).addClass(c2);&lt;br /&gt;
			return this;&lt;br /&gt;
		},&lt;br /&gt;
		replaceClass: function(c1, c2) {&lt;br /&gt;
			return this.filter(&#039;.&#039; + c1).removeClass(c1).addClass(c2).end();&lt;br /&gt;
		},&lt;br /&gt;
		hoverClass: function(className) {&lt;br /&gt;
			className = className || &amp;quot;hover&amp;quot;;&lt;br /&gt;
			return this.hover(function() {&lt;br /&gt;
				$(this).addClass(className);&lt;br /&gt;
			}, function() {&lt;br /&gt;
				$(this).removeClass(className);&lt;br /&gt;
			});&lt;br /&gt;
		},&lt;br /&gt;
		heightToggle: function(animated, callback) {&lt;br /&gt;
			animated ?&lt;br /&gt;
				this.animate({ height: &amp;quot;toggle&amp;quot; }, animated, callback) :&lt;br /&gt;
				this.each(function(){&lt;br /&gt;
					jQuery(this)[ jQuery(this).is(&amp;quot;:hidden&amp;quot;) ? &amp;quot;show&amp;quot; : &amp;quot;hide&amp;quot; ]();&lt;br /&gt;
					if(callback)&lt;br /&gt;
						callback.apply(this, arguments);&lt;br /&gt;
				});&lt;br /&gt;
		},&lt;br /&gt;
		heightHide: function(animated, callback) {&lt;br /&gt;
			if (animated) {&lt;br /&gt;
				this.animate({ height: &amp;quot;hide&amp;quot; }, animated, callback);&lt;br /&gt;
			} else {&lt;br /&gt;
				this.hide();&lt;br /&gt;
				if (callback)&lt;br /&gt;
					this.each(callback);&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		prepareBranches: function(settings) {&lt;br /&gt;
			if (!settings.prerendered) {&lt;br /&gt;
				// mark last tree items&lt;br /&gt;
				this.filter(&amp;quot;:last-child:not(ul)&amp;quot;).addClass(CLASSES.last);&lt;br /&gt;
				// collapse whole tree, or only those marked as closed, anyway except those marked as open&lt;br /&gt;
				this.filter((settings.collapsed ? &amp;quot;&amp;quot; : &amp;quot;.&amp;quot; + CLASSES.closed) + &amp;quot;:not(.&amp;quot; + CLASSES.open + &amp;quot;)&amp;quot;).find(&amp;quot;&amp;gt;ul&amp;quot;).hide();&lt;br /&gt;
			}&lt;br /&gt;
			// return all items with sublists&lt;br /&gt;
			return this.filter(&amp;quot;:has(&amp;gt;ul)&amp;quot;);&lt;br /&gt;
		},&lt;br /&gt;
		applyClasses: function(settings, toggler) {&lt;br /&gt;
			// TODO use event delegation&lt;br /&gt;
			this.filter(&amp;quot;:has(&amp;gt;ul):not(:has(&amp;gt;a))&amp;quot;).find(&amp;quot;&amp;gt;span&amp;quot;).unbind(&amp;quot;click.treeview&amp;quot;).bind(&amp;quot;click.treeview&amp;quot;, function(event) {&lt;br /&gt;
				// don&#039;t handle click events on children, eg. checkboxes&lt;br /&gt;
				if ( this == event.target )&lt;br /&gt;
					toggler.apply($(this).next());&lt;br /&gt;
			}).add( $(&amp;quot;a&amp;quot;, this) ).hoverClass();&lt;br /&gt;
&lt;br /&gt;
			if (!settings.prerendered) {&lt;br /&gt;
				// handle closed ones first&lt;br /&gt;
				this.filter(&amp;quot;:has(&amp;gt;ul:hidden)&amp;quot;)&lt;br /&gt;
						.addClass(CLASSES.expandable)&lt;br /&gt;
						.replaceClass(CLASSES.last, CLASSES.lastExpandable);&lt;br /&gt;
&lt;br /&gt;
				// handle open ones&lt;br /&gt;
				this.not(&amp;quot;:has(&amp;gt;ul:hidden)&amp;quot;)&lt;br /&gt;
						.addClass(CLASSES.collapsable)&lt;br /&gt;
						.replaceClass(CLASSES.last, CLASSES.lastCollapsable);&lt;br /&gt;
&lt;br /&gt;
	            // create hitarea if not present&lt;br /&gt;
				var hitarea = this.find(&amp;quot;div.&amp;quot; + CLASSES.hitarea);&lt;br /&gt;
				if (!hitarea.length)&lt;br /&gt;
					hitarea = this.prepend(&amp;quot;&amp;lt;div class=\&amp;quot;&amp;quot; + CLASSES.hitarea + &amp;quot;\&amp;quot;/&amp;gt;&amp;quot;).find(&amp;quot;div.&amp;quot; + CLASSES.hitarea);&lt;br /&gt;
				hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {&lt;br /&gt;
					var classes = &amp;quot;&amp;quot;;&lt;br /&gt;
					$.each($(this).parent().attr(&amp;quot;class&amp;quot;).split(&amp;quot; &amp;quot;), function() {&lt;br /&gt;
						classes += this + &amp;quot;-hitarea &amp;quot;;&lt;br /&gt;
					});&lt;br /&gt;
					$(this).addClass( classes );&lt;br /&gt;
				})&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// apply event to hitarea&lt;br /&gt;
			this.find(&amp;quot;div.&amp;quot; + CLASSES.hitarea).click( toggler );&lt;br /&gt;
		},&lt;br /&gt;
		treeview: function(settings) {&lt;br /&gt;
&lt;br /&gt;
			settings = $.extend({&lt;br /&gt;
				cookieId: &amp;quot;treeview&amp;quot;&lt;br /&gt;
			}, settings);&lt;br /&gt;
&lt;br /&gt;
			if ( settings.toggle ) {&lt;br /&gt;
				var callback = settings.toggle;&lt;br /&gt;
				settings.toggle = function() {&lt;br /&gt;
					return callback.apply($(this).parent()[0], arguments);&lt;br /&gt;
				};&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// factory for treecontroller&lt;br /&gt;
			function treeController(tree, control) {&lt;br /&gt;
				// factory for click handlers&lt;br /&gt;
				function handler(filter) {&lt;br /&gt;
					return function() {&lt;br /&gt;
						// reuse toggle event handler, applying the elements to toggle&lt;br /&gt;
						// start searching for all hitareas&lt;br /&gt;
						toggler.apply( $(&amp;quot;div.&amp;quot; + CLASSES.hitarea, tree).filter(function() {&lt;br /&gt;
							// for plain toggle, no filter is provided, otherwise we need to check the parent element&lt;br /&gt;
							return filter ? $(this).parent(&amp;quot;.&amp;quot; + filter).length : true;&lt;br /&gt;
						}) );&lt;br /&gt;
						return false;&lt;br /&gt;
					};&lt;br /&gt;
				}&lt;br /&gt;
				// click on first element to collapse tree&lt;br /&gt;
				$(&amp;quot;a:eq(0)&amp;quot;, control).click( handler(CLASSES.collapsable) );&lt;br /&gt;
				// click on second to expand tree&lt;br /&gt;
				$(&amp;quot;a:eq(1)&amp;quot;, control).click( handler(CLASSES.expandable) );&lt;br /&gt;
				// click on third to toggle tree&lt;br /&gt;
				$(&amp;quot;a:eq(2)&amp;quot;, control).click( handler() );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// handle toggle event&lt;br /&gt;
			function toggler() {&lt;br /&gt;
				$(this)&lt;br /&gt;
					.parent()&lt;br /&gt;
					// swap classes for hitarea&lt;br /&gt;
					.find(&amp;quot;&amp;gt;.hitarea&amp;quot;)&lt;br /&gt;
						.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )&lt;br /&gt;
						.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )&lt;br /&gt;
					.end()&lt;br /&gt;
					// swap classes for parent li&lt;br /&gt;
					.swapClass( CLASSES.collapsable, CLASSES.expandable )&lt;br /&gt;
					.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )&lt;br /&gt;
					// find child lists&lt;br /&gt;
					.find( &amp;quot;&amp;gt;ul&amp;quot; )&lt;br /&gt;
					// toggle them&lt;br /&gt;
					.heightToggle( settings.animated, settings.toggle );&lt;br /&gt;
				if ( settings.unique ) {&lt;br /&gt;
					$(this).parent()&lt;br /&gt;
						.siblings()&lt;br /&gt;
						// swap classes for hitarea&lt;br /&gt;
						.find(&amp;quot;&amp;gt;.hitarea&amp;quot;)&lt;br /&gt;
							.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )&lt;br /&gt;
							.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )&lt;br /&gt;
						.end()&lt;br /&gt;
						.replaceClass( CLASSES.collapsable, CLASSES.expandable )&lt;br /&gt;
						.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )&lt;br /&gt;
						.find( &amp;quot;&amp;gt;ul&amp;quot; )&lt;br /&gt;
						.heightHide( settings.animated, settings.toggle );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			this.data(&amp;quot;toggler&amp;quot;, toggler);&lt;br /&gt;
&lt;br /&gt;
			function serialize() {&lt;br /&gt;
				function binary(arg) {&lt;br /&gt;
					return arg ? 1 : 0;&lt;br /&gt;
				}&lt;br /&gt;
				var data = [];&lt;br /&gt;
				branches.each(function(i, e) {&lt;br /&gt;
					data[i] = $(e).is(&amp;quot;:has(&amp;gt;ul:visible)&amp;quot;) ? 1 : 0;&lt;br /&gt;
				});&lt;br /&gt;
				$.cookie(settings.cookieId, data.join(&amp;quot;&amp;quot;), settings.cookieOptions );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function deserialize() {&lt;br /&gt;
				var stored = $.cookie(settings.cookieId);&lt;br /&gt;
				if ( stored ) {&lt;br /&gt;
					var data = stored.split(&amp;quot;&amp;quot;);&lt;br /&gt;
					branches.each(function(i, e) {&lt;br /&gt;
						$(e).find(&amp;quot;&amp;gt;ul&amp;quot;)[ parseInt(data[i]) ? &amp;quot;show&amp;quot; : &amp;quot;hide&amp;quot; ]();&lt;br /&gt;
					});&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// add treeview class to activate styles&lt;br /&gt;
			this.addClass(&amp;quot;treeview&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			// prepare branches and find all tree items with child lists&lt;br /&gt;
			var branches = this.find(&amp;quot;li&amp;quot;).prepareBranches(settings);&lt;br /&gt;
&lt;br /&gt;
			switch(settings.persist) {&lt;br /&gt;
			case &amp;quot;cookie&amp;quot;:&lt;br /&gt;
				var toggleCallback = settings.toggle;&lt;br /&gt;
				settings.toggle = function() {&lt;br /&gt;
					serialize();&lt;br /&gt;
					if (toggleCallback) {&lt;br /&gt;
						toggleCallback.apply(this, arguments);&lt;br /&gt;
					}&lt;br /&gt;
				};&lt;br /&gt;
				deserialize();&lt;br /&gt;
				break;&lt;br /&gt;
			case &amp;quot;location&amp;quot;:&lt;br /&gt;
				var current = this.find(&amp;quot;a&amp;quot;).filter(function() {&lt;br /&gt;
					return location.href.toLowerCase().indexOf(this.href.toLowerCase()) == 0;&lt;br /&gt;
				});&lt;br /&gt;
				if ( current.length ) {&lt;br /&gt;
					// TODO update the open/closed classes&lt;br /&gt;
					var items = current.addClass(&amp;quot;selected&amp;quot;).parents(&amp;quot;ul, li&amp;quot;).add( current.next() ).show();&lt;br /&gt;
					if (settings.prerendered) {&lt;br /&gt;
						// if prerendered is on, replicate the basic class swapping&lt;br /&gt;
						items.filter(&amp;quot;li&amp;quot;)&lt;br /&gt;
							.swapClass( CLASSES.collapsable, CLASSES.expandable )&lt;br /&gt;
							.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )&lt;br /&gt;
							.find(&amp;quot;&amp;gt;.hitarea&amp;quot;)&lt;br /&gt;
								.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )&lt;br /&gt;
								.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			branches.applyClasses(settings, toggler);&lt;br /&gt;
&lt;br /&gt;
			// if control option is set, create the treecontroller and show it&lt;br /&gt;
			if ( settings.control ) {&lt;br /&gt;
				treeController(this, settings.control);&lt;br /&gt;
				$(settings.control).show();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			return this;&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	// classes used by the plugin&lt;br /&gt;
	// need to be styled via external stylesheet, see first example&lt;br /&gt;
	$.treeview = {};&lt;br /&gt;
	var CLASSES = ($.treeview.classes = {&lt;br /&gt;
		open: &amp;quot;open&amp;quot;,&lt;br /&gt;
		closed: &amp;quot;closed&amp;quot;,&lt;br /&gt;
		expandable: &amp;quot;expandable&amp;quot;,&lt;br /&gt;
		expandableHitarea: &amp;quot;expandable-hitarea&amp;quot;,&lt;br /&gt;
		lastExpandableHitarea: &amp;quot;lastExpandable-hitarea&amp;quot;,&lt;br /&gt;
		collapsable: &amp;quot;collapsable&amp;quot;,&lt;br /&gt;
		collapsableHitarea: &amp;quot;collapsable-hitarea&amp;quot;,&lt;br /&gt;
		lastCollapsableHitarea: &amp;quot;lastCollapsable-hitarea&amp;quot;,&lt;br /&gt;
		lastCollapsable: &amp;quot;lastCollapsable&amp;quot;,&lt;br /&gt;
		lastExpandable: &amp;quot;lastExpandable&amp;quot;,&lt;br /&gt;
		last: &amp;quot;last&amp;quot;,&lt;br /&gt;
		hitarea: &amp;quot;hitarea&amp;quot;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
})(jQuery);&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157475</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157475"/>
		<updated>2017-02-23T15:51:29Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{int:License choice-You are the author}}&lt;br /&gt;
** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}}&lt;br /&gt;
** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}&lt;br /&gt;
* {{int:License choice-You are not the author}}&lt;br /&gt;
** {{int:License choice-Authorized by a license}}&lt;br /&gt;
*** CC BY | {{int:License choice-CC BY}}&lt;br /&gt;
*** CC BY-ND | {{int:License choice-CC BY-ND}}&lt;br /&gt;
*** CC BY-SA | {{int:License choice-CC BY-SA}}&lt;br /&gt;
*** CC BY-NC | {{int:License choice-CC BY-NC}}&lt;br /&gt;
*** CC BY-NC-ND | {{int:License choice-CC BY-NC-ND}}&lt;br /&gt;
*** CC BY-NC-SA | {{int:License choice-CC BY-NC-SA}}&lt;br /&gt;
*** CC0 | {{int:License choice-CC0}}&lt;br /&gt;
*** GNU | {{int:License choice-GNU}}&lt;br /&gt;
*** FAL | {{int:License choice-Free Art License}}&lt;br /&gt;
** {{int:License choice-Authorized for another reason}}&lt;br /&gt;
*** Public domain | {{int:License choice-Public domain}}&lt;br /&gt;
*** Special permission | {{int:License choice-Special permission}}&lt;br /&gt;
** {{int:License choice-Special cases}}&lt;br /&gt;
*** Fair use | {{int:License choice-Fair use}}&lt;br /&gt;
** {{int:License choice-Unauthorized}}&lt;br /&gt;
*** Missing copyright information | {{int:License choice-Missing copyright information}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157474</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157474"/>
		<updated>2017-02-23T15:34:38Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Unknown_copyright|I don&#039;t know exactly&lt;br /&gt;
* Free licenses:&lt;br /&gt;
** MW-screenshot|MediaWiki screenshot&lt;br /&gt;
** PD|PD: public domain&lt;br /&gt;
** CC-by-sa-2.5|Creative Commons Attribution ShareAlike 2.5 &lt;br /&gt;
** GFDL|GFDL: GNU Free Documentation License&lt;br /&gt;
** GPL|GPL: GNU General Public License&lt;br /&gt;
** LGPL|LGPL: GNU Lesser General Public License&lt;br /&gt;
* Non-free license (exception):&lt;br /&gt;
** CopyrightByWikimedia|Wikimedia images&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157473</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157473"/>
		<updated>2017-02-23T15:06:43Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        } catch(e) {&lt;br /&gt;
          //something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           //$(&#039;#tags&#039;).hide();&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157472</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157472"/>
		<updated>2017-02-23T15:06:34Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157471</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157471"/>
		<updated>2017-02-23T15:02:52Z</updated>

		<summary type="html">&lt;p&gt;Mory: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157470</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157470"/>
		<updated>2017-02-23T14:59:13Z</updated>

		<summary type="html">&lt;p&gt;Mory: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157469</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157469"/>
		<updated>2017-02-23T10:11:59Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{int:License choice-You are the author}}&lt;br /&gt;
** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}}&lt;br /&gt;
** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}&lt;br /&gt;
* {{int:License choice-You are not the author}}&lt;br /&gt;
** {{int:License choice-Authorized by a license}}&lt;br /&gt;
*** CC BY | {{int:License choice-CC BY}}&lt;br /&gt;
*** CC BY-ND | {{int:License choice-CC BY-ND}}&lt;br /&gt;
*** CC BY-SA | {{int:License choice-CC BY-SA}}&lt;br /&gt;
*** CC BY-NC | {{int:License choice-CC BY-NC}}&lt;br /&gt;
*** CC BY-NC-ND | {{int:License choice-CC BY-NC-ND}}&lt;br /&gt;
*** CC BY-NC-SA | {{int:License choice-CC BY-NC-SA}}&lt;br /&gt;
*** CC0 | {{int:License choice-CC0}}&lt;br /&gt;
*** GNU | {{int:License choice-GNU}}&lt;br /&gt;
*** FAL | {{int:License choice-Free Art License}}&lt;br /&gt;
** {{int:License choice-Authorized for another reason}}&lt;br /&gt;
*** Public domain | {{int:License choice-Public domain}}&lt;br /&gt;
*** Special permission | {{int:License choice-Special permission}}&lt;br /&gt;
** {{int:License choice-Special cases}}&lt;br /&gt;
*** Fair use | {{int:License choice-Fair use}}&lt;br /&gt;
** {{int:License choice-Unauthorized}}&lt;br /&gt;
*** Missing copyright information | {{int:License choice-Missing copyright information}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157468</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157468"/>
		<updated>2017-02-23T10:11:28Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{License choice-You are the author}}&lt;br /&gt;
** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}}&lt;br /&gt;
** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}&lt;br /&gt;
* {{int:License choice-You are not the author}}&lt;br /&gt;
** {{int:License choice-Authorized by a license}}&lt;br /&gt;
*** CC BY | {{int:License choice-CC BY}}&lt;br /&gt;
*** CC BY-ND | {{int:License choice-CC BY-ND}}&lt;br /&gt;
*** CC BY-SA | {{int:License choice-CC BY-SA}}&lt;br /&gt;
*** CC BY-NC | {{int:License choice-CC BY-NC}}&lt;br /&gt;
*** CC BY-NC-ND | {{int:License choice-CC BY-NC-ND}}&lt;br /&gt;
*** CC BY-NC-SA | {{int:License choice-CC BY-NC-SA}}&lt;br /&gt;
*** CC0 | {{int:License choice-CC0}}&lt;br /&gt;
*** GNU | {{int:License choice-GNU}}&lt;br /&gt;
*** FAL | {{int:License choice-Free Art License}}&lt;br /&gt;
** {{int:License choice-Authorized for another reason}}&lt;br /&gt;
*** Public domain | {{int:License choice-Public domain}}&lt;br /&gt;
*** Special permission | {{int:License choice-Special permission}}&lt;br /&gt;
** {{int:License choice-Special cases}}&lt;br /&gt;
*** Fair use | {{int:License choice-Fair use}}&lt;br /&gt;
** {{int:License choice-Unauthorized}}&lt;br /&gt;
*** Missing copyright information | {{int:License choice-Missing copyright information}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157467</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157467"/>
		<updated>2017-02-23T10:11:02Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Unknown_copyright|I don&#039;t know exactly&lt;br /&gt;
* Free licenses:&lt;br /&gt;
** MW-screenshot|MediaWiki screenshot&lt;br /&gt;
** PD|PD: public domain&lt;br /&gt;
** CC-by-sa-2.5|Creative Commons Attribution ShareAlike 2.5 &lt;br /&gt;
** GFDL|GFDL: GNU Free Documentation License&lt;br /&gt;
** GPL|GPL: GNU General Public License&lt;br /&gt;
** LGPL|LGPL: GNU Lesser General Public License&lt;br /&gt;
* Non-free license (exception):&lt;br /&gt;
** CopyrightByWikimedia|Wikimedia images&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157466</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Licenses&amp;diff=157466"/>
		<updated>2017-02-23T09:40:54Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* {{License choice-You are the author}}&lt;br /&gt;
** Self-made-Wikimini | {{int:License choice-Self-made-Wikimini}}&lt;br /&gt;
** Self-made-CC BY-SA | {{int:License choice-Self-made-CC BY-SA}}&lt;br /&gt;
* {{int:License choice-You are not the author}}&lt;br /&gt;
** {{int:License choice-Authorized by a license}}&lt;br /&gt;
*** CC BY | {{int:License choice-CC BY}}&lt;br /&gt;
*** CC BY-ND | {{int:License choice-CC BY-ND}}&lt;br /&gt;
*** CC BY-SA | {{int:License choice-CC BY-SA}}&lt;br /&gt;
*** CC BY-NC | {{int:License choice-CC BY-NC}}&lt;br /&gt;
*** CC BY-NC-ND | {{int:License choice-CC BY-NC-ND}}&lt;br /&gt;
*** CC BY-NC-SA | {{int:License choice-CC BY-NC-SA}}&lt;br /&gt;
*** CC0 | {{int:License choice-CC0}}&lt;br /&gt;
*** GNU | {{int:License choice-GNU}}&lt;br /&gt;
*** FAL | {{int:License choice-Free Art License}}&lt;br /&gt;
** {{int:License choice-Authorized for another reason}}&lt;br /&gt;
*** Public domain | {{int:License choice-Public domain}}&lt;br /&gt;
*** Special permission | {{int:License choice-Special permission}}&lt;br /&gt;
** {{int:License choice-Special cases}}&lt;br /&gt;
*** Fair use | {{int:License choice-Fair use}}&lt;br /&gt;
** {{int:License choice-Unauthorized}}&lt;br /&gt;
*** Missing copyright information | {{int:License choice-Missing copyright information}}&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157465</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157465"/>
		<updated>2017-02-23T08:03:46Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        } catch(e) {&lt;br /&gt;
          //something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           //$(&#039;#tags&#039;).hide();&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157464</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157464"/>
		<updated>2017-02-23T08:02:46Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var iDiv = document.createElement(&#039;div&#039;);&lt;br /&gt;
iDiv.id = &#039;block1&#039;;&lt;br /&gt;
iDiv.className = &#039;block&#039;;&lt;br /&gt;
document.getElementsByTagName(&#039;body&#039;)[0].appendChild(iDiv);&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157463</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157463"/>
		<updated>2017-02-23T08:02:25Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157462</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157462"/>
		<updated>2017-02-23T08:01:52Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;br /&gt;
var iDiv = document.createElement(&#039;div&#039;);&lt;br /&gt;
iDiv.id = &#039;block1&#039;;&lt;br /&gt;
iDiv.className = &#039;block&#039;;&lt;br /&gt;
document.getElementsByTagName(&#039;body&#039;)[0].appendChild(iDiv);&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157461</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157461"/>
		<updated>2017-02-23T08:00:48Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
var iDiv = document.createElement(&#039;div&#039;);&lt;br /&gt;
iDiv.id = &#039;block1&#039;;&lt;br /&gt;
iDiv.className = &#039;block&#039;;&lt;br /&gt;
document.getElementsByTagName(&#039;body&#039;)[0].appendChild(iDiv);&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157460</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157460"/>
		<updated>2017-02-23T07:55:28Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;br /&gt;
var iDiv = document.createElement(&#039;div&#039;);&lt;br /&gt;
iDiv.id = &#039;block1&#039;;&lt;br /&gt;
iDiv.className = &#039;block&#039;;&lt;br /&gt;
document.getElementById(&#039;wpLicense&#039;)[0].appendChild(iDiv);&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157458</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157458"/>
		<updated>2017-02-19T14:21:50Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157457</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Common.js&amp;diff=157457"/>
		<updated>2017-02-19T11:22:35Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .indexOf (Patch IE) //////////////&lt;br /&gt;
&lt;br /&gt;
if (!Array.indexOf) {&lt;br /&gt;
  Array.prototype.indexOf = function(obj,idx) {&lt;br /&gt;
    var len = this.length;&lt;br /&gt;
    if (len == 0) return -1;&lt;br /&gt;
    if (!idx) idx = 0;&lt;br /&gt;
    while (idx &amp;lt; 0) idx = len + idx;&lt;br /&gt;
    for (var i = 0; i &amp;lt; len; i++)&lt;br /&gt;
      if (this[i] == obj)&lt;br /&gt;
        return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////&lt;br /&gt;
if(!String.HTMLize){&lt;br /&gt;
  String.prototype.HTMLize = function() {&lt;br /&gt;
    var chars = new Array(&#039;&amp;amp;&#039;,&#039;&amp;lt;&#039;,&#039;&amp;gt;&#039;,&#039;&amp;quot;&#039;);&lt;br /&gt;
    var entities = new Array(&#039;amp&#039;,&#039;lt&#039;,&#039;gt&#039;,&#039;quot&#039;);&lt;br /&gt;
    var string = this;&lt;br /&gt;
    for (var i=0; i&amp;lt;chars.length; i++) {&lt;br /&gt;
      var regex = new RegExp(chars[i], &amp;quot;g&amp;quot;);&lt;br /&gt;
      string = string.replace(regex, &#039;&amp;amp;&#039; + entities[i] + &#039;;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return string;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ==================================================================================================&lt;br /&gt;
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////&lt;br /&gt;
function setCookie (cookieName, cookieValue, expires, path) {&lt;br /&gt;
        document.cookie = escape(cookieName) + &#039;=&#039; + escape(cookieValue) + (expires ? &#039;; EXPIRES=&#039; + expires.toGMTString() : &#039;&#039;) + &amp;quot;; PATH=/&amp;quot; ; &lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
function getCookie(cookieName) {&lt;br /&gt;
        var cookieValue = null;&lt;br /&gt;
        var posName = document.cookie.indexOf(escape(cookieName) + &#039;=&#039; );&lt;br /&gt;
        if (posName != -1) {&lt;br /&gt;
                        var posValue = posName + (escape(cookieName) + &#039;=&#039; ).length;&lt;br /&gt;
                        var endPos = document.cookie.indexOf(&#039;;&#039;, posValue) ;&lt;br /&gt;
                if (endPos != -1) {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue, endPos));&lt;br /&gt;
                } else {&lt;br /&gt;
                        cookieValue = unescape(document.cookie.substring(posValue));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return decodeURIComponent(cookieValue);&lt;br /&gt;
}&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////&lt;br /&gt;
function hasClass(node, className) {&lt;br /&gt;
  if (node.className == className) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  var reg = new RegExp(&#039;(^| )&#039;+ className +&#039;($| )&#039;)&lt;br /&gt;
  if (reg.test(node.className)) {&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addClass(node, className) {&lt;br /&gt;
    if (hasClass(node, className)) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    node.className += &#039; &#039;+ className;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function removeClass(node, className) {&lt;br /&gt;
  if (!hasClass(node, className)) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  node.className = eregReplace(&#039;(^|\\s+)&#039;+ className +&#039;($|\\s+)&#039;, &#039; &#039;, node.className);&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function eregReplace(search, replace, subject) {&lt;br /&gt;
    return subject.replace(new RegExp(search,&#039;g&#039;), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D&#039;UN ELEMENT //////////////&lt;br /&gt;
function getTextContent(oNode) {&lt;br /&gt;
  if (typeof(oNode.textContent)!=&amp;quot;undefined&amp;quot;) {return oNode.textContent;}&lt;br /&gt;
  switch (oNode.nodeType) {&lt;br /&gt;
    case 3: // TEXT_NODE&lt;br /&gt;
    case 4: // CDATA_SECTION_NODE&lt;br /&gt;
      return oNode.nodeValue;&lt;br /&gt;
      break;&lt;br /&gt;
    case 7: // PROCESSING_INSTRUCTION_NODE&lt;br /&gt;
    case 8: // COMMENT_NODE&lt;br /&gt;
      if (getTextContent.caller!=getTextContent) {&lt;br /&gt;
        return oNode.nodeValue;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 9: // DOCUMENT_NODE&lt;br /&gt;
    case 10: // DOCUMENT_TYPE_NODE&lt;br /&gt;
    case 12: // NOTATION_NODE&lt;br /&gt;
      return null;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  var _textContent = &amp;quot;&amp;quot;;&lt;br /&gt;
  oNode = oNode.firstChild;&lt;br /&gt;
  while (oNode) {&lt;br /&gt;
    _textContent += getTextContent(oNode);&lt;br /&gt;
    oNode = oNode.nextSibling;&lt;br /&gt;
  }&lt;br /&gt;
  return _textContent;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////&lt;br /&gt;
function insertAfter(element, reference) {&lt;br /&gt;
    if(reference.nextSibling!=null){&lt;br /&gt;
        reference.parentNode.insertBefore(element, reference.nextSibling);&lt;br /&gt;
    }else{&lt;br /&gt;
        reference.parentNode.appendChild(element);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
//////////// FONCTION : DECODE LE HTML ISSU D&#039;UNE REQUETE API //////////////&lt;br /&gt;
function API_HTMLDecode(text){&lt;br /&gt;
      var EncodedCharacter = new Array();&lt;br /&gt;
      var DecodedCharacter = new Array();&lt;br /&gt;
      var CharacterCount = 0;&lt;br /&gt;
 &lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;amp;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&amp;amp;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;#039;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
      EncodedCharacter[CharacterCount] = &amp;quot;&amp;amp;quot;&amp;quot;;&lt;br /&gt;
      DecodedCharacter[CharacterCount] = &#039;&amp;quot;&#039;;&lt;br /&gt;
      CharacterCount++;&lt;br /&gt;
 &lt;br /&gt;
      for(var a=0;a&amp;lt;EncodedCharacter.length;a++){&lt;br /&gt;
            while(text.indexOf(EncodedCharacter[a])!=-1){&lt;br /&gt;
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);&lt;br /&gt;
                  if(text.indexOf(EncodedCharacter[a])==-1) break;&lt;br /&gt;
            }&lt;br /&gt;
      }&lt;br /&gt;
      return text;&lt;br /&gt;
}&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ===============================================&lt;br /&gt;
// Wikiminicustom (om)&lt;br /&gt;
// ===============================================&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
  Upload form rewrite&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], March 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
//mw.loader.load( &#039;/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:TextCleaner.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:LanguageHandler.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:FormRestorer.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:UIElements.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
mw.loader.load( &#039;/w/index.php?title=MediaWiki:Tooltips.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
 &lt;br /&gt;
// Guard against multiple inclusions!&lt;br /&gt;
if (typeof (UploadForm) == &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
// Configuration. These can be set by a user in their monobook.js/modern.js. The typeof checks&lt;br /&gt;
// are not really needed when this script is globally enabled, but until then, we have to be&lt;br /&gt;
// careful not to overwrite a user&#039;s settings if he defines these first and then includes this&lt;br /&gt;
// script in his monobook.js.&lt;br /&gt;
if (typeof (UploadForm_forcebasic) == &#039;undefined&#039;)&lt;br /&gt;
  // If non-null, use the basic form&lt;br /&gt;
  var UploadForm_forcebasic     =&lt;br /&gt;
    (typeof (JSconfig) == &#039;undefined&#039; || JSconfig.keys[&#039;UploadForm_newlayout&#039;]) ? null : true;&lt;br /&gt;
if (typeof (UploadForm_ownwork_author) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_author = &amp;quot;\[\[User:&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;|&amp;quot; + mw.config.get(&#039;wgUserName&#039;) + &amp;quot;\]\]&amp;quot;;&lt;br /&gt;
  // Change to use something else&lt;br /&gt;
if (typeof (UploadForm_ownwork_date) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_ownwork_date   = null;&lt;br /&gt;
  // Set to define a pre-fill value for the date field&lt;br /&gt;
if (typeof (UploadForm_own_language_first) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_own_language_first = true; //Wikiminicustom (om) set to true&lt;br /&gt;
  // Set to true to have own language description on top&lt;br /&gt;
if (typeof (UploadForm_additional_info_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_additional_info_height = 2;&lt;br /&gt;
if (typeof (UploadForm_description_height) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_height = 2;&lt;br /&gt;
if (typeof (UploadForm_source_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_source_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_author_field_size) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_author_field_size = 1;&lt;br /&gt;
if (typeof (UploadForm_page_preview_in_tooltip) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_page_preview_in_tooltip = false;&lt;br /&gt;
if (typeof (UploadForm_description_languages) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_description_languages = null;&lt;br /&gt;
if (typeof (UploadForm_autofill) == &#039;undefined&#039;)&lt;br /&gt;
  var UploadForm_autofill = true;&lt;br /&gt;
  // If false, don&#039;t pre-fill description field in basic mode. May be useful&lt;br /&gt;
  // for people who have their own scripts pre-filling this field.&lt;br /&gt;
 &lt;br /&gt;
// Don&#039;t set the focus initially, it makes the page scroll, and people won&#039;t see the&lt;br /&gt;
// introductory texts&lt;br /&gt;
var EditTools_set_focus_initially = false;&lt;br /&gt;
 &lt;br /&gt;
var UFUtils =&lt;br /&gt;
{&lt;br /&gt;
  makeLink : function (name, url)&lt;br /&gt;
  {&lt;br /&gt;
    var link = document.createElement (&#039;a&#039;);&lt;br /&gt;
    link.setAttribute (&#039;href&#039;, url);&lt;br /&gt;
    link.appendChild (document.createTextNode (name));&lt;br /&gt;
    return link;    &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  convert_td_div : function (td)&lt;br /&gt;
  {&lt;br /&gt;
    // Replace the contents with a div, fixate the width, and give the div the id of the td&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    var w = UFUtils.getWidth (td);&lt;br /&gt;
    if (w) {&lt;br /&gt;
      td.setAttribute (&#039;width&#039;, &amp;quot;&amp;quot; + w);&lt;br /&gt;
      td.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    div.setAttribute (&#039;width&#039;, (w ? &amp;quot;&amp;quot; + w : &#039;100%&#039;));&lt;br /&gt;
    if (w) div.style.maxWidth = &amp;quot;&amp;quot; + w + &#039;px&#039;;&lt;br /&gt;
    // Clear the warning_cell and add the div instead&lt;br /&gt;
    while (td.firstChild) td.removeChild (td.firstChild);&lt;br /&gt;
    td.appendChild (div);&lt;br /&gt;
    var id = td.id;&lt;br /&gt;
    td.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    div.id = id;&lt;br /&gt;
    return div;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHeight : function (rows, minimum, maximum)&lt;br /&gt;
  {&lt;br /&gt;
    if (rows == null) return minimum;&lt;br /&gt;
    try {&lt;br /&gt;
      var x = rows / 2;&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // It&#039;s not a number&lt;br /&gt;
      return minimum;&lt;br /&gt;
    }&lt;br /&gt;
    if      (rows &amp;lt; minimum) return minimum;&lt;br /&gt;
    else if (rows &amp;gt; maximum) return maximum;&lt;br /&gt;
    return rows;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getWidth : function (element)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      if (element.clientWidth)          // From IE, but Gecko has this, too.&lt;br /&gt;
        return element.clientWidth;&lt;br /&gt;
      else if (window.getComputedStyle) // Gecko, Opera&lt;br /&gt;
        return document.defaultView&lt;br /&gt;
                       .getComputedStyle (element, null)&lt;br /&gt;
                       .getPropertyValue (&#039;width&#039;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isChildOf : function (child, ancestor)&lt;br /&gt;
  {&lt;br /&gt;
    if (!ancestor) return false;&lt;br /&gt;
    while (child &amp;amp;&amp;amp; child != ancestor) child = child.parentNode;&lt;br /&gt;
    return (child == ancestor);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUtils&lt;br /&gt;
 &lt;br /&gt;
var UFUI =&lt;br /&gt;
{&lt;br /&gt;
  // Encapsulate all UI stuff, with checks such that it works in degraded mode&lt;br /&gt;
  // (built-in defaults only) if UIElements doesn&#039;t exist.&lt;br /&gt;
 &lt;br /&gt;
  defaultLanguage  : &#039;en&#039;,     // Default.&lt;br /&gt;
  userLanguage     : &#039;en&#039;,     // Sanitized wgUserLanguage.&lt;br /&gt;
  internalLanguage : &#039;en&#039;,     // Same, but with dashes replaced by underscores.&lt;br /&gt;
  isOwnWork        : false,    // True if uselang=&amp;quot;*ownwork&amp;quot;&lt;br /&gt;
  isFromFlickr     : false,    // True if uselang=&amp;quot;*fromflickr&amp;quot;&lt;br /&gt;
  isExperienced    : false,    // True if uselang=&amp;quot;experienced&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  sanitizeUserLanguage : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Try to make sense of wgUserLanguage even if it has been hacked to have special&lt;br /&gt;
    // pages for particular upload sources. Also sets isOwnWork and isFromFlickr.&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;) == null || mw.config.get(&#039;wgUserLanguage&#039;).length == 0) return;    &lt;br /&gt;
    UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;);&lt;br /&gt;
    if (mw.config.get(&#039;wgUserLanguage&#039;).length &amp;gt; 3) {&lt;br /&gt;
      // Special &amp;quot;hacked&amp;quot; uselang parameters...&lt;br /&gt;
      var hacks = [&#039;ownwork&#039;, &#039;fromflickr&#039;, &#039;experienced&#039;, &#039;fromwikimedia&#039;, &#039;fromgov&#039;];&lt;br /&gt;
      var found = false;&lt;br /&gt;
      for (var i = 0; i &amp;lt; hacks.length; i++) {&lt;br /&gt;
        var idx = mw.config.get(&#039;wgUserLanguage&#039;).indexOf (hacks[i]);&lt;br /&gt;
        if (idx &amp;gt;= 0) {&lt;br /&gt;
          found = true;&lt;br /&gt;
          if (idx &amp;gt; 0)&lt;br /&gt;
            UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substring (0, idx);&lt;br /&gt;
          else&lt;br /&gt;
            UFUI.userLanguage = UFUI.defaultLanguage;&lt;br /&gt;
          if (i == 0)&lt;br /&gt;
            UFUI.isOwnWork = true;&lt;br /&gt;
          else if (i == 1)&lt;br /&gt;
            UFUI.isFromFlickr = true;&lt;br /&gt;
          else if (i == 2)&lt;br /&gt;
            UFUI.isExperienced = true;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!found&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (LanguageHandler.getPrefix) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        // None of the &amp;quot;standard&amp;quot; hacks. Try an alternate approach.&lt;br /&gt;
        var lang_code_length = LanguageHandler.getPrefix (mw.config.get(&#039;wgUserLanguage&#039;));&lt;br /&gt;
        if (lang_code_length &amp;gt; 0 &amp;amp;&amp;amp; lang_code_length &amp;lt; mw.config.get(&#039;wgUserLanguage&#039;).length) {&lt;br /&gt;
          UFUI.userLanguage = mw.config.get(&#039;wgUserLanguage&#039;).substr (0, lang_code_length);&lt;br /&gt;
        }&lt;br /&gt;
      } &lt;br /&gt;
    } // end if&lt;br /&gt;
    if (UFUI.userLanguage == &#039;en-gb&#039;) UFUI.userLanguage = &#039;en&#039;;&lt;br /&gt;
    UFUI.internalLanguage = UFUI.userLanguage.replace (/-/g, &#039;_&#039;);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultLabels : {&lt;br /&gt;
    wpSourceUploadLbl:         &#039;Source:&#039;,&lt;br /&gt;
    wpAuthorUploadLbl:         &#039;Author:&#039;,&lt;br /&gt;
    wpDateUploadLbl:           &#039;Date:&#039;,&lt;br /&gt;
    wpDescUploadLbl:           &#039;Description:&#039;,&lt;br /&gt;
    wpPermissionUploadLbl:     &#039;Permission:&#039;,&lt;br /&gt;
    wpCategoriesUploadLbl:     &#039;Categories:&#039;,&lt;br /&gt;
    wpOtherVersionsUploadLbl:  &#039;Other versions:&#039;,&lt;br /&gt;
    wpAdditionalInfoUploadLbl: &#039;Additional information:&#039;,&lt;br /&gt;
    wpPreviewLicenseUploadLbl: &#039;Preview the chosen license&#039;,&lt;br /&gt;
    wpOwnWorkUploadLbl:        &#039;Own work&#039;,&lt;br /&gt;
    wpUnknownLanguageUploadLbl:&#039;Unknown language&#039;,&lt;br /&gt;
    wpPreviewUploadLbl:        &#039;Preview&#039;,&lt;br /&gt;
    wpOkUploadLbl:             &#039;OK&#039;,&lt;br /&gt;
    wpCancelUploadLbl:         &#039;Cancel&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultErrorMsgs : {&lt;br /&gt;
    wpUploadWarningError: &lt;br /&gt;
      &#039;You must provide the original source of the image, the author of the work, and a license.&#039;,&lt;br /&gt;
    wpNoFilenameError:&lt;br /&gt;
      &#039;The target filename must not be empty.&#039;,&lt;br /&gt;
    wpHttpFilenameError: &lt;br /&gt;
      &#039;The target file name appears to be a URL.&#039;,&lt;br /&gt;
    wpNoSlashError:&lt;br /&gt;
      &#039;The target file name must not contain &amp;quot;/&amp;quot;.&#039;,&lt;br /&gt;
    wpNondescriptFilenameError:&lt;br /&gt;
      &#039;Please use a more descriptive target file name.&#039;,&lt;br /&gt;
    wpNoExtensionError:&lt;br /&gt;
      &#039;The target file name must have a file type extension (like for example &amp;quot;.jpg&amp;quot;).&#039;,&lt;br /&gt;
    wpIllegalExtensionError:&lt;br /&gt;
      &#039;Files of this type cannot be uploaded.&#039;,&lt;br /&gt;
    wpDoubleExtensionError:&lt;br /&gt;
      &#039;Please correct the double file type in the target file name.&#039;,&lt;br /&gt;
    wpFlickrURLError:&lt;br /&gt;
      &#039;The source must be a URL pointing to the image at Flickr.&#039;,&lt;br /&gt;
    wpNoDescriptionError:&lt;br /&gt;
      &#039;Please give a description of the contents of the file you want to upload.&#039;,&lt;br /&gt;
    wpNoHelpTextError:&lt;br /&gt;
      &#039;Help text not found.&#039;,&lt;br /&gt;
    wpPreviewOverwriteError:&lt;br /&gt;
      &#039;You will upload over an already existing file. Please choose a different filename,&#039;&lt;br /&gt;
     +&#039;unless you are uploading a technically improved version of the same file.&#039;&lt;br /&gt;
     +&#039;Don\&#039;t overwrite a file with a different image of the same topic.&#039;&lt;br /&gt;
     +&#039;If you overwrite, the information in this form will not appear on the description page.&#039;,&lt;br /&gt;
 &lt;br /&gt;
    wpReuploadNoSummaryError:&lt;br /&gt;
      &#039;Please describe the file changes in the text box.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  defaultHints: {&lt;br /&gt;
    wpUploadFormDestFileHint:&lt;br /&gt;
      &#039;Name of the file at Wikimini after the upload.&#039;,&lt;br /&gt;
    wpUploadFormSourceHint:&lt;br /&gt;
      &#039;Where does this file come from?&#039;,&lt;br /&gt;
    wpUploadFormAuthorHint:&lt;br /&gt;
      &#039;Who created this file? If it shows some artwork, who created that?&#039;,&lt;br /&gt;
    wpUploadFormDateHint:&lt;br /&gt;
      &#039;Date of creation and/or first publication of the work.&#039;,&lt;br /&gt;
    wpUploadFormPermissionHint:&lt;br /&gt;
      &#039;Not your own file? Or already published elsewhere? Use \{\{OTRS pending\}\} and send permission by e-mail. &#039;&lt;br /&gt;
     +&#039;Also for specialized license tags.&#039;,&lt;br /&gt;
    wpUploadFormAdditionalInfoHint:&lt;br /&gt;
      &#039;Use for geolocation tags and other specialized information.&#039;,&lt;br /&gt;
    wpUploadFormCategoryHint:&lt;br /&gt;
      &#039;Click (+) to add categories.&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  // Do *not* use &amp;quot;-&amp;quot; here (as in &amp;quot;be-tarask&amp;quot;)!! Use &amp;quot;_&amp;quot; instead: &amp;quot;be_tarask&amp;quot;.&lt;br /&gt;
  translate: {&lt;br /&gt;
    en: &#039;translate&#039;,&lt;br /&gt;
    af: &#039;vertaal&#039;,&lt;br /&gt;
    ar: &#039;ترجم&#039;,&lt;br /&gt;
    be: &#039;перакласці&#039;,&lt;br /&gt;
    be_tarask: &#039;перакласьці&#039;,&lt;br /&gt;
    br: &#039;treiñ&#039;,&lt;br /&gt;
    bg: &#039;превеждам&#039;,&lt;br /&gt;
    ca: &#039;traduïu&#039;,&lt;br /&gt;
    cs: &#039;přeložit&#039;,&lt;br /&gt;
    cy: &#039;cyfieithu&#039;,&lt;br /&gt;
    da: &#039;oversæt&#039;,&lt;br /&gt;
    de: &#039;übersetzen&#039;,&lt;br /&gt;
    el: &#039;μεταφράστε&#039;,&lt;br /&gt;
    eo: &#039;traduki&#039;,&lt;br /&gt;
    es: &#039;traducir&#039;,&lt;br /&gt;
    et: &#039;tõlkima&#039;,&lt;br /&gt;
    fa: &#039;ترجمه\u200cکردن&#039;,&lt;br /&gt;
    fi: &#039;suomenna&#039;,&lt;br /&gt;
    fo: &#039;umseta&#039;,&lt;br /&gt;
    fr: &#039;traduire&#039;,&lt;br /&gt;
    gl: &#039;traducir&#039;,&lt;br /&gt;
    he: &#039;לתרגם&#039;,&lt;br /&gt;
    hr: &#039;prevesti&#039;,&lt;br /&gt;
    hu: &#039;fordítás&#039;,&lt;br /&gt;
    hy: &#039;թարգմանել&#039;,&lt;br /&gt;
    id: &#039;terjemah&#039;,&lt;br /&gt;
    io: &#039;tradukar&#039;,&lt;br /&gt;
    is: &#039;þýða&#039;,&lt;br /&gt;
    it: &#039;tradurre&#039;,&lt;br /&gt;
    ja: &#039;訳す&#039;,&lt;br /&gt;
    ko: &#039;번역하기&#039;,&lt;br /&gt;
    la: &#039;traducere&#039;,&lt;br /&gt;
    mk: &#039;преведи&#039;,&lt;br /&gt;
    ml: &#039;തര്‍ജ്ജമ&#039;,&lt;br /&gt;
    mn: &#039;орчуулах&#039;,&lt;br /&gt;
    mt: &#039;traduci&#039;,&lt;br /&gt;
    nn: &#039;oversett&#039;,&lt;br /&gt;
    no: &#039;oversett&#039;,&lt;br /&gt;
    nl: &#039;vertalen&#039;,&lt;br /&gt;
    pap: &#039;tradusí&#039;,&lt;br /&gt;
    pl: &#039;przetłumacz&#039;,&lt;br /&gt;
    pt: &#039;traduzir&#039;,&lt;br /&gt;
    ro: &#039;a traduce&#039;,&lt;br /&gt;
    ru: &#039;перевести&#039;,&lt;br /&gt;
    sk: &#039;preložit&#039;,&lt;br /&gt;
    sl: &#039;perovodit&#039;,&lt;br /&gt;
    sq: &#039;përkthej&#039;,&lt;br /&gt;
    ss: &#039;kuhúmusha&#039;,&lt;br /&gt;
    sv: &#039;översätt&#039;,&lt;br /&gt;
    ta: &#039;மொழிபெயர்&#039;,&lt;br /&gt;
    tr: &#039;tercüme&#039;,&lt;br /&gt;
    ty: &#039;ʻauvaha&#039;,&lt;br /&gt;
    uk: &#039;перекласти&#039;,&lt;br /&gt;
    vi: &#039;dịch&#039;,&lt;br /&gt;
    zh: &#039;翻譯&#039;,&lt;br /&gt;
    zh_min_nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    nan: &#039;hoan-e̍k&#039;,&lt;br /&gt;
    minnan: &#039;hoan-e̍k&#039;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  labels     : null,  // Repository for form labels&lt;br /&gt;
  help       : null,  // Repository for help texts (and the help button)&lt;br /&gt;
  error_msgs : null,  // Repository for error messages&lt;br /&gt;
  uiElements : null,  // Repository for graphical UI elements&lt;br /&gt;
  hints      : null,  // Repository for brief hints&lt;br /&gt;
 &lt;br /&gt;
  setupRepositories : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      if (typeof (UIElements) != &#039;undefined&#039;) {&lt;br /&gt;
        UFUI.labels     = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.help       = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.error_msgs = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.uiElements = UIElements.emptyRepository ();&lt;br /&gt;
        UFUI.hints      = UIElements.emptyRepository ();&lt;br /&gt;
 &lt;br /&gt;
        /* Wikiminicustom (lj): replaced this block by the following one (because wpDescUploadLbl label can be a normal label, like the ones, i.e. with no link)&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          if (id == &#039;wpDescUploadLbl&#039;) {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (  id&lt;br /&gt;
               , UFUI.labels&lt;br /&gt;
               , UFUtils.makeLink (  UFUI.defaultLabels[id]&lt;br /&gt;
                                   , &#039;/wiki/Commons:First_steps/Quality_and_description&#039;)&lt;br /&gt;
              );&lt;br /&gt;
          } else {&lt;br /&gt;
            UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
          }&lt;br /&gt;
        }*/&lt;br /&gt;
        /* Wikiminicustom (lj): New block (begin) */&lt;br /&gt;
        for (var id in UFUI.defaultLabels) {&lt;br /&gt;
          UIElements.setEntry&lt;br /&gt;
              (id, UFUI.labels, document.createTextNode (UFUI.defaultLabels[id]));&lt;br /&gt;
        }&lt;br /&gt;
        /* Wikiminicustom (lj): New block (end) */&lt;br /&gt;
        for (var id in UFUI.defaultErrorMsgs) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.error_msgs,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultErrorMsgs[id]));&lt;br /&gt;
        }&lt;br /&gt;
        for (var id in UFUI.defaultHints) {&lt;br /&gt;
          UIElements.setEntry (id, UFUI.hints,&lt;br /&gt;
                               document.createTextNode (UFUI.defaultHints[id]));&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        // Now try to read the localized stuff from the uploadfooter.&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormLabels&#039;, null, &#039;span&#039;, UFUI.labels);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormErrorMessages&#039;, null, &#039;span&#039;, UFUI.error_msgs);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHints&#039;, null, &#039;span&#039;, UFUI.hints);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormUIElements&#039;, null, &#039;div&#039;, UFUI.uiElements);&lt;br /&gt;
        UIElements.load (&#039;wpUploadFormHelp&#039;, null, &#039;div&#039;, UFUI.help);&lt;br /&gt;
        UFUI.basic = false;&lt;br /&gt;
      } else {&lt;br /&gt;
        UFUI.labels     = UFUI.defaultLabels;&lt;br /&gt;
        UFUI.error_msgs = UFUI.defaultErrorMsgs;&lt;br /&gt;
        UFUI.hints      = UFUI.defaultHints;&lt;br /&gt;
        UFUI.basic      = true;&lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getUI : function (id, repository, basic)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI[repository]) return null;&lt;br /&gt;
    var result   = null;&lt;br /&gt;
    var add_plea = false;&lt;br /&gt;
    if (UFUI.basic) {&lt;br /&gt;
      result = document.createTextNode (UFUI[repository][id]);&lt;br /&gt;
      add_plea = (UFUI.internalLanguage != UFUI.defaultLanguage);&lt;br /&gt;
    } else {&lt;br /&gt;
      result = UIElements.getEntry (id, UFUI[repository], UFUI.internalLanguage, null);&lt;br /&gt;
      add_plea = !result;&lt;br /&gt;
      if (!result) result = UIElements.getEntry (id, UFUI[repository]);&lt;br /&gt;
      if (!result) return null; // Hmmm... what happened here? We normally have defaults...&lt;br /&gt;
      result = result.cloneNode (true);&lt;br /&gt;
    }&lt;br /&gt;
    if (add_plea &amp;amp;&amp;amp; !basic) {&lt;br /&gt;
      // Wrap it all into a span -- we can return only one element&lt;br /&gt;
      var span = document.createElement (&#039;span&#039;);&lt;br /&gt;
      span.appendChild (result);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //span.appendChild (UFUI.plea (repository, id));&lt;br /&gt;
      result = span;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  plea : function (what, msg_id)&lt;br /&gt;
  {&lt;br /&gt;
    var span = document.createElement (&#039;sub&#039;);&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039; (&#039;));&lt;br /&gt;
    span.appendChild (&lt;br /&gt;
      UFUtils.makeLink (&lt;br /&gt;
         UFUI.translate[UFUI.internalLanguage] || UFUI.translate.en&lt;br /&gt;
       , &#039;http://commons.wikimedia.org/wiki/MediaWiki_talk:UploadFormLabels/UploadFormTranslations?action=edit&#039;&lt;br /&gt;
         +&#039;&amp;amp;section=new&#039; &lt;br /&gt;
         +&#039;&amp;amp;withJS=MediaWiki:UploadFormTranslator.js&amp;amp;language=&#039;&lt;br /&gt;
         +encodeURIComponent (UFUI.userLanguage)&lt;br /&gt;
         +&#039;&amp;amp;uploadformurl=&#039; + encodeURIComponent (document.URL)&lt;br /&gt;
         +(what ? &#039;&amp;amp;uploadformitems=&#039; + encodeURIComponent (what) : &amp;quot;&amp;quot;)&lt;br /&gt;
         +(msg_id ? &#039;&amp;amp;uploadformmsg=&#039; + encodeURIComponent (msg_id) : &amp;quot;&amp;quot;)));&lt;br /&gt;
    span.appendChild (document.createTextNode (&#039;)&#039;));&lt;br /&gt;
    return span;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getLabel : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;labels&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getErrorMsg : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;error_msgs&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getHint : function (id, basic)&lt;br /&gt;
  {&lt;br /&gt;
    return UFUI.getUI (id, &#039;hints&#039;, basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getEntry : function (id, repository, lang, sel)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.labels) {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      UFUI.setupRepositories ();&lt;br /&gt;
    }&lt;br /&gt;
    if (!UFUI.basic)&lt;br /&gt;
      return UIElements.getEntry (id, UFUI[repository], lang, sel);&lt;br /&gt;
    if (!UFUI[repository] || lang != UFUI.defaultLanguage || !!sel &amp;amp;&amp;amp; sel != &#039;default&#039;)&lt;br /&gt;
      return null;&lt;br /&gt;
    return UFUI[repository][id];&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFUI&lt;br /&gt;
 &lt;br /&gt;
var UFHelp =  // Collects all help-related stuff&lt;br /&gt;
{&lt;br /&gt;
  help_close_imgs : null,&lt;br /&gt;
 &lt;br /&gt;
  precreate_tooltip_closer : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (Tooltip) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var close_imgs =&lt;br /&gt;
        UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!close_imgs)&lt;br /&gt;
        close_imgs = UFUI.getEntry (&#039;wpUploadFormHelpCloseButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      if (close_imgs) close_imgs = close_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
      if (!close_imgs || close_imgs.length == 0)&lt;br /&gt;
        close_imgs = null;&lt;br /&gt;
      else&lt;br /&gt;
        close_imgs =  Buttons.createClass (close_imgs, &#039;wpUploadFormHelpCloseClass&#039;);&lt;br /&gt;
      UFHelp.help_close_imgs = close_imgs;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  tooltip_styles : // The style for all our tooltips&lt;br /&gt;
   {  border          : &#039;1px solid #8888aa&#039;&lt;br /&gt;
    , backgroundColor : &#039;#f7f8ff&#039;&lt;br /&gt;
    , padding         : &#039;0.3em&#039;&lt;br /&gt;
    , fontSize        : ((mw.config.get(&#039;skin&#039;) &amp;amp;&amp;amp; (mw.config.get(&#039;skin&#039;) == &#039;monobook&#039; || mw.config.get(&#039;skin&#039;) == &#039;modern&#039;)) ? &#039;127%&#039; : &#039;100%&#039;)&lt;br /&gt;
      // Scale up to default text size&lt;br /&gt;
   },&lt;br /&gt;
 &lt;br /&gt;
  getHelp : function (help_id, with_ext) &lt;br /&gt;
  {&lt;br /&gt;
    // This is a Tooltip callback! Sets the help texts dynamically, depending of the file&lt;br /&gt;
    // type the user has chosen in wpDestFile.&lt;br /&gt;
    var fn = null;&lt;br /&gt;
    if (with_ext) {&lt;br /&gt;
      fn = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (fn != null) fn = fn.value;&lt;br /&gt;
      if (fn != null) {&lt;br /&gt;
        fn = fn.split (&#039;.&#039;);&lt;br /&gt;
        if (fn.length &amp;gt;= 2) fn = fn[fn.length-1]; else fn = null;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var add_plea   = false;&lt;br /&gt;
    var extensions = [fn, &#039;default&#039;];&lt;br /&gt;
    var help_main  = null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; extensions.length &amp;amp;&amp;amp; !help_main; i++) {&lt;br /&gt;
      if (extensions[i] &amp;amp;&amp;amp; extensions[i].length &amp;gt; 0) {&lt;br /&gt;
        help_main = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage, extensions[i]);&lt;br /&gt;
        if (!help_main) {&lt;br /&gt;
          help_main = UFUI.getEntry (help_id, &#039;help&#039;, null, extensions[i]);&lt;br /&gt;
          add_plea  = (help_main != null);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var help_base = UFUI.getEntry (help_id, &#039;help&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!help_base) {&lt;br /&gt;
      help_base = UFUI.getEntry (help_id, &#039;help&#039;);&lt;br /&gt;
      add_plea  = add_plea || (help_base != null);&lt;br /&gt;
    }&lt;br /&gt;
    var help = document.createElement (&#039;div&#039;);&lt;br /&gt;
    if (help_base) help.appendChild (help_base);&lt;br /&gt;
    if (help_main) help.appendChild (help_main);&lt;br /&gt;
    if (!help_main &amp;amp;&amp;amp; !help_base) {&lt;br /&gt;
      help.appendChild (UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;));&lt;br /&gt;
    } else if (add_plea) {&lt;br /&gt;
      help.appendChild (UFUI.plea (&#039;help&#039;, help_id));&lt;br /&gt;
    }&lt;br /&gt;
    return help;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showHelp : function (evt, id) // Onclick handler for setup without tooltips&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event;&lt;br /&gt;
    var node = e.target || e.srcElement;&lt;br /&gt;
    if (!node) {&lt;br /&gt;
      var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
      // We need the text contents... and IE doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
      while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
      if (error) alert (error.data);&lt;br /&gt;
      // Otherwise what??&lt;br /&gt;
    } else if (!document.getElementById (id + &#039;_Div&#039;)) {&lt;br /&gt;
      var help = UFHelp.getHelp (id, false);&lt;br /&gt;
      help.style.fontSize = &#039;small&#039;;&lt;br /&gt;
      help.style.color    = &#039;#666666&#039;;&lt;br /&gt;
      // Now add a new table row after the current one&lt;br /&gt;
      var tr = node.parentNode;&lt;br /&gt;
      while (tr &amp;amp;&amp;amp; tr.nodeName.toLowerCase () != &#039;tr&#039;) tr = tr.parentNode;&lt;br /&gt;
      if (!tr) {&lt;br /&gt;
        var error = UFUI.getErrorMsg (&#039;wpNoHelpTextError&#039;, true);&lt;br /&gt;
        while (error &amp;amp;&amp;amp; error.nodeType != 3) error = error.firstChild;&lt;br /&gt;
        if (error) alert (error.data);&lt;br /&gt;
      } else {&lt;br /&gt;
        var new_tr = document.createElement (&#039;tr&#039;);&lt;br /&gt;
        var cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
        cell.id = id + &#039;_Div&#039;;&lt;br /&gt;
        new_tr.appendChild (cell);&lt;br /&gt;
        tr.parentNode.insertBefore (new_tr, tr.nextSibling);&lt;br /&gt;
        cell = UFUtils.convert_td_div (cell);&lt;br /&gt;
        cell.appendChild (help);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (!!e.stopPropagation) {&lt;br /&gt;
      e.stopPropagation ();&lt;br /&gt;
      e.preventDefault ();&lt;br /&gt;
    } else if (typeof (e.cancelBubble) != &#039;undefined&#039;) {&lt;br /&gt;
      e.cancelBubble = true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setupHelp : function (is_reupload)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UFUI.help) return; // Help not loaded&lt;br /&gt;
 &lt;br /&gt;
    function setHelp (id, imgs, lk, maximum_width, is_reupload)&lt;br /&gt;
    {&lt;br /&gt;
      // Figure out where to place the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var field = document.getElementById (id);&lt;br /&gt;
      var insert_in = null, before = null;&lt;br /&gt;
      var help_id = id + &#039;Help&#039;;&lt;br /&gt;
      if (!UFUI.help[help_id]) return; // Don&#039;t add if we have no help at all.&lt;br /&gt;
      var offset = -5; // Pixels.&lt;br /&gt;
      switch (id) {&lt;br /&gt;
        case &#039;wpWatchthis&#039;:&lt;br /&gt;
        case &#039;wpIgnoreWarning&#039;:&lt;br /&gt;
          // Right of the element&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode;&lt;br /&gt;
          // Find the label.&lt;br /&gt;
          {&lt;br /&gt;
            var lbls = insert_in.getElementsByTagName (&#039;label&#039;);&lt;br /&gt;
            if (!lbls) {&lt;br /&gt;
              before = field.nextSibling;&lt;br /&gt;
            } else {&lt;br /&gt;
              for (var i = 0; i &amp;lt; lbls.length; i++) {&lt;br /&gt;
                if (lbls[i].htmlFor &amp;amp;&amp;amp; lbls[i].htmlFor == id) {&lt;br /&gt;
                  before = lbls[i].nextSibling; break;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          offset = Math.abs (offset);&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpCategories&#039;:&lt;br /&gt;
          field = document.getElementById (&#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field;&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (field.firstChild) {&lt;br /&gt;
            field  = field.firstChild;&lt;br /&gt;
            offset = Math.abs (offset);&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpAuthor&#039;:&lt;br /&gt;
        case &#039;wpSource&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          field     = field.parentNode; // Because the field itself may vanish.&lt;br /&gt;
          insert_in = field.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          break;&lt;br /&gt;
        case &#039;wpDestFile&#039;:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
          if (is_reupload) {&lt;br /&gt;
            help_id = &#039;wpReuploadDestHelp&#039;;&lt;br /&gt;
            field   = null; // Field is hidden: attach the help text to the button instead&lt;br /&gt;
          }&lt;br /&gt;
          break;          &lt;br /&gt;
        case &#039;wpDesc&#039;:&lt;br /&gt;
          if (!field) {&lt;br /&gt;
            field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
            if (field) { // Basic form&lt;br /&gt;
              help_id = (is_reupload ? &#039;wpReuploadSummaryHelp&#039; : &#039;wpUploadDescriptionHelp&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
              insert_in = document.getElementById (&#039;wpDescLabel&#039;);&lt;br /&gt;
              if (!insert_in) return;&lt;br /&gt;
              field     = insert_in;&lt;br /&gt;
              offset    = Math.abs (offset);&lt;br /&gt;
              before    = insert_in.nextSibling;&lt;br /&gt;
              insert_in = insert_in.parentNode;&lt;br /&gt;
              break;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          // Fall through&lt;br /&gt;
        default:&lt;br /&gt;
          if (!field) return;&lt;br /&gt;
          // In the table cell to the left&lt;br /&gt;
          insert_in = field.parentNode.parentNode.cells[0];&lt;br /&gt;
          before    = null;&lt;br /&gt;
      }&lt;br /&gt;
      // Create and insert the help &amp;quot;button&amp;quot;&lt;br /&gt;
      var button_construct = null, button = null;&lt;br /&gt;
      if (imgs &amp;amp;&amp;amp; typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
        button = Buttons.makeButton (imgs, id + &#039;_HelpButton&#039;, &#039;#&#039;);&lt;br /&gt;
        button.style.position = &#039;relative&#039;;&lt;br /&gt;
        button.style.top      = &#039;-0.4em&#039;;&lt;br /&gt;
        button_construct      = button;&lt;br /&gt;
      } else {&lt;br /&gt;
        button_construct = lk.cloneNode (true);&lt;br /&gt;
        button = button_construct.getElementsByTagName (&#039;a&#039;)[0];&lt;br /&gt;
      }&lt;br /&gt;
      insert_in.insertBefore (button_construct, before);&lt;br /&gt;
      if (typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        // Create the tooltip&lt;br /&gt;
        var tooltip =&lt;br /&gt;
          new Tooltip&lt;br /&gt;
            (  button&lt;br /&gt;
             , function () { var hlp = help_id; return UFHelp.getHelp (hlp, true); }&lt;br /&gt;
             , { activate     : Tooltip.CLICK&lt;br /&gt;
                ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                                 ? Tooltip.CLICK_ELEM&lt;br /&gt;
                                 : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
                ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
                ,mode         : Tooltip.FIXED&lt;br /&gt;
                ,fixed_offset : {x:10, y: offset}&lt;br /&gt;
                ,max_pixels   : maximum_width&lt;br /&gt;
                ,target       : field&lt;br /&gt;
                ,open_delay   : 0&lt;br /&gt;
                ,hide_delay   : 0&lt;br /&gt;
               }&lt;br /&gt;
             , UFHelp.tooltip_styles&lt;br /&gt;
            );&lt;br /&gt;
      } else {&lt;br /&gt;
        // Alternative setup without Tooltips: insert help text statically in a table field below the&lt;br /&gt;
        // button.&lt;br /&gt;
        button.onclick =&lt;br /&gt;
          function (evt) { var hlp = help_id; return UFHelp.showHelp (evt, hlp); };&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button_imgs = null, button_lk   = null;&lt;br /&gt;
    if (typeof (Buttons) != &#039;undefined&#039;) {&lt;br /&gt;
      var button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
      if (!button_imgs) button_imgs = UFUI.getEntry (&#039;wpUploadFormHelpOpenButton&#039;, &#039;uiElements&#039;);&lt;br /&gt;
      var button_lk   = null;&lt;br /&gt;
      if (button_imgs) button_imgs = button_imgs.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    if (!button_imgs || button_imgs.length == 0) {&lt;br /&gt;
      // Alternative text-based &amp;quot;button&amp;quot;&lt;br /&gt;
      button_lk = document.createElement (&#039;sup&#039;);&lt;br /&gt;
      button_lk.appendChild (document.createElement (&#039;b&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039; [&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (UFUtils.makeLink (&#039;?&#039;, &#039;#&#039;));&lt;br /&gt;
      button_lk.firstChild.appendChild (document.createTextNode (&#039;]&#039;));&lt;br /&gt;
      button_imgs = null;&lt;br /&gt;
    } else {&lt;br /&gt;
      button_imgs = Buttons.createClass (button_imgs, &#039;wpUploadFormHelpOpenClass&#039;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var widest_field = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var max_width    = 0;&lt;br /&gt;
    if (!widest_field) widest_field = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (widest_field) {&lt;br /&gt;
      var w = UFUtils.getWidth (widest_field);&lt;br /&gt;
      try {&lt;br /&gt;
        max_width = Math.round (w * 0.9);&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        max_width = 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    setHelp (&#039;wpUploadFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDestFile&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpSource&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAuthor&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDate&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpDesc&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpPermission&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpOtherVersions&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpAdditionalInfo&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpLicense&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpCategories&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpWatchthis&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
    setHelp (&#039;wpIgnoreWarning&#039;, button_imgs, button_lk, max_width, is_reupload);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFHelp&lt;br /&gt;
 &lt;br /&gt;
var UploadFormBasic =&lt;br /&gt;
{&lt;br /&gt;
  on_error_form : false, // True iff we&#039;re on a re-sent form (error case).&lt;br /&gt;
 &lt;br /&gt;
  setup : function (auto_fill)&lt;br /&gt;
  {&lt;br /&gt;
    // Special setup: don&#039;t use separate input fields; just verify the filename and that the&lt;br /&gt;
    // description isn&#039;t empty.&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var previous_form = null;&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
        var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        var original_dest_file = null;&lt;br /&gt;
        if (current_dest_file != null) {&lt;br /&gt;
          current_dest_file  = current_dest_file.value;&lt;br /&gt;
          original_dest_file = current_dest_file.defaultValue;&lt;br /&gt;
        }&lt;br /&gt;
        if (original_dest_file &amp;amp;&amp;amp; original_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          // If original_dest_file was set to something, we&#039;re not on the original upload form but&lt;br /&gt;
          // on the re-sent form in error cases.&lt;br /&gt;
          UploadFormBasic.on_error_form = true;&lt;br /&gt;
        } else if (current_dest_file &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
          previous_form = FormRestorer.readForm (&#039;UploadFormBasic&#039;);&lt;br /&gt;
          if (!previous_form &amp;amp;&amp;amp; desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.length &amp;gt; 0) {&lt;br /&gt;
            // Hmmm... IE sometimes cannot read the cookie (because it wasn&#039;t stored, due to some&lt;br /&gt;
            // strange security settings on some computers that I&#039;ve been unable to track down).&lt;br /&gt;
            // If we&#039;re here, we have a target file name *and* a description: assume the description&lt;br /&gt;
            // comes from the browser&#039;s field value cache and make sure we don&#039;t overwrite it.&lt;br /&gt;
            auto_fill = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[0];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            if (additional_data.length &amp;gt;= 2) UploadForm.previous_hotcat_state = additional_data[1];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    if (document.getElementById (&#039;wpLicense&#039;) != null)&lt;br /&gt;
      UploadForm.setup_license_preview ();      &lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormBasic.submit;&lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      UploadForm.addPreviewButton (UploadFormBasic.preview);&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form) {&lt;br /&gt;
      // Restore form values.&lt;br /&gt;
      if (desc) {&lt;br /&gt;
        var prev = UploadForm.getPrevValue (previous_form, desc.id);&lt;br /&gt;
        if (prev) desc.value = prev;&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_cancel ();&lt;br /&gt;
        UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!!UploadForm_autofill &amp;amp;&amp;amp; auto_fill &amp;amp;&amp;amp; !UploadForm.isReupload) {&lt;br /&gt;
        if (desc) desc.value = UploadForm.empty_template (&#039;Information&#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (desc &amp;amp;&amp;amp; desc.value &amp;amp;&amp;amp; desc.value.indexOf (&#039;\{\{Information&#039;) &amp;gt;= 0) {&lt;br /&gt;
      // Only hide the box in the Uploadtext if there is really an inormation-template in the&lt;br /&gt;
      // summary!&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = false;&lt;br /&gt;
    if (!UploadForm.isReupload) overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    if (!UploadForm.isReupload) {&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
      if (!UploadFormBasic.on_error_form&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
        var hotcat_state = null;&lt;br /&gt;
        if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
          var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
          if (input != null) hotcat_closeform ();&lt;br /&gt;
          hotcat_state = hotcat_get_state ();&lt;br /&gt;
        }&lt;br /&gt;
        // We already know that target_name.value is set!&lt;br /&gt;
        FormRestorer.saveForm&lt;br /&gt;
          (  &#039;UploadFormBasic&#039;&lt;br /&gt;
           , UploadForm.the_form.id&lt;br /&gt;
           , target_name.value&lt;br /&gt;
             + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
           , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
             + &#039;;max-age=1800&#039;);&lt;br /&gt;
        // Expire after half an hour.&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (UploadForm.isReupload)&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var old_desc_value = desc.value;&lt;br /&gt;
    var do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit)&lt;br /&gt;
      desc.value = old_desc_value;&lt;br /&gt;
    else {&lt;br /&gt;
      desc.value = UploadForm.fixCategoryTransclusion (UploadForm.clean (desc.value));&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormBasic.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.makePreview (UploadForm.clean (desc.value), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var ok   = true;&lt;br /&gt;
 &lt;br /&gt;
    if (UploadForm.isReupload) {&lt;br /&gt;
      // Only check that the description isn&#039;t empty&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
      if (!desc.value || desc.value.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
        desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
        desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpReuploadNoSummaryError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      if (!overwrite) {&lt;br /&gt;
        if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
        UploadForm.errorMsgs = new Array ();&lt;br /&gt;
        UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
        if (!UploadForm.verifyMandatoryField (desc)) {&lt;br /&gt;
          desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
          ok = false;&lt;br /&gt;
        } else {&lt;br /&gt;
          // We do have a non-empty description. Try to split it up and check that the fields for&lt;br /&gt;
          // author, source, and description are filled in.&lt;br /&gt;
          var fields = UploadForm.split_description (desc.value);&lt;br /&gt;
          if (fields != null &amp;amp;&amp;amp; fields.length == 4) {&lt;br /&gt;
            if (   fields[1] == null || fields[1].search (/\S/) &amp;lt; 0  // Author&lt;br /&gt;
                || fields[2] == null || fields[2].search (/\S/) &amp;lt; 0) // Source&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
            if (   UploadForm.templates[fields[0]].desc_mandatory&lt;br /&gt;
                &amp;amp;&amp;amp; (fields[3] == null || fields[3].search (/\S/) &amp;lt; 0)) // Description&lt;br /&gt;
            {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
              ok = false;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // Try a license check&lt;br /&gt;
        var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
        if (license == null || license.selectedIndex == 0) {&lt;br /&gt;
          // There must be a license somewhere in the description.&lt;br /&gt;
          if (!UploadForm.has_license ([desc])) {&lt;br /&gt;
            var d = desc.value.replace (/\{\{\s*([Ii]nformation|[Pp]ainting|[Ff]lickr)\s*\n/g,&amp;quot;&amp;quot;);  &lt;br /&gt;
            if (d.indexOf (&#039;\{\{&#039;) &amp;lt; 0) {&lt;br /&gt;
              // No transcludion that could provide a license either&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
              if (!UploadForm.warning_pushed) {&lt;br /&gt;
                if (UploadForm.errorMsgs != null)&lt;br /&gt;
                  UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
                UploadForm.warning_pushed = true;&lt;br /&gt;
              }&lt;br /&gt;
              ok = false;&lt;br /&gt;
            } else {&lt;br /&gt;
              // Assume it&#039;s ok.&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        } // end license check&lt;br /&gt;
        var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
        if (target_name != null) {&lt;br /&gt;
          // Trim leading and trailing whitespace&lt;br /&gt;
          target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
          if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
            target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
            target_name.onkeyup =&lt;br /&gt;
              function (evt)&lt;br /&gt;
              {&lt;br /&gt;
                UploadForm.resetBg (evt);&lt;br /&gt;
                if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                  wgUploadWarningObj.keypress();&lt;br /&gt;
              };&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if (reupload or not)&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
      // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  } // end verify&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormBasic&lt;br /&gt;
 &lt;br /&gt;
var UploadFormFull =&lt;br /&gt;
{&lt;br /&gt;
  form_type             : 0,     // 0 - single desc field; 1 - one desc field per language&lt;br /&gt;
  field_state           : null,  // Will be initialized in setup below.&lt;br /&gt;
 &lt;br /&gt;
  multi_inputs : null,&lt;br /&gt;
  // If we&#039;re using several description fields, this is an array of objects&lt;br /&gt;
 &lt;br /&gt;
  pushMultiInput : function (sel, text)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      UploadFormFull.multi_inputs = [{selector : sel, textfield : text}];&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadFormFull.multi_inputs[UploadFormFull.multi_inputs.length] =&lt;br /&gt;
        {selector : sel, textfield : text};&lt;br /&gt;
    }&lt;br /&gt;
    var idx   = UploadFormFull.multi_inputs.length;&lt;br /&gt;
    sel.id    = &#039;wpLangSel&#039; + idx;&lt;br /&gt;
    sel.name  = sel.id;&lt;br /&gt;
    text.id   = &#039;wpDescText&#039; + idx;&lt;br /&gt;
    text.name = text.id;  &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addDescField : function (content, lang, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    var selector = LanguageHandler.getSelect&lt;br /&gt;
                     (null, lang, UFUI.getLabel (&#039;wpUnknownLanguageUploadLbl&#039;, true));&lt;br /&gt;
    // These style definitions are needed for IE, which otherwise creates excessively wide&lt;br /&gt;
    // selectors, pushing the main form to the right.&lt;br /&gt;
    selector.style.maxWidth = &#039;12em&#039;;&lt;br /&gt;
    selector.style.width    = &#039;12em&#039;;&lt;br /&gt;
    selector.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    var textfield  = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    textfield.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 2, 6));&lt;br /&gt;
    textfield.style.width = &#039;100%&#039;;&lt;br /&gt;
    UploadFormFull.pushMultiInput (selector, textfield);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = content.insertRow (idx == null ? content.rows.length : idx);&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    first_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    first_cell.appendChild (selector);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.setAttribute (&#039;vAlign&#039;, &#039;top&#039;);&lt;br /&gt;
    second_cell.appendChild (textfield);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      var prev_idx = UploadForm.getPrevValue (stored_form, selector.id);&lt;br /&gt;
      var prev_val = UploadForm.getPrevValue (stored_form, textfield.id);&lt;br /&gt;
      if (prev_val != null) textfield.value = prev_val;&lt;br /&gt;
      if (prev_idx != null) {&lt;br /&gt;
        selector.options[selector.selectedIndex].selected = false;&lt;br /&gt;
        selector.options[prev_idx].selected = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    UploadFormFull.enable_edittools (textfield);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addOneDescField : function (evt) // onclick handler for the button&lt;br /&gt;
  {&lt;br /&gt;
    var button = document.getElementById (&#039;wpUploadAddDescription&#039;);&lt;br /&gt;
    var table_row = button.parentNode.parentNode;&lt;br /&gt;
    var idx = table_row.rowIndex;&lt;br /&gt;
    UploadFormFull.addDescField (table_row.parentNode, null, idx, null);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addMultiDesc : function (table, idx, stored_form)&lt;br /&gt;
  {&lt;br /&gt;
    // Add en and user language, if different&lt;br /&gt;
    var userLang = LanguageHandler.closestLanguage (UFUI.userLanguage);&lt;br /&gt;
 &lt;br /&gt;
    if (userLang == &#039;pt-br&#039;) userLang = &#039;pt&#039;; // Per request from Portuguese and Brazilians&lt;br /&gt;
    var first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    first_cell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
    var second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
    new_label.id = &#039;wpDescLabel&#039;;&lt;br /&gt;
    new_label.appendChild (UFUI.getLabel (&#039;wpDescUploadLbl&#039;));&lt;br /&gt;
    first_cell.appendChild (new_label);&lt;br /&gt;
 &lt;br /&gt;
    var new_row = table.insertRow (idx);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
    idx++;&lt;br /&gt;
 &lt;br /&gt;
    var added = false;&lt;br /&gt;
    if (stored_form != null) {&lt;br /&gt;
      // Maybe we had more... find &#039;wpLangSel1&#039;&lt;br /&gt;
      var curr = 0;&lt;br /&gt;
      for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
        if (stored_form[i].id == &#039;wpLangSel1&#039;) {&lt;br /&gt;
          curr = i; break;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (curr &amp;gt; 0) {&lt;br /&gt;
        while (   curr &amp;lt; stored_form.length&lt;br /&gt;
               &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpLangSel&#039;) == 0) {&lt;br /&gt;
          UploadFormFull.addDescField (table, null, idx++, stored_form);&lt;br /&gt;
          added = true; curr++;&lt;br /&gt;
          if (curr &amp;lt; stored_form.length &amp;amp;&amp;amp; stored_form[curr].id.indexOf (&#039;wpDescText&#039;) == 0)&lt;br /&gt;
            curr++;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } // end if&lt;br /&gt;
    if (!added) {&lt;br /&gt;
      if (   UploadForm_description_languages&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.constructor == Array&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_description_languages.length &amp;gt; 0) {&lt;br /&gt;
        for (var i = 0; i &amp;lt; UploadForm_description_languages.length; i++) {&lt;br /&gt;
          var lang = LanguageHandler.closestLanguage (UploadForm_description_languages[i]);&lt;br /&gt;
          UploadFormFull.addDescField (table, lang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        if (UploadForm_own_language_first) {&lt;br /&gt;
		&lt;br /&gt;
		/* Wikiminicustom (lj): Replaced this block by following one (we do not want the English field to be shown by default)&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
          if (userLang != null &amp;amp;&amp;amp; userLang != UFUI.defaultLanguage)&lt;br /&gt;
            UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
        }&lt;br /&gt;
        */&lt;br /&gt;
        &lt;br /&gt;
          if (userLang != null)&lt;br /&gt;
			UploadFormFull.addDescField (table, userLang, idx++, stored_form);&lt;br /&gt;
		  } else {&lt;br /&gt;
			 UploadFormFull.addDescField (table, UFUI.defaultLanguage, idx++, stored_form);&lt;br /&gt;
		  } /* Wikiminicustom (lj): End of custom replacement */&lt;br /&gt;
			&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now add a &amp;quot;+&amp;quot; button&lt;br /&gt;
    var additional =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormAddDescButton&#039;     // Customization ID&lt;br /&gt;
         , &#039;wpUploadAddDescription&#039;        // ID of button&lt;br /&gt;
         , &#039;+&#039;                             // Default text&lt;br /&gt;
         , UploadFormFull.addOneDescField  // Event handler&lt;br /&gt;
        );&lt;br /&gt;
 &lt;br /&gt;
    new_row = table.insertRow (idx++);&lt;br /&gt;
    first_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    second_cell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
    second_cell.appendChild (additional);&lt;br /&gt;
    new_row.appendChild (first_cell);&lt;br /&gt;
    new_row.appendChild (second_cell);&lt;br /&gt;
 &lt;br /&gt;
    return idx;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  changeField : function (field_id) // Callback for changeable field button&lt;br /&gt;
  {&lt;br /&gt;
    function get_selection (field)&lt;br /&gt;
    {&lt;br /&gt;
      // Based on code from Jonas Raoni Soares Silva at http://jsfromhell.com/forms/selection&lt;br /&gt;
      // License: {{tl|attribution}}&lt;br /&gt;
      // Warning: simplified because we apply it only to an INPUT field. For TEXTAREAs, see the&lt;br /&gt;
      // URL given.&lt;br /&gt;
      if (typeof (field.selectionStart) != &#039;undefined&#039;)&lt;br /&gt;
        return {start: field.selectionStart, end: field.selectionEnd};&lt;br /&gt;
      else if (!!field.createTextRange) {&lt;br /&gt;
        field.focus ();&lt;br /&gt;
        var s = document.selection.createRange();&lt;br /&gt;
        if (s.parentElement() != field) return {start: 0, end: 0};&lt;br /&gt;
        var r = field.createTextRange(); r.setEndPoint (&amp;quot;EndToStart&amp;quot;, s);&lt;br /&gt;
        return {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;
      }&lt;br /&gt;
      return {start: 0, end: 0};&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var field  = document.getElementById (field_id);&lt;br /&gt;
    if (field.disabled) return; // Don&#039;t do anything if the field isn&#039;t enabled.&lt;br /&gt;
 &lt;br /&gt;
    var button = document.getElementById (field_id + &#039;_Button&#039;);&lt;br /&gt;
    var cell   = field.parentNode;&lt;br /&gt;
    if (!field || !button || !cell) return; // Error message here?&lt;br /&gt;
    var new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    var height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 2, 4);&lt;br /&gt;
    new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    new_field.value = field.value;&lt;br /&gt;
    var sel = get_selection (field);&lt;br /&gt;
    var tab_idx = field.getAttribute (&#039;tabindex&#039;);&lt;br /&gt;
    cell.removeChild (button);&lt;br /&gt;
    cell.replaceChild (new_field, field);&lt;br /&gt;
    field.id = &amp;quot;&amp;quot;;&lt;br /&gt;
    field.onfocus = null;&lt;br /&gt;
    new_field.id = field_id;&lt;br /&gt;
    new_field.setAttribute (&#039;tabindex&#039;, tab_idx);&lt;br /&gt;
    UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    // Restore the selection&lt;br /&gt;
    if (!!new_field.setSelectionRange) // e.g. khtml&lt;br /&gt;
      new_field.setSelectionRange (sel.start, sel.end);&lt;br /&gt;
    else if (typeof (new_field.selectionStart) != &#039;undefined&#039;) {&lt;br /&gt;
      new_field.selectionStart = sel.start;&lt;br /&gt;
      new_field.selectionEnd   = sel.end;&lt;br /&gt;
    } else if (new_field.createTextRange) { // IE&lt;br /&gt;
      var new_selection = new_field.createTextRange();&lt;br /&gt;
      new_selection.move (&amp;quot;character&amp;quot;, sel.start);&lt;br /&gt;
      new_selection.moveEnd (&amp;quot;character&amp;quot;, sel.end - sel.start);&lt;br /&gt;
      new_selection.select();&lt;br /&gt;
    }&lt;br /&gt;
    new_field.focus ();&lt;br /&gt;
    UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  enable_edittools : function (textfield)&lt;br /&gt;
  {&lt;br /&gt;
    // To be called on each dynamically added field to ensure the edit toolbar works there&lt;br /&gt;
    if (typeof (EditTools) != &#039;undefined&#039; &amp;amp;&amp;amp; typeof (EditTools.registerTextField) == &#039;function&#039;) {&lt;br /&gt;
      // We have EditTools&lt;br /&gt;
      if (insertTags == EditTools.insertTags) {&lt;br /&gt;
        // EditTools is already set up: we have to add an onfocus handler ourselves&lt;br /&gt;
        addEvent (textfield, &#039;focus&#039;, EditTools.registerTextField);&lt;br /&gt;
      }&lt;br /&gt;
      // Otherwise, EditTools will be set up later, and will catch this field, so we don&#039;t have&lt;br /&gt;
      // to do anything.&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  switch_intro_text : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Set up the display of [[MediaWiki:Uploadtext]]&lt;br /&gt;
    var long_text  = document.getElementById (&#039;wpUploadFormLongText&#039;);&lt;br /&gt;
    var short_text = document.getElementById (&#039;wpUploadFormShortText&#039;);&lt;br /&gt;
    if (long_text &amp;amp;&amp;amp; short_text) {&lt;br /&gt;
      long_text.style.display = &#039;none&#039;;&lt;br /&gt;
      if (UFUtils.isChildOf (long_text, short_text)) {&lt;br /&gt;
        // If long_text is a child of short_text, then short_text is already shown, and&lt;br /&gt;
        // long_text is just a part that isn&#039;t needed for the new upload form. Hence&lt;br /&gt;
        // we&#039;re done.&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      if (UFUtils.isChildOf (short_text, long_text)) {&lt;br /&gt;
        // If the short_text is within the long_text, we need to take it out; otherwise&lt;br /&gt;
        // it won&#039;t be shown.&lt;br /&gt;
        short_text.parentNode.removeChild (short_text);&lt;br /&gt;
        long_text.parentNode.insertBefore (short_text, long_text.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      short_text.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Remove the redundant infobox in the uploadtext explanation. People should *not*&lt;br /&gt;
      // insert this template into description.&lt;br /&gt;
      var infobox = document.getElementById (&#039;Uploadtext-template-box&#039;);&lt;br /&gt;
      if (infobox) infobox.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_hints : function ()&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, UFUI.getHint (&#039;wpUploadFormDestFileHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpSource&#039;, UFUI.getHint (&#039;wpUploadFormSourceHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAuthor&#039;, UFUI.getHint (&#039;wpUploadFormAuthorHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDate&#039;, UFUI.getHint (&#039;wpUploadFormDateHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpPermission&#039;, UFUI.getHint (&#039;wpUploadFormPermissionHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpAdditionalInfo&#039;, UFUI.getHint (&#039;wpUploadFormAdditionalInfoHint&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;catlinks&#039;, UFUI.getHint (&#039;wpUploadFormCategoryHint&#039;));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
    function addField (table, idx, id, label, field, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      if (label == null) label = UFUI.getLabel (id + &#039;UploadLbl&#039;);&lt;br /&gt;
      var new_row = table.insertRow (idx);&lt;br /&gt;
      var firstCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      firstCell.classList.add(&#039;mw-label&#039;);&lt;br /&gt;
      var new_label = document.createElement (&#039;label&#039;);&lt;br /&gt;
      new_label.htmlFor = id;&lt;br /&gt;
      new_label.appendChild (label);&lt;br /&gt;
      firstCell.appendChild (new_label);&lt;br /&gt;
      var secondCell = document.createElement (&#039;td&#039;);&lt;br /&gt;
      secondCell.classList.add(&#039;mw-input&#039;);&lt;br /&gt;
      field.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      field.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      secondCell.appendChild (field);&lt;br /&gt;
      new_row.appendChild (firstCell);&lt;br /&gt;
      new_row.appendChild (secondCell);&lt;br /&gt;
      var prev_value = UploadForm.getPrevValue (stored_form, id);&lt;br /&gt;
      if (prev_value != null) field.value = prev_value;&lt;br /&gt;
      UploadFormFull.enable_edittools (field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addInput (table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = document.createElement (&#039;input&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;size&#039;, &#039;&#039; + width);&lt;br /&gt;
      addField (table, idx, id, label, new_field, stored_form);&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
      return new_field;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function addChangeableField (height, table, idx, id, label, width, stored_form)&lt;br /&gt;
    {&lt;br /&gt;
      var new_field = null;&lt;br /&gt;
      var field_id = &#039;wp&#039; + id;&lt;br /&gt;
      if (height == 0)&lt;br /&gt;
        height = UFUtils.getHeight (UploadFormFull.field_state[field_id].height, 1, 4);&lt;br /&gt;
      if (height &amp;gt; 1) {&lt;br /&gt;
        new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
        new_field.setAttribute (&#039;rows&#039;, height);&lt;br /&gt;
        new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
        addField (table, idx, &#039;wp&#039; + id, null, new_field, stored_form);&lt;br /&gt;
      } else {&lt;br /&gt;
		//Wikiminicustom (om)&lt;br /&gt;
		//new_field  = addInput (table, idx, field_id, null, 80, stored_form);&lt;br /&gt;
        new_field  = addInput (table, idx, field_id, null, 60, stored_form);&lt;br /&gt;
        var button =&lt;br /&gt;
          UploadForm.customFormButton&lt;br /&gt;
            (  &#039;wpUploadForm&#039; + id + &#039;Button&#039;&lt;br /&gt;
             , field_id + &#039;_Button&#039;&lt;br /&gt;
             , &#039;...&#039;&lt;br /&gt;
             , function () { UploadFormFull.changeField (field_id); }&lt;br /&gt;
            );&lt;br /&gt;
        new_field.parentNode.insertBefore (button, new_field.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
      UploadFormFull.field_state[field_id].height = height;&lt;br /&gt;
      UploadFormFull.enable_edittools (new_field);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function setCheckBoxes (previous_form, boxes)&lt;br /&gt;
    {&lt;br /&gt;
      if (boxes == null || boxes.length == 0 || previous_form == null) return;&lt;br /&gt;
      for (var i = 0; i &amp;lt; boxes.length; i++) {&lt;br /&gt;
        if (boxes[i] != null) {&lt;br /&gt;
          var prev_val = UploadForm.getPrevValue (previous_form, boxes[i].id);&lt;br /&gt;
          if (prev_val != null) boxes[i].checked = prev_val;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Init the field states. Cannot be done earlier, otherwise definitions in user&#039;s&lt;br /&gt;
    // monobook.js (or modern.js, or ...) won&#039;t be taken aboard.&lt;br /&gt;
    UploadFormFull.field_state =&lt;br /&gt;
      { wpSource: {height: UploadForm_source_field_size}&lt;br /&gt;
       ,wpAuthor: {height: UploadForm_author_field_size}&lt;br /&gt;
      };&lt;br /&gt;
 &lt;br /&gt;
    var previous_form         = null;&lt;br /&gt;
    var previous_type         = -1; // unknown&lt;br /&gt;
    var previous_fields       = [0, 0];&lt;br /&gt;
    UploadForm.previous_hotcat_state = null;&lt;br /&gt;
    if (typeof (FormRestorer) != &#039;undefined&#039;) {&lt;br /&gt;
      // We know that when we arrive here originally, wpDestFile.value is empty, as is&lt;br /&gt;
      // wpDestFile.defaultValue. If we entered something, submitted, and then come back,&lt;br /&gt;
      // modern browsers restore form entries, at least for the fields in the static XHTML.&lt;br /&gt;
      // wpDestFile is such a static field (it isn&#039;t added by Javascript), so if we have a&lt;br /&gt;
      // non-empty value here, we know that the form needs to restored. (But see the caveat&lt;br /&gt;
      // about IE and onload handling at the bottom of the file!)&lt;br /&gt;
      var current_dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (current_dest_file != null) current_dest_file = current_dest_file.value;&lt;br /&gt;
      if (current_dest_file != null &amp;amp;&amp;amp; current_dest_file.length &amp;gt; 0) {&lt;br /&gt;
        previous_form = FormRestorer.readForm (&#039;UploadForm&#039;);&lt;br /&gt;
      }&lt;br /&gt;
      if (previous_form) {&lt;br /&gt;
        var additional_data = previous_form[0].val;&lt;br /&gt;
        if (additional_data) {&lt;br /&gt;
          additional_data    = additional_data.split (&#039;\t&#039;);&lt;br /&gt;
          var previous_file  = additional_data[1];&lt;br /&gt;
          if (previous_file == current_dest_file) {&lt;br /&gt;
            previous_type      = parseInt (additional_data[0], 10);&lt;br /&gt;
            previous_fields[0] = parseInt (additional_data[2], 10);&lt;br /&gt;
            previous_fields[1] = parseInt (additional_data[3], 10);          &lt;br /&gt;
            if (additional_data.length &amp;gt;= 5) UploadForm.previous_hotcat_state = additional_data[4];&lt;br /&gt;
          } else {&lt;br /&gt;
            previous_form = null;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    var original_row  = original_desc.parentNode.parentNode;&lt;br /&gt;
    var table         = original_row.parentNode;&lt;br /&gt;
    var original_idx  = original_row.rowIndex;&lt;br /&gt;
    UploadForm.formModified = true;&lt;br /&gt;
    original_desc.setAttribute (&#039;id&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
    UploadForm.oldOnSubmit = UploadForm.the_form.onsubmit;&lt;br /&gt;
    UploadForm.the_form.onsubmit = UploadFormFull.submit;&lt;br /&gt;
    table.deleteRow (original_idx);&lt;br /&gt;
    var idx = original_idx;&lt;br /&gt;
    // Insert source field&lt;br /&gt;
    var new_field = null;&lt;br /&gt;
    // Wikiminicustom (om)&lt;br /&gt;
    //addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    //addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpDate&#039;, null, 80, previous_form);&lt;br /&gt;
    // Insert description field&lt;br /&gt;
    if (typeof (LanguageHandler) == &#039;undefined&#039; || previous_type == 0) {&lt;br /&gt;
      // Basic setup&lt;br /&gt;
      new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
      new_field.setAttribute (&#039;rows&#039;, UFUtils.getHeight (UploadForm_description_height, 6, 12));&lt;br /&gt;
      // Wikiminicustom (om)&lt;br /&gt;
      //new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
      new_field.style.width = &#039;80%&#039;;&lt;br /&gt;
      // Do not name the new field &#039;wpUploadDescription&#039;, otherwise MediaWiki:Upload.js&lt;br /&gt;
      // might prefill it with an information template!&lt;br /&gt;
      addField (table, idx++, &#039;wpDesc&#039;, null, new_field, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      idx = UploadFormFull.addMultiDesc (table, idx, previous_form);&lt;br /&gt;
      UploadFormFull.form_type = 1;&lt;br /&gt;
    }&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    addChangeableField (previous_fields[0], table, idx++, &#039;Source&#039;, null, 80, previous_form);&lt;br /&gt;
    addChangeableField (previous_fields[1], table, idx++, &#039;Author&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpOtherVersions&#039;, null, 80, previous_form);&lt;br /&gt;
    //addInput (table, idx++, &#039;wpPermission&#039;, null, 80, previous_form);&lt;br /&gt;
    new_field = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    new_field.setAttribute&lt;br /&gt;
      (&#039;rows&#039;, UFUtils.getHeight (UploadForm_additional_info_height, 2, 10));&lt;br /&gt;
    new_field.style.width = &#039;100%&#039;;&lt;br /&gt;
    // Work-around Firefox&#039;s &amp;quot;one additional line&amp;quot; bug&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    //addField (table, idx++, &#039;wpAdditionalInfo&#039;, null, new_field, previous_form);&lt;br /&gt;
    // Add a preview button.&lt;br /&gt;
    //Wikiminicustom (om)&lt;br /&gt;
    // UploadForm.addPreviewButton (UploadFormFull.preview);&lt;br /&gt;
    // Correct tab indices.&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.the_form.length; i++) {&lt;br /&gt;
      UploadForm.the_form.elements[i].setAttribute (&#039;tabindex&#039;, &#039;&#039; + i);&lt;br /&gt;
    }&lt;br /&gt;
    var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
    // Change the license previewer to not cause a table re-layout&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      // These style definitions are because long option labels result in excessively wide&lt;br /&gt;
      // selectors, causing also the description fields to go beyond the right border of the&lt;br /&gt;
      // page.&lt;br /&gt;
      license.style.maxWidth = &#039;100%&#039;;&lt;br /&gt;
      license.style.width    = &#039;100%&#039;;&lt;br /&gt;
      license.style.overflow = &#039;hidden&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.setup_license_preview ();&lt;br /&gt;
    if (license != null) {&lt;br /&gt;
      var prev = UploadForm.getPrevValue (previous_form, &#039;wpLicense&#039;);&lt;br /&gt;
      if (prev != null) {&lt;br /&gt;
        try {&lt;br /&gt;
          license.options[license.selectedIndex].selected = false;&lt;br /&gt;
          license.options[prev].selected = true;&lt;br /&gt;
        } catch (ex) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Pre-fill in some cases&lt;br /&gt;
    if (UFUI.isOwnWork) {&lt;br /&gt;
      var src     = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author  = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      if (src != null &amp;amp;&amp;amp; (src.value == null || src.value.length == 0)) {&lt;br /&gt;
        src.value = UploadForm.getOwnWorkSource ();&lt;br /&gt;
      }&lt;br /&gt;
      if (author != null &amp;amp;&amp;amp; (author.value == null || author.value.length == 0)) {&lt;br /&gt;
        author.value = UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
      }&lt;br /&gt;
      if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
        var date = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
        if (date != null &amp;amp;&amp;amp; (date.value == null || date.value.length == 0)) {&lt;br /&gt;
          date.value = UploadForm_ownwork_date;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (previous_form != null) {&lt;br /&gt;
      setCheckBoxes&lt;br /&gt;
        (  previous_form&lt;br /&gt;
         , [  document.getElementById (&#039;wpWatchthis&#039;)&lt;br /&gt;
            , document.getElementById (&#039;wpIgnoreWarning&#039;)]);&lt;br /&gt;
    }     &lt;br /&gt;
    UploadFormFull.switch_intro_text ();    &lt;br /&gt;
    // If HotCat is present, restore its state, too.&lt;br /&gt;
    if (UploadForm.previous_hotcat_state != null &amp;amp;&amp;amp; typeof (hotcat_set_state) == &#039;function&#039;) {&lt;br /&gt;
      var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
      if (input != null) hotcat_cancel ();&lt;br /&gt;
      UploadForm.previous_hotcat_state = hotcat_set_state (UploadForm.previous_hotcat_state);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    UploadFormFull.set_hints ();&lt;br /&gt;
  }, // end setup&lt;br /&gt;
 &lt;br /&gt;
  get_desc_text : function (basic)&lt;br /&gt;
  {&lt;br /&gt;
    var desc_text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
      var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
      if (desc != null &amp;amp;&amp;amp; !desc.disabled) desc_text = UploadForm.clean (desc.value);&lt;br /&gt;
    } else {&lt;br /&gt;
      for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
        if (!UploadFormFull.multi_inputs[i].textfield.disabled) {&lt;br /&gt;
          var text     = UploadFormFull.multi_inputs[i].textfield.value;&lt;br /&gt;
          var selector = UploadFormFull.multi_inputs[i].selector;&lt;br /&gt;
          var lang     = selector.options[selector.selectedIndex].value;&lt;br /&gt;
          if (text != null &amp;amp;&amp;amp; text.length &amp;gt; 0) {&lt;br /&gt;
            text = UploadForm.clean (text);&lt;br /&gt;
            if (desc_text.length &amp;gt; 0) desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
            if (!basic &amp;amp;&amp;amp; lang != null &amp;amp;&amp;amp; lang.length &amp;gt; 0 &amp;amp;&amp;amp; lang != &#039;unknown&#039;) {&lt;br /&gt;
              // This is Commons-specific! The tl-template is already used, the template for&lt;br /&gt;
              // Tagalog is tgl!&lt;br /&gt;
              if (lang == &#039;tl&#039;) lang = &#039;tgl&#039;;&lt;br /&gt;
              &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + &#039;\{\{&#039; + lang + &#039;|1=&#039; + text + &#039;\}\}&#039;;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{&#039; + lang + &#039;| &#039; + text + &#039; \}\}&#039;;&lt;br /&gt;
              &lt;br /&gt;
            } else&lt;br /&gt;
            &lt;br /&gt;
              //Wikiminicustom (lj): replaced following line by next one (we want a more readable output)&lt;br /&gt;
              //desc_text = desc_text + text;&lt;br /&gt;
              desc_text = desc_text + &#039;  \{\{xx| &#039; + text + &#039; \}\}&#039;; // (lj: I will create a &amp;quot;xx&amp;quot; template for unknown languages)&lt;br /&gt;
              &lt;br /&gt;
          }&lt;br /&gt;
        } // end if !disabled&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    var more_info  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    if (!basic) {&lt;br /&gt;
      var src        = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
      var author     = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
      //Wikiminicustom (om)&lt;br /&gt;
      //var date       = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
      //var other      = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
      //var othervers  = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
      &lt;br /&gt;
      //Wikiminicustom (lj): a few spaces and \n added in the next block (we want a more readable output) &lt;br /&gt;
 &lt;br /&gt;
      desc_text = &#039;\{\{Information\n\n&#039;&lt;br /&gt;
                   + &#039;|Description =\n&#039;+ desc_text + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Source = &#039; + (!src.disabled ? UploadForm.clean (src.value) : &amp;quot;&amp;quot;) + &#039;\n&#039;&lt;br /&gt;
                   + &#039;|Author = &#039; + (!author.disabled ? UploadForm.clean (author.value) : &amp;quot;&amp;quot;) + &#039;\n\n&#039;&lt;br /&gt;
                   + &#039;\}\}\n&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      desc_text = desc_text + &#039;\n&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // Append the additional info, if any&lt;br /&gt;
    if (more_info &amp;amp;&amp;amp; !more_info.disabled &amp;amp;&amp;amp; more_info.value)&lt;br /&gt;
      desc_text = desc_text + UploadForm.clean (more_info.value);&lt;br /&gt;
    return desc_text;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  submit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    // Now put together an information-template&lt;br /&gt;
    var desc_text = UploadFormFull.get_desc_text (overwrite);&lt;br /&gt;
 &lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
 &lt;br /&gt;
    var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (target_name != null &amp;amp;&amp;amp; target_name.value != null) // Strip whitespace&lt;br /&gt;
      target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
 &lt;br /&gt;
    var dummy_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    // Sometimes, we do restore from scratch, and sometimes, the browser manages to keep everything.&lt;br /&gt;
    // If so, we may have a wpUploadDescription from an earlier submission. Remove it.&lt;br /&gt;
    if (dummy_desc != null) dummy_desc.parentNode.removeChild (dummy_desc);&lt;br /&gt;
 &lt;br /&gt;
    if (   typeof (FormRestorer) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; target_name != null &amp;amp;&amp;amp; target_name.value != null) {&lt;br /&gt;
      var hotcat_state = null;&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        hotcat_state = hotcat_get_state ();&lt;br /&gt;
      }&lt;br /&gt;
      // We already know that target_name.value is set!&lt;br /&gt;
      FormRestorer.saveForm&lt;br /&gt;
        (  &#039;UploadForm&#039;&lt;br /&gt;
         , UploadForm.the_form.id&lt;br /&gt;
         , &amp;quot;&amp;quot; + UploadFormFull.form_type&lt;br /&gt;
           + &#039;\t&#039; + target_name.value&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpSource.height&lt;br /&gt;
           + &#039;\t&#039; + UploadFormFull.field_state.wpAuthor.height&lt;br /&gt;
           + (hotcat_state != null ? &#039;\t&#039; + hotcat_state : &#039;&#039;)&lt;br /&gt;
         , &#039;;path=&#039; + document.location.pathname&lt;br /&gt;
           + &#039;;max-age=1800&#039;);&lt;br /&gt;
      // Expire after half an hour.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    dummy_desc = document.createElement (&#039;textarea&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;rows&#039;, &#039;6&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;cols&#039;, &#039;80&#039;);&lt;br /&gt;
    dummy_desc.style.display = &#039;none&#039;;&lt;br /&gt;
    dummy_desc.setAttribute (&#039;name&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    dummy_desc.setAttribute (&#039;id&#039;, &#039;wpUploadDescription&#039;);&lt;br /&gt;
    UploadForm.the_form.appendChild (dummy_desc);&lt;br /&gt;
    dummy_desc.value = UploadForm.fixCategoryTransclusion (desc_text);&lt;br /&gt;
 &lt;br /&gt;
    do_submit = UploadForm.call_onsubmit (evt || window.event);&lt;br /&gt;
    if (!do_submit) {&lt;br /&gt;
      // Oops. We actually don&#039;t submit. Remove the hidden field&lt;br /&gt;
      UploadForm.the_form.removeChild (dummy_desc);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      document.getElementById (&#039;wpDestFile&#039;).disabled = false;&lt;br /&gt;
      document.getElementById (&#039;wpEditToken&#039;).disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    if (!UploadFormFull.verify (overwrite)) return false;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.makePreview (UploadFormFull.get_desc_text (overwrite), overwrite);&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verify : function (overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    var src       = document.getElementById (&#039;wpSource&#039;);&lt;br /&gt;
    var author    = document.getElementById (&#039;wpAuthor&#039;);&lt;br /&gt;
    var date      = document.getElementById (&#039;wpDate&#039;);&lt;br /&gt;
    var other     = document.getElementById (&#039;wpPermission&#039;);&lt;br /&gt;
    var othervers = document.getElementById (&#039;wpOtherVersions&#039;);&lt;br /&gt;
    var moreInfo  = document.getElementById (&#039;wpAdditionalInfo&#039;);&lt;br /&gt;
    var ok        = true;&lt;br /&gt;
 &lt;br /&gt;
    if (!overwrite) {&lt;br /&gt;
      if (UploadForm.errorMsgs != null) delete UploadForm.errorMsgs;&lt;br /&gt;
      UploadForm.errorMsgs = new Array ();&lt;br /&gt;
      UploadForm.warning_pushed = false;&lt;br /&gt;
 &lt;br /&gt;
      if (!UploadForm.verifyMandatoryField&lt;br /&gt;
            (src,&lt;br /&gt;
             function (src)&lt;br /&gt;
             {&lt;br /&gt;
                var flickr_ok = !UFUI.isFromFlickr ||&lt;br /&gt;
                                src.search (/http:\/\/(www\.)?flickr\.com/) &amp;gt;= 0;&lt;br /&gt;
                if (!flickr_ok) UploadForm.errorMsgs.push (&#039;wpFlickrURLError&#039;);&lt;br /&gt;
                return flickr_ok;&lt;br /&gt;
             }&lt;br /&gt;
            )&lt;br /&gt;
         ) &lt;br /&gt;
      {&lt;br /&gt;
        src.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      if (!UploadForm.verifyMandatoryField (author)) {&lt;br /&gt;
        author.onkeyup = UploadForm.resetBg;&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      // Piece the description(s) together&lt;br /&gt;
      var all_descs = &amp;quot;&amp;quot;;&lt;br /&gt;
      if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
        var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
        if (desc != null) all_descs = desc.value;&lt;br /&gt;
      } else {&lt;br /&gt;
        for (var input_idx = 0; input_idx &amp;lt; UploadFormFull.multi_inputs.length; input_idx++) {&lt;br /&gt;
          all_descs = all_descs + UploadFormFull.multi_inputs[input_idx].textfield.value;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      // License check&lt;br /&gt;
      var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_chosen = license_field == null || license_field.selectedIndex &amp;gt; 0;&lt;br /&gt;
      if (!license_chosen &amp;amp;&amp;amp; !UploadForm.has_license ([all_descs, other, moreInfo])) {&lt;br /&gt;
        if (!UploadForm.warning_pushed) {&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
          UploadForm.warning_pushed = true;&lt;br /&gt;
        }&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
      var target_name = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (target_name != null) {&lt;br /&gt;
        // Trim leading and trailing whitespace&lt;br /&gt;
        target_name.value = target_name.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;);&lt;br /&gt;
        if (!UploadForm.verifyFileName (target_name.value)) {&lt;br /&gt;
          target_name.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          target_name.onkeyup =&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              UploadForm.resetBg (evt);&lt;br /&gt;
              if (typeof (wgUploadWarningObj.keypress) == &#039;function&#039; &amp;amp;&amp;amp; !UploadForm.isReupload)&lt;br /&gt;
                wgUploadWarningObj.keypress();&lt;br /&gt;
            };&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (UploadForm.templates[0].desc_mandatory) {&lt;br /&gt;
        if (all_descs.search (/\S/) &amp;lt; 0) {&lt;br /&gt;
          if (UploadFormFull.multi_inputs == null) {&lt;br /&gt;
            var desc = document.getElementById (&#039;wpDesc&#039;);&lt;br /&gt;
            if (desc != null) {&lt;br /&gt;
              desc.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
              desc.onkeyup = UploadForm.resetBg;&lt;br /&gt;
            }&lt;br /&gt;
          } else {&lt;br /&gt;
            UploadFormFull.setMultiBg (UploadForm.errorColor, UploadFormFull.resetMultiBg);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.errorMsgs.push (&#039;wpNoDescriptionError&#039;);&lt;br /&gt;
          ok = false;&lt;br /&gt;
        }&lt;br /&gt;
      } // end description check&lt;br /&gt;
    } // end overwrite&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
      UploadForm.hidePreview ();&lt;br /&gt;
      UploadForm.display_errors ();&lt;br /&gt;
    } else {&lt;br /&gt;
       // It&#039;s ok: hide our warning box&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setMultiBg : function (color, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadFormFull.multi_inputs == null) return;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadFormFull.multi_inputs.length; i++) {&lt;br /&gt;
      var field = UploadFormFull.multi_inputs[i].textfield;&lt;br /&gt;
      field.style.backgroundColor = color;&lt;br /&gt;
      field.onkeyup               = handler;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetMultiBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.resetBg (evt)) {&lt;br /&gt;
      // Reset the backgrounds of all description fields&lt;br /&gt;
      UploadFormFull.setMultiBg (&#039;#FFFFFF&#039;, null);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadFormFull&lt;br /&gt;
 &lt;br /&gt;
var UploadForm =&lt;br /&gt;
{&lt;br /&gt;
  isInstalled  : false, // Set to true when the onload hook runs&lt;br /&gt;
 &lt;br /&gt;
  debug        : false, // Can be set to true by adding &amp;quot;&amp;amp;debug=true&amp;quot; to the URL&lt;br /&gt;
 &lt;br /&gt;
  oldOnSubmit  : null,        // Possibly already existing onsubmit handler&lt;br /&gt;
  errorColor   : &#039;lightpink&#039;, // The light red from Template:Copyvio&lt;br /&gt;
  formModified : false,&lt;br /&gt;
 &lt;br /&gt;
  isReupload   : false,&lt;br /&gt;
 &lt;br /&gt;
  setup_hotcat_label : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // If HotCat is present, translate its label if we can find it&lt;br /&gt;
    var hotcat_label_cell = document.getElementById (&#039;hotcatLabel&#039;);&lt;br /&gt;
    if (hotcat_label_cell != null) {&lt;br /&gt;
      // Change its ID, just to be sure&lt;br /&gt;
      hotcat_label_cell.setAttribute (&#039;id&#039;, &#039;hotcatLabelTranslated&#039;);&lt;br /&gt;
      // Assumes that the cell has only one child (which is normally the case)&lt;br /&gt;
      hotcat_label_cell.replaceChild&lt;br /&gt;
        (  UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;)&lt;br /&gt;
         , hotcat_label_cell.firstChild);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_error_display : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var warning_cell = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (!warning_cell) return;&lt;br /&gt;
    var row      = warning_cell.parentNode;&lt;br /&gt;
    var new_cell = document.createElement (&#039;td&#039;);&lt;br /&gt;
    new_cell.style.padding = &#039;0&#039;;&lt;br /&gt;
    // Remove the colspan, if any, and insert a new cell to the left&lt;br /&gt;
    warning_cell.colspan = &amp;quot;&amp;quot;;&lt;br /&gt;
    warning_cell.padding = &#039;0&#039;;&lt;br /&gt;
    row.insertBefore (new_cell, warning_cell);&lt;br /&gt;
    UFUtils.convert_td_div (warning_cell);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  set_fields_enabled : function (enabled, except)&lt;br /&gt;
  {&lt;br /&gt;
    // Enables or disables all named fields in the form, except those whose ids are&lt;br /&gt;
    // listed in except&lt;br /&gt;
    var skip    = except.join (&#039; &#039;);&lt;br /&gt;
    var elems   = UploadForm.the_form.elements;&lt;br /&gt;
    var changed = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
      if (elems[i].type == &#039;hidden&#039;) continue; // Don&#039;t fool around with hidden elements&lt;br /&gt;
      var id = elems[i].id;&lt;br /&gt;
      if (!id || id.length == 0) id = elems[i].name;&lt;br /&gt;
      if (id &amp;amp;&amp;amp; id.length &amp;gt; 0) {&lt;br /&gt;
        if (skip.indexOf (id) &amp;lt; 0) {&lt;br /&gt;
          if (elems[i].disabled != !enabled) {&lt;br /&gt;
            changed = true;&lt;br /&gt;
            if (elems[i].type == &#039;text&#039; || elems[i].type == &#039;textarea&#039;) {&lt;br /&gt;
              // Set the background. Actually, I&#039;d like to just reset it to whatever the&lt;br /&gt;
              // default was, but setting it to null doesn&#039;t do anything in IE6... We&lt;br /&gt;
              // force a light gray for disabled fields since IE6 doesn&#039;t have a real&lt;br /&gt;
              // visual &amp;quot;disabled&amp;quot; indicator for input fields.&lt;br /&gt;
              try {&lt;br /&gt;
                elems[i].style.backgroundColor = (enabled ? &#039;#FFFFFF&#039; : &#039;#EEEEEE&#039;);&lt;br /&gt;
              } catch (some_error) {&lt;br /&gt;
                // Swallow&lt;br /&gt;
              }&lt;br /&gt;
            }&lt;br /&gt;
            elems[i].disabled = !enabled;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (changed) {&lt;br /&gt;
      // Clear warning messages. If we disabled fields, they&#039;re obsolete; if we enabled fields,&lt;br /&gt;
      // new warnings will be generated upon submit if necessary.&lt;br /&gt;
      var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      if (my_warning != null) my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  previous_hotcat_state : null,&lt;br /&gt;
 &lt;br /&gt;
  getPrevValue : function (stored_form, element_id)&lt;br /&gt;
  {&lt;br /&gt;
    // Return a field&#039;s previous value, if known&lt;br /&gt;
    if (   stored_form == null || stored_form.length &amp;lt;= 1&lt;br /&gt;
        || element_id == null || element_id.length == 0)&lt;br /&gt;
      return null;&lt;br /&gt;
    for (var i = 1; i &amp;lt; stored_form.length; i++) {&lt;br /&gt;
      if (stored_form[i] != null &amp;amp;&amp;amp; element_id == stored_form[i].id)&lt;br /&gt;
        return stored_form[i].val;&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  license_button          : null,&lt;br /&gt;
  license_button_shown    : false,&lt;br /&gt;
  current_license_preview : &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
 &lt;br /&gt;
  get_license_preview : function () // Tooltip callback&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.current_license_preview;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display  = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  create_license_button : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Will be called only from our rewritten wgUploadLicenseObj.showPreview, i.e.&lt;br /&gt;
    // we *know* that we *do* have Tooltips and Buttons here.&lt;br /&gt;
    var previewButton =&lt;br /&gt;
      UploadForm.customFormButton&lt;br /&gt;
        (  &#039;wpUploadFormPreviewLicenseButton&#039; // Customization ID&lt;br /&gt;
         , &#039;wpUploadPreviewLicense&#039;           // ID of button&lt;br /&gt;
         , null                               // Default text&lt;br /&gt;
         , null                               // Event handler, will be set below&lt;br /&gt;
         , &#039;wpPreviewLicenseUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
    var tooltip =&lt;br /&gt;
      new Tooltip&lt;br /&gt;
        (  previewButton&lt;br /&gt;
         , UploadForm.get_license_preview&lt;br /&gt;
         , { activate     : Tooltip.CLICK&lt;br /&gt;
            ,deactivate   : (UFHelp.help_close_imgs&lt;br /&gt;
                             ? Tooltip.CLICK_ELEM&lt;br /&gt;
                             : Tooltip.CLICK_TIP|Tooltip.CLICK_ELEM|Tooltip.LOSE_FOCUS)&lt;br /&gt;
            ,close_button : UFHelp.help_close_imgs&lt;br /&gt;
            ,mode         : Tooltip.FIXED&lt;br /&gt;
            ,anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
            ,fixed_offset : {x:10, y: 5, dy: -1}&lt;br /&gt;
            ,open_delay   : 0&lt;br /&gt;
            ,hide_delay   : 0&lt;br /&gt;
           }&lt;br /&gt;
         , UFHelp.tooltip_styles&lt;br /&gt;
        );                            &lt;br /&gt;
    UploadForm.license_button = previewButton;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setup_license_preview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
    if (preview_panel != null) UFUtils.convert_td_div (preview_panel);&lt;br /&gt;
    // Change the license previewer to not overwrite our warning message, if any.&lt;br /&gt;
    if (   typeof (wgUploadLicenseObj) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (wgUploadLicenseObj.showPreview) != &#039;undefined&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
 &lt;br /&gt;
      wgUploadLicenseObj.showPreview = &lt;br /&gt;
        function (preview)&lt;br /&gt;
        {&lt;br /&gt;
          var preview_panel = document.getElementById (&#039;mw-license-preview&#039;);&lt;br /&gt;
          if (preview_panel == null) return;&lt;br /&gt;
          if (preview == UploadForm.current_license_preview) return;&lt;br /&gt;
 &lt;br /&gt;
          UploadForm.current_license_preview = preview;&lt;br /&gt;
          var contents = null;&lt;br /&gt;
          var new_state = false;&lt;br /&gt;
          if (!preview || preview.length == 0 || preview == &#039;&amp;amp;nbsp;&#039;) {&lt;br /&gt;
            contents = document.createTextNode (&#039;\xa0&#039;); // a single &amp;amp;nbsp;&lt;br /&gt;
            new_state = false;&lt;br /&gt;
          } else {&lt;br /&gt;
            if (!UploadForm.license_button) {&lt;br /&gt;
              UploadForm.create_license_button ();&lt;br /&gt;
            }&lt;br /&gt;
            if (!UploadForm.license_button_shown)&lt;br /&gt;
              contents = UploadForm.license_button;&lt;br /&gt;
            new_state = true;&lt;br /&gt;
          }&lt;br /&gt;
          if (contents &amp;amp;&amp;amp; new_state != UploadForm.license_button_shown) {&lt;br /&gt;
            if (preview_panel.firstChild)&lt;br /&gt;
              preview_panel.replaceChild (contents, preview_panel.firstChild);&lt;br /&gt;
            else&lt;br /&gt;
              preview_panel.appendChild (contents);&lt;br /&gt;
          }&lt;br /&gt;
          UploadForm.license_button_shown = new_state;&lt;br /&gt;
        }; // end function&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  preview_tooltip : null, // Tooltip, if preview so configured&lt;br /&gt;
  do_preview      : null, // Function to call to actually generate the preview&lt;br /&gt;
 &lt;br /&gt;
  addPreviewButton : function (handler)&lt;br /&gt;
  {&lt;br /&gt;
    // If we don&#039;t have Ajax, our preview won&#039;t work anyway.&lt;br /&gt;
    if (!window.XMLHttpRequest &amp;amp;&amp;amp; !window.ActiveXObject) return;&lt;br /&gt;
 &lt;br /&gt;
    var uploadButton = document.getElementsByName (&#039;wpUpload&#039;)[0]; // Has no ID...&lt;br /&gt;
    // If we can&#039;t find the upload button, we don&#039;t know where to insert the preview button.&lt;br /&gt;
    if (uploadButton == null) return;&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
      var previewButton =&lt;br /&gt;
        UploadForm.customFormButton&lt;br /&gt;
          (  &#039;wpUploadFormPreviewButton&#039; // Customization ID&lt;br /&gt;
           , &#039;wpUploadPreview&#039;           // ID of button&lt;br /&gt;
           , null                        // Default text&lt;br /&gt;
           , UploadForm.generatePreview  // Event handler&lt;br /&gt;
           , &#039;wpPreviewUploadLbl&#039;        // default label ID&lt;br /&gt;
          );&lt;br /&gt;
      if (   UploadForm_page_preview_in_tooltip&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (Tooltip) != &#039;undefined&#039;) {&lt;br /&gt;
        UploadForm.preview_tooltip =&lt;br /&gt;
          new Tooltip (  previewButton&lt;br /&gt;
                       , UploadForm.getPreview&lt;br /&gt;
                       , {  activate     : Tooltip.NONE // We&#039;ll show it manually in generatePreview.&lt;br /&gt;
                          , deactivate   : Tooltip.CLICK_TIP&lt;br /&gt;
                          , close_button : UFHelp.help_close_imgs&lt;br /&gt;
                          , mode         : Tooltip.FIXED&lt;br /&gt;
                          , target       : uploadButton&lt;br /&gt;
                          , anchor       : Tooltip.TOP_LEFT&lt;br /&gt;
                          , fixed_offset : {x:0, y: 5, dy:-1}&lt;br /&gt;
                          , open_delay   : 0&lt;br /&gt;
                          , hide_delay   : 0&lt;br /&gt;
                         }&lt;br /&gt;
                       , UFHelp.tooltip_styles&lt;br /&gt;
                      );&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.do_preview = handler;&lt;br /&gt;
      previewButton.setAttribute (&#039;style&#039;, &#039;margin-left: 0.5em;&#039;);&lt;br /&gt;
      var hotKey = &#039;p&#039;;&lt;br /&gt;
      previewButton.setAttribute (&#039;accesskey&#039;, hotKey);&lt;br /&gt;
      if (mw &amp;amp;&amp;amp; mw.util) {&lt;br /&gt;
        if (!(/\[\w+\]$/.test(previewButton.title))) previewButton.title += &#039; [&#039; + hotKey + &#039;]&#039;;&lt;br /&gt;
        mw.util.updateTooltipAccessKeys([previewButton]);&lt;br /&gt;
      }&lt;br /&gt;
      uploadButton.parentNode.insertBefore (previewButton, uploadButton.nextSibling);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkAuthor : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (UploadForm_ownwork_author) == &#039;string&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm_ownwork_author.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
      // It&#039;s a non-empty string&lt;br /&gt;
      return UploadForm_ownwork_author;&lt;br /&gt;
    } else {&lt;br /&gt;
      return &#039;\[\[User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;|&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;\]\]&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getOwnWorkSource : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var text   = UFUI.getLabel (&#039;wpOwnWorkUploadLbl&#039;, true);&lt;br /&gt;
    var result = null;&lt;br /&gt;
    try {&lt;br /&gt;
      // Must have a text node. IE6 doesn&#039;t know Node.TEXT_NODE...&lt;br /&gt;
      while (text &amp;amp;&amp;amp; text.nodeType != 3) text = text.firstChild;&lt;br /&gt;
      if (text) result = text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      result = null;&lt;br /&gt;
    }&lt;br /&gt;
    if (!result) result = &#039;Own work by &#039; + UploadForm.getOwnWorkAuthor ();&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  customFormButton : function (ui_id, id, default_text, handler, default_id)&lt;br /&gt;
  {&lt;br /&gt;
    function getButtonSpan (container, idx)&lt;br /&gt;
    {&lt;br /&gt;
      if (!container) return null;&lt;br /&gt;
      var spans = container.getElementsByTagName (&#039;span&#039;);&lt;br /&gt;
      var span  = null;&lt;br /&gt;
      if (!spans || spans.length &amp;lt;= idx) {&lt;br /&gt;
        // No spans... if idx is zero, try simply to take the first text node within container.&lt;br /&gt;
        if (idx == 0) span = container;&lt;br /&gt;
      } else {&lt;br /&gt;
        span = spans[idx];&lt;br /&gt;
      }&lt;br /&gt;
      // Ok, let&#039;s see if we have some text... IE6 doesn&#039;t know Node.TEXT_NODE!&lt;br /&gt;
      while (span &amp;amp;&amp;amp; span.nodeType != 3) span = span.firstChild;&lt;br /&gt;
      if (span) return span.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    function getDefault (default_text, default_id)&lt;br /&gt;
    {&lt;br /&gt;
      if (!default_text) {&lt;br /&gt;
        if (default_id) {&lt;br /&gt;
          var default_text = UFUI.getLabel (default_id, true);&lt;br /&gt;
          // Must have a text node&lt;br /&gt;
          while (default_text &amp;amp;&amp;amp; default_text.nodeType != 3) // IE6 doesn&#039;t know Node.TEXT_NODE&lt;br /&gt;
            default_text = default_text.firstChild;&lt;br /&gt;
          if (default_text)&lt;br /&gt;
            default_text = default_text.data.replace (/^\s+/, &amp;quot;&amp;quot;).replace (/\s+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
        } else&lt;br /&gt;
          default_text = &#039;X&#039;; // Hmmm... a serious misconfiguration&lt;br /&gt;
      }&lt;br /&gt;
      return default_text;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var button = null, imgs = null;&lt;br /&gt;
    button = UFUI.getEntry (ui_id, &#039;uiElements&#039;, UFUI.internalLanguage);&lt;br /&gt;
    if (!button) button = UFUI.getEntry (ui_id, &#039;uiElements&#039;);&lt;br /&gt;
    if (button) imgs = button.getElementsByTagName (&#039;img&#039;);&lt;br /&gt;
    if (!imgs || imgs.length == 0 || typeof (Buttons) == &#039;undefined&#039;) {&lt;br /&gt;
      var buttonText = null;&lt;br /&gt;
      var buttonText = getButtonSpan (button, 0);&lt;br /&gt;
      if (!buttonText) buttonText = getDefault (default_text, default_id);&lt;br /&gt;
      var alternateText = getButtonSpan (button, 1);&lt;br /&gt;
      button = document.createElement (&#039;input&#039;);&lt;br /&gt;
      button.setAttribute (&#039;id&#039;, id);&lt;br /&gt;
      button.setAttribute (&#039;name&#039;, id);&lt;br /&gt;
      button.type    = &#039;button&#039;;&lt;br /&gt;
      button.value   = buttonText;&lt;br /&gt;
      if (alternateText) button.title   = alternateText;&lt;br /&gt;
      button.onclick = handler;&lt;br /&gt;
    } else {&lt;br /&gt;
      button = Buttons.makeButton (imgs, id, handler);&lt;br /&gt;
    }&lt;br /&gt;
    return button;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  the_form : null,&lt;br /&gt;
 &lt;br /&gt;
  // If a needed script that is included hasn&#039;t loaded yet, we try at most install_max_attempts&lt;br /&gt;
  // times install_delay. If it then still has not loaded, we install all the same, and the&lt;br /&gt;
  // setup routine will have to deal with it. (Note that script loading is asynchronous!)&lt;br /&gt;
  install_delay        : 500, // Milliseconds&lt;br /&gt;
  install_attempts     : 0,&lt;br /&gt;
  install_max_attempts : 5,   // Five times: maximum delay 2.5s&lt;br /&gt;
 &lt;br /&gt;
  really_install : function (force_basic)&lt;br /&gt;
  {&lt;br /&gt;
    UploadForm.install_attempts++;&lt;br /&gt;
    if (UploadForm.install_attempts &amp;lt;= UploadForm.install_max_attempts &amp;amp;&amp;amp;&lt;br /&gt;
        (   typeof (LanguageHandler) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (UIElements) == &#039;undefined&#039;&lt;br /&gt;
         || typeof (Tooltips) == &#039;undefined&#039;)) {&lt;br /&gt;
      // Add needed scripts in the condition above.&lt;br /&gt;
      window.setTimeout (function() {&lt;br /&gt;
        UploadForm.really_install(force_basic);&lt;br /&gt;
      }, UploadForm.install_delay);&lt;br /&gt;
    } else {&lt;br /&gt;
      UFUI.sanitizeUserLanguage ();&lt;br /&gt;
      var use_basic = force_basic || !!UploadForm_forcebasic || UFUI.isExperienced;&lt;br /&gt;
      if (use_basic &amp;amp;&amp;amp; !force_basic) {&lt;br /&gt;
        // Only for autoconfirmed users!&lt;br /&gt;
        var is_auto = false;&lt;br /&gt;
        for (var i = 0; i &amp;lt; wgUserGroups.length &amp;amp;&amp;amp; !is_auto; i++)&lt;br /&gt;
          is_auto = wgUserGroups[i] == &#039;autoconfirmed&#039;;&lt;br /&gt;
        if (!is_auto) use_basic = false;&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        UFHelp.precreate_tooltip_closer ();&lt;br /&gt;
        UploadForm.setFileExtensions ();&lt;br /&gt;
        if (   use_basic&lt;br /&gt;
            || document.URL.indexOf (&#039;uploadformstyle=basic&#039;) &amp;gt;= 0&lt;br /&gt;
            || document.URL.search (/uselang\=(\w|-)*fromwikimedia/) &amp;gt;= 0) {&lt;br /&gt;
          // The fromwikimedia forms are special enough to warrant a special setup.&lt;br /&gt;
          UploadFormBasic.setup (!force_basic);&lt;br /&gt;
        } else {&lt;br /&gt;
          UploadFormFull.setup ();&lt;br /&gt;
        }&lt;br /&gt;
        UploadForm.setup_error_display ();&lt;br /&gt;
        UploadForm.setup_hotcat_label ();&lt;br /&gt;
        UFHelp.setupHelp (UploadForm.isReupload);&lt;br /&gt;
        if (!UploadForm.isReupload) UFFixes.fixAutocompletion ();&lt;br /&gt;
        UploadForm.setupOverwriteMsg ();&lt;br /&gt;
        // Handle the &amp;quot;Upload new version&amp;quot; links, these have &amp;amp;wpDestFile=... in the URL, which&lt;br /&gt;
        // defeats overwrite detection. Because someone might construct such a URL manually&lt;br /&gt;
        // *not* actually overwriting an existing file, we still do the check:&lt;br /&gt;
        if (!UploadForm.isReupload) UploadForm.check_initial_dest_file (); &lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        // Not good at all. Something went badly wrong. If we have already modified the form,&lt;br /&gt;
        // the best thing is probably to reload and make sure we don&#039;t try again:&lt;br /&gt;
        if (UploadForm.formModified) {&lt;br /&gt;
          var reload_url = document.URL;&lt;br /&gt;
          reload_url = reload_url&lt;br /&gt;
                     + ((reload_url.indexOf (&#039;?&#039;) &amp;gt;= 0) ? &#039;&amp;amp;&#039; : &#039;?&#039;)&lt;br /&gt;
                     + &#039;uploadformstyle=plain&#039;;&lt;br /&gt;
          window.location.href = reload_url;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  install : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.isInstalled) return; // Do this only once per page!&lt;br /&gt;
    UploadForm.isInstalled = true;&lt;br /&gt;
 &lt;br /&gt;
    if (document.URL.indexOf (&#039;uploadformstyle=plain&#039;) &amp;gt;= 0) return; // We&#039;re disabled&lt;br /&gt;
 &lt;br /&gt;
    // Also don&#039;t do anything if we&#039;re not on an upload form.&lt;br /&gt;
    if (mw.config.get(&#039;wgCanonicalNamespace&#039;) != &#039;Special&#039; || mw.config.get(&#039;wgCanonicalSpecialPageName&#039;) != &#039;Upload&#039;) return;         &lt;br /&gt;
    var form =    document.getElementById (&#039;upload&#039;)&lt;br /&gt;
               || document.getElementById (&#039;mw-upload-form&#039;);&lt;br /&gt;
    var original_desc = document.getElementById (&#039;wpUploadDescription&#039;);&lt;br /&gt;
    if (!form || !original_desc) return; // Oops. Not good: bail out; don&#039;t do anything.&lt;br /&gt;
 &lt;br /&gt;
    var reupload = document.getElementById (&#039;wpForReUpload&#039;);&lt;br /&gt;
    var destFile = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (reupload)&lt;br /&gt;
      UploadForm.isReupload = !!reupload.value;&lt;br /&gt;
    else {&lt;br /&gt;
      UploadForm.isReupload = destFile &amp;amp;&amp;amp; (destFile.disabled || destFile.readOnly);&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; !!destFile.disabled) {&lt;br /&gt;
      destFile.readOnly = true;&lt;br /&gt;
      destFile.disabled = false;&lt;br /&gt;
    }&lt;br /&gt;
    if (destFile &amp;amp;&amp;amp; UploadForm.isReupload) {&lt;br /&gt;
      destFile.onkeyup = function (evt) {};&lt;br /&gt;
      destFile.onchange = function (evt) {};&lt;br /&gt;
    }&lt;br /&gt;
    // Use the basic form if the description was set *initially*, or if it&#039;s a re-upload, or if it&#039;s a special&lt;br /&gt;
    // form&lt;br /&gt;
    var use_basic =&lt;br /&gt;
         (original_desc.defaultValue != null &amp;amp;&amp;amp; original_desc.defaultValue.length &amp;gt; 0)&lt;br /&gt;
      || UploadForm.isReupload&lt;br /&gt;
      || document.URL.indexOf (&#039;uselang=nlwikilovesmonuments&#039;) &amp;gt; 0&lt;br /&gt;
    ;&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.the_form = form;&lt;br /&gt;
    if (document.URL.indexOf (&#039;debug=true&#039;) &amp;gt;= 0) UploadForm.debug = true;&lt;br /&gt;
    UploadForm.really_install (use_basic);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  check_initial_dest_file : function ()&lt;br /&gt;
  {&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (   dest_file &amp;amp;&amp;amp; dest_file.value &amp;amp;&amp;amp; dest_file.value.length &amp;gt; 0&lt;br /&gt;
        &amp;amp;&amp;amp; wgUploadWarningObj &amp;amp;&amp;amp; typeof (wgUploadWarningObj.keypress) == &#039;function&#039;)&lt;br /&gt;
    {&lt;br /&gt;
      wgUploadWarningObj.keypress();&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  errorMsgs      : null,&lt;br /&gt;
  warning_pushed : false,&lt;br /&gt;
 &lt;br /&gt;
  display_errors : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Give user feedback about what is not ok.      &lt;br /&gt;
    var my_warning = document.getElementById (&#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
    if (my_warning == null) {&lt;br /&gt;
      // Find the upload button&lt;br /&gt;
      var uploadButton = document.getElementsByName (&#039;wpUpload&#039;);&lt;br /&gt;
      var warningBox   = null;&lt;br /&gt;
      if (uploadButton) uploadButton = uploadButton[0];&lt;br /&gt;
      if (!uploadButton) {&lt;br /&gt;
        warningBox = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
        if (!warningBox) return; // We just have the field colors to indicate errors...&lt;br /&gt;
      }&lt;br /&gt;
      my_warning = document.createElement (&#039;div&#039;);&lt;br /&gt;
      my_warning.style.border = &#039;1px #FF0000 solid&#039;;&lt;br /&gt;
      my_warning.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
      my_warning.style.padding = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginTop = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.style.marginBottom = &#039;0.5em&#039;;&lt;br /&gt;
      my_warning.setAttribute (&#039;id&#039;, &#039;wpUploadVerifyWarning&#039;);&lt;br /&gt;
      my_warning.setAttribute (&#039;width&#039;, &#039;100%&#039;);&lt;br /&gt;
      my_warning.style.display = &#039;none&#039;;&lt;br /&gt;
      if (uploadButton) {&lt;br /&gt;
        uploadButton.parentNode.insertBefore (my_warning, uploadButton);&lt;br /&gt;
      } else {&lt;br /&gt;
        warningBox.parentNode.insertBefore (my_warning, warningBox.nextSibling);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Now collect all the error messages into one div.&lt;br /&gt;
    var msgs = document.createElement (&#039;ul&#039;);&lt;br /&gt;
    msgs.style.paddingLeft = &#039;1.0em&#039;;&lt;br /&gt;
    msgs.style.marginLeft = &#039;0&#039;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.errorMsgs.length; i++) {&lt;br /&gt;
      var msg = UFUI.getErrorMsg (UploadForm.errorMsgs[i]);&lt;br /&gt;
      if (msg) {&lt;br /&gt;
        var li = document.createElement (&#039;li&#039;);&lt;br /&gt;
        li.appendChild (msg);&lt;br /&gt;
        msgs.appendChild (li);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delete UploadForm.errorMsgs;&lt;br /&gt;
    UploadForm.errorMsgs = null;&lt;br /&gt;
    // And then display the messages&lt;br /&gt;
    if (my_warning.firstChild != null)&lt;br /&gt;
      my_warning.replaceChild (msgs, my_warning.firstChild);&lt;br /&gt;
    else&lt;br /&gt;
      my_warning.appendChild (msgs);&lt;br /&gt;
    my_warning.style.display = &#039;block&#039;;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  call_onsubmit : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var do_submit = true;&lt;br /&gt;
    if (UploadForm.oldOnSubmit != null) {&lt;br /&gt;
      if (typeof UploadForm.oldOnSubmit == &#039;string&#039;)&lt;br /&gt;
        do_submit = eval (UploadForm.oldOnSubmit);&lt;br /&gt;
      else if (typeof UploadForm.oldOnSubmit == &#039;function&#039;)&lt;br /&gt;
        do_submit = UploadForm.oldOnSubmit (evt);&lt;br /&gt;
    }&lt;br /&gt;
    return do_submit;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  templates: [&lt;br /&gt;
   {name          : &#039;information&#039;,&lt;br /&gt;
    fields        : [&#039;Description&#039;, &#039;Source&#039;, &#039;Author&#039;],&lt;br /&gt;
    extract       : [3, 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;painting&#039;,&lt;br /&gt;
    fields        : [&#039;Artist&#039;, &#039;Title&#039;, &#039;Year&#039;, &#039;Technique&#039;, &#039;Dimensions&#039;, &#039;Gallery&#039;,&lt;br /&gt;
                     &#039;Location&#039;, &#039;Notes&#039;, &#039;Source&#039;, &#039;Permission&#039;,&lt;br /&gt;
                     &#039;other_versions&#039;, &#039;Other versions&#039;],&lt;br /&gt;
    extract       : [0, 8, 7],    &lt;br /&gt;
    desc_mandatory: false,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   },&lt;br /&gt;
   {name          : &#039;flickr&#039;,&lt;br /&gt;
    fields        : [&#039;description&#039;, &#039;flickr_url&#039;, &#039;title&#039;, &#039;taken&#039;, &#039;photographer_url&#039;,&lt;br /&gt;
                     &#039;photographer&#039;, &#039;photographer_location&#039;, &#039;reviewer&#039;, &#039;permission&#039;],&lt;br /&gt;
    extract       : [new Array (5, 4), 1, 0],    &lt;br /&gt;
    desc_mandatory: true,&lt;br /&gt;
    regexp        : null&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &lt;br /&gt;
  empty_template : function (name)&lt;br /&gt;
  {&lt;br /&gt;
    if (name == null) return null;&lt;br /&gt;
    var test_name = name.toLowerCase ();&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      if (UploadForm.templates[i].name == test_name) {&lt;br /&gt;
        var result = &#039;\{\{&#039; + name;&lt;br /&gt;
        for (var j = 0; j &amp;lt; UploadForm.templates[i].fields.length; j++) {&lt;br /&gt;
          result = result + &#039;\n|&#039; + UploadForm.templates[i].fields[j] + &#039;=&#039;;&lt;br /&gt;
          if (UFUI.isOwnWork &amp;amp;&amp;amp; i == 0) {&lt;br /&gt;
            // Pre-fill some fields if we&#039;re on an own-work form and it&#039;s an&lt;br /&gt;
            // information-template&lt;br /&gt;
            switch (j) {&lt;br /&gt;
              case 1: // Source-field&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkSource ());&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // Date&lt;br /&gt;
                if (typeof (UploadForm_ownwork_date) == &#039;string&#039;&lt;br /&gt;
                    &amp;amp;&amp;amp; UploadForm_ownwork_date.search (/\S/) &amp;gt;= 0) {&lt;br /&gt;
                  result = result + UploadForm.clean (UploadForm_ownwork_date);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // Author&lt;br /&gt;
                result = result + UploadForm.clean (UploadForm.getOwnWorkAuthor ());&lt;br /&gt;
                break;&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
            } // end switch&lt;br /&gt;
          } // end if information for ownWork&lt;br /&gt;
        }&lt;br /&gt;
        return result + &#039;\n\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  extract_fields : function (desc, template_idx, list)&lt;br /&gt;
  {&lt;br /&gt;
    function get (desc, field, regexp)&lt;br /&gt;
    {&lt;br /&gt;
      var match_start = new RegExp (&#039;\\n\\s*\\| *&#039; + field + &#039; *\\=&#039;);&lt;br /&gt;
      var start = desc.match (match_start);&lt;br /&gt;
      if (start == null) return null;&lt;br /&gt;
      var rest = desc.substring (start.index + start[0].length);&lt;br /&gt;
      var end = rest.search (regexp);&lt;br /&gt;
      if (end &amp;lt; 0) return rest;&lt;br /&gt;
      return rest.substring (0, end);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var result  = list;&lt;br /&gt;
    var names   = UploadForm.templates[template_idx].fields;&lt;br /&gt;
    var extract = UploadForm.templates[template_idx].extract;&lt;br /&gt;
    if (UploadForm.templates[template_idx].regexp == null) {&lt;br /&gt;
      // Build the regexp&lt;br /&gt;
      var regexp_str = &#039;\\n\\s*(\\| *(&#039; + names.join (&#039;|&#039;) + &#039;) *\\=|\\}\\})&#039;;&lt;br /&gt;
      UploadForm.templates[template_idx].regexp = new RegExp (regexp_str);&lt;br /&gt;
    }&lt;br /&gt;
    for (var i = 0; i &amp;lt; extract.length; i++) {&lt;br /&gt;
      var txt = null;&lt;br /&gt;
      if (extract[i].constructor == Array) {&lt;br /&gt;
        // It&#039;s an array giving alternatives...&lt;br /&gt;
        var alternatives = extract[i];&lt;br /&gt;
        for (var j = 0; j &amp;lt; alternatives.length; j++) {&lt;br /&gt;
          txt = get (desc, names [alternatives[j]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
          if (txt != null &amp;amp;&amp;amp; txt.search (/\S/) &amp;gt;= 0) break; // Non-empty: don&#039;t look further&lt;br /&gt;
          txt = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        txt = get (desc, names [extract[i]], UploadForm.templates[template_idx].regexp);&lt;br /&gt;
      }&lt;br /&gt;
      if (txt != null) result[result.length] = txt; // Push one.&lt;br /&gt;
      // Don&#039;t use &amp;quot;if (txt)&amp;quot;, it&#039;s false if the string is != null, but empty!&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  split_description : function (desc)&lt;br /&gt;
  {&lt;br /&gt;
    if (desc == null || desc.length == 0) return null;&lt;br /&gt;
    // Returns an array containing (in that order):&lt;br /&gt;
    // index of template, author, source, description&lt;br /&gt;
    for (var i = 0; i &amp;lt; UploadForm.templates.length; i++) {&lt;br /&gt;
      var regexp = new RegExp (&#039;\\{\\{&#039; + UploadForm.templates[i].name + &#039;\\s*(\\||\\n)&#039;);&lt;br /&gt;
      var start = desc.toLowerCase ().search (regexp);&lt;br /&gt;
      if (start &amp;gt;= 0) {&lt;br /&gt;
        var result = new Array (1);&lt;br /&gt;
        result[0] = i;&lt;br /&gt;
        // Now try to extract the fields:&lt;br /&gt;
        return UploadForm.extract_fields (desc.substring (start), i, result);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  generatePreview : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    if (   UploadForm.preview_tooltip&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != &#039;none&#039;&lt;br /&gt;
        &amp;amp;&amp;amp; UploadForm.preview_tooltip.popup.style.display != null) {&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    } else {&lt;br /&gt;
      UploadForm.do_preview (evt || window.event);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  outerHTML : function (node)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return &amp;quot;&amp;quot;;&lt;br /&gt;
    if (node.nodeType == 3) return node.nodeValue; // Text node&lt;br /&gt;
    if (node.outerHTML) return node.outerHTML;&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display    = &#039;none&#039;;&lt;br /&gt;
    div.style.position   = &#039;absolute&#039;;&lt;br /&gt;
    div.appendChild (node);&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    var txt = div.innerHTML;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    return txt;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  makePreview : function (description, is_overwrite)&lt;br /&gt;
  {&lt;br /&gt;
    if (is_overwrite) {&lt;br /&gt;
      UploadForm.showPreview (&lt;br /&gt;
          &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;&#039;&lt;br /&gt;
        + UploadForm.outerHTML (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;))&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
        + &#039;\&amp;lt;\/div\&amp;gt;&#039;&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      var text = &#039;\&amp;lt;div style=&amp;quot;border:1px solid red; padding:0.5em;&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;div class=&amp;quot;previewnote&amp;quot;\&amp;gt;\n&#039;&lt;br /&gt;
               + &#039;\{\{MediaWiki:Previewnote/&#039; + UFUI.userLanguage +&#039;\}\}\n&#039;&lt;br /&gt;
               + &#039;\&amp;lt;\/div&amp;gt;\n&#039;;&lt;br /&gt;
      var license = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
      var license_text = null;&lt;br /&gt;
      if (   license != null &amp;amp;&amp;amp; license.selectedIndex &amp;gt; 0&lt;br /&gt;
          &amp;amp;&amp;amp; license.options[license.selectedIndex].value.length &amp;gt; 0) {&lt;br /&gt;
        license_text = &#039;\{\{&#039; + license.options[license.selectedIndex].value + &#039;\}\}&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if (license_text) {&lt;br /&gt;
		  &lt;br /&gt;
		// Wikiminicustom (lj): added two \n in the following block (we want a more readable output)&lt;br /&gt;
		&lt;br /&gt;
		  &lt;br /&gt;
        text = text&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:filedesc\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + description + &#039;\n&#039;&lt;br /&gt;
             + &#039;\&amp;lt;h2\&amp;gt;\{\{int:license-header\}\}\&amp;lt;\/h2\&amp;gt;\n\n&#039;&lt;br /&gt;
             + license_text;&lt;br /&gt;
      } else {&lt;br /&gt;
        text = text + description + &#039;\n&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      // Add categories&lt;br /&gt;
      if (typeof (hotcat_get_state) == &#039;function&#039;) {&lt;br /&gt;
        var input = document.getElementById (&#039;hotcat_text&#039;);&lt;br /&gt;
        if (input != null) hotcat_closeform ();&lt;br /&gt;
        var hotcat_categories = hotcat_get_state ();&lt;br /&gt;
        if (hotcat_categories &amp;amp;&amp;amp; hotcat_categories.length &amp;gt; 0) {&lt;br /&gt;
          hotcat_categories = hotcat_categories.split (&#039;\n&#039;);&lt;br /&gt;
          for (var i=0; i &amp;lt; hotcat_categories.length; i++) {&lt;br /&gt;
            if (hotcat_categories[i] &amp;amp;&amp;amp; hotcat_categories[i].length &amp;gt; 0)&lt;br /&gt;
              text = text + &#039;[[Category:&#039; + hotcat_categories[i] + &#039;]]&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      text = text + &#039;\&amp;lt;\/div\&amp;gt;&#039;;&lt;br /&gt;
 &lt;br /&gt;
      // Make the Ajax call&lt;br /&gt;
      var req;&lt;br /&gt;
      if (window.XMLHttpRequest) req = new window.XMLHttpRequest();&lt;br /&gt;
      if (!req &amp;amp;&amp;amp; window.ActiveXObject) {&lt;br /&gt;
        try {&lt;br /&gt;
          req = new window.ActiveXObject(&#039;Microsoft.XMLHTTP&#039;);&lt;br /&gt;
        } catch (any) {}&lt;br /&gt;
      }&lt;br /&gt;
      if (!req) return;&lt;br /&gt;
      var button = document.getElementById (&#039;wpUploadPreview&#039;);&lt;br /&gt;
      var page   = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
      if (page) page = page.value;&lt;br /&gt;
      if (page != null &amp;amp;&amp;amp; page.length == 0) page = null;&lt;br /&gt;
      if (button &amp;amp;&amp;amp; typeof (injectSpinner) == &#039;function&#039;)&lt;br /&gt;
        injectSpinner (button, &#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
      var uri  = wgServer + wgScriptPath + &#039;/api.php&#039;;&lt;br /&gt;
      var args = &#039;action=parse&amp;amp;pst&amp;amp;text=&#039; + encodeURIComponent (text)&lt;br /&gt;
               + (page ? &#039;&amp;amp;title=File:&#039; + encodeURIComponent (page.replace (/ /g, &#039;_&#039;)) : &amp;quot;&amp;quot;)&lt;br /&gt;
               + &#039;&amp;amp;prop=text|categories&amp;amp;format=json&#039;;&lt;br /&gt;
      // &amp;quot;&amp;amp;pst&amp;quot; is &amp;quot;Pre-save transform&amp;quot;: tilde replacement, pipe magic for links like [[foo|foo]].&lt;br /&gt;
      // Don&#039;t use a callback directly, add the function call ourselves *after* the call, since&lt;br /&gt;
      // the API somehow resolves tildes to an IP number instead of the username if a callback&lt;br /&gt;
      // is used. C.f. https://bugzilla.wikimedia.org/show_bug.cgi?id=16616&lt;br /&gt;
      // Apparently, that&#039;s a feature, not a bug...&lt;br /&gt;
      var request_length = uri.length + args.length + 1;&lt;br /&gt;
      if (request_length &amp;gt; 2000) {&lt;br /&gt;
        // Long URLs are problematic for GET requests&lt;br /&gt;
        req.open (&#039;POST&#039;, uri, true);&lt;br /&gt;
        req.setRequestHeader (&#039;Content-Type&#039;, &#039;application/x-www-form-urlencoded&#039;);&lt;br /&gt;
      } else {&lt;br /&gt;
        uri += &#039;?&#039; + args; args = null;&lt;br /&gt;
        req.open (&#039;GET&#039;, uri, true);&lt;br /&gt;
      }&lt;br /&gt;
      req.setRequestHeader (&#039;Pragma&#039;, &#039;cache=no&#039;);&lt;br /&gt;
      req.setRequestHeader (&#039;Cache-Control&#039;, &#039;no-transform&#039;);&lt;br /&gt;
      req.onreadystatechange =&lt;br /&gt;
        function ()&lt;br /&gt;
        {&lt;br /&gt;
          if (req.readyState != 4) return;&lt;br /&gt;
          if (typeof (removeSpinner) == &#039;function&#039;) removeSpinner (&#039;wpUploadPreviewSpinner&#039;);&lt;br /&gt;
          if (req.status != 200) return;&lt;br /&gt;
          // Add the &amp;quot;callback&amp;quot;...&lt;br /&gt;
          if (req.responseText &amp;amp;&amp;amp; req.responseText.indexOf (&#039;{&#039;) == 0)&lt;br /&gt;
            // Primitive sanity check. If the response text does *not* start with &#039;{&#039;, it might have been&lt;br /&gt;
            // spoofed and contain a function call... of course, this simple check cannot catch more&lt;br /&gt;
            // elaborate spoof attempts.&lt;br /&gt;
            eval (&#039;UploadForm.jsonPreview (&#039; + req.responseText + &#039;)&#039;);&lt;br /&gt;
        };&lt;br /&gt;
      req.send (args);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  jsonPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (result &amp;amp;&amp;amp; result.parse &amp;amp;&amp;amp; result.parse.text &amp;amp;&amp;amp; result.parse.text[&#039;*&#039;] != null) {&lt;br /&gt;
      var txt = result.parse.text[&#039;*&#039;];&lt;br /&gt;
      var categories = result.parse.categories;&lt;br /&gt;
      if (categories &amp;amp;&amp;amp; categories.length &amp;gt; 0) {&lt;br /&gt;
        // Add a mock-up of a category bar. We don&#039;t care about non-existing categories, and we&lt;br /&gt;
        // can&#039;t identify hidden categories.&lt;br /&gt;
        var catbar = &#039;&amp;lt;div class=&amp;quot;catlinks&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;mw-normal-catlinks&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                   + UploadForm.outerHTML (UFUI.getLabel (&#039;wpCategoriesUploadLbl&#039;));&lt;br /&gt;
        categories.sort (&lt;br /&gt;
          function (a, b) {&lt;br /&gt;
            var key_a = a[&#039;*&#039;].toLowerCase (), key_b = b[&#039;*&#039;].toLowerCase ();&lt;br /&gt;
            if (key_a &amp;lt; key_b) return -1;&lt;br /&gt;
            if (key_a &amp;gt; key_b) return 1;&lt;br /&gt;
            return 0;&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
        for (var i = 0; i &amp;lt; categories.length; i++) {&lt;br /&gt;
          var catname = categories[i][&#039;*&#039;];&lt;br /&gt;
          if (catname &amp;amp;&amp;amp; catname.length &amp;gt; 0) {&lt;br /&gt;
            if (i &amp;gt; 0) catbar += &#039; |&#039;;&lt;br /&gt;
            catbar += &#039; &amp;lt;a href=&amp;quot;/wiki/Category:&#039; + encodeURI (catname) + &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
                      + catname.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        catbar += &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
        // Now insert it into text.&lt;br /&gt;
        var end = txt.lastIndexOf (&#039;&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
        txt = txt.substring (0, end) + catbar + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.showPreview (txt);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  showPreview : function (result)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip) {&lt;br /&gt;
      UploadForm.preview_content = result;&lt;br /&gt;
      UploadForm.preview_tooltip.show_tip (null, false);&lt;br /&gt;
    } else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview == null) {&lt;br /&gt;
        var before = document.getElementById (&#039;mw-upload-permitted&#039;);&lt;br /&gt;
        if (!before || UFUtils.isChildOf (before, UploadForm.the_form))&lt;br /&gt;
          before = UploadForm.the_form;&lt;br /&gt;
        if (!before) return; // Don&#039;t know where to insert preview display. Error message here?&lt;br /&gt;
        preview = document.createElement (&#039;div&#039;);&lt;br /&gt;
        preview.setAttribute (&#039;id&#039;, &#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
        before.parentNode.insertBefore (preview, before);&lt;br /&gt;
      }&lt;br /&gt;
      try {&lt;br /&gt;
        preview.innerHTML = result;&lt;br /&gt;
      } catch (ex) {&lt;br /&gt;
        preview.innerHTML = &amp;quot;&amp;quot;; // Error message here instead?&lt;br /&gt;
      }&lt;br /&gt;
      preview.style.display = &amp;quot;&amp;quot;; // Show it &lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  hidePreview : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.preview_tooltip)&lt;br /&gt;
      UploadForm.preview_tooltip.hide_now (null);&lt;br /&gt;
    else {&lt;br /&gt;
      var preview = document.getElementById (&#039;wpUploadPreviewDisplay&#039;);&lt;br /&gt;
      if (preview) preview.style.display = &#039;none&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getPreview : function () // Callback for the tooltip&lt;br /&gt;
  {&lt;br /&gt;
    var div = document.createElement (&#039;div&#039;);&lt;br /&gt;
    div.style.display = &#039;none&#039;;&lt;br /&gt;
    document.body.appendChild (div);&lt;br /&gt;
    div.innerHTML = UploadForm.preview_content;&lt;br /&gt;
    document.body.removeChild (div);&lt;br /&gt;
    div.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    div.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
    var wrapper = document.createElement (&#039;div&#039;);&lt;br /&gt;
    wrapper.appendChild (div);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  licenses_regexp     :&lt;br /&gt;
    /\{\{(self|pd|gfdl|cc|l?gpl|fal|cecill|attribution|copyrighted free use|SOlicence|geograph|UN map|BArch-License|Apache)/i,&lt;br /&gt;
  user_license_regexp :&lt;br /&gt;
    new RegExp (  &#039;\\{\\{[Ss]ubst:[Uu]ser:&#039;&lt;br /&gt;
                + (mw.config.get(&#039;wgUserName&#039;) || &amp;quot;null&amp;quot;).replace(/([\\\^\$\.\?\*\+\(\)\[\]\|\{\}])/g, &amp;quot;\\$1&amp;quot;)&lt;br /&gt;
                + &#039;/&#039;),&lt;br /&gt;
 &lt;br /&gt;
  has_license : function (fields)&lt;br /&gt;
  {&lt;br /&gt;
    if (fields == null || fields.length == 0) return false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fields.length; i++) {&lt;br /&gt;
      if (fields[i] != null) {&lt;br /&gt;
        if (typeof (fields[i]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[i].search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[i].value.search (UploadForm.licenses_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    for (var j = 0; j &amp;lt; fields.length; j++) {&lt;br /&gt;
      if (fields[j] != null) {&lt;br /&gt;
        if (typeof (fields[j]) == &#039;string&#039;) {&lt;br /&gt;
          if (fields[j].search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        } else {&lt;br /&gt;
          if (fields[j].value.search (UploadForm.user_license_regexp) &amp;gt;= 0) return true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  addAfterField : function (elem_id, element)&lt;br /&gt;
  {&lt;br /&gt;
    if (!element) return;&lt;br /&gt;
    var elem = document.getElementById (elem_id);&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    // Find enclosing table cell.&lt;br /&gt;
    while (elem &amp;amp;&amp;amp; elem.nodeName.toLowerCase () != &#039;td&#039;) elem = elem.parentNode;&lt;br /&gt;
    if (!elem) return;&lt;br /&gt;
    var container = document.createElement (&#039;div&#039;);&lt;br /&gt;
    container.style.fontSize = &#039;smaller&#039;;&lt;br /&gt;
    container.style.color = &#039;#808080&#039;; /* Wikiminicustom (lj) */&lt;br /&gt;
    container.appendChild (element);&lt;br /&gt;
    elem.appendChild (container);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  old_overwrite_warning : null,&lt;br /&gt;
 &lt;br /&gt;
  setupOverwriteMsg : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (   typeof (wgUploadWarningObj) == &#039;undefined&#039;&lt;br /&gt;
        || typeof (wgUploadWarningObj.setWarning) == &#039;undefined&#039;)&lt;br /&gt;
      return;&lt;br /&gt;
    var msg = document.createElement (&#039;div&#039;);&lt;br /&gt;
    msg.id = &#039;wpUploadFormScriptOverwriteWarning&#039;;&lt;br /&gt;
    msg.style.display = &#039;none&#039;;&lt;br /&gt;
    msg.style.color = &#039;red&#039;;&lt;br /&gt;
    msg.appendChild (UFUI.getErrorMsg (&#039;wpPreviewOverwriteError&#039;));&lt;br /&gt;
    UploadForm.addAfterField (&#039;wpDestFile&#039;, msg);&lt;br /&gt;
    UploadForm.old_overwrite_warning = wgUploadWarningObj.setWarning;    &lt;br /&gt;
    wgUploadWarningObj.setWarning = UploadForm.overwriteMsg;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  overwriteMsg : function (warning)&lt;br /&gt;
  {&lt;br /&gt;
    if (!UploadForm.old_overwrite_warning || UploadForm.isReupload) return;&lt;br /&gt;
    // Make sure that &#039;this&#039; is set to &#039;wgUploadWarningObj&#039; in the call below!&lt;br /&gt;
    UploadForm.old_overwrite_warning.apply (wgUploadWarningObj, [warning]);&lt;br /&gt;
    var is_overwrite = UploadForm.isOverwrite ();&lt;br /&gt;
    var my_overwrite_warning = document.getElementById (&#039;wpUploadFormScriptOverwriteWarning&#039;);&lt;br /&gt;
    if (my_overwrite_warning) {&lt;br /&gt;
      my_overwrite_warning.style.display = (is_overwrite ? &amp;quot;&amp;quot; : &#039;none&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    UploadForm.set_fields_enabled&lt;br /&gt;
      (!is_overwrite&lt;br /&gt;
       , [  &#039;wpUploadFile&#039;, &#039;wpDestFile&#039;, &#039;wpUploadDescription&#039;, &#039;wpAdditionalInfo&#039;&lt;br /&gt;
          , &#039;wpLicense&#039;, &#039;wpWatchthis&#039;, &#039;wpIgnoreWarning&#039;, &#039;wpUpload&#039;]&lt;br /&gt;
      );&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  isOverwrite : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (document.getElementById (&#039;wpUploadWarningFileexists&#039;) != null) return true;&lt;br /&gt;
    var destfile_warning = document.getElementById (&#039;wpDestFile-warning&#039;);&lt;br /&gt;
    if (destfile_warning == null) return false;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file == null || dest_file.value == null || dest_file.value.length == 0) return false;&lt;br /&gt;
    var lks = destfile_warning.getElementsByTagName (&#039;a&#039;);&lt;br /&gt;
    if (lks == null || lks.length == 0) return false;&lt;br /&gt;
 &lt;br /&gt;
    var fn1 =&lt;br /&gt;
      dest_file.value.replace(/^\s\s*/, &#039;&#039;).replace(/\s\s*$/, &#039;&#039;).replace(/ /g, &#039;_&#039;);&lt;br /&gt;
    fn1     = fn1.substr (0, 1).toUpperCase () + fn1.substring (1);&lt;br /&gt;
    var fn0 = &#039;Image:&#039; + fn1;&lt;br /&gt;
    fn1     = &#039;File:&#039; + fn1;&lt;br /&gt;
    // Trimmed, blanks replaced by underscores, first character capitalized&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; lks.length; i++) {&lt;br /&gt;
      var href = lks[i].getAttribute (&#039;href&#039;, 2);&lt;br /&gt;
      if (href.indexOf (wgScript) == 0 || href.indexOf (wgServer + wgScript) == 0) {&lt;br /&gt;
        var m = /[&amp;amp;?]title=([^&amp;amp;]*)/.exec (href);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1) href = m[1]; else href = null;&lt;br /&gt;
      } else {&lt;br /&gt;
        var prefix = wgArticlePath.replace (&#039;$1&#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
        if (href.indexOf (prefix) != 0) prefix = wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
        if (href.indexOf (prefix) == 0) href = href.substring (prefix.length); else href = null;&lt;br /&gt;
      }&lt;br /&gt;
      if (!href) continue;&lt;br /&gt;
      href = decodeURIComponent (href).replace (/ /g, &#039;_&#039;);&lt;br /&gt;
      if (href == fn0 || href == fn1) return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  allowedFileTypes : null,&lt;br /&gt;
  forbiddenFileTypes : null,&lt;br /&gt;
 &lt;br /&gt;
  badFileNames : /^(test|image|img|bild|example|(dsc|img)?(\s|_|-)*|\d{10}(\s|_|-)[0123456789abcdef]{10}(\s|_|-)[a-z])$/i,&lt;br /&gt;
  // Filenames that have only components (separated by periods) that fully match this regexp&lt;br /&gt;
  // are considered illegal. The second-but-last one catches DSC01234, or DSC_01234, or&lt;br /&gt;
  // DSC_012_34 or also filenames conatining only digits and non-alphanumeric characters.&lt;br /&gt;
  // The last catches Flickr&#039;s raw filenames. How to relax that last expression without catching&lt;br /&gt;
  // too many legit file names?&lt;br /&gt;
  // Matching is case-insensitive.&lt;br /&gt;
 &lt;br /&gt;
  extractFileExtensions : function (div, list)&lt;br /&gt;
  {&lt;br /&gt;
    var list = null;&lt;br /&gt;
    // Get a mw-upload-permitted or mw-upload-prohibited div, extracts all extensions listed&lt;br /&gt;
    var txt = div;&lt;br /&gt;
    while (txt &amp;amp;&amp;amp; txt.nodeType != 3) txt = txt.lastChild;&lt;br /&gt;
    if (!txt) return null;&lt;br /&gt;
    // Try to figure out which comma to use (localizeable through MediaWiki:Comma-separator!)&lt;br /&gt;
    if (txt.data.indexOf (&#039;,&#039;) &amp;gt;= 0) // Standard&lt;br /&gt;
      txt = txt.data.split (&#039;,&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;،&#039;) &amp;gt;= 0) // Arabic etc.&lt;br /&gt;
      txt = txt.data.split (&#039;،&#039;);&lt;br /&gt;
    else if (txt.data.indexOf (&#039;、&#039;) &amp;gt;= 0) // Chinese&lt;br /&gt;
      txt = txt.data.split (&#039;、&#039;);&lt;br /&gt;
    else&lt;br /&gt;
      return null;&lt;br /&gt;
    if (!txt || txt.length == 0) return null;&lt;br /&gt;
    for (var i = 0; i &amp;lt; txt.length; i++) {&lt;br /&gt;
      var match = /(\w+)\W*$/.exec (txt[i]);&lt;br /&gt;
      if (match) {&lt;br /&gt;
        match = match[1].toLowerCase (); // The extension&lt;br /&gt;
        if (list == null) list = {};&lt;br /&gt;
        list[match] = true;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  setFileExtensions : function ()&lt;br /&gt;
  {&lt;br /&gt;
    if (typeof (mw.config.get(&#039;wgFileExtensions&#039;)) != &#039;undefined&#039; &amp;amp;&amp;amp; mw.config.get(&#039;wgFileExtensions&#039;).length) { // New as of 2009-09-17&lt;br /&gt;
      UploadForm.allowedFileTypes = {};&lt;br /&gt;
      for (var i = 0; i &amp;lt; mw.config.get(&#039;wgFileExtensions&#039;).length; i++) {&lt;br /&gt;
        UploadForm.allowedFileTypes[mw.config.get(&#039;wgFileExtensions&#039;)[i]] = true;&lt;br /&gt;
      }&lt;br /&gt;
      UploadForm.forbiddenFileTypes = null;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    UploadForm.allowedFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-permitted&#039;));&lt;br /&gt;
    UploadForm.forbiddenFileTypes =&lt;br /&gt;
      UploadForm.extractFileExtensions (document.getElementById (&#039;mw-upload-prohibited&#039;));&lt;br /&gt;
    if (UploadForm.allowedFileTypes != null) {&lt;br /&gt;
      // Alternate OGG extensions&lt;br /&gt;
      if (UploadForm.allowedFileTypes.ogg) {&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogv)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogv = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.oga)&lt;br /&gt;
          UploadForm.allowedFileTypes.oga = true;&lt;br /&gt;
        if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.ogx)&lt;br /&gt;
          UploadForm.allowedFileTypes.ogx = true;&lt;br /&gt;
      }&lt;br /&gt;
      // OpenDoc extensions (are these needed?)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxi)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxi = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxc)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxc = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxd)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxd = true;&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.sxw)&lt;br /&gt;
        UploadForm.allowedFileTypes.sxw = true;&lt;br /&gt;
      // PDF (allowed, but may be hidden in the interface)&lt;br /&gt;
      if (UploadForm.forbiddenFileTypes == null || !UploadForm.forbiddenFileTypes.pdf)&lt;br /&gt;
        UploadForm.allowedFileTypes.pdf = true;&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  checkFileExtension : function (ext, presence_only)&lt;br /&gt;
  {&lt;br /&gt;
    if (presence_only)&lt;br /&gt;
      return   (UploadForm.allowedFileTypes != null &amp;amp;&amp;amp; UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
            || (UploadForm.forbiddenFileTypes != null &amp;amp;&amp;amp; UploadForm.forbiddenFileTypes[ext] == true);&lt;br /&gt;
    return    (UploadForm.allowedFileTypes == null || UploadForm.allowedFileTypes[ext] == true)&lt;br /&gt;
           &amp;amp;&amp;amp; (UploadForm.forbiddenFileTypes == null || !(UploadForm.forbiddenFileTypes[ext] == true));&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyFileName : function (filename)&lt;br /&gt;
  {&lt;br /&gt;
    if (filename == null || filename.length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (filename.search (/(https?|file|ftp):\/\//i) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpHttpFilenameError&#039;);&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    var ok = true;&lt;br /&gt;
 &lt;br /&gt;
    // Don&#039;t allow slashes&lt;br /&gt;
    if (filename.indexOf (&#039;/&#039;) &amp;gt;= 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoSlashError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check for double extensions&lt;br /&gt;
    var fn = filename.split (&#039;.&#039;);&lt;br /&gt;
    if (fn.length &amp;lt; 2 || fn[fn.length-1].length == 0) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNoExtensionError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    // Check extension&lt;br /&gt;
    var nof_extensions = 0;&lt;br /&gt;
    if (fn.length &amp;gt;= 2) {&lt;br /&gt;
      nof_extensions++;&lt;br /&gt;
      if (UploadForm.checkFileExtension (fn[fn.length-1].toLowerCase ())) {&lt;br /&gt;
        // It&#039;s ok, check for double extension&lt;br /&gt;
        if (fn.length &amp;gt; 2) {&lt;br /&gt;
          if (UploadForm.checkFileExtension (fn[fn.length-2].toLowerCase (), true)) {&lt;br /&gt;
            nof_extensions++;&lt;br /&gt;
            UploadForm.errorMsgs.push (&#039;wpDoubleExtensionError&#039;);&lt;br /&gt;
            ok = false;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        UploadForm.errorMsgs.push (&#039;wpIllegalExtensionError&#039;);&lt;br /&gt;
        ok = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Check for allowed file name&lt;br /&gt;
    var one_ok = false;&lt;br /&gt;
    for (var i = 0; i &amp;lt; fn.length - nof_extensions &amp;amp;&amp;amp; !one_ok; i++) {&lt;br /&gt;
      if (fn[i].length &amp;gt; 0 &amp;amp;&amp;amp; fn[i].search (UploadForm.badFileNames) &amp;lt; 0) one_ok = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!one_ok) {&lt;br /&gt;
      UploadForm.errorMsgs.push (&#039;wpNondescriptFilenameError&#039;);&lt;br /&gt;
      ok = false;&lt;br /&gt;
    }&lt;br /&gt;
    return ok;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  cleaner : null,&lt;br /&gt;
 &lt;br /&gt;
  clean : function (input)&lt;br /&gt;
  {&lt;br /&gt;
    if (UploadForm.cleaner == null) {&lt;br /&gt;
      // Because of asynchronous script loading, we need to check whether the TextCleaner is&lt;br /&gt;
      // already defined. If not, just return the input.&lt;br /&gt;
      if (   typeof (TextCleaner) != &#039;undefined&#039;&lt;br /&gt;
          &amp;amp;&amp;amp; typeof (TextCleaner.sanitizeWikiText) == &#039;function&#039;)&lt;br /&gt;
      {&lt;br /&gt;
        UploadForm.cleaner = TextCleaner.sanitizeWikiText;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (UploadForm.cleaner &amp;amp;&amp;amp; input &amp;amp;&amp;amp; typeof (input) == &#039;string&#039;)&lt;br /&gt;
      return UploadForm.cleaner (input, true);&lt;br /&gt;
    else&lt;br /&gt;
      return input;   &lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  resetBg : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
    var e = evt || window.event; // W3C, IE&lt;br /&gt;
    return UploadForm.verifyMandatoryField (e.target || e.srcElement);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  verifyMandatoryField: function (node, handler)&lt;br /&gt;
  {&lt;br /&gt;
    if (!node) return true;&lt;br /&gt;
    try {&lt;br /&gt;
      if (   !node.value&lt;br /&gt;
          || node.value.search (/\S/) &amp;lt; 0&lt;br /&gt;
          || handler &amp;amp;&amp;amp; typeof (handler) == &#039;function&#039; &amp;amp;&amp;amp; handler.length == 1&lt;br /&gt;
             &amp;amp;&amp;amp; !handler (node.value))&lt;br /&gt;
      {&lt;br /&gt;
        // No value set, or a handler was given and it is a function taking one parameter, and&lt;br /&gt;
        // it returned false&lt;br /&gt;
        var is_error = node.id != &#039;wpPermission&#039;;&lt;br /&gt;
        if (!is_error) {&lt;br /&gt;
          var license_field = document.getElementById (&#039;wpLicense&#039;);&lt;br /&gt;
          // Careful here. The fromwikimedia forms appear not to have a license selector!&lt;br /&gt;
          is_error = license_field == null || license_field.selectedIndex == 0&lt;br /&gt;
        }&lt;br /&gt;
        if (is_error) {&lt;br /&gt;
          node.style.backgroundColor = UploadForm.errorColor;&lt;br /&gt;
          if (!UploadForm.warning_pushed) {&lt;br /&gt;
            if (UploadForm.errorMsgs != null)&lt;br /&gt;
              UploadForm.errorMsgs.push (&#039;wpUploadWarningError&#039;);&lt;br /&gt;
            UploadForm.warning_pushed = true;&lt;br /&gt;
          }&lt;br /&gt;
          return false;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ex) {&lt;br /&gt;
      // Swallow the exception  &lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      node.style.backgroundColor = &#039;#FFFFFF&#039;;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      // Swallow.&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  fixCategoryTransclusion : function (str)&lt;br /&gt;
  {&lt;br /&gt;
    return str.replace (/(\{\{)\s*(:?\s*[Cc]ategory\s*:[^|}]*(\|[^}]*)?)(\}\})/g, &amp;quot;[[$2]]&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UploadForm&lt;br /&gt;
 &lt;br /&gt;
var UFFixes =&lt;br /&gt;
{&lt;br /&gt;
  fixAutocompletion : function ()&lt;br /&gt;
  {&lt;br /&gt;
    // Do the overwrite check also for selections from the browser&#039;s &amp;quot;previous entry list&amp;quot;&lt;br /&gt;
    var dest_file = document.getElementById (&#039;wpDestFile&#039;);&lt;br /&gt;
    if (dest_file &amp;amp;&amp;amp; dest_file.onkeyup) {&lt;br /&gt;
      // For some reason, onchange doesn&#039;t fire upon autocompletion in FF and IE6. Don&#039;t use&lt;br /&gt;
      // onblur (recommended as a workaround on some Internet sites), it cancels button clicks&lt;br /&gt;
      // that cause the focus change. Unfortunately, FF also doesn&#039;t fire the DOMAttrModified&lt;br /&gt;
      // event upon autocompletion. Thus we&#039;re stuck for FF. At least the FF people are about&lt;br /&gt;
      // to correct this bug (https://bugzilla.mozilla.org/show_bug.cgi?id=388558). On IE,&lt;br /&gt;
      // there is a workaround.&lt;br /&gt;
      if (window.ActiveXObject) { // We&#039;re on IE...&lt;br /&gt;
        // See http://msdn2.microsoft.com/en-us/library/ms533032.aspx and&lt;br /&gt;
        // http://msdn2.microsoft.com/en-us/library/ms536956.aspx&lt;br /&gt;
        if (!dest_file.onpropertychange) {&lt;br /&gt;
          previous_onkeyup_handler  = dest_file.onkeyup;&lt;br /&gt;
          previous_onchange_handler = dest_file.onchange;&lt;br /&gt;
          addEvent (dest_file, &#039;propertychange&#039;,&lt;br /&gt;
            function (evt)&lt;br /&gt;
            {&lt;br /&gt;
              var e = evt || window.event;&lt;br /&gt;
              if (e &amp;amp;&amp;amp; e.propertyName &amp;amp;&amp;amp; e.propertyName == &#039;value&#039;) {&lt;br /&gt;
                if (typeof (previous_onkeyup_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onkeyup_handler);&lt;br /&gt;
                else if (typeof (previous_onkeyup_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onkeyup_handler (e);&lt;br /&gt;
                if (typeof (previous_onchange_handler) == &#039;string&#039;)&lt;br /&gt;
                  eval (previous_onchange_handler);&lt;br /&gt;
                else if (typeof (previous_onchange_handler) == &#039;function&#039;)&lt;br /&gt;
                  previous_onchange_handler (e);&lt;br /&gt;
              }&lt;br /&gt;
            });&lt;br /&gt;
          dest_file.onkeyup  = null; // Otherwise, both may fire...&lt;br /&gt;
          dest_file.onchange = null;&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        //Wikiminicustom (om)&lt;br /&gt;
        //addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        try{&lt;br /&gt;
           addEvent (dest_file, &#039;change&#039;, dest_file.onkeyup);&lt;br /&gt;
        }&lt;br /&gt;
        catch(ex) &lt;br /&gt;
        {&lt;br /&gt;
          //alert(&#039;An error has occurred: &#039;+ex.message)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end UFFixes&lt;br /&gt;
 &lt;br /&gt;
} // end if (guard against double inclusions)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
// Do *not* use addOnloadHook!!! Functions added through addOnloadHook are actually executed&lt;br /&gt;
// *before* the onload event occurs through an inline script at the bottom of each page served&lt;br /&gt;
// by the WikiMedia servers. Normally, that is fine and dandy and speeds up page creation since&lt;br /&gt;
// the hooks may run before all elements (such as images) of the page have completely loaded.&lt;br /&gt;
// But it breaks our form restoration mechanism on IE. wpDestFile.value is set on IE6 only at&lt;br /&gt;
// the time when the onload event fires. If this script runs before, wpDestFile.value is always&lt;br /&gt;
// empty on IE. Since the upload form does not contain many images, it won&#039;t make a difference&lt;br /&gt;
// for the user if we use hookEvent and thus run a tiny little bit later. It also has the nice&lt;br /&gt;
// side effect that we can run even if one of the other functions registered through&lt;br /&gt;
// addOnloadHook raises an exception.&lt;br /&gt;
 &lt;br /&gt;
if (window.$) {&lt;br /&gt;
  $(UploadForm.install)&lt;br /&gt;
} else {&lt;br /&gt;
  hookEvent (&#039;load&#039;, UploadForm.install);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
    $(&#039;#wpLicense&#039;).hover(&lt;br /&gt;
        function(){&lt;br /&gt;
            $(&#039;#wpLicense&#039;).addClass(&#039;jTest-red&#039;);&lt;br /&gt;
        }&lt;br /&gt;
    );&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157456</id>
		<title>Main Page/en</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157456"/>
		<updated>2017-02-19T10:37:09Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Welcome on Wikimini Stock!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock is a huge &#039;&#039;&#039;database of free images&#039;&#039;&#039; for kids &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(and older folks)&amp;lt;/span&amp;gt;! It contains more than &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographs and illustrations carefully organized into 570 thematic categories. Most of them are [[Wikimini:Terms of Use|freely usable]]!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Find an image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;tags&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
   &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Picture of the day • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|A sloth perched in a tree]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Did you know? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Every week, a new discovery with a picture&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The whale shark is the largest fish currently living on Earth. It weighs several tons and can measure up to 18 meters long.&lt;br /&gt;
&lt;br /&gt;
18 meters, that&#039;s as long as two school buses!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine Learn more &#039;&#039;(French)&#039;&#039;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images by topics • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 thematic categories&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Complete tree view&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Selections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Galleries of specially selected images&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Drawings by Wikiminauts|alt=Drawings by Wikiminauts]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Drawings by Wikiminauts]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Flags of the world‎|alt=Flags]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Flags of the world‎]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Baby animals with their mothers|alt=Mother and baby gorilla]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Baby animals with their mothers]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Child and teen stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Child and teen stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Human body|alt=Human body]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Human body]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Famous monuments|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Famous monuments]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Optical illusion|alt=Optical illusion]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Optical illusions]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animal records|alt=Cheetah]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animal records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
More galleries in our [[:Category:Topics|thematic categories]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ A [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;picture&amp;lt;/span&amp;gt;]] is worth a thousand words ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • 6th century BC&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Smiling man|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Help us! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;People like you&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Did you know that this image database is maintained by volunteers?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock is a website based on everyone&#039;s collaboration and participation. All images are selected, described and classified by users of all ages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Discover our [[Special:ContributionScores|best archivists]], &amp;lt;br /&amp;gt; and how you can [[Help:How to participate|get involved yourself]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157455</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157455"/>
		<updated>2017-02-19T10:35:29Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157454</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157454"/>
		<updated>2017-02-19T10:02:53Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157453</id>
		<title>Main Page/en</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/en&amp;diff=157453"/>
		<updated>2017-02-19T10:00:49Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Welcome on Wikimini Stock!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock is a huge &#039;&#039;&#039;database of free images&#039;&#039;&#039; for kids &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(and older folks)&amp;lt;/span&amp;gt;! It contains more than &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographs and illustrations carefully organized into 570 thematic categories. Most of them are [[Wikimini:Terms of Use|freely usable]]!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Find an image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
   &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Picture of the day • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|A sloth perched in a tree]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Did you know? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Every week, a new discovery with a picture&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The whale shark is the largest fish currently living on Earth. It weighs several tons and can measure up to 18 meters long.&lt;br /&gt;
&lt;br /&gt;
18 meters, that&#039;s as long as two school buses!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine Learn more &#039;&#039;(French)&#039;&#039;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images by topics • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 thematic categories&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Complete tree view&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Selections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Galleries of specially selected images&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Drawings by Wikiminauts|alt=Drawings by Wikiminauts]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Drawings by Wikiminauts]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Flags of the world‎|alt=Flags]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Flags of the world‎]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Baby animals with their mothers|alt=Mother and baby gorilla]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Baby animals with their mothers]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Child and teen stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Child and teen stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Human body|alt=Human body]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Human body]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Famous monuments|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Famous monuments]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Optical illusion|alt=Optical illusion]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Optical illusions]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animal records|alt=Cheetah]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animal records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
More galleries in our [[:Category:Topics|thematic categories]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ A [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;picture&amp;lt;/span&amp;gt;]] is worth a thousand words ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • 6th century BC&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Smiling man|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Help us! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;People like you&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Did you know that this image database is maintained by volunteers?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock is a website based on everyone&#039;s collaboration and participation. All images are selected, described and classified by users of all ages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Discover our [[Special:ContributionScores|best archivists]], &amp;lt;br /&amp;gt; and how you can [[Help:How to participate|get involved yourself]]!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157452</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157452"/>
		<updated>2017-02-19T09:53:37Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
   if( ! $(&#039;#myCanvas&#039;).tagcanvas({&lt;br /&gt;
     textColour : &#039;#000000&#039;,&lt;br /&gt;
     outlineThickness : 1,&lt;br /&gt;
     maxSpeed : 0.3,&lt;br /&gt;
     depth : 0.75,&lt;br /&gt;
     imageScale : null,&lt;br /&gt;
     shuffleTags : true&lt;br /&gt;
   })) {&lt;br /&gt;
     // TagCanvas failed to load&lt;br /&gt;
     $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
   }&lt;br /&gt;
   // your other jQuery stuff here...&lt;br /&gt;
 });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157451</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157451"/>
		<updated>2017-02-19T09:51:26Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
           $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157450</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157450"/>
		<updated>2017-02-19T09:50:30Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
         if (typeof TagCanvas != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
           $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157449</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157449"/>
		<updated>2017-02-19T09:24:23Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157448</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157448"/>
		<updated>2017-02-19T09:21:41Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039;, &#039;text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157447</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157447"/>
		<updated>2017-02-12T22:59:47Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Bienvenue sur Wikimini Stock&amp;amp;nbsp;!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock est une gigantesque &#039;&#039;&#039;banque d&#039;images gratuites&#039;&#039;&#039; pour enfants &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(et plus grands)&amp;lt;/span&amp;gt;&amp;amp;nbsp;! Elle contient plus de &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographies et illustrations soigneusement organisées en 570 catégories thématiques. Pratiquement toutes sont [[Wikimini:Terms of Use|libres d&#039;utilisation]]&amp;amp;nbsp;!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Chercher une image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tags&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Image du jour • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|Un paresseux perché sur son arbre]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Le savais-tu&amp;amp;nbsp;? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Une découverte en image chaque semaine&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;&#039;requin baleine&#039;&#039;&#039; est le plus grand poisson vivant actuellement sur Terre. Il pèse plusieurs tonnes et peut mesurer jusqu&#039;à 18 mètres.&lt;br /&gt;
&lt;br /&gt;
18 mètres, c&#039;est presque la longueur de deux autobus scolaires&amp;amp;nbsp;!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine En savoir plus]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images par sujets • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 catégories thématiques&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Arborescence complète&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Sélections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des galeries d&#039;images spécialement sélectionnées&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Dessins des Wikiminautes|alt=Dessins des Wikiminautes]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Dessins des Wikiminautes]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Drapeaux des pays du monde|alt=Drapeaux]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Drapeaux des pays du monde]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Bébés animaux et leur mère|alt=Mère et son bébé gorille]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Bébés animaux et leur mère]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Enfants et ados stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Enfants et ados stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Corps humain|alt=Corps humain]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Corps humain]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Monuments célèbres|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Monuments célèbres]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Illusions d&#039;optique|alt=Illusion d&#039;optique]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Illusions d&#039;optique]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animaux de tous les records|alt=Guépard]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animaux de tous les records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Plus de galeries dans nos [[:Category:Topics|catégories thématiques]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ Une [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;image&amp;lt;/span&amp;gt;]] vaut mille mots ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • VIe s. av. J.-C.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Homme souriant|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Aidez-nous ! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des gens comme vous&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Saviez-vous que cette banque d&#039;images est maintenue par des volontaires ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock est un site basé sur la collaboration et la participation de tous. Toutes les images y sont sélectionnées, décrites et classées par des internautes de tous âges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Découvrez nos [[Special:ContributionScores|meilleurs archivistes]] &amp;lt;br /&amp;gt;et comment spontanément [[Help:How to participate|participer à votre tour]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157446</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=Main_Page/fr&amp;diff=157446"/>
		<updated>2017-02-12T22:59:10Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://stock.wikimini.org/wiki/resources/lib/tagcanvas.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- HEADER - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;firstHeading2&amp;quot; class=&amp;quot;firstHeading&amp;quot;&amp;gt;Bienvenue sur Wikimini Stock&amp;amp;nbsp;!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lang/Main Page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 115%; line-height: 1.7em&amp;quot;&amp;gt;Wikimini Stock est une gigantesque &#039;&#039;&#039;banque d&#039;images gratuites&#039;&#039;&#039; pour enfants &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;(et plus grands)&amp;lt;/span&amp;gt;&amp;amp;nbsp;! Elle contient plus de &#039;&#039;&#039;{{formatnum:{{#expr:floor({{NUMBEROFFILES:R}}/100)*100}}}}&#039;&#039;&#039; photographies et illustrations soigneusement organisées en 570 catégories thématiques. Pratiquement toutes sont [[Wikimini:Terms of Use|libres d&#039;utilisation]]&amp;amp;nbsp;!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:600px; margin:40px auto; border: solid 1px #DDDDDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;float:left;padding-top:15px;text-align:right;&amp;quot;&amp;gt;[[Image:Wikiboo08 trans.png|50px|alt=Wikiboo|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=fulltext&lt;br /&gt;
namespaces=File**&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f7f7f7&lt;br /&gt;
searchbuttonlabel=Chercher une image&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CAROUSEL, PICTURE OF THE DAY - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myCanvasContainer&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;canvas width=&amp;quot;430&amp;quot; height=&amp;quot;430&amp;quot; id=&amp;quot;myCanvas&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Anything in here will be replaced on browsers that support the canvas element&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/canvas&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tags&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Broadway_tower.jpg&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-01.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Broadway Tower&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Light_bulb_explosion.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-02.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Light Bulb Explosion&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Aurora_Borealis.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-03.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Aurora Borealis&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Colosseum_by_night.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-04.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Colosseum by night&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Red-eyed_Tree_Frog_(Agalychnis_callidryas).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-05.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Red-eyed Tree Frog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tyrannosaurus_rex_head.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-06.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tyrannosaurus-Rex head&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Russian_military_honor_guard_(2009).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-07.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Russian Military Honor Guard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Tracy_Caldwell_Dyson_in_the_International_Space_Station_(ISS)_.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-08.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Tracy Caldwell Dyson in the ISS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Solar_flare-Solar_prominence-Sun&#039;s_corona-Coronal_mass_ejection.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-09.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Solar Flare&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:European_garden_spider_(Araneus_diadematus).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-10.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;European Garden Spider&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Horses_on_Bianditz_mountain_(Navarre,_Spain).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-11.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Horses on Bianditz mountain&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Common_wasp_(Vespula_vulgaris).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-12.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Common Wasp&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Child_portrait-Boy_face_(Venezuela).jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-13.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Child Portrait&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Mona_Lisa-La_Gioconda-La_Joconde.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-14.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Mona Lisa&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://stock.wikimini.org/wiki/File:Yellow_rose_-_close-up.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://stock.wikimini.org/wiki/resources/assets/stock-carousel/carousel-15.jpg&amp;quot; style=&amp;quot;max-width:100px;max-height=100px;border:2px solid #ffffff;&amp;quot;&amp;gt;Yellow Rose&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Image du jour • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Paresseux-5228.jpg|thumb|320px|center|Un paresseux perché sur son arbre]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- DID YOU KNOW? - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot; style=&amp;quot;padding-top: 5px; text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Requin baleine-Georgia Aquarium.jpg|thumb|320px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Le savais-tu&amp;amp;nbsp;? • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Une découverte en image chaque semaine&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;&#039;requin baleine&#039;&#039;&#039; est le plus grand poisson vivant actuellement sur Terre. Il pèse plusieurs tonnes et peut mesurer jusqu&#039;à 18 mètres.&lt;br /&gt;
&lt;br /&gt;
18 mètres, c&#039;est presque la longueur de deux autobus scolaires&amp;amp;nbsp;!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://fr.wikimini.org/wiki/Requin_baleine En savoir plus]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- PICTURES BY SUBJECTS - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Images par sujets • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;+570 catégories thématiques&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Sciences and mathematics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Life in society/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-History and discovery of the past/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Geography and travel/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Arts, recreation and sports/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Technology and health/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Mind and spirit/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Beliefs and religions/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Languages and linguistics/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Literature and drama/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespLeftColumn&amp;quot;&amp;gt;&lt;br /&gt;
{{CAT index-Information and documentation/fr}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RespRightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Arborescence complète&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=categories hideroot=on&amp;gt;Topics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SELECTIONS (GALLERIES) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Sélections • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des galeries d&#039;images spécialement sélectionnées&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;15&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Tronçonner.jpg|100px|link=Dessins des Wikiminautes|alt=Dessins des Wikiminautes]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Dessins des Wikiminautes]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Group of flags.jpg|100px|link=Drapeaux des pays du monde|alt=Drapeaux]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Drapeaux des pays du monde]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Mother and baby gorilla.jpg|100px|link=Bébés animaux et leur mère|alt=Mère et son bébé gorille]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Bébés animaux et leur mère]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Selena Gomez (isolated).jpg|100px|link=Enfants et ados stars|alt=Selena Gomez]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Image gallery icon.png|Gallery|link=]] [[Enfants et ados stars]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Corps humain-femme-organes.jpg|100px|link=Corps humain|alt=Corps humain]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Corps humain]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Statue of Liberty (profile).jpg|100px|link=Monuments célèbres|alt=Statue de la Liberté]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Monuments célèbres]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Illusion d&#039;optique-ronds blancs-ronds noirs.png|100px|link=Illusions d&#039;optique|alt=Illusion d&#039;optique]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Illusions d&#039;optique]]&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | [[File:Cheetah (Acinonyx jubatus)-isolated.jpg|100px|link=Animaux de tous les records|alt=Guépard]]&amp;lt;br /&amp;gt;[[File:Image gallery icon.png|Gallery|link=]] [[Animaux de tous les records]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Plus de galeries dans nos [[:Category:Topics|catégories thématiques]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BIG QUOTE - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 50px 0; padding:60px; background-color:#444444; border-right: 15px solid #f5f5f5; text-align:center; color:#ffffff; line-height:normal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-family: Georgia, Times, serif; font-size:24px&amp;quot;&amp;gt;“ Une [[Special:Random/File|&amp;lt;span style=&amp;quot;color:#FABD23&amp;quot;&amp;gt;image&amp;lt;/span&amp;gt;]] vaut mille mots ”&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Confucius • VIe s. av. J.-C.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- FOOTER (HELP US) - BEGIN&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ColContainer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LeftColumn&amp;quot; style=&amp;quot;min-width: 240px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Young man peeping through hole in paper.jpg|240px|center|alt=Homme souriant|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;RightColumn&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Aidez-nous ! • &amp;lt;span class=&amp;quot;subtitle&amp;quot;&amp;gt;Des gens comme vous&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Saviez-vous que cette banque d&#039;images est maintenue par des volontaires ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wikimini stock est un site basé sur la collaboration et la participation de tous. Toutes les images y sont sélectionnées, décrites et classées par des internautes de tous âges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;readmore&amp;quot;&amp;gt;&lt;br /&gt;
Découvrez nos [[Special:ContributionScores|meilleurs archivistes]] &amp;lt;br /&amp;gt;et comment spontanément [[Help:How to participate|participer à votre tour]]&amp;amp;nbsp;!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&amp;lt;noinclude&amp;gt; __NORICHEDITOR__&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157445</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157445"/>
		<updated>2017-02-12T22:54:35Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;/wiki/resources/lib/tagcanvas.min.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157444</id>
		<title>MediaWiki:Vector.js</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Vector.js&amp;diff=157444"/>
		<updated>2017-02-12T22:52:53Z</updated>

		<summary type="html">&lt;p&gt;Mory: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for users using the MonoBook skin */&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Enable multiple onload functions&lt;br /&gt;
&lt;br /&gt;
// setup onload functions this way:&lt;br /&gt;
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!&lt;br /&gt;
&lt;br /&gt;
if (!window.aOnloadFunctions) {&lt;br /&gt;
  var aOnloadFunctions = new Array();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.onload = function() {&lt;br /&gt;
  if (window.aOnloadFunctions) {&lt;br /&gt;
    for (var _i=0; _i&amp;lt;aOnloadFunctions.length; _i++) {&lt;br /&gt;
      aOnloadFunctions[_i]();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// END Enable multiple onload functions&lt;br /&gt;
// ============================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;http://stock.wikimini.org/wiki/resources/lib/tagcanvas.min.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ============================================================================&lt;br /&gt;
///////////////////////////////// Évite le double-post dans les pages de discussion LQT&lt;br /&gt;
//addOnloadHook( function(){&lt;br /&gt;
jQuery( function( ) {&lt;br /&gt;
&lt;br /&gt;
  var wpSave = document.getElementById(&#039;wpSave&#039;);&lt;br /&gt;
    var wpForm = document.getElementById(&#039;editform&#039;);&lt;br /&gt;
    if((wpSave)&amp;amp;&amp;amp;(wpForm)){&lt;br /&gt;
        wpSave.onclick = function(){&lt;br /&gt;
            document.getElementById(&#039;editform&#039;).submit();&lt;br /&gt;
            document.getElementById(&#039;wpSave&#039;).disabled = &amp;quot;disabled&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});///////////////////////////////&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////// Fonctions Javascript liées à des modèles&lt;br /&gt;
&lt;br /&gt;
// ============================================================&lt;br /&gt;
// BEGIN Boîtes déroulantes&lt;br /&gt;
&lt;br /&gt;
// set up the words in your language&lt;br /&gt;
var NavigationBarHide = &#039;? Hide&#039;;&lt;br /&gt;
var NavigationBarShow = &#039;? Show&#039;;&lt;br /&gt;
&lt;br /&gt;
// set up max count of Navigation Bars on page,&lt;br /&gt;
// if there are more, all will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 0; // all bars will be hidden&lt;br /&gt;
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden&lt;br /&gt;
var NavigationBarShowDefault = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleNavigationBar(indexNavigationBar){&lt;br /&gt;
    var NavToggle = document.getElementById(&amp;quot;NavToggle&amp;quot; + indexNavigationBar);&lt;br /&gt;
    var NavFrame = document.getElementById(&amp;quot;NavFrame&amp;quot; + indexNavigationBar);&lt;br /&gt;
    if (!NavFrame || !NavToggle) return false;&lt;br /&gt;
    if (NavToggle.firstChild.data == NavigationBarHide) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;none&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;) NavChild.firstChild.data = NavigationBarShow;&lt;br /&gt;
        }&lt;br /&gt;
    } else if (NavToggle.firstChild.data == NavigationBarShow) {&lt;br /&gt;
        for (var NavChild = NavFrame.firstChild;NavChild != null;NavChild = NavChild.nextSibling) {&lt;br /&gt;
            if (NavChild.className == &#039;NavPic&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavContent&#039;) NavChild.style.display = &#039;block&#039;;&lt;br /&gt;
            if (NavChild.className == &#039;NavToggle&#039;)  NavChild.firstChild.data = NavigationBarHide;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createNavigationBarToggleButton(){&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var AllDivs = document.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
    for(var i=0,l=AllDivs.length;i&amp;lt;l;i++) {&lt;br /&gt;
        if (hasClass(AllDivs[i], &amp;quot;NavFrame&amp;quot;)) {&lt;br /&gt;
            var NavFrame = AllDivs[i];&lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
            NavToggle.className = &#039;NavToggle&#039;;&lt;br /&gt;
            NavToggle.setAttribute(&#039;id&#039;, &#039;NavToggle&#039; + indexNavigationBar);&lt;br /&gt;
            NavToggle.setAttribute(&#039;href&#039;, &#039;javascript:toggleNavigationBar(&#039; + indexNavigationBar + &#039;);&#039;);&lt;br /&gt;
            var NavToggleText = document.createTextNode(NavigationBarHide);&lt;br /&gt;
            NavToggle.appendChild(NavToggleText);&lt;br /&gt;
            NavFrame.insertBefore( NavToggle, NavFrame.firstChild);&lt;br /&gt;
            NavFrame.setAttribute(&#039;id&#039;, &#039;NavFrame&#039; + indexNavigationBar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (NavigationBarShowDefault &amp;lt; indexNavigationBar) {&lt;br /&gt;
        for(var i=1;i&amp;lt;=indexNavigationBar;i++) {&lt;br /&gt;
            toggleNavigationBar(i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;&lt;br /&gt;
&lt;br /&gt;
// ===========================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
        //try {&lt;br /&gt;
          TagCanvas.Start(&#039;myCanvas&#039;,&#039;tags&#039;,{&lt;br /&gt;
            textColour: &#039;#000000&#039;,&lt;br /&gt;
            outlineThickness : 1,&lt;br /&gt;
            maxSpeed : 0.3,&lt;br /&gt;
            depth : 0.75,&lt;br /&gt;
            imageScale : null,&lt;br /&gt;
            shuffleTags : true&lt;br /&gt;
          });&lt;br /&gt;
        //} catch(e) {&lt;br /&gt;
          // something went wrong, hide the canvas container&lt;br /&gt;
          // $(&#039;#myCanvasContainer&#039;).hide();&lt;br /&gt;
           $(&#039;#tags&#039;).hide();&lt;br /&gt;
        //}&lt;br /&gt;
      });&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
</feed>