User:Catrope/babaco.diff

From mediawiki.org
Property changes on: .
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk/extensions/UsabilityInitiative:r56151-56206,56208,56210-56295,56297-56332,56334-56354,56356-56416,56418-56587,56589,56591-56990

Index: SimpleSearch/SimpleSearch.i18n.php
===================================================================
--- SimpleSearch/SimpleSearch.i18n.php	(revision 56989)
+++ SimpleSearch/SimpleSearch.i18n.php	(working copy)
@@ -21,8 +21,10 @@
 /** Message documentation (Message documentation)
  * @author Bennylin
  * @author Mormegil
+ * @author Umherirrender
  */
 $messages['qqq'] = array(
+	'simplesearch-desc' => '{{desc}}',
 	'simplesearch-search' => 'Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)
 
 {{Identical|Search}}',
@@ -36,6 +38,7 @@
 	'simplesearch' => 'Eenvoudige soek',
 	'simplesearch-desc' => 'Voeg ekstra funksionaliteit by die vereenvoudigde soek in Vector',
 	'simplesearch-search' => 'Soek',
+	'simplesearch-containing' => 'bevat...',
 );
 
 /** Arabic (العربية)
@@ -63,6 +66,7 @@
 	'simplesearch' => 'Просты Ð¿Ð¾ÑˆÑƒÐº',
 	'simplesearch-desc' => 'Дадае дадатковыя магчымасьці да спрошчанага пошуку ў афармленьні «Вэктар»',
 	'simplesearch-search' => 'Пошук',
+	'simplesearch-containing' => 'утрымлівае...',
 );
 
 /** Bengali (বাংলা)
@@ -80,6 +84,7 @@
 	'simplesearch' => 'Klask eeun',
 	'simplesearch-desc' => "Ouzhpennañ a ra arc'hwelioù all d'ar c'hlask eeunaet Vector",
 	'simplesearch-search' => 'Klask',
+	'simplesearch-containing' => 'ennañ...',
 );
 
 /** Bosnian (Bosanski)
@@ -89,6 +94,7 @@
 	'simplesearch' => 'Jednostavna pretraga',
 	'simplesearch-desc' => 'Dodaje dodatnu funkcionalnost u Vector jednostavnu pretragu',
 	'simplesearch-search' => 'Traži',
+	'simplesearch-containing' => 'sadrži...',
 );
 
 /** Catalan (Català )
@@ -108,6 +114,7 @@
 	'simplesearch' => 'Zjednodušené hledání',
 	'simplesearch-desc' => 'Rozšiřuje funkcionalitu zjednodušeného hledání ve vzhledu Vektor',
 	'simplesearch-search' => 'Hledat',
+	'simplesearch-containing' => 'obsahující…',
 );
 
 /** Danish (Dansk)
@@ -126,6 +133,7 @@
 	'simplesearch' => 'Einfache Suche',
 	'simplesearch-desc' => 'Fügt Extra-Funktionalität zur vereinfachten Suche des Vektor-Skins hinzu',
 	'simplesearch-search' => 'Suche',
+	'simplesearch-containing' => 'enthält …',
 );
 
 /** Lower Sorbian (Dolnoserbski)
@@ -135,6 +143,7 @@
 	'simplesearch' => 'Jadnore pytanje',
 	'simplesearch-desc' => 'Pśidawa zjadnorjonemu pytanjeju Vectora wósebnu funkcionalnosć.',
 	'simplesearch-search' => 'PytaÅ›',
+	'simplesearch-containing' => 'wopśimujo...',
 );
 
 /** Greek (Ελληνικά)
@@ -145,6 +154,7 @@
 	'simplesearch' => 'Απλή αναζήτηση',
 	'simplesearch-desc' => 'Προσθέτει έξτρα λειτουργικότητα στην απλοποιημένη αναζήτηση του Vector',
 	'simplesearch-search' => 'Αναζήτηση',
+	'simplesearch-containing' => 'περιέχει...',
 );
 
 /** Esperanto (Esperanto)
@@ -154,10 +164,12 @@
 	'simplesearch' => 'Simpla serĉo',
 	'simplesearch-desc' => 'Aldonas pluan funkciadon al la simpligita serĉo de Vector.',
 	'simplesearch-search' => 'Serĉi',
+	'simplesearch-containing' => 'enhavas...',
 );
 
 /** Spanish (Español)
  * @author Antur
+ * @author Crazymadlover
  * @author Locos epraix
  * @author Omnipaedista
  */
@@ -165,6 +177,7 @@
 	'simplesearch' => 'Búsqueda simple',
 	'simplesearch-desc' => 'Agrega funcionalidades extra al vector de búsqueda simple',
 	'simplesearch-search' => 'Búsqueda',
+	'simplesearch-containing' => 'conteniendo...',
 );
 
 /** Estonian (Eesti)
@@ -185,22 +198,34 @@
 	'simplesearch-search' => 'Bilatu',
 );
 
+/** Persian (فارسی)
+ * @author Mardetanha
+ */
+$messages['fa'] = array(
+	'simplesearch' => 'جستجوی ساده',
+	'simplesearch-search' => 'جستجو',
+);
+
 /** Finnish (Suomi)
+ * @author Cimon Avaro
  * @author Str4nd
  */
 $messages['fi'] = array(
 	'simplesearch' => 'Yksinkertainen haku',
 	'simplesearch-desc' => 'Lisää lisätoimintoja Vectorin yksinkertaistettuun hakuun.',
 	'simplesearch-search' => 'Etsi',
+	'simplesearch-containing' => 'sisältää...',
 );
 
 /** French (Français)
  * @author IAlex
+ * @author PieRRoMaN
  */
 $messages['fr'] = array(
 	'simplesearch' => 'Recherche simple',
 	'simplesearch-desc' => "Ajoute des fonctionnalités à la recherche simplifiée de l'habillage Vector",
 	'simplesearch-search' => 'Rechercher',
+	'simplesearch-containing' => 'contenant...',
 );
 
 /** Franco-Provençal (Arpetan)
@@ -218,8 +243,18 @@
 	'simplesearch' => 'Busca sinxela',
 	'simplesearch-desc' => 'Engade a funcionalidade adicional á busca simplificada do Vector',
 	'simplesearch-search' => 'Procurar',
+	'simplesearch-containing' => 'que conteña...',
 );
 
+/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
+ * @author Crazymadlover
+ * @author Omnipaedista
+ */
+$messages['grc'] = array(
+	'simplesearch-search' => 'Ζητεῖν',
+	'simplesearch-containing' => 'περιέχον...',
+);
+
 /** Swiss German (Alemannisch)
  * @author Als-Holder
  */
@@ -227,6 +262,7 @@
 	'simplesearch' => 'Eifachi Suechi',
 	'simplesearch-desc' => 'Fiegt e extra Funktionswys zue dr vereifachte Suechi vum Vekter derzue',
 	'simplesearch-search' => 'Suechi',
+	'simplesearch-containing' => 'din het s …',
 );
 
 /** Hebrew (עברית)
@@ -235,8 +271,9 @@
  */
 $messages['he'] = array(
 	'simplesearch' => 'חיפוש פשוט',
-	'simplesearch-desc' => 'הוספת ×ª×›×•× ×•×ª × ×•×¡×¤×•×ª לחיפוש המפושט של וקטור',
+	'simplesearch-desc' => 'הוספת ×ª×›×•× ×•×ª × ×•×¡×¤×•×ª לחיפוש המפושט של העיצוב "וקטור"',
 	'simplesearch-search' => 'חיפוש',
+	'simplesearch-containing' => 'כולל...',
 );
 
 /** Croatian (Hrvatski)
@@ -255,6 +292,7 @@
 	'simplesearch' => 'Jednore pytanje',
 	'simplesearch-desc' => 'Přidawa wosebitu funkcionalnosć k zjednorjenej pytanju Vectora.',
 	'simplesearch-search' => 'Pytać',
+	'simplesearch-containing' => 'wobsahuje...',
 );
 
 /** Hungarian (Magyar)
@@ -273,15 +311,18 @@
 	'simplesearch' => 'Recerca simple',
 	'simplesearch-desc' => 'Adde functionalitate extra al recerca simplificate del Vector',
 	'simplesearch-search' => 'Cercar',
+	'simplesearch-containing' => 'continente...',
 );
 
 /** Indonesian (Bahasa Indonesia)
  * @author Bennylin
+ * @author Irwangatot
  */
 $messages['id'] = array(
 	'simplesearch' => 'Pencarian sederhana',
 	'simplesearch-desc' => 'Tambahkan fungsionalitas tambahan untuk pencarian sederhana Vector',
 	'simplesearch-search' => 'Cari',
+	'simplesearch-containing' => 'isian ...',
 );
 
 /** Italian (Italiano)
@@ -295,11 +336,13 @@
 
 /** Japanese (日本語)
  * @author Aotake
+ * @author Fryed-peach
  */
 $messages['ja'] = array(
 	'simplesearch' => '基本検索',
 	'simplesearch-desc' => 'ãƒ™ã‚¯ã‚¿ãƒ¼ã®ç°¡ç•¥åŒ–ã•ã‚ŒãŸæ¤œç´¢æ©Ÿèƒ½ã«è¿½åŠ æ©Ÿèƒ½ã‚’è¿½åŠ ã™ã‚‹',
 	'simplesearch-search' => '検索',
+	'simplesearch-containing' => 'この語句を全文検索',
 );
 
 /** Javanese (Basa Jawa)
@@ -343,6 +386,7 @@
 	'simplesearch' => 'Eifach Söhke',
 	'simplesearch-desc' => 'Deiht extra Müjjeleschkeijte beim „{{int:simplesearch}}“ vun de Bedeen-Bovverfläsh „Vektor“ bei.',
 	'simplesearch-search' => 'Söhke',
+	'simplesearch-containing' => 'dren änthallde…',
 );
 
 /** Latin (Latina)
@@ -359,6 +403,7 @@
 	'simplesearch' => 'Einfach Sich',
 	'simplesearch-desc' => 'Setzt eng extra Fonctionalitéit bäi déi einfach Sich derbäi.',
 	'simplesearch-search' => 'Sich',
+	'simplesearch-containing' => 'mat ...',
 );
 
 /** Lithuanian (Lietuvių)
@@ -410,8 +455,17 @@
 	'simplesearch' => 'Eenvoudig zoeken',
 	'simplesearch-desc' => 'Voegt extra functionaliteit toe aan het vereenvoudigd zoeken in Vector',
 	'simplesearch-search' => 'Zoeken',
+	'simplesearch-containing' => 'bevat...',
 );
 
+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+ * @author Gunnernett
+ */
+$messages['nn'] = array(
+	'simplesearch-search' => 'Søk',
+	'simplesearch-containing' => 'inneheld ...',
+);
+
 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
  * @author Laaknor
  */
@@ -428,15 +482,18 @@
 	'simplesearch' => 'Recèrca simpla',
 	'simplesearch-desc' => "Apond de foncionalitats a la recèrca simplificada de l'abilhatge Vector",
 	'simplesearch-search' => 'Recercar',
+	'simplesearch-containing' => 'que conten...',
 );
 
 /** Polish (Polski)
  * @author Leinad
+ * @author Sp5uhe
  */
 $messages['pl'] = array(
 	'simplesearch' => 'Proste wyszukiwanie',
 	'simplesearch-desc' => 'Dodaje dodatkową funkcjonalność prostego wyszukiwania w skórce Vector',
 	'simplesearch-search' => 'Szukaj',
+	'simplesearch-containing' => 'zawierajÄ…ce...',
 );
 
 /** Piedmontese (Piemontèis)
@@ -446,6 +503,7 @@
 	'simplesearch' => 'Arserca sempia',
 	'simplesearch-desc' => "A gionta funsionalità extra a l'arserca semplifià ëd Vector",
 	'simplesearch-search' => 'Arserca',
+	'simplesearch-containing' => 'contenent ...',
 );
 
 /** Pontic (Ποντιακά)
@@ -466,12 +524,14 @@
 
 /** Portuguese (Português)
  * @author Giro720
+ * @author Malafaya
  * @author Waldir
  */
 $messages['pt'] = array(
 	'simplesearch' => 'Pesquisa simples',
 	'simplesearch-desc' => 'Adiciona funcionalidades extra à pesquisa simplificada do Vector.',
 	'simplesearch-search' => 'Pesquisa',
+	'simplesearch-containing' => 'contendo...',
 );
 
 /** Brazilian Portuguese (Português do Brasil)
@@ -507,15 +567,18 @@
 	'simplesearch' => 'Ricerca semblice',
 	'simplesearch-desc' => "Aggiunge 'na funzione extra a 'u vettore d'a ricerche semblificate",
 	'simplesearch-search' => 'Cirche',
+	'simplesearch-containing' => 'tène...',
 );
 
 /** Russian (Русский)
  * @author Ferrer
+ * @author Александр Сигачёв
  */
 $messages['ru'] = array(
 	'simplesearch' => 'Простой поиск',
 	'simplesearch-desc' => 'Добавляет больше функциональности в простой поиск Vector',
 	'simplesearch-search' => 'Поиск',
+	'simplesearch-containing' => 'содержащие…',
 );
 
 /** Yakut (Саха тыла)
@@ -525,6 +588,7 @@
 	'simplesearch' => 'Судургу көрдөөһүн',
 	'simplesearch-desc' => 'Vector диэн судургу көрдөөччүгэ эбии кыахтары Ð±Ð¸ÑÑ€ÑÑ€',
 	'simplesearch-search' => 'Көрдөөһүн',
+	'simplesearch-containing' => 'иһинээҕи...',
 );
 
 /** Sicilian (Sicilianu)
@@ -543,6 +607,7 @@
 	'simplesearch' => 'Jednoduché vyhľadávanie',
 	'simplesearch-desc' => 'Pridáva ďalšiu funkcionalitu k zjednodušenému vyhľadávaniu témy vzhľadu Vector',
 	'simplesearch-search' => 'Hľadať',
+	'simplesearch-containing' => 'obsahuje...',
 );
 
 /** Slovenian (Slovenščina)
@@ -555,11 +620,13 @@
 );
 
 /** Serbian Cyrillic ekavian (Српски (ћирилица))
+ * @author Sasa Stefanovic
  * @author Михајло Анђелковић
  */
 $messages['sr-ec'] = array(
 	'simplesearch' => 'Једноставна претрага',
 	'simplesearch-search' => 'Претрага',
+	'simplesearch-containing' => 'садржи...',
 );
 
 /** Serbian Latin ekavian (Srpski (latinica))
@@ -585,6 +652,7 @@
 $messages['sw'] = array(
 	'simplesearch' => 'Tafuti sahili',
 	'simplesearch-search' => 'Kutafuta',
+	'simplesearch-containing' => 'ya maneno...',
 );
 
 /** Telugu (తెలుగు)
@@ -603,6 +671,7 @@
 	'simplesearch' => 'Basit arama',
 	'simplesearch-desc' => "Vector'un basitleştirilmiş aramasına ilave işlevler ekler",
 	'simplesearch-search' => 'Ara',
+	'simplesearch-containing' => 'içeren...',
 );
 
 /** Tatar (Cyrillic) (Татарча/Tatarça (Cyrillic))
@@ -630,8 +699,19 @@
 	'simplesearch' => 'Riserca sènplise',
 	'simplesearch-desc' => 'Zonta funsionalità agiuntive a la riserca senplificà de Vector',
 	'simplesearch-search' => 'Serca',
+	'simplesearch-containing' => 'che contien...',
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'simplesearch' => 'Järgeline ecind',
+	'simplesearch-desc' => 'Ližadab enambad funkcionaližust Vektoran järgeližhe ecindha',
+	'simplesearch-search' => 'Ectä',
+	'simplesearch-containing' => 'mülütajad...',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Vinhtantran
  */
@@ -639,8 +719,23 @@
 	'simplesearch' => 'Tìm kiếm đơn giản',
 	'simplesearch-desc' => 'Thêm chức năng phụ cho bộ tìm kiếm đơn giản của Bề ngoà i Vector',
 	'simplesearch-search' => 'Tìm kiếm',
+	'simplesearch-containing' => 'có chứa...',
 );
 
+/** Mingrelian (მარგალური)
+ * @author Lika2672
+ */
+$messages['xmf'] = array(
+	'simplesearch-search' => 'გორუა',
+);
+
+/** Yiddish (ייִדיש)
+ * @author פוילישער
+ */
+$messages['yi'] = array(
+	'simplesearch-search' => 'זוכן',
+);
+
 /** Yue (粵語)
  * @author Shinjiman
  */
Index: SimpleSearch/SimpleSearch.js
===================================================================
--- SimpleSearch/SimpleSearch.js	(revision 56989)
+++ SimpleSearch/SimpleSearch.js	(working copy)
@@ -80,27 +80,31 @@
 				render: function( query ) {
 					var perfectMatch = false;
 					$j(this).closest( '.suggestions' ).find( '.suggestions-results div' ).each( function() {
-						if ( $j(this).text() == query ) {
+						if ( $j(this).data( 'text' ) == query ) {
 							perfectMatch = true;
 						}
 					} );
 					if ( perfectMatch ) {
 						if ( $j(this).children().size() == 0  ) {
-							$j(this).append(
-								$j( '<div />' )
-									.addClass( 'special-label' )
-									.text( gM( 'simplesearch-containing' ) )
-							);
-							$j(this).append(
-								$j( '<span />' ).addClass( 'special-query' ).text( query )
-							);
 							$j(this).show();
+							$label = $j( '<div />' )
+								.addClass( 'special-label' )
+								.text( gM( 'simplesearch-containing' ) )
+								.appendTo( $j(this) );
+							$query = $j( '<div />' )
+								.addClass( 'special-query' )
+								.text( query )
+								.appendTo( $j(this) );
+							$query.autoEllipse();
 						} else {
-							$j(this).find( '.special-query' ).text( query );
+							$j(this).find( '.special-query' )
+								.empty()
+								.text( query )
+								.autoEllipse();
 						}
 					} else {
+						$j(this).hide();
 						$j(this).empty();
-						$j(this).hide();
 					}
 				},
 				select: function( $textbox ) {
Index: combine.sh
===================================================================
--- combine.sh	(revision 56989)
+++ combine.sh	(working copy)
@@ -4,8 +4,8 @@
 rm css/combined.*
 echo "Merging raw scripts and styles"
 # Explicitly including scripts is important, because loading order is important
-cat js/js2/jquery-1.3.2.js js/js2/js2.js > js/js2.combined.js
-cat js/plugins/jquery.async.js js/plugins/jquery.browser.js js/plugins/jquery.cookie.js js/plugins/jquery.textSelection.js js/plugins/jquery.wikiEditor.js js/plugins/jquery.wikiEditor.toolbar.js js/plugins/jquery.wikiEditor.toc.js > js/plugins.combined.js
+cat js/js2/jquery-1.3.2.js js/js2/jquery-ui-1.7.2.js js/js2/js2.js > js/js2.combined.js
+cat js/plugins/jquery.async.js js/plugins/jquery.autoEllipse.js js/plugins/jquery.browser.js js/plugins/jquery.cookie.js js/plugins/jquery.delayedBind.js js/plugins/jquery.namespaceSelect.js js/plugins/jquery.suggestions.js js/plugins/jquery.textSelection.js js/plugins/jquery.wikiEditor.js js/plugins/jquery.wikiEditor.dialogs.js js/plugins/jquery.wikiEditor.toolbar.js js/plugins/jquery.wikiEditor.toc.js > js/plugins.combined.js
 # Styles can be loaded in any order
 cat css/*.css > css/combined.css
 # For more info on JSMin, see: http://www.crockford.com/javascript/jsmin.html
Index: css/suggestions.css
===================================================================
--- css/suggestions.css	(revision 56989)
+++ css/suggestions.css	(working copy)
@@ -36,10 +36,13 @@
 .suggestions-result {
 	color: black;
 	color: WindowText;
-	padding: 0.25em 0.25em;
-	line-height: 1.25em;
 	margin: 0;
+	width: 100%;
 }
+.suggestions-result span {
+	line-height: 1.5em;
+	padding: 0.25em 0.25em;
+}
 .suggestions-result-current {
 	background-color: #4C59A6;
 	background-color: Highlight;

Property changes on: css/suggestions.css
___________________________________________________________________
Added: svn:eol-style
   + native

Index: css/wikiEditor.dialogs.css
===================================================================
--- css/wikiEditor.dialogs.css	(revision 56989)
+++ css/wikiEditor.dialogs.css	(working copy)
@@ -5,6 +5,6 @@
 }
 
 /* Put suggestions (default z-index 99) on top of dialogs (z-index 1002) */
-div.os-suggest {
+div.suggestions {
 	z-index: 1099;
 }
Index: css/combined.css
===================================================================
--- css/combined.css	(revision 56989)
+++ css/combined.css	(working copy)
@@ -36,10 +36,13 @@
 .suggestions-result {
 	color: black;
 	color: WindowText;
-	padding: 0.25em 0.25em;
-	line-height: 1.25em;
 	margin: 0;
+	width: 100%;
 }
+.suggestions-result span {
+	line-height: 1.5em;
+	padding: 0.25em 0.25em;
+}
 .suggestions-result-current {
 	background-color: #4C59A6;
 	background-color: Highlight;
@@ -92,7 +95,7 @@
 }
 
 /* Put suggestions (default z-index 99) on top of dialogs (z-index 1002) */
-div.os-suggest {
+div.suggestions {
 	z-index: 1099;
 }
 /* wikiEditor toc module */
Index: css/combined.min.css
===================================================================
--- css/combined.min.css	(revision 56989)
+++ css/combined.min.css	(working copy)
@@ -34,10 +34,13 @@
 .suggestions-result{
 color:black;
 color:WindowText;
-padding:0.25em 0.25em;
-line-height:1.25em;
 margin:0;
+width:100%;
 }
+.suggestions-result span{
+line-height:1.5em;
+padding:0.25em 0.25em;
+}
 .suggestions-result-current{
 background-color:#4C59A6;
 background-color:Highlight;
@@ -83,7 +86,7 @@
 .ui-widget table td{
 padding:0.5em;
 }
-div.os-suggest{
+div.suggestions{
 z-index:1099;
 }
 .wikiEditor-ui-text{
Index: OptIn/OptInLink.i18n.php
===================================================================
--- OptIn/OptInLink.i18n.php	(revision 56989)
+++ OptIn/OptInLink.i18n.php	(working copy)
@@ -139,8 +139,11 @@
  */
 $messages['da'] = array(
 	'optin-try' => 'Prøv Beta',
+	'tooltip-pt-optin-try' => 'Afprøv nye funktioner',
 	'optin-leave' => 'Forlad Beta',
+	'tooltip-pt-optin-leave' => 'Slå de nye funktioner fra igen',
 	'optin-feedback' => 'Tilbagemelding om Beta',
+	'tooltip-pt-optin-feedback' => 'Giv en tilbagemelding om dine oplevelser med de nye funktioner',
 );
 
 /** German (Deutsch)
@@ -190,7 +193,7 @@
 	'tooltip-pt-optin-try' => 'Δοκιμάστε νέα χαρακτηριστικά',
 	'optin-leave' => 'Εγκαταλείψτε την Beta',
 	'tooltip-pt-optin-leave' => 'Απενεργοποίηση νέων χαρακτηριστικών',
-	'optin-feedback' => 'Ανατροφοδότηση Beta',
+	'optin-feedback' => 'Ανάδραση περί της Beta',
 	'tooltip-pt-optin-feedback' => 'Παροχή ανάδρασης περί της εμπειρίας σας με τις νέες λειτουργίες',
 );
 
@@ -240,10 +243,22 @@
  */
 $messages['eu'] = array(
 	'optin-try' => 'Beta probatu',
+	'tooltip-pt-optin-try' => 'Eginbide berriak probatu',
 	'optin-leave' => 'Beta utzi',
+	'tooltip-pt-optin-leave' => 'Eginbide berriak ezgaitu',
 	'optin-feedback' => 'Beta feedbacka',
 );
 
+/** Persian (فارسی)
+ * @author Ladsgroup
+ */
+$messages['fa'] = array(
+	'optin-try' => 'استفاده از بتا',
+	'tooltip-pt-optin-try' => 'خروج از امکانات جدید',
+	'optin-leave' => 'خروج از بتا',
+	'tooltip-pt-optin-leave' => 'خاموش کردن امکانات جدید',
+);
+
 /** Finnish (Suomi)
  * @author Cimon Avaro
  * @author Crt
@@ -255,7 +270,9 @@
 	'optin-try' => 'Kokeile Betaa',
 	'tooltip-pt-optin-try' => 'Kokeile uusia ominaisuuksia',
 	'optin-leave' => 'Poistu Betasta',
+	'tooltip-pt-optin-leave' => 'Poista käytöstä uudet omaisuudet',
 	'optin-feedback' => 'Anna palautetta',
+	'tooltip-pt-optin-feedback' => 'Tarjoa palautetta kokemuksistasi uusien ominaisuuksien osalta',
 );
 
 /** French (Français)
@@ -298,6 +315,18 @@
 	'tooltip-pt-optin-feedback' => 'Gib Ruckmäldige iber Dyni Erfahrige mit dr neje Funktione',
 );
 
+/** Hebrew (עברית)
+ * @author Rotem Liss
+ */
+$messages['he'] = array(
+	'optin-try' => 'הרשמה לגרסת בטא',
+	'tooltip-pt-optin-try' => '× ×™×¡×•×™ ×ª×›×•× ×•×ª חדשות',
+	'optin-leave' => 'עזיבת גרסת הבטא',
+	'tooltip-pt-optin-leave' => 'כיבוי ×”×ª×›×•× ×•×ª החדשות',
+	'optin-feedback' => 'משוב על גרסת הבטא',
+	'tooltip-pt-optin-feedback' => 'כתבו משוב על × ×¡×™×•× ×›× עם ×”×ª×›×•× ×•×ª החדשות',
+);
+
 /** Croatian (Hrvatski)
  * @author Suradnik13
  */
@@ -330,6 +359,7 @@
 	'optin-leave' => 'A bétateszt befejezése',
 	'tooltip-pt-optin-leave' => 'Új lehetőségek kikapcsolása',
 	'optin-feedback' => 'Visszajelzés a bétáról',
+	'tooltip-pt-optin-feedback' => 'Adj visszajelzést az új funkciókkal kapcsolatos tapasztalataidról',
 );
 
 /** Interlingua (Interlingua)
@@ -441,7 +471,7 @@
  */
 $messages['lb'] = array(
 	'optin-try' => 'Probéiert Beta aus',
-	'tooltip-pt-optin-try' => 'Probéiert  déi nei Fonctionalitéiten aus',
+	'tooltip-pt-optin-try' => 'Probéiert déi nei Fonctionalitéiten aus',
 	'optin-leave' => 'Beta verloossen',
 	'tooltip-pt-optin-leave' => 'Schalt déi nei Fonctionalitéiten aus',
 	'optin-feedback' => 'Gitt eis Är Meenung',
@@ -474,6 +504,18 @@
 	'optin-feedback' => 'Мислења за Бета',
 );
 
+/** Malayalam (മലയാളം)
+ * @author Praveenp
+ */
+$messages['ml'] = array(
+	'optin-try' => 'ബീറ്റ പരീക്ഷിക്കുക',
+	'tooltip-pt-optin-try' => 'പുതിയ സവിശേഷതകള്‍ പരിശോധിക്കുക',
+	'optin-leave' => 'ബീറ്റ വിടുക',
+	'tooltip-pt-optin-leave' => 'പുതിയ സവിശേഷതകള്‍ വേണ്ട',
+	'optin-feedback' => 'ബീറ്റയുടെ ഉപയോഗാനുഭവമറിയിക്കുക',
+	'tooltip-pt-optin-feedback' => 'പുതിയ സവിശേഷതകളുമായുള്ള താങ്കളുടെ അനുഭവം പങ്കു വെയ്ക്കുക',
+);
+
 /** Malay (Bahasa Melayu)
  * @author Diagramma Della Verita
  * @author Kurniasan
@@ -515,6 +557,17 @@
 	'tooltip-pt-optin-feedback' => 'Terugkoppeling geven over uw ervaringen met de nieuwe functionaliteit',
 );
 
+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+ * @author Gunnernett
+ */
+$messages['nn'] = array(
+	'optin-try' => 'Prøv Beta',
+	'tooltip-pt-optin-try' => 'Prøv ut nye funksjonar',
+	'optin-leave' => 'GÃ¥ ut av Beta',
+	'tooltip-pt-optin-leave' => 'Slå av nye funksjonar',
+	'optin-feedback' => 'Beta tilbakemelding',
+);
+
 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
  * @author Jon Harald Søby
  * @author Laaknor
@@ -533,8 +586,11 @@
  */
 $messages['oc'] = array(
 	'optin-try' => 'Ensajar la Bèta',
+	'tooltip-pt-optin-try' => 'Ensajatz las foncionalitats novèlas',
 	'optin-leave' => 'Quitar la Bèta',
+	'tooltip-pt-optin-leave' => 'Desactivar las foncionalitats novèlas',
 	'optin-feedback' => 'Balhatz vòstre vejaire',
+	'tooltip-pt-optin-feedback' => "Balhatz vòstras impressions sus l'utilizacion de las foncionalitats novèlas",
 );
 
 /** Deitsch (Deitsch)
@@ -639,8 +695,11 @@
  */
 $messages['sah'] = array(
 	'optin-try' => 'Beta-ны Ñ‚ургутуу',
+	'tooltip-pt-optin-try' => 'Саҥа кыахтары Ñ‚ургут',
 	'optin-leave' => 'Beta-ттан тахсыы',
+	'tooltip-pt-optin-leave' => 'Саҥа кыахтары Ñ‚уһанары Ð°Ñ€Ð°Ð°Ñ€',
 	'optin-feedback' => 'Сыанабылы Ñ‹Ñ‹Ñ‚арга',
+	'tooltip-pt-optin-feedback' => 'Саҥаны Ñ‚уттубутуҥ туһунан кэпсээ',
 );
 
 /** Slovak (Slovenčina)
@@ -665,11 +724,14 @@
 );
 
 /** Serbian Cyrillic ekavian (Српски (ћирилица))
+ * @author Sasa Stefanovic
  * @author Михајло Анђелковић
  */
 $messages['sr-ec'] = array(
 	'optin-try' => 'Пробајте бета-верзију',
+	'tooltip-pt-optin-try' => 'Пробајте нове могућности',
 	'optin-leave' => 'Напустите бета-верзију',
+	'tooltip-pt-optin-leave' => 'Угасите нове могућности',
 	'optin-feedback' => 'Повратна информација о бета-верзији',
 );
 
@@ -737,6 +799,15 @@
 	'tooltip-pt-optin-feedback' => "Dane la to inpression su l'utiliso de ste funsionalità nove",
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'optin-try' => 'Kodvi bata',
+	'tooltip-pt-optin-try' => 'Kodvgat uded voindad',
+	'optin-leave' => 'Lähtta Betaspäi',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Minh Nguyen
  * @author Vinhtantran
Index: OptIn/OptIn.i18n.php
===================================================================
--- OptIn/OptIn.i18n.php	(revision 56989)
+++ OptIn/OptIn.i18n.php	(working copy)
@@ -730,6 +730,14 @@
 Děkujeme a budeme se těšit na vaše názory!',
 );
 
+/** Welsh (Cymraeg)
+ * @author Lloffiwr
+ */
+$messages['cy'] = array(
+	'optin-accept-long' => 'Rhoi cynnig ar Beta',
+	'optin-submit-out' => 'Gadael Beta',
+);
+
 /** Danish (Dansk)
  * @author Byrial
  */
@@ -1030,7 +1038,7 @@
 	'optin-title-optedin' => 'Εγκαταλείψτε την Beta',
 	'optin-title-justoptedin' => 'Καλωσήρθατε στην Beta',
 	'optin-title-justoptedout' => 'Σας ευχαριστούμε που δοκιμάσατε την Beta μας',
-	'optin-title-feedback' => 'Ανατροφοδότηση Beta',
+	'optin-title-feedback' => 'Ανάδραση περί της Beta',
 	'optin-needlogin' => 'Πρέπει να [$1 συνδεθείς] για να δοκιμάσεις την Beta',
 	'optin-intro' => 'Η Πρωτοβουλία Χρηστικότητας της Wikipedia έχει δουλέψει σκληρά για τη βελτίωση της χρηστικότητας της Wikipedia. 
 Θα θέλατε να δοκιμάσετε τη Beta;',
@@ -1042,14 +1050,14 @@
 	'optin-leave-cancel' => 'Αν θα θέλατε να συνεχίσετε να χρησιμοποιείτε τη Beta, μπορείτε να επιστρέψετε στο $1.',
 	'optin-success-out' => 'Εγκαταλείψατε επιτυχώς τη Beta.
 Μπορείτε να τη δοκιμάσετε πάλι ανά πάσα στιγμή κάνοντας κλικ στο σύνδεσμο "{{int:optin-try}}" στο πάνω μέρος της οθόνης.',
-	'optin-success-feedback' => 'Σας ευχαριστούμε για την ανατροφοδότησή σας!',
+	'optin-success-feedback' => 'Σας ευχαριστούμε για την γνώμη σας!',
 	'optin-accept-short' => 'Ας το κάνουμε!',
 	'optin-accept-long' => 'Δοκιμάστε την Beta',
 	'optin-accept-long-anon' => 'Συνδεθείτε και δοκιμάστε το Beta',
 	'optin-deny-short' => 'Όχι, ευχαριστώ.',
 	'optin-deny-long' => 'Επιστροφή στην προηγούμενη σελίδα',
 	'optin-submit-out' => 'Εγκαταλείψτε την Beta',
-	'optin-submit-feedback' => 'Δώστε ανατροφοδότηση',
+	'optin-submit-feedback' => 'Δώστε ανάδραση',
 	'optin-survey-yes' => 'Ναι',
 	'optin-survey-no' => 'Όχι',
 	'optin-survey-intro' => 'Ευχαριστούμε για την δοκιμή της Beta.
@@ -1397,6 +1405,25 @@
 Milesker eta zure berri izateko irrikan gaude!',
 );
 
+/** Persian (فارسی)
+ * @author Ladsgroup
+ * @author Mardetanha
+ */
+$messages['fa'] = array(
+	'optin-title-optedout' => 'استفاده از بتا',
+	'optin-title-optedin' => 'خروج از بتا',
+	'optin-title-justoptedin' => 'به نسخه بتا خوش‌آمدید',
+	'optin-title-justoptedout' => 'ممنونیم از اینکه نسخه بتا را امتحان کردید',
+	'optin-needlogin' => 'شما برای استفاده از نسخه بتا باید [$1 وارد شوید].',
+	'optin-accept-long' => 'خروج از بتا',
+	'optin-deny-short' => 'نه ممنون!',
+	'optin-deny-long' => 'بازگشت به صفحه قبلی',
+	'optin-submit-out' => 'خروج از بتا',
+	'optin-survey-yes' => 'بله',
+	'optin-survey-no' => 'نه',
+	'optin-survey-answer-whyoptout-other' => 'دلایل دیگر:',
+);
+
 /** Finnish (Suomi)
  * @author Cimon Avaro
  * @author Crt
@@ -1668,6 +1695,7 @@
 );
 
 /** Ancient Greek (Ἀρχαία ἑλληνικὴ)
+ * @author Crazymadlover
  * @author Omnipaedista
  */
 $messages['grc'] = array(
@@ -1675,6 +1703,7 @@
 	'optin-survey-no' => 'Οὐ',
 	'optin-survey-answer-whyoptout-other' => 'Αἰτία ἄλλη:',
 	'optin-survey-answer-os-other' => 'Ἄλλον λειτουργικὸν σύστημα:',
+	'optin-survey-answer-changes-other' => 'Ἄλλον:',
 );
 
 /** Swiss German (Alemannisch)
@@ -1766,51 +1795,102 @@
 );
 
 /** Hebrew (עברית)
- * @author Rotem Liss
  * @author Rotemliss
  * @author YaronSh
  */
 $messages['he'] = array(
 	'optin' => 'הרשמה ליוזמת השימושיות',
-	'optin-desc' => 'אפשרות למשתמשים להירשם כדי לקבל את שיפורי השימושיות של יוזמת השימושיות',
-	'optin-needlogin' => 'עליכם [$1 ×œ×”×™×›× ×¡ לחשבון] כדי להירשם לקבלת שיפורי השימושיות של יוזמת השימושיות.',
-	'optin-intro' => 'יוזמת השימושיות של ויקיפדיה פיתחה עיצוב חדש וסרגל עריכה חדש כדי לשפר את השימושיות של ויקיפדיה. שיפורים אלה טרם הופעלו לכל המשתמשים, אבל באפשרותכם להירשם אליהם באמצעות לחיצה על הכפתור "{{int:optin-submit-in}}" שלהלן.',
-	'optin-success-in' => '× ×¨×©×ž×ª× בהצלחה לקבלת שיפורי השימושיות של יוזמת השימושיות.
-באפשרותכם לבטל את הרשמתכם בכל זמן באמצעות לחיצה על הכפתור "{{int:optin-submit-out}}" שלהלן.',
-	'optin-success-out' => 'ביטלתם בהצלחה את הרשמתכם לקבלת שיפורי השימושיות של יוזמת השימושיות.
-באפשרותכם להירשם שוב בכל זמן באמצעות לחיצה על הכפתור "{{int:optin-submit-out}}" שלהלן.',
+	'optin-desc' => 'אפשרות למשתמשים להירשם לגרסת הבטא, הכוללת את שיפורי השימושיות ×”××—×¨×•× ×™× של יוזמת השימושיות.',
+	'optin-title-optedout' => 'הרשמה לגרסת הבטא',
+	'optin-title-optedin' => 'עזיבת גרסת הבטא',
+	'optin-title-justoptedin' => 'ברוכים הבאים לגרסת הבטא',
+	'optin-title-justoptedout' => 'תודה לכם על ×©× ×™×¡×™×ª× את גרסת הבטא',
+	'optin-title-feedback' => 'משוב על גרסת הבטא',
+	'optin-needlogin' => 'עליכם [$1 ×œ×”×™×›× ×¡ לחשבון] כדי להירשם לגרסת הבטא.',
+	'optin-intro' => 'יוזמת השימוש של ויקיפדיה עבדה ועובדת קשה כדי לשפר את השימושיות של ויקיפדיה.
+האם תרצו ×œ× ×¡×•×ª את גרסת הבטא ×©×œ× ×•?',
+	'optin-feedback-intro' => "תודה לכם על ×©× ×™×¡×™×ª× את גרסת הבטא.
+× ×©×ž×— לדעת מה אתם חושבים על הממשק החדש ×©×œ× ×•, לכן × ×¢×¨×™×š זאת אם תמלאו את השאלון (×”××•×¤×¦×™×•× ×œ×™) שלהלן.",
+	'optin-feedback-back' => 'אם ××™× ×›× רוצים למלא את השאלון, באפשרותכם לחזור ל$1.',
+	'optin-success-in' => 'כעת אתם ×ž× ×¡×™× את גרסת הבטא.
+באפשרותכם לעזוב אותה בכל עת באמצעות לחיצה על הקישור "{{int:optin-leave}}" בראש הדף.',
+	'optin-leave-cancel' => 'אם תרצו להמשיך להשתמש בגרסת הבטא, באפשרותכם לחזור ל$1.',
+	'optin-success-out' => 'ביטלתם בהצלחה את הרשמתכם לגרסת הבטא.
+באפשרותכם ×œ× ×¡×•×ª אותה שוב בכל עת באמצעות לחיצה על הקישור "{{int:optin-try}}" בראש הדף.',
 	'optin-success-feedback' => 'תודה על המשוב!',
+	'optin-accept-short' => 'בואו × ×¢×©×” את ×–×”!',
+	'optin-accept-long' => '× ×¡×• את גרסת הבטא',
+	'optin-accept-long-anon' => '×”×™×›× ×¡×• לחשבון ×•× ×¡×• את גרסת הבטא',
 	'optin-deny-short' => 'לא תודה',
 	'optin-deny-long' => 'חזרה לדף הקודם',
-	'optin-submit-out' => 'ביטול הרשמה',
+	'optin-submit-out' => 'עזיבת גרסת הבטא',
+	'optin-submit-feedback' => 'מתן משוב',
 	'optin-survey-yes' => 'כן',
 	'optin-survey-no' => 'לא',
-	'optin-survey-intro' => 'תודה לכם על שאתם ×ž× ×¡×™× את שיפורי השימושיות של יוזמת השימושיות.
-באפשרותכם לבטל את הרשמתכם באמצעות לחיצה על הכפתור "{{int:optin-submit-out}}" בתחתית הדף.
-
-× ×¨×¦×” לדעת מה אתם חושבים על הממשק החדש, לכן × ×¢×¨×™×š זאת אם תמלאו את הסקר ×”××•×¤×¦×™×•× ×œ×™ שלהלן ×œ×¤× ×™ לחיצה על הכפתור "{{int:optin-submit-out}}".',
-	'optin-survey-question-whyoptout' => 'למה אתם מבטלים את הרשמתכם לממשק זה?',
-	'optin-survey-answer-whyoptout-hard' => 'היה קשה מדי לשימוש.',
+	'optin-survey-intro' => "תודה לכם על ×©× ×™×¡×™×ª× את גרסת הבטא.
+×× ×• רוצים לדעת מה אתם חושבים על הממשק החדש ×©×œ× ×•, לכן × ×¢×¨×™×š זאת אם תמלאו את הסקר ×”××•×¤×¦×™×•× ×œ×™ שלהלן ×œ×¤× ×™ שתלחצו על הכפתור \"[[#leave|{{int:optin-submit-out}}]]\".",
+	'optin-survey-question-likedislike' => 'מה אהבתם בגרסת הבטא? מה לא אהבתם בגרסת הבטא?',
+	'optin-survey-question-whyoptout' => 'למה אתם עוזבים את גרסת הבטא? (×× × בחרו את כל האפשרויות המתאימות.)',
+	'optin-survey-answer-whyoptout-hard' => 'הוא היה קשה מדי לשימוש.',
 	'optin-survey-answer-whyoptout-didntwork' => 'הוא לא פעל כפי שצריך.',
 	'optin-survey-answer-whyoptout-notpredictable' => 'האתר פעל באופן בלתי צפוי.',
 	'optin-survey-answer-whyoptout-didntlike-look' => 'לא אהבתי את איך שהוא × ×¨××”.',
 	'optin-survey-answer-whyoptout-didntlike-layout' => 'לא אהבתי את הפריסה ×•×”×œ×©×•× ×™×•×ª החדשים.',
 	'optin-survey-answer-whyoptout-didntlike-toolbar' => 'לא אהבתי את סרגל הכלים החדש.',
 	'optin-survey-answer-whyoptout-other' => 'סיבה אחרת:',
+	'optin-survey-question-explain' => '×× × הסבירו או פרטו את תשובתכם לעיל:',
+	'optin-survey-question-techfail' => 'האם אירעו תקלות ×˜×›× ×™×•×ª כלשהן בעת השימוש בגרסת הבטא?',
 	'optin-survey-question-techfail-ifyes' => 'אם כן, ×× × פרטו או הסבירו:',
 	'optin-survey-question-usedtoolbar' => 'האם השתמשתם בסרגל הכלים החדש המתרחב החדש כדי לערוך דף?',
-	'optin-survey-question-feedback' => '×× × העבירו ×œ× ×• משוב:',
+	'optin-survey-question-usedtoolbar-ifyes' => 'אם כן, מה אהבתם לגביו? מה לא אהבתם לגביו?',
+	'optin-survey-question-usedtoolbar-ifno' => 'אם לא, למה לא? האם תשתמשו בו בעתיד? ×× × הסבירו.',
+	'optin-survey-question-different' => 'מה ×™×›×•×œ× ×• לעשות אחרת כדי שתמשיכו להשתמש בגרסת הבטא?',
+	'optin-survey-question-feedback' => '×× × כתבו ×œ× ×• את כל ההערות האחרות, התהיות או המחשבות שיש לכם ×‘×©×‘×™×œ× ×• - כל משוב הוא שימושי:',
 	'optin-survey-question-browser' => 'באיזה דפדפן אתם משתמשים?',
 	'optin-survey-answer-browser-other' => 'דפדפן אחר:',
 	'optin-survey-question-os' => 'באיזו מערכת הפעלה אתם משתמשים?',
 	'optin-survey-answer-os-other' => 'מערכת הפעלה אחרת:',
 	'optin-survey-question-res' => 'מהי רזולוציית המסך שלכם?',
+	'optin-survey-question-changes' => 'אילו ×©×™× ×•×™×™× תרצו לראות בגרסת הבטא בעתיד (×× × בחרו את כל האפשרויות המתאימות)?',
+	'optin-survey-answer-changes-nav' => 'הפיכת ×”× ×™×•×•×˜ הכולל באתר לקל יותר לשימוש.',
+	'optin-survey-answer-changes-edittools' => 'הרחבת ושיפור כלי העריכה.',
 	'optin-survey-answer-changes-upload' => 'שיפור התוכן והעלאות המדיה.',
 	'optin-survey-answer-changes-richtext' => 'פיתוח כלי עריכה הדומים לעורכי טקסט עשיר.',
 	'optin-survey-answer-changes-lookfeel' => 'עדכון "המראה והתחושה" של האתר.',
+	'optin-survey-answer-changes-predictability' => 'שיפור אפשרויות החיזוי של הביצועים.',
+	'optin-survey-answer-changes-custom' => 'הוספת אפשרויות רבות יותר להתאמה אישית.',
 	'optin-survey-answer-changes-other' => 'אחר:',
+	'optin-improvements' => "== מה השתפר? ==
+[[File:UsabilityNavigation.png|left|link=]]
+;× ×™×•×•×˜ משופר
+מערכת ×”× ×™×•×•×˜ החדשה מקלה עליכם לראות איפה אתם ומה אתם עושים, וגם לאן אתם יכולים להגיע ואיך לעשות זאת. כאשר תיבת החיפוש ממוקמת ×‘×¤×™× ×” השמאלית ×”×¢×œ×™×•× ×”, קל יותר למצוא את אפשרות החיפוש והשימוש בה מהיר יותר.
+<div style=\"clear:both;\"></div>
+
+[[File:UsabilityToolbar.png|left|link=]]
+;שיפורים בסרגל העריכה
+סמלים חדשים ומשופרים מבהירים את הפעולה שמבצע כל כלי עריכה. חלקים מתרחבים ×ž×§×˜×™× ×™× את הבלגן אך מאפשרים לשמור את הכלים שמשתמשים בהם פחות במרחק לחיצה אחת בלבד.
+חלק העזרה מאפשר גישה מהירה לתיעוד רוב השימושים ×”× ×¤×•×¦×™× של תחביר ויקי.
+<div style=\"clear:both;\"></div>
+== איך להצטרף ==
+כדי ללמוד עוד על המיזם או כדי להצטרף אליו, ×× × בקרו ב[http://usability.wikimedia.org אתר הוויקי של יוזמת השימושיות]. שם תוכלו למצוא את כל המידע על ×”×ž×¢× ×§, המחקר, העיצוב והפיתוח, ושחרורי הגרסאות ×©×œ× ×•. כדי לשאול שאלות או להשאיר משוב כללי, ×× × השתמשו ב[http://usability.wikimedia.org/wiki/Talk:Prototype דף השיחה על אב הטיפוס] ×©×œ× ×•. כדי לדון ×‘× ×•×©××™× מסוימים, ×× × השתמשו בדפי השיחה המתאימים. אם אתם מוצאים באגים, ×× × השאירו את הערותיכם ב[http://usability.wikimedia.org/wiki/Talk:Releases/Acai דף השיחה של הגרסה Acai] או ב[https://bugzilla.wikimedia.org באגזילה].
+
+תודה, ×•×× ×—× ×• מקווים לשמוע מכם!",
 );
 
+/** Hindi (हिन्दी)
+ * @author आलोक
+ */
+$messages['hi'] = array(
+	'optin-accept-short' => 'चलो à¤•à¤°à¤¤à¥‡ हैं!',
+	'optin-deny-short' => 'नहीं, शुक्रिया',
+	'optin-survey-yes' => 'हाँ',
+	'optin-survey-no' => 'नहीं',
+	'optin-survey-question-browser' => 'आप कौन से विचरक का इस्तेमाल करते हैं?',
+	'optin-survey-answer-browser-other' => 'अन्य विचरक।',
+	'optin-survey-question-os' => 'आपक कौन सी प्रचालन प्रणाली का इस्तेमाल करते हैं?',
+	'optin-survey-answer-os-other' => 'अन्य प्रचालन प्रणाली:',
+);
+
 /** Croatian (Hrvatski)
  * @author Suradnik13
  */
@@ -1997,7 +2077,7 @@
 	'optin-submit-feedback' => 'Visszajelzés küldése',
 	'optin-survey-yes' => 'Igen',
 	'optin-survey-no' => 'Nem',
-	'optin-survey-answer-whyoptout-didntlike-look' => 'Nem tetszik ahogy kinéz.',
+	'optin-survey-answer-whyoptout-didntlike-look' => 'Nem tetszik, ahogy kinéz.',
 	'optin-survey-answer-whyoptout-didntlike-layout' => 'Nem tetszenek az új fülek és az elrendezés.',
 	'optin-survey-answer-whyoptout-didntlike-toolbar' => 'Nem tetszik az új szerkesztő-eszköztár.',
 	'optin-survey-answer-whyoptout-other' => 'Más indok:',
@@ -2007,7 +2087,7 @@
 	'optin-improvements' => '== Mit fejlesztettünk? ==
 [[File:UsabilityNavigation.png|left|link=]]
 ;Fejlettebb navigáció
-Az új navigációs rendszer könnyebbé teszi, hogy lásd, hol vagy és mit csinálsz éppen, továbbá azt is, hogy hová mehetsz továb, és hogy hogyan juthatsz el oda. A keresőmező jobb felső sarokba való áthelyezésével könnyebbé válik a keresés.
+Az új navigációs rendszer könnyebbé teszi, hogy lásd, hol vagy és mit csinálsz éppen, továbbá azt is, hogy hová mehetsz tovább, és hogy hogyan juthatsz el oda. A keresőmező jobb felső sarokba való áthelyezésével könnyebbé válik a keresés.
 <div style="clear:both;"></div>
 
 [[File:UsabilityToolbar.png|left|link=]]
@@ -2081,7 +2161,7 @@
 	'optin-survey-answer-changes-nav' => 'Rende le navigation general del sito plus facile a usar.',
 	'optin-survey-answer-changes-edittools' => 'Augmenta e meliora le instrumentos de modification.',
 	'optin-survey-answer-changes-upload' => 'Meliora le cargamento de contento e multimedia.',
-	'optin-survey-answer-changes-richtext' => 'Disveloppa instrumentos de modification similar al editores de texto inricchite.',
+	'optin-survey-answer-changes-richtext' => 'Disveloppar instrumentos de modification similar al editores de texto inricchite.',
 	'optin-survey-answer-changes-lookfeel' => 'Renova le apparentia general del sito.',
 	'optin-survey-answer-changes-predictability' => 'Meliorar le previsibilitate del prestationes.',
 	'optin-survey-answer-changes-custom' => 'Permitter un personalisation plus ample al usator.',
@@ -2119,7 +2199,7 @@
 	'optin-needlogin' => 'Anda harus [$1 masuk log] untuk mencoba Beta.',
 	'optin-intro' => 'Proyek Inisiatif Kebergunaan Wikipedia berusaha untuk mengembangkan kegunaan dari Wikipedia. Apakah Anda ingin mencoba Beta?',
 	'optin-feedback-intro' => 'Terima kasih telah mencoba Beta.
-Kami ingin tahu apa pendapat Anda tentang antarmuka baru kami, sehingga kami sangat menghargai jika Anda mengisi survei opsional di bawah ini .',
+Kami ingin tahu apa pendapat Anda tentang antarmuka baru kami, sehingga kami sangat menghargai jika Anda mengisi jajak pendapat manasuka di bawah ini .',
 	'optin-feedback-back' => 'Jika Anda tidak ingin mengisi survei, Anda dapat kembali ke $1.',
 	'optin-success-in' => 'Anda saat ini sedang mencoba Beta.
 Anda dapat keluar kapan saja dengan menekan pranala "{{int:optin-submit-out}}" di bagian atas halaman.',
@@ -2202,8 +2282,8 @@
  * @author Stefano-c
  */
 $messages['it'] = array(
-	'optin' => 'Adesione al Progetto usabilità ',
-	'optin-desc' => 'Consente agli utenti di provare Beta, gli ultimi miglioramenti del Progetto usabilità .',
+	'optin' => 'Adesione al progetto usabilità ',
+	'optin-desc' => 'Consente agli utenti di provare la beta, gli ultimi miglioramenti del progetto usabilità .',
 	'optin-title-optedout' => 'Prova la Beta',
 	'optin-title-optedin' => 'Lascia Beta',
 	'optin-title-justoptedin' => 'Benvenuto in Beta',
@@ -2211,7 +2291,7 @@
 	'optin-title-feedback' => 'Feedback della Beta',
 	'optin-needlogin' => "È necessario [$1 effettuare l'accesso] per provare Beta",
 	'optin-intro' => "Il progetto usabilità di Wikipedia sta lavorando intensamente per migliorare l'usabilità di Wikipedia.
-Si desidera provare Beta?",
+Vuoi provare la nostra beta?",
 	'optin-feedback-intro' => 'Ti ringraziamo per aver provato la Beta.
 Vorremmo sapere cosa ne pensi della nostra nuova interfaccia, quindi apprezzeremmo se compilassi il sondaggio facoltativo qui sotto.',
 	'optin-feedback-back' => 'Se non si desidera compilare il sondaggio, si può tornare a $1.',
@@ -2274,7 +2354,7 @@
 Le icone nuove e migliorate rendono più chiare le azioni che ciascuno strumento esegue. Le sezioni espandibili riducono l\'ingombro mantenendo gli strumenti usati di rado a un clic di distanza. La sezione di aiuto fornisce un rapido accesso a un riferimento per gli usi comuni della sintassi wiki.
 <div style="clear:both;"></div>
 == Come aiutare ==
-Per saperne di più sul progetto o aiutare, visita il [http://usability.wikimedia.org sito del Progetto usabilità ]. Lì potrai trovare informazioni sulla nostra sovvenzione, ricerca, progettazione e sviluppo e nuove versioni. Per porre domande o lasciare un commento generale, usa la nostra [http://usability.wikimedia.org/wiki/Talk:Prototype pagina di discussione sui prototipi]. Per discutere di specifici argomenti, usa le pagine di discussione relative. Se trovi degli errori, lascia un commento nella [http://usability.wikimedia.org/wiki/Talk:Releases/Acai pagina di discussione delle versioni di Acai] o usa [https://bugzilla.wikimedia.org Bugzilla].
+Per saperne di più sul progetto o aiutare, visita il [http://usability.wikimedia.org sito del progetto usabilità ]. Lì potrai trovare informazioni sulla nostra sovvenzione, ricerca, progettazione e sviluppo e nuove versioni. Per porre domande o lasciare un commento generale, usa la nostra [http://usability.wikimedia.org/wiki/Talk:Prototype pagina di discussione sui prototipi]. Per discutere di specifici argomenti, usa le pagine di discussione relative. Se trovi degli errori, lascia un commento nella [http://usability.wikimedia.org/wiki/Talk:Releases/Acai pagina di discussione delle versioni di Acai] o usa [https://bugzilla.wikimedia.org Bugzilla].
 
 Grazie; non vediamo l\'ora di sentirti.',
 );
@@ -2712,6 +2792,13 @@
 Mer freue uns, vun Üsch ze hüüre!',
 );
 
+/** Cornish (Kernowek)
+ * @author Kw-Moon
+ */
+$messages['kw'] = array(
+	'optin-title-optedout' => 'Previ Beta',
+);
+
 /** Latin (Latina)
  * @author Omnipaedista
  */
@@ -2737,7 +2824,7 @@
 	'optin-intro' => "D'Benotzerfrëndlechkeets-Initiative vu Wikipedia huet vill geschafft fir d'Benotzerfrëndlechkeet vu Wikipedia ze verbesseren.
 Wëllt Dir Beta ausprobéieren?",
 	'optin-feedback-intro' => 'Merci datt Dir Beta ausprobéiert hutt.
-Mir wëlle wëssen wat Dir vun dem neien Interface halt, dofir wiere mir frou wann Dir bei der fräiwëlleger Ëmfro hei ënnedrënner matmaache géift.',
+Mir wëlle wësse wat Dir vun dem neien Interface halt, dofir wiere mir frou wann Dir bei der fräiwëlleger Ëmfro hei ënnedrënner matmaache géift.',
 	'optin-feedback-back' => "Wann Dir d'Ëmfro net ausfëlle wëllt, da kënnt dir op $1 zréckgoen.",
 	'optin-success-in' => 'Dir probéiert elo Beta aus.
 Dir kënnt dës zu jidder Zäit nees ausschalten andeem datt Dir op de Link  "{{int:optin-leave}}"  uewen um Ecran klickt.',
@@ -2757,7 +2844,7 @@
 	'optin-survey-intro' => 'Merci datt Dir Beta ausprobéiert.
 Mir wiere frou fir ze wëssen wat Dir vun deem neien Interface denkt, dofir wiere mir frou wann Dir déi fräiwëlleg Ëmfro hei ënnendrënner géift ausfëllen ier Dir op "[[#leave|{{int:optin-submit-out}}]]" klickt.',
 	'optin-survey-question-likedislike' => 'Wat hutt dir bäi Beta gutt finnt? Wat huet Iech u Beta net gefall?',
-	'optin-survey-question-whyoptout' => 'Firwat Verloost Dir dës Beta? (wielt w.e.g. alles aus wat zoutrëfft)',
+	'optin-survey-question-whyoptout' => 'Firwat verloost Dir dës Beta? (wielt w.e.g. alles aus wat zoutrëfft)',
 	'optin-survey-answer-whyoptout-hard' => 'Et war ze komplizéiert fir ze benotzen.',
 	'optin-survey-answer-whyoptout-didntwork' => 'Et huet net richteg fonctionnéiert.',
 	'optin-survey-answer-whyoptout-notpredictable' => 'Et huet net esou fonctionnéiert wéi virgesinn.',
@@ -2951,18 +3038,59 @@
 
 /** Malayalam (മലയാളം)
  * @author Junaidpv
+ * @author Praveenp
  * @author Sadik Khalid
  */
 $messages['ml'] = array(
+	'optin-title-optedout' => 'ബീറ്റ പരീക്ഷിക്കൂ',
+	'optin-title-optedin' => 'ബീറ്റ ഉപേക്ഷിക്കൂ',
+	'optin-title-justoptedin' => 'ബീറ്റയിലേയ്ക്ക് സ്വാഗതം',
+	'optin-title-justoptedout' => 'ബീറ്റ പരീക്ഷിച്ചു നോക്കുന്നതിനു നന്ദി',
+	'optin-title-feedback' => 'ബീറ്റയെ കുറിച്ചുള്ള അഭിപ്രായം',
+	'optin-needlogin' => 'ബീറ്റ പരീക്ഷിക്കാൻ താങ്കൾ [$1 ലോഗിൻ] ചെയ്യേണ്ടതാണ്.',
+	'optin-feedback-intro' => 'ബീറ്റ പരീക്ഷിക്കുന്നതിനു നന്ദി.
+പുതിയ ദൃശ്യരൂപത്തെക്കുറിച്ച് താങ്കളെന്താണ് കരുതുന്നതെന്നറിയാൻ ഞങ്ങളാഗ്രഹിക്കുന്നു, അതുകൊണ്ട് ദയവായി താഴെ കൊടുത്തിരിക്കുന്ന സർവേയിൽ പങ്കെടുക്കാൻ താത്പര്യപ്പെടുന്നു.',
+	'optin-feedback-back' => 'താങ്കൾക്ക് സർവേയിൽ പങ്കെടുക്കേണ്ടയെങ്കിൽ, $1-ലേയ്ക്ക് തിരിച്ചു പോകാവുന്നതാണ്.',
+	'optin-success-in' => 'താങ്കൾ ഇപ്പോൾ ബീറ്റ പരീക്ഷിക്കുന്നു.
+താളിന്റെ മുകളിലായി കാണുന്ന "{{int:optin-leave}}" എന്ന കണ്ണി ഞെക്കി താങ്കൾക്ക് ഏതൊരു സമയത്തും ഇതൊഴിവാക്കാവുന്നതാണ്.',
+	'optin-leave-cancel' => 'താങ്കൾ ബീറ്റ തുടർന്നും ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, $1-ലേയ്ക്ക് തിരിച്ചു പോകാവുന്നതാണ്.',
+	'optin-success-out' => 'താങ്കൾ വിജയകരമായി ബീറ്റയിൽ നിന്ന് പുറത്തുകടന്നിരിക്കുന്നു.
+താളിന്റെ മുകളിലായി കൊടുത്തിരിക്കുന്ന "{{int:optin-try}}" എന്ന കണ്ണി ഞെക്കി താങ്കൾക്ക് ഏതൊരു സമയത്തും ബീറ്റ പരീക്ഷിക്കാവുന്നതാണ്.',
+	'optin-success-feedback' => 'താങ്കളുടെ അഭിപ്രായം അറിയിച്ചതിനു നന്ദി!',
+	'optin-accept-short' => 'അങ്ങിനെയാട്ടെ!!',
+	'optin-accept-long' => 'ബീറ്റ പരീക്ഷിക്കുക',
+	'optin-accept-long-anon' => 'ലോഗിൻ ചെയ്തശേഷം ബീറ്റ പരീക്ഷിക്കുക',
 	'optin-deny-short' => 'വേണ്ട, നന്ദി',
+	'optin-deny-long' => 'പഴയ താളിലേയ്ക്ക് തിരിച്ചു പോവുക',
+	'optin-submit-out' => 'ബീറ്റ ഉപേക്ഷിക്കുക',
+	'optin-submit-feedback' => 'അഭിപ്രായം അറിയിക്കുക',
 	'optin-survey-yes' => 'ഉണ്ട്',
 	'optin-survey-no' => 'ഇല്ല',
+	'optin-survey-intro' => 'ബീറ്റ പരീക്ഷിക്കുന്നതിനു നന്ദി.
+പുതിയ ദൃശ്യരൂപത്തെ കുറിച്ച് താങ്കൾ എന്താണു വിചാരിക്കുന്നതെന്നറിയാൻ ഞങ്ങൾക്കാഗ്രഹമുണ്ട്, "[[#leave|{{int:optin-submit-out}}]]" എന്നതു ഞെക്കുന്നതിനു മുമ്പ് താങ്കൾ താഴെ കൊടുത്തിരിക്കുന്ന സർവേയിൽ പങ്കെടുക്കാൻ താത്പര്യപ്പെടുന്നു.',
+	'optin-survey-question-likedislike' => 'ബീറ്റയിൽ താങ്കൾക്ക് എന്തൊക്കെ ഇഷ്ടപ്പെട്ടു? എന്തൊക്കെ ഇഷ്ടപ്പെട്ടില്ല?',
+	'optin-survey-question-whyoptout' => 'താങ്കൾ എന്തുകൊണ്ട് ബീറ്റ ഉപേക്ഷിക്കുന്നു? (കാരണമാകുന്ന എല്ലാം ദയവായി തിരഞ്ഞെടുക്കുക.)',
+	'optin-survey-answer-whyoptout-hard' => 'ഉപയോഗിക്കാൻ ഏറെ ബുദ്ധിമുട്ടുള്ള ഒന്നാണിത്.',
+	'optin-survey-answer-whyoptout-didntwork' => 'ഇത് ശരിയായി പ്രവർത്തിക്കുന്നില്ല.',
+	'optin-survey-answer-whyoptout-notpredictable' => 'ഇതെങ്ങിനെ പ്രവർത്തിക്കുമെന്നു പറയാൻ പറ്റുന്നില്ല.',
+	'optin-survey-answer-whyoptout-didntlike-look' => 'ഇത് കാണപ്പെടുന്ന രൂപം എനിക്കിഷ്ടപ്പെടുന്നില്ല.',
+	'optin-survey-answer-whyoptout-didntlike-layout' => 'പുതിയ റ്റാബുകളും ദൃശ്യവിന്യാസവും എനിക്കിഷ്ടപ്പെട്ടില്ല.',
+	'optin-survey-answer-whyoptout-didntlike-toolbar' => 'പുതിയ റ്റൂൾബാർ എനിക്കിഷ്ടപ്പെട്ടില്ല.',
 	'optin-survey-answer-whyoptout-other' => 'മറ്റു കാരണം:',
+	'optin-survey-question-explain' => 'താങ്കൾ മുകളിൽ നൽകിയ ഉത്തരം ദയവായി വിശദീകരിക്കുകയോ à´µà´¿à´•à´¸à´¿à´ªàµà´ªà´¿à´•àµà´•àµà´•à´¯àµ‹ à´šàµ†à´¯àµà´¯àµà´•:',
 	'optin-survey-question-techfail' => 'ബീറ്റ ഉപയോഗിക്കുമ്പോള്‍ ഏന്തെങ്കിലും സാങ്കേതിക തകരാറുകള്‍ താങ്കള്‍ക്ക് അനുഭവപ്പെട്ടിട്ടുണ്ടോ?',
+	'optin-survey-question-techfail-ifyes' => 'അതെ എങ്കിൽ, ദയവായി വികസിപ്പിക്കുക അല്ലങ്കിൽ വിശദീകരിക്കുക:',
 	'optin-survey-question-usedtoolbar' => 'ഒരു താള്‍ തിരുത്തുവാന്‍ വേണ്ടി വിപുലീകരിക്കാവുന്ന ടൂള്‍ബാര്‍ താങ്കള്‍ ഉപയോഗിച്ചിട്ടുണ്ടോ?',
+	'optin-survey-question-usedtoolbar-ifyes' => 'അതെ എങ്കിൽ, താങ്കൾക്ക് ഇതിൽ എന്താണ് ഇഷ്ടപ്പെട്ടത്? ഇതിൽ എന്താണ് ഇഷ്ടപ്പെടാതെ പോയത്?',
+	'optin-survey-question-usedtoolbar-ifno' => 'ഇല്ല എങ്കിൽ, എന്തുകൊണ്ട് ഇല്ല? ഭാവിയിലോ? ദയവായി വിശദീകരിക്കുക.',
+	'optin-survey-question-different' => 'താങ്കളെ ബീറ്റയിൽ തന്നെ പിടിച്ചു നിർത്താൻ എന്തെന്തു മാറ്റങ്ങളായിരുന്നു ഞങ്ങൾ വരുത്തേണ്ടിയിരുന്നത്?',
+	'optin-survey-question-feedback' => 'ദയവായി താങ്കളുടെ കുറിപ്പുകളും, ഉത്കണ്ഠകളും, ചിന്തകളും ഞങ്ങളെ അറിയിക്കുക - എല്ലാ അഭിപ്രായങ്ങളും ഉപകാരപ്രദങ്ങളാണ്:',
 	'optin-survey-question-browser' => 'ഏതു ബ്രൌസറാണ് താങ്കള്‍ ഉപയോഗിക്കുന്നത്?',
+	'optin-survey-answer-browser-other' => 'മറ്റ് ബ്രൗസർ:',
 	'optin-survey-question-os' => 'ഏത് ഓപറേറ്റിങ്ങ് സിസ്റ്റമാണ് താങ്കള്‍ ഉപയോഗിക്കുന്നത്?',
+	'optin-survey-answer-os-other' => 'മറ്റ് ഓപറേറ്റിങ് സിസ്റ്റം:',
 	'optin-survey-question-res' => 'താങ്കളുടെ സ്ക്രീന്‍ റെസ‌ല്യൂഷന്‍ എന്താണ്?',
+	'optin-survey-question-changes' => 'ഭാവിയിൽ ബീറ്റയിൽ എന്തു മാറ്റങ്ങൾ ഉണ്ടായിരിക്കാൻ താങ്കൾ ആഗ്രഹിക്കുന്നു (ബാധകമാകുന്ന എല്ലാം തിരഞ്ഞെടുക്കുക)?',
 );
 
 /** Mongolian (Монгол)
@@ -3339,17 +3467,31 @@
 	'optin-title-justoptedout' => 'Takk for at du prøver betautgåva',
 	'optin-title-feedback' => 'Tilbakemelding om betautgåva',
 	'optin-needlogin' => 'Du må [$1 logga inn] for å prøve betautgåva.',
+	'optin-success-feedback' => 'Takk for di tilbakemelding!',
+	'optin-accept-short' => 'Lat oss gjera det!',
+	'optin-accept-long-anon' => 'Logg inn og prøv Beta',
+	'optin-deny-short' => 'Nei takk',
+	'optin-deny-long' => 'Gå attende til førre sida',
+	'optin-submit-out' => 'GÃ¥ ut av Beta',
+	'optin-submit-feedback' => 'Gje tilbakemelding',
+	'optin-survey-yes' => 'Ja',
 	'optin-survey-no' => 'Nei',
 	'optin-survey-question-whyoptout' => 'Kvifor går du ut av Beta! (Ver venleg å vél alle aktuelle grunnar.)',
 	'optin-survey-answer-whyoptout-hard' => 'Det var for vanskeleg å bruka.',
 	'optin-survey-answer-whyoptout-didntwork' => 'Det fungerte ikkje på rett vis.',
+	'optin-survey-answer-whyoptout-didntlike-look' => 'Eg likte ikkje utsjånaden.',
 	'optin-survey-answer-whyoptout-other' => 'Anna årsak:',
+	'optin-survey-question-different' => "Kva kunne me ha gjort annleis for at du skulle ha halda fram med å bruka denne betaversjonen ''(tilbakemelding på engelsk)''?",
 	'optin-survey-question-feedback' => 'Ver venleg og send ei tilbakemelding:',
 	'optin-survey-question-browser' => 'Kva for ein nettlesar nyttar du?',
 	'optin-survey-answer-browser-other' => 'Annan nettlesar:',
 	'optin-survey-question-os' => 'Kva for operativsystem nyttar du?',
 	'optin-survey-answer-os-other' => 'Anna operativsystem:',
 	'optin-survey-question-res' => 'Kva er oppløysinga på skjermen din?',
+	'optin-survey-answer-changes-nav' => 'Gjera det lettare å navigera på denne nettsida.',
+	'optin-survey-answer-changes-upload' => 'Forbetra systemet for opplasting av innhald og media.',
+	'optin-survey-answer-changes-lookfeel' => 'Oppdatera utsjånad og presentasjon av nettsidene.',
+	'optin-survey-answer-changes-other' => 'Andre:',
 );
 
 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
@@ -3646,6 +3788,11 @@
  * @author Ahmed-Najib-Biabani-Ibrahimkhel
  */
 $messages['ps'] = array(
+	'optin-title-optedout' => 'آزمېښتي بڼه کارول',
+	'optin-accept-short' => 'راځه چې وې آزمويو!',
+	'optin-deny-short' => 'نه مننه',
+	'optin-survey-yes' => 'هو',
+	'optin-survey-no' => 'نه',
 	'optin-survey-answer-whyoptout-other' => 'بل سبب:',
 	'optin-survey-question-browser' => 'تاسې کوم کتنمل کاروۍ؟',
 	'optin-survey-answer-browser-other' => 'بل کتنمل:',
@@ -3994,12 +4141,16 @@
  * @author HalanTul
  */
 $messages['sah'] = array(
+	'optin' => 'Табыгас Ситиһиитигэр кыттыы',
+	'optin-desc' => 'Бета-барылы Ñ‚уһанары Ñ…ааччыйар, «Beta» — Табыгаһы Ð¡Ð¸Ñ‚иһии иһинэн оҥоһуллубут бүтэһик тупсарыы.',
 	'optin-title-optedout' => 'Beta-ны Ñ‚ургутуу',
 	'optin-title-optedin' => 'Beta-ттан тахсыы',
 	'optin-title-justoptedin' => 'Beta-ҕа нөрүөн нөргүй!',
 	'optin-title-justoptedout' => 'Beta-ны Ñ‚ургутан көрбүккэр махтал',
 	'optin-title-feedback' => 'Сыанабылы Ñ‹Ñ‹Ñ‚арга',
 	'optin-needlogin' => 'Beta тургутарга [$1 ааккын билиһиннэриэххин] наада.',
+	'optin-intro' => 'Табыгаһы Ð¡Ð¸Ñ‚иһии иһинэн оҥоһуллубут үлэ Бикипиэдьийэни туһаныы Ñ‡ÑÐ¿Ñ‡ÑÐºÐ¸ уонна табыгастаах буоларыгар туһаайыллыбыта.
+Beta-ны Ð±Ð¾Ñ€ÑƒÐ¾Ð±Ð°Ð»Ð°Ð°Ñ€Ñ‹ Ð³Ñ‹Ð½Ð°Ò•Ñ‹Ð½ дуо?',
 	'optin-feedback-intro' => 'Beta-ны Ñ‚уттубуккар махтанабыт.
 Саҥа интерфейс туһунан туох санаалааххын билиэхпитин баҕарабыт, онон аллара баар ыйытыыларга хоруйдууруҥ буоллар наһаа үөрүө этибит.',
 	'optin-feedback-back' => 'Ыйытыкка кыттыаххын баҕарбат буоллаххына, төннүөххүн сөп $1.',
@@ -4728,6 +4879,21 @@
 Grassie e sperémo che ne riva presto qualche to messagio!',
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'optin-title-optedout' => 'Kodvi Betad',
+	'optin-title-optedin' => 'Lähtta Betaspäi',
+	'optin-title-justoptedin' => 'Tulgat tervhin Betaha!',
+	'optin-accept-short' => 'Tehkam se!',
+	'optin-survey-yes' => 'Ka',
+	'optin-survey-no' => 'Ei',
+	'optin-survey-answer-whyoptout-other' => 'Toine sü:',
+	'optin-survey-answer-browser-other' => 'Toine kaclim:',
+	'optin-survey-answer-changes-other' => 'Toine:',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Minh Nguyen
  * @author Vinhtantran
Index: NavigableTOC/NavigableTOC.i18n.php
===================================================================
--- NavigableTOC/NavigableTOC.i18n.php	(revision 56989)
+++ NavigableTOC/NavigableTOC.i18n.php	(working copy)
@@ -17,6 +17,13 @@
 	'navigabletoc-preference' => 'Enable navigable table of contents',
 );
 
+/** Message documentation (Message documentation)
+ * @author Umherirrender
+ */
+$messages['qqq'] = array(
+	'navigabletoc-desc' => '{{desc}}',
+);
+
 /** Afrikaans (Afrikaans)
  * @author Naudefj
  */
@@ -38,6 +45,7 @@
 $messages['be-tarask'] = array(
 	'navigabletoc' => 'Табліца зьместу з навігацыяй',
 	'navigabletoc-desc' => 'Дадае табліцу зьместу для рэдагаваньня формы ÑÐºÐ°Ñ пракручвае тэкставае поле пад час выбару сэкцыі',
+	'navigabletoc-preference' => 'Дазволіць навігацыйныя табліцы Ð·ÑŒÐ¼ÐµÑÑ‚у',
 );
 
 /** Breton (Brezhoneg)
@@ -46,6 +54,7 @@
 $messages['br'] = array(
 	'navigabletoc' => 'Taolenn verdeeus',
 	'navigabletoc-desc' => "Ouzhpennañ a ra taolenn an titloù d'ar furmskrid kemmañ a zibun an destenn pa vez kliket war ur rann.",
+	'navigabletoc-preference' => 'Gweredekaat an daolenn verdeus an danvezioù',
 );
 
 /** Bosnian (Bosanski)
@@ -54,6 +63,7 @@
 $messages['bs'] = array(
 	'navigabletoc' => 'Sadržaj sa navigacijom',
 	'navigabletoc-desc' => 'Dodaje sadržaj u obrazac za uređivanje koji pomjera kutiju tekst kada se klikne na sekciju',
+	'navigabletoc-preference' => 'Omogući navigacijski sadržaj',
 );
 
 /** Czech (ÄŒesky)
@@ -65,6 +75,14 @@
 	'navigabletoc-desc' => 'Přidává na editační stránku obsah, pomocí kterého se lze pohybovat v editovaném textu',
 );
 
+/** Welsh (Cymraeg)
+ * @author Lloffiwr
+ */
+$messages['cy'] = array(
+	'navigabletoc' => 'Taflen gynnwys mordwyol',
+	'navigabletoc-desc' => "Yn ychwanegu taflen gynnwys wrth olygu, sy'n rholio'r blwch golygu wrth glicio ar bennawd yn y daflen",
+);
+
 /** Danish (Dansk)
  * @author Byrial
  */
@@ -87,13 +105,16 @@
 $messages['dsb'] = array(
 	'navigabletoc' => 'Nawigěrujobny zapis wopśimjeśa',
 	'navigabletoc-desc' => 'Pśidawa zapis wopśimjeśa wobźěłowańskemu formularoju, kótaryž kula tekstowe pólo, gaž se na wótrězk kliknjo',
+	'navigabletoc-preference' => 'Nawigěrujobny zapis wopśimjeśa zmóžniś',
 );
 
 /** Greek (Ελληνικά)
+ * @author Omnipaedista
  * @author ZaDiak
  */
 $messages['el'] = array(
 	'navigabletoc' => 'Περιηγήσιμος πίνακας περιεχομένων',
+	'navigabletoc-desc' => 'Προσθέτει έναν πίνακα περιεχομένων στη φόρμα επεξεργασίας η οποία ξετυλίγει το κουτί κειμένου όταν γίνεται κλικ πάνω στο τμήμα',
 );
 
 /** Esperanto (Esperanto)
@@ -130,10 +151,12 @@
 
 /** French (Français)
  * @author IAlex
+ * @author PieRRoMaN
  */
 $messages['fr'] = array(
 	'navigabletoc' => 'Sommaire navigable',
 	'navigabletoc-desc' => 'Ajoute le sommaire au formulaire de modification qui défile le texte quand une section est cliquée',
+	'navigabletoc-preference' => 'Activer la table des matières navigable',
 );
 
 /** Galician (Galego)
@@ -142,6 +165,7 @@
 $messages['gl'] = array(
 	'navigabletoc' => 'Táboa de contidos navegable',
 	'navigabletoc-desc' => 'Engade unha táboa de contidos para editar o formulario que contrae o cadro de texto cando se preme nunha sección',
+	'navigabletoc-preference' => 'Activar a táboa de contidos navegable',
 );
 
 /** Swiss German (Alemannisch)
@@ -150,14 +174,16 @@
 $messages['gsw'] = array(
 	'navigabletoc' => 'Navigierbari Tabälle vum Inhalt',
 	'navigabletoc-desc' => 'Fiegt e Inhalts-Tabälle zue in s Bearbeitigsformat, wu ne Tekschtchaschte gscrollt wird, wänn e abschitt aaklickt wird.',
+	'navigabletoc-preference' => 'Navigierbari Inhaltstabälle megli mache',
 );
 
 /** Hebrew (עברית)
- * @author Rotemliss
+ * @author Rotem Liss
  */
 $messages['he'] = array(
 	'navigabletoc' => 'תוכן ×¢× ×™×™× ×™× עם אפשרות × ×™×•×•×˜',
 	'navigabletoc-desc' => 'הוספת תוכן ×¢× ×™×™× ×™× לדף העריכה, המאפשר לגלול את תיבת הטקסט בעת לחיצה על פסקה',
+	'navigabletoc-preference' => 'הפעלת תוכן ×¢× ×™×™× ×™× עם אפשרות × ×™×•×•×˜',
 );
 
 /** Upper Sorbian (Hornjoserbsce)
@@ -166,14 +192,17 @@
 $messages['hsb'] = array(
 	'navigabletoc' => 'Nawigěrujomny zapis wobsaha',
 	'navigabletoc-desc' => 'Přidawa zapis wobsaha wobdźěłowanskemu formularej, kotaryž tekstowe polo kula, hdyž so na wotrězk kliknje.',
+	'navigabletoc-preference' => 'Nawigěrujomny zapis wobsaha zmóžnić',
 );
 
 /** Hungarian (Magyar)
+ * @author Glanthor Reviol
  * @author Tgr
  */
 $messages['hu'] = array(
 	'navigabletoc' => 'Navigálható tartalomjegyzék',
 	'navigabletoc-desc' => 'Egy tartalomjegyzéket ad a szerkesztési űrlaphoz, amivel a szerkesztőablakban az egyes szakaszok elejére lehet ugrani',
+	'navigabletoc-preference' => 'Tartalomjegyzék megjelenítése szerkesztéskor',
 );
 
 /** Interlingua (Interlingua)
@@ -182,6 +211,7 @@
 $messages['ia'] = array(
 	'navigabletoc' => 'Tabula de contento navigabile',
 	'navigabletoc-desc' => 'Adde un tabula de contento al formulario de modification que face rolar le quadro de texto quando on clicca super un section',
+	'navigabletoc-preference' => 'Activar le tabula de contento navigabile',
 );
 
 /** Indonesian (Bahasa Indonesia)
@@ -189,7 +219,8 @@
  */
 $messages['id'] = array(
 	'navigabletoc' => 'Daftar isi yang dapat dinavigasi',
-	'navigabletoc-desc' => 'Menambahkan sebuah daftar isi pada formulir penyuntingan yang jika diklik dapat langsung menuju bagian yang dimaksud',
+	'navigabletoc-desc' => 'Menambahkan sebuah daftar isi pada formulir penyuntingan yang jika diklik dapat langsung menuju ke bagian yang dimaksud',
+	'navigabletoc-preference' => 'Daftar isi yang dapat dinavigasi',
 );
 
 /** Italian (Italiano)
@@ -202,10 +233,12 @@
 
 /** Japanese (日本語)
  * @author Fryed-peach
+ * @author Whym
  */
 $messages['ja'] = array(
-	'navigabletoc' => 'ナビゲーション可能な目次',
+	'navigabletoc' => '編集用目次',
 	'navigabletoc-desc' => 'ã‚¯ãƒªãƒƒã‚¯ã—ãŸéš›ã«ãƒ†ã‚­ã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã‚’ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã•ã›ã‚‹ç›®æ¬¡ã‚’ç·¨é›†ãƒ•ã‚©ãƒ¼ãƒ ã«åŠ ãˆã‚‹',
+	'navigabletoc-preference' => '編集用目次を有効化する',
 );
 
 /** Georgian (ქართული)
@@ -222,6 +255,7 @@
 $messages['ksh'] = array(
 	'navigabletoc' => 'Ennhaltsverzeichnes beim Ändere',
 	'navigabletoc-desc' => 'Määt e Ennhaltsverzeichnes op de Sigge zom Ändere, wat dat Feld zom Ändere metnemmp, wann mer op enem Afschnett sing Övverschreff kleck.',
+	'navigabletoc-preference' => 'Schalld e Enhaltsverzeischnes aan, woh mer dren eröm wandere kann',
 );
 
 /** Luxembourgish (Lëtzebuergesch)
@@ -231,6 +265,7 @@
 $messages['lb'] = array(
 	'navigabletoc' => 'Inhaltsverzeechnes fir ze navigéieren',
 	'navigabletoc-desc' => 'Setzt en Inhaltsverzeechnes op den Ännerungsformulaire derbäi, deen den Text scrollt, wann en Abschnitt ugeklickt gëtt',
+	'navigabletoc-preference' => 'Navigabelbart Inhaltsverzeechness aschalten',
 );
 
 /** Macedonian (Македонски)
@@ -256,6 +291,7 @@
 $messages['nl'] = array(
 	'navigabletoc' => 'Navigeerbare inhoudsopgave',
 	'navigabletoc-desc' => 'Voegt een inhoudsopgave toe aan het bewerkingsformulier waarmee het tekstvak verschoven kan worden als er op een kopje wordt geklikt',
+	'navigabletoc-preference' => 'Navigeerbare inhoudsopgave inschakelen',
 );
 
 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
@@ -271,6 +307,7 @@
 $messages['oc'] = array(
 	'navigabletoc' => 'Somari navigable',
 	'navigabletoc-desc' => 'Apond lo somari al formulari de modificacion que desfila lo tèxte quand una seccion es clicada',
+	'navigabletoc-preference' => "Activar l'ensenhador navigable",
 );
 
 /** Polish (Polski)
@@ -287,6 +324,7 @@
 $messages['pms'] = array(
 	'navigabletoc' => 'Tà ula dij contnù navigà bil',
 	'navigabletoc-desc' => "A gionta na tà ula dij contnù a la form ëd modìfica ch'a scor la casela quand che as clica na session",
+	'navigabletoc-preference' => 'Abìlita a scanucié la tà ula dij contnù',
 );
 
 /** Portuguese (Português)
@@ -318,6 +356,7 @@
 $messages['roa-tara'] = array(
 	'navigabletoc' => 'Taggele de le condenute navigabbile',
 	'navigabletoc-desc' => "Aggiunge 'na taggelle de condenute a 'a schermata de cangiamende ca face muvè 'a sckatole de teste  quanne 'na seziona è cazzate",
+	'navigabletoc-preference' => 'Abbilite le tabbele navigabbele de condenute',
 );
 
 /** Russian (Русский)
@@ -327,14 +366,23 @@
 $messages['ru'] = array(
 	'navigabletoc' => 'Оглавление с навигацией',
 	'navigabletoc-desc' => 'Добавляет на форму правки оглавление, прокручивающее текст в поле редактирования при выборе названия раздела',
+	'navigabletoc-preference' => 'Включить оглавление с возможностью навигации',
 );
 
+/** Yakut (Саха тыла)
+ * @author HalanTul
+ */
+$messages['sah'] = array(
+	'navigabletoc' => 'Иһинээҕитин навигациялаах тиһигэ',
+);
+
 /** Slovak (Slovenčina)
  * @author Helix84
  */
 $messages['sk'] = array(
 	'navigabletoc' => 'Navigovateľný Obsah',
 	'navigabletoc-desc' => 'Pridáva do formulára úprav Obsah, ktorý sa posunie na správne miesto po kliknutí na sekciu',
+	'navigabletoc-preference' => 'Povoliť obsah s odkazmi na časti',
 );
 
 /** Slovenian (Slovenščina)
@@ -362,11 +410,13 @@
 );
 
 /** Vietnamese (Tiếng Việt)
+ * @author Minh Nguyen
  * @author Vinhtantran
  */
 $messages['vi'] = array(
 	'navigabletoc' => 'Mục lục dễ duyệt tìm',
 	'navigabletoc-desc' => 'Thêm bảng mục lục và o khung sửa đổi để cuộn hộp văn bản khi nhấn và o một đề mục',
+	'navigabletoc-preference' => 'Sử dụng mục lục dễ duyệt tìm',
 );
 
 /** Yue (粵語)
Index: UsabilityInitiative.i18n.php
===================================================================
--- UsabilityInitiative.i18n.php	(revision 56989)
+++ UsabilityInitiative.i18n.php	(working copy)
@@ -16,6 +16,13 @@
 	'usabilityinitiative-desc' => 'Features developed by the Wikipedia Usability Initiative to enhance the usability of MediaWiki',
 );
 
+/** Message documentation (Message documentation)
+ * @author Umherirrender
+ */
+$messages['qqq'] = array(
+	'usabilityinitiative-desc' => '{{desc}}',
+);
+
 /** Afrikaans (Afrikaans)
  * @author Naudefj
  */
@@ -221,10 +228,11 @@
 
 /** Italian (Italiano)
  * @author Darth Kule
+ * @author Nemo bis
  */
 $messages['it'] = array(
-	'usabilityinitiative' => 'Iniziativa di usabilità ',
-	'usabilityinitiative-desc' => "Caratteristiche sviluppate dall'Iniziativa di usabilità di Wikipedia per migliorare l'usabilità di MediaWiki",
+	'usabilityinitiative' => 'Progetto usabilità ',
+	'usabilityinitiative-desc' => "Caratteristiche sviluppate dal progetto usabilità di Wikipedia per migliorare l'usabilità di MediaWiki",
 );
 
 /** Japanese (日本語)
@@ -265,7 +273,7 @@
  */
 $messages['lb'] = array(
 	'usabilityinitiative' => "Initiativ fir d'Benotzerfrëndlechkeet",
-	'usabilityinitiative-desc' => "Fonctinnalitéiten déi vun der Wikipedia Benotzerfrëndlechkeets-Initiative entwécklet goufe fir d'Benotzerfrëndleckeetvu MediWiki ze verbesseren",
+	'usabilityinitiative-desc' => "Fonctinnalitéiten déi vun der Wikipedia Benotzerfrëndlechkeets-Initiative entwéckelt goufe fir d'Benotzerfrëndleckeet vu MediaWiki ze verbesseren",
 );
 
 /** Lithuanian (Lietuvių)
@@ -373,6 +381,14 @@
 	'usabilityinitiative-desc' => 'Возможности движка MediaWiki, разработанные в рамках Инициативы ÑŽÐ·Ð°Ð±Ð¸Ð»Ð¸Ñ‚и Википедии и направленные на улучшение его удобства и простоты Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ',
 );
 
+/** Yakut (Саха тыла)
+ * @author HalanTul
+ */
+$messages['sah'] = array(
+	'usabilityinitiative' => 'Табыгас Ситиһиитэ',
+	'usabilityinitiative-desc' => 'Табыгас Ситиһиитин иһинэн эбиллибит MediaWiki движогун саҥа кыахтара; үлэ судургу уонна табыгастаах буоларыгар аналлаахтар.',
+);
+
 /** Slovak (Slovenčina)
  * @author Helix84
  */
@@ -422,6 +438,14 @@
 	'usabilityinitiative-desc' => "Carateristiche svilupà da l'Inissiativa par l'Usabilità de Wikipedia par mejorar l'usabilità de MediaWiki",
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'usabilityinitiative' => 'Kävutamižen Iniciativ',
+	'usabilityinitiative-desc' => 'MediaWikin likutimen voindad, kudambad sätihe Wikipedia Usability Initiative, miše paremboita MediaWikin rad.',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Vinhtantran
  */
Index: UsabilityInitiative.hooks.php
===================================================================
--- UsabilityInitiative.hooks.php	(revision 56989)
+++ UsabilityInitiative.hooks.php	(working copy)
@@ -18,7 +18,7 @@
 	private static $styleFiles = array(
 		'base_sets' => array(
 			'raw' => array(
-				array( 'src' => 'css/suggestions.css', 'version' => 5 ),
+				array( 'src' => 'css/suggestions.css', 'version' => 6 ),
 				array( 'src' => 'css/wikiEditor.css', 'version' => 4 ),
 				array( 'src' => 'css/wikiEditor.toolbar.css', 'version' => 5 ),
 				array( 'src' => 'css/wikiEditor.dialogs.css', 'version' => 1 ),
@@ -26,11 +26,11 @@
 				array( 'src' => 'css/vector/jquery-ui-1.7.2.css', 'version' => '1.7.2' ),
 			),
 			'combined' => array(
-				array( 'src' => 'css/combined.css', 'version' => 7 ),
+				array( 'src' => 'css/combined.css', 'version' => 8 ),
 				array( 'src' => 'css/vector/jquery-ui-1.7.2.css', 'version' => '1.7.2' ),
 			),
 			'minified' => array(
-				array( 'src' => 'css/combined.min.css', 'version' => 7 ),
+				array( 'src' => 'css/combined.min.css', 'version' => 8 ),
 				array( 'src' => 'css/vector/jquery-ui-1.7.2.css', 'version' => '1.7.2' ),
 			),
 		)
@@ -47,32 +47,37 @@
 				array( 'src' => 'js/js2/js2.js', 'version' => 3 ),
 			),
 			'combined' => array(
-				array( 'src' => 'js/js2.combined.js', 'version' => 5 ),
+				array( 'src' => 'js/js2.combined.js', 'version' => 6 ),
 			),
 			'minified' => array(
-				array( 'src' => 'js/js2.combined.min.js', 'version' => 5 ),
+				array( 'src' => 'js/js2.combined.min.js', 'version' => 6 ),
 			),
 		),
 		// Core functionality of extension
 		'base_sets' => array(
 			'raw' => array(
 				array( 'src' => 'js/plugins/jquery.async.js', 'version' => 3 ),
+				array( 'src' => 'js/plugins/jquery.autoEllipse.js', 'version' => 2 ),
 				array( 'src' => 'js/plugins/jquery.browser.js', 'version' => 3 ),
 				array( 'src' => 'js/plugins/jquery.cookie.js', 'version' => 3 ),
-				array( 'src' => 'js/plugins/jquery.namespaceSelect.js', 'version' => 0 ),
-				array( 'src' => 'js/plugins/jquery.suggestions.js', 'version' => 2 ),
-				array( 'src' => 'js/plugins/jquery.textSelection.js', 'version' => 9 ),
-				array( 'src' => 'js/plugins/jquery.wikiEditor.js', 'version' => 5 ),
+				array( 'src' => 'js/plugins/jquery.delayedBind.js', 'version' => 1 ),
+				array( 'src' => 'js/plugins/jquery.namespaceSelect.js', 'version' => 1 ),
+				array( 'src' => 'js/plugins/jquery.suggestions.js', 'version' => 4 ),
+				array( 'src' => 'js/plugins/jquery.textSelection.js', 'version' => 11 ),
+				array( 'src' => 'js/plugins/jquery.wikiEditor.js', 'version' => 6 ),
 				array( 'src' => 'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 3 ),
-				array( 'src' => 'js/plugins/jquery.wikiEditor.toc.js', 'version' => 6 ),
-				array( 'src' => 'js/js2/jquery-ui-1.7.2.js', 'version' => '1.7.2x' ),
+				array( 'src' => 'js/plugins/jquery.wikiEditor.toc.js', 'version' => 9 ),
+				// FIXME: jQuery UI doesn't belong here, should move to no_js2
+				// once we figure out how to do jQuery UI properly in JS2 
+				array( 'src' => 'js/js2/jquery-ui-1.7.2.js', 'version' => '1.7.2y' ),
 			),
 			'combined' => array(
-				array( 'src' => 'js/plugins.combined.js', 'version' => 23 ),
+				array( 'src' => 'js/plugins.combined.js', 'version' => 27 ),
 			),
 			'minified' => array(
-				array( 'src' => 'js/plugins.combined.min.js', 'version' => 23 ),
+				array( 'src' => 'js/plugins.combined.min.js', 'version' => 27 ),
 			),
 		),
 	);
Index: UserDailyContribs/UserDailyContribs.i18n.php
===================================================================
--- UserDailyContribs/UserDailyContribs.i18n.php	(revision 56354)
+++ UserDailyContribs/UserDailyContribs.i18n.php	(working copy)
@@ -16,9 +16,214 @@
 );
 
 /** Message documentation (Message documentation)
+ * @author Purodha
  * @author Raimond Spekking
  */
 $messages['qqq'] = array(
-	'userdailycontribs-desc' => '{{desc}}',
+	'userdailycontribs-desc' => '{{desc}}
+"user" is a plural here.',
 );
 
+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+ * @author Jim-by
+ */
+$messages['be-tarask'] = array(
+	'userdailycontribs-desc' => 'Штодзённы ÑžÐ½Ñ‘сак удзельнікаў для пашырэньня сачэньня за націскамі мышшу',
+);
+
+/** Breton (Brezhoneg)
+ * @author Fulup
+ */
+$messages['br'] = array(
+	'userdailycontribs-desc' => "Degasadennoù pemdeziek dre implijer evit an astenn heuliañ ar c'hlikoù",
+);
+
+/** Bosnian (Bosanski)
+ * @author CERminator
+ */
+$messages['bs'] = array(
+	'userdailycontribs-desc' => 'Dnevni doprinosi korisnka za proširenje praćenja klikova',
+);
+
+/** German (Deutsch)
+ * @author Metalhead64
+ */
+$messages['de'] = array(
+	'userdailycontribs-desc' => 'Benutzertagesbeiträge für die Klickverfolgungs-Erweiterung',
+);
+
+/** Lower Sorbian (Dolnoserbski)
+ * @author Michawiki
+ */
+$messages['dsb'] = array(
+	'userdailycontribs-desc' => 'Wšědne wužywarske pśinoski za rozšyrjenje Clicktracking',
+);
+
+/** Greek (Ελληνικά)
+ * @author Omnipaedista
+ */
+$messages['el'] = array(
+	'userdailycontribs-desc' => 'Ημερήσιες συνεισφορές χρήστη για την επέκταση παρακολούθησης κλικ',
+);
+
+/** Esperanto (Esperanto)
+ * @author Yekrats
+ */
+$messages['eo'] = array(
+	'userdailycontribs-desc' => 'Ĉiutagaj kontribuoj de uzantoj por la klak-sekvada modulo.',
+);
+
+/** French (Français)
+ * @author PieRRoMaN
+ */
+$messages['fr'] = array(
+	'userdailycontribs-desc' => "Contributions quotidiennes par utilisateur pour l'extension de suivi des clics",
+);
+
+/** Galician (Galego)
+ * @author Toliño
+ */
+$messages['gl'] = array(
+	'userdailycontribs-desc' => 'Contribucións diarias por usuario para a extensión de seguimento de clics',
+);
+
+/** Swiss German (Alemannisch)
+ * @author Als-Holder
+ */
+$messages['gsw'] = array(
+	'userdailycontribs-desc' => 'Tägligi Byytreg fir d Klickverfolgigs-Erwyterig verwände',
+);
+
+/** Hebrew (עברית)
+ * @author Rotem Liss
+ */
+$messages['he'] = array(
+	'userdailycontribs-desc' => 'התרומה היומית של כל משתמש להרחבת מעקב הלחיצות',
+);
+
+/** Upper Sorbian (Hornjoserbsce)
+ * @author Michawiki
+ */
+$messages['hsb'] = array(
+	'userdailycontribs-desc' => 'Wšědne wužiwarske přinoški za rozšěrjenje Clicktracking',
+);
+
+/** Hungarian (Magyar)
+ * @author Glanthor Reviol
+ */
+$messages['hu'] = array(
+	'userdailycontribs-desc' => 'Felhasználók napi közreműködéseinek megjelenítése a kattintásszámlálóban',
+);
+
+/** Interlingua (Interlingua)
+ * @author McDutchie
+ */
+$messages['ia'] = array(
+	'userdailycontribs-desc' => 'Contributiones quotidian de usatores pro le extension de traciamento de clics',
+);
+
+/** Indonesian (Bahasa Indonesia)
+ * @author Bennylin
+ */
+$messages['id'] = array(
+	'userdailycontribs-desc' => 'Kontribusi harian pengguna untuk pengaya pelacak klik',
+);
+
+/** Japanese (日本語)
+ * @author Fryed-peach
+ */
+$messages['ja'] = array(
+	'userdailycontribs-desc' => 'クリック追跡拡張機能のための利用者の一日あたりの投稿',
+);
+
+/** Ripoarisch (Ripoarisch)
+ * @author Purodha
+ */
+$messages['ksh'] = array(
+	'userdailycontribs-desc' => 'De dääschlesch Beidrääsch vun de Metmacher, för de <i lang="en">Wikipedia Usability Initiative</i> ier Kleckverfolljung.',
+);
+
+/** Luxembourgish (Lëtzebuergesch)
+ * @author Robby
+ */
+$messages['lb'] = array(
+	'userdailycontribs-desc' => "Ännerunge pro Dag a Bentzer fir d'Erweiderung vum Suivi vun de Clicken",
+);
+
+/** Dutch (Nederlands)
+ * @author Siebrand
+ */
+$messages['nl'] = array(
+	'userdailycontribs-desc' => 'Dagelijkse gebruikersbijdragen voor de uitbreiding om gebruikerskliks mee te volgen',
+);
+
+/** Occitan (Occitan)
+ * @author Cedric31
+ */
+$messages['oc'] = array(
+	'userdailycontribs-desc' => "Contribucions jornalièras per utilizaire per l'extension de seguit dels clics",
+);
+
+/** Polish (Polski)
+ * @author Sp5uhe
+ */
+$messages['pl'] = array(
+	'userdailycontribs-desc' => 'Codzienny wkład użytkowników wyśledzony przez rozszerzenie monitorujące kliknięcia',
+);
+
+/** Piedmontese (Piemontèis)
+ * @author Dragonòt
+ */
+$messages['pms'] = array(
+	'userdailycontribs-desc' => "Contribussion giornaliere dl'utent për l'estension dla trassadura dij click",
+);
+
+/** Tarandíne (Tarandíne)
+ * @author Joetaras
+ */
+$messages['roa-tara'] = array(
+	'userdailycontribs-desc' => "Utinde ca ogne sciurne condrebbuiscene pe 'u cazzaminde de l'estenzione de tracciamende",
+);
+
+/** Russian (Русский)
+ * @author Александр Сигачёв
+ */
+$messages['ru'] = array(
+	'userdailycontribs-desc' => 'Ежедневный вклад участников для расширения отслеживания нажатий',
+);
+
+/** Yakut (Саха тыла)
+ * @author HalanTul
+ */
+$messages['sah'] = array(
+	'userdailycontribs-desc' => 'Баттааһыны ÐºÑÑ‚иири кэҥэтэр кыттааччылар суруйууларын күнүнэн наардааһын',
+);
+
+/** Slovak (Slovenčina)
+ * @author Helix84
+ */
+$messages['sk'] = array(
+	'userdailycontribs-desc' => 'Denné príspevky používateľa rozšírenia na sledovanie kliknutí',
+);
+
+/** Turkish (Türkçe)
+ * @author Joseph
+ */
+$messages['tr'] = array(
+	'userdailycontribs-desc' => 'Tıklama izleme eklentisi için günlük kullanıcı katkıları',
+);
+
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'userdailycontribs-desc' => 'Jogapäiväline kävutajiden tond painmižid kaceltes',
+);
+
+/** Vietnamese (Tiếng Việt)
+ * @author Vinhtantran
+ */
+$messages['vi'] = array(
+	'userdailycontribs-desc' => 'Đóng góp hà ng ngà y của thà nh viên dà nh cho bộ mở rộng theo dõi nhấn chuột',
+);
+

Property changes on: EditToolbar
___________________________________________________________________
Deleted: svn:mergeinfo
   Reverse-merged /branches/REL1_15/phase3/extensions/UsabilityInitiative/EditToolbar:r51646
   Reverse-merged /trunk/extensions/UsabilityInitiative/EditToolbar:r56207,56209,56296,56333,56355,56424,56426,56588,56590
   Reverse-merged /trunk/phase3/extensions/UsabilityInitiative/EditToolbar:r56213,56215-56216,56218,56325,56334-56336,56338,56340,56343,56345,56347,56350

Index: EditToolbar/EditToolbar.hooks.php
===================================================================
--- EditToolbar/EditToolbar.hooks.php	(revision 56989)
+++ EditToolbar/EditToolbar.hooks.php	(working copy)
@@ -59,6 +59,7 @@
 					'edittoolbar-tool-link-int-target-status-invalid',
 					'edittoolbar-tool-link-int-target-status-loading',
 					'edittoolbar-tool-link-int-invalid',
+					'edittoolbar-tool-link-ext-invalid',
 					'edittoolbar-tool-file',
 					'edittoolbar-tool-file-pre',
 					'edittoolbar-tool-file-example',
@@ -114,6 +115,7 @@
 					'edittoolbar-tool-replace-button',
 					'edittoolbar-tool-replace-close',
 					'edittoolbar-tool-replace-nomatch',
+					'edittoolbar-tool-replace-success',
 					/* Special Characters Section */
 					'edittoolbar-section-characters',
 					'edittoolbar-characters-page-latin',
@@ -219,7 +221,7 @@
 			);
 		}
 		
-		if ( !$wgEditToolbarCGDGlobalEnable && $wgEditToolbarCGDGlobalEnable ) {
+		if ( !$wgEditToolbarCGDGlobalEnable && $wgEditToolbarCGDUserEnable ) {
 			wfLoadExtensionMessages( 'EditToolbar' );
 			$defaultPreferences['usebetatoolbar-cgd'] = array(
 				'type' => 'toggle',
Index: EditToolbar/EditToolbar.js
===================================================================
--- EditToolbar/EditToolbar.js	(revision 56989)
+++ EditToolbar/EditToolbar.js	(working copy)
@@ -757,7 +757,7 @@
 					<li><a href="#edittoolbar-link-dialog-tab-int" rel="edittoolbar-tool-link-int"></a></li>\
 					<li><a href="#edittoolbar-link-dialog-tab-ext" rel="edittoolbar-tool-link-ext"></a></li>\
 				</ul>\
-				<div id="edittoolbar-link-dialog-tab-int"><form><fieldset><table><tr>\
+				<div id="edittoolbar-link-dialog-tab-int"><fieldset><table><tr>\
 					<td><label for="edittoolbar-link-int-target" rel="edittoolbar-tool-link-int-target"></label></td>\
 					<td>\
 						<input type="text" id="edittoolbar-link-int-target" />\
@@ -766,14 +766,14 @@
 				</tr><tr>\
 					<td><label for="edittoolbar-link-int-text" rel="edittoolbar-tool-link-int-text"></label></td>\
 					<td><input type="text" id="edittoolbar-link-int-text" /></td>\
-				</table></fieldset></form></div>\
-				<div id="edittoolbar-link-dialog-tab-ext"><form><fieldset><table><tr>\
+				</table></fieldset></div>\
+				<div id="edittoolbar-link-dialog-tab-ext"><fieldset><table><tr>\
 					<td><label for="edittoolbar-link-ext-target" rel="edittoolbar-tool-link-ext-target"></label></td>\
 					<td><input type="text" id="edittoolbar-link-ext-target" /></td>\
 				</tr><tr>\
 					<td><label for="edittoolbar-link-ext-text" rel="edittoolbar-tool-link-ext-text"></label></td>\
 					<td><input type="text" id="edittoolbar-link-ext-text" /></td>\
-				</table></fieldset></form></div>\
+				</table></fieldset></div>\
 			</div>',
 		init: function() {
 			// Updates the UI to show if the page title being inputed by the user exists or not
@@ -940,13 +940,12 @@
 				},
 				cancel: function() {
 					var request = $j(this).data( 'request' );
-					if ( request.abort )
+					if ( request )
 						request.abort();
 				}
 			});
 		},
 		dialog: {
-			width: 550, // FIXME: autoresize width
 			buttons: {
 				'edittoolbar-tool-link-insert': function() {
 					function escapeInternalText( s ) {
@@ -963,14 +962,15 @@
 					var whitespace = [ '', '' ];
 					switch ( $j( '#edittoolbar-link-tabs' ).tabs( 'option', 'selected' ) ) {
 						case 0: // Internal link
+							var target = $j( '#edittoolbar-link-int-target' ).val();
+							var text = $j( '#edittoolbar-link-int-text' ).val();
 							// FIXME: Exactly how fragile is this?
-							if ( $j( '#edittoolbar-link-int-target-status-invalid' ).is( ':visible' ) ) {
+							if ( $j( '#edittoolbar-link-int-target-status-invalid' ).is( ':visible' )  ||
+									target == '' ) {
 								// Refuse to add links to invalid titles
 								alert( gM( 'edittoolbar-tool-link-int-invalid' ) );
 								return;
 							}
-							var target = $j( '#edittoolbar-link-int-target' ).val();
-							var text = $j( '#edittoolbar-link-int-text' ).val();
 							whitespace = $j( '#edittoolbar-link-dialog-tab-int' ).data( 'whitespace' );
 							if ( target == text )
 								insertText = '[[' + target + ']]';
@@ -983,6 +983,12 @@
 							var escTarget = escapeExternalTarget( target );
 							var escText = escapeExternalText( text );
 							whitespace = $j( '#edittoolbar-link-dialog-tab-ext' ).data( 'whitespace' );
+							if ( target == '' || target == 'http://' ) {
+								// Refuse to add links to invalid URLs
+								// TODO: More elaborate regex here?
+								alert( gM( 'edittoolbar-tool-link-ext-invalid' ) );
+								return;
+							}
 							if ( escTarget == escText )
 								insertText = escTarget;
 							else if ( text == '' )
@@ -1008,8 +1014,8 @@
 			open: function() {
 				// Pre-fill the text fields based on the current selection
 				var selection = $j(this).data( 'context' ).$textarea.getSelection();
-					$j( '#edittoolbar-link-dialog-tab-int' ).data( 'whitespace', [ '', '' ] );
-					$j( '#edittoolbar-link-dialog-tab-ext' ).data( 'whitespace', [ '', '' ] );
+				$j( '#edittoolbar-link-dialog-tab-int' ).data( 'whitespace', [ '', '' ] );
+				$j( '#edittoolbar-link-dialog-tab-ext' ).data( 'whitespace', [ '', '' ] );
 				if ( selection != '' ) {
 					var intText, intTarget, extText, extTarget;
 					var matches;
@@ -1048,6 +1054,19 @@
 					$j( '#edittoolbar-link-int-text' ).val() == $j( '#edittoolbar-link-int-target' ).val()
 				);
 				$j( '#edittoolbar-link-int-target' ).suggestions();
+				
+				if ( !( $j(this).data( 'dialogkeypressset' ) ) ) {
+					$j(this).data( 'dialogkeypressset', true );
+					// Execute the action associated with the first button
+					// when the user presses Enter
+					$j(this).closest( '.ui-dialog' ).keypress( function( e ) {
+						if ( ( e.keyCode || e.which ) == 13 ) {
+							$j(this)
+								.find( 'button:first' )
+								.click();
+						}
+					});
+				}
 			}
 		}
 	},
@@ -1055,7 +1074,7 @@
 		titleMsg: 'edittoolbar-tool-table-title',
 		id: 'edittoolbar-table-dialog',
 		html: '\
-			<form><fieldset><legend rel="edittoolbar-tool-table-dimensions"></legend><table><tr>\
+			<fieldset><legend rel="edittoolbar-tool-table-dimensions"></legend><table><tr>\
 				<td><input type="checkbox" id="edittoolbar-table-dimensions-header" value="1" /></td>\
 				<td class="label"><label for="edittoolbar-table-dimensions-header"\
 					rel="edittoolbar-tool-table-dimensions-header"></label></td>\
@@ -1066,16 +1085,24 @@
 				<td class="label"><label for="edittoolbar-table-dimensions-rows"\
 					rel="edittoolbar-tool-table-dimensions-rows"></label></td>\
 				<td><input type="text" id="edittoolbar-table-dimensions-rows" size="2" /></td>\
-			</tr></table></fieldset></form>',
+			</tr></table></fieldset>',
 		init: function() {
 			$j(this).find( '[rel]' ).each( function() {
 				$j(this).text( gM( $j(this).attr( 'rel' ) ) );
 			});
+			// Execute the action associated with the first button
+			// when the user presses Enter
+			$j(this).closest( '.ui-dialog' ).keypress( function( e ) {
+				if ( ( e.keyCode || e.which ) == 13 ) {
+					$j(this)
+						.find( 'button:first' )
+						.click();
+				}
+			});
 			$j( '#edittoolbar-table-dimensions-rows' ).val( 2 );
 			$j( '#edittoolbar-table-dimensions-columns' ).val( 2 );
 		},
 		dialog: {
-			width: 350, // FIXME: autoresize
 			buttons: {
 				'edittoolbar-tool-table-insert': function() {
 					var rows = parseInt( $j( '#edittoolbar-table-dimensions-rows' ).val() );
@@ -1116,6 +1143,20 @@
 				'edittoolbar-tool-table-cancel': function() {
 					$j(this).dialog( 'close' );
 				}
+			},
+			open: function() {
+				if ( !( $j(this).data( 'dialogkeypressset' ) ) ) {
+					$j(this).data( 'dialogkeypressset', true );
+					// Execute the action associated with the first button
+					// when the user presses Enter
+					$j(this).closest( '.ui-dialog' ).keypress( function( e ) {
+						if ( ( e.keyCode || e.which ) == 13 ) {
+							$j(this)
+								.find( 'button:first' )
+								.click();
+						}
+					});
+				}
 			}
 		}
 	},
@@ -1123,7 +1164,7 @@
 		titleMsg: 'edittoolbar-tool-replace-title',
 		id: 'edittoolbar-replace-dialog',
 		html: '\
-			<form><fieldset><table><tr>\
+			<fieldset><table><tr>\
 				<td><label for="edittoolbar-replace-search" rel="edittoolbar-tool-replace-search"></label></td>\
 				<td><input type="text" id="edittoolbar-replace-search" /></td>\
 			</tr><tr>\
@@ -1138,16 +1179,58 @@
 			</tr><tr>\
 				<td><input type="checkbox" id="edittoolbar-replace-all" /></td>\
 				<td><label for="edittoolbar-replace-all" rel="edittoolbar-tool-replace-all"></label></td>\
-			</tr></table></fieldset></form>',
+			</tr></table></fieldset>',
 		init: function() {
 			$j(this).find( '[rel]' ).each( function() {
 				$j(this).text( gM( $j(this).attr( 'rel' ) ) );
 			});
+			// Execute the action associated with the first button
+			// when the user presses Enter
+			$j(this).closest( '.ui-dialog' ).keypress( function( e ) {
+				if ( ( e.keyCode || e.which ) == 13 ) {
+					$j(this)
+						.find( 'button:first' )
+						.click();
+				}
+			});
 		},
 		dialog: {
-			width: 350, // FIXME: autoresize width
 			buttons: {
 				'edittoolbar-tool-replace-button': function() {
+					function fixOperaBrokenness( s ) {
+						// This function works around Opera's
+						// broken newline handling in textareas.
+						// .val() has \n while selection functions
+						// treat newlines as \r\n
+						
+						if ( typeof $j.isOperaBroken == 'undefined' ) {
+							// Create a textarea inside a div
+							// with zero area, to hide it properly
+							var div = $j( '<div />' )
+								.height( 0 )
+								.width( 0 )
+								.insertBefore( $textarea );
+							var textarea = $j( '<textarea></textarea' )
+								.height( 0 )
+								.appendTo( div )
+								.val( "foo\r\nbar" );
+							
+							// Try to search&replace bar --> BAR
+							var index = textarea.val().indexOf( 'bar' );
+							textarea.select();
+							textarea.setSelection( index, index + 3 );
+							textarea.encapsulateSelection( '', 'BAR', '', false, true );
+							if ( textarea.val().substr( -1 ) == 'R' )
+								$j.isOperaBroken = false;
+							else
+								$j.isOperaBroken = true; 
+							div.remove();
+						}
+						if ( $j.isOperaBroken )
+							s = s.replace( /\n/g, "\r\n" );
+						return s;
+					}
+
 					var searchStr = $j( '#edittoolbar-replace-search' ).val();
 					var replaceStr = $j( '#edittoolbar-replace-replace' ).val();
 					var flags = '';
@@ -1162,16 +1245,45 @@
 					}
 					var regex = new RegExp( searchStr, flags );
 					var $textarea = $j(this).data( 'context' ).$textarea;
-					if ( !$textarea.val().match( regex ) ) {
+					var text = fixOperaBrokenness( $textarea.val() );
+					var matches = text.match( regex );
+					if ( !matches ) {
 						alert( gM( 'edittoolbar-tool-replace-nomatch' ) );
 					} else {
-						$textarea.val( $textarea.val().replace( regex, replaceStr ) );
+						var start, end;
+						for ( var i = 0; i < matches.length; i++ ) {
+							start = text.indexOf( matches[i] );
+							end = start + matches[i].length;
+							$textarea.setSelection( start, end );
+							$textarea.encapsulateSelection( '', replaceStr, '', false, true );
+							
+							// $textarea.val() has changed
+							text = fixOperaBrokenness( $textarea.val() );
+						}
+						if ( $j( '#edittoolbar-replace-all' ).is( ':checked' )  )
+							alert( gM( 'edittoolbar-tool-replace-success', i ) );
+						$textarea.scrollToCaretPosition( start );
+						$textarea.setSelection( start, start + replaceStr.length );
 					}
-					// TODO: Hook for wikEd
 				},
 				'edittoolbar-tool-replace-close': function() {
 					$j(this).dialog( 'close' );
+					$j(this).data( 'context' ).$textarea.focus();
 				}
+			},
+			open: function() {
+				if ( !( $j(this).data( 'dialogkeypressset' ) ) ) {
+					$j(this).data( 'dialogkeypressset', true );
+					// Execute the action associated with the first button
+					// when the user presses Enter
+					$j(this).closest( '.ui-dialog' ).keypress( function( e ) {
+						if ( ( e.keyCode || e.which ) == 13 ) {
+							$j(this)
+								.find( 'button:first' )
+								.click();
+						}
+					});
+				}
 			}
 		}
 	}

Property changes on: EditToolbar/EditToolbar.js
___________________________________________________________________
Deleted: svn:mergeinfo
   Reverse-merged /branches/REL1_15/phase3/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js:r51646
   Reverse-merged /trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js:r56207,56209,56226,56296,56333,56355,56417,56424,56426,56588,56590
   Reverse-merged /trunk/phase3/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js:r56213,56215-56216,56218,56325,56334-56336,56338,56340,56343,56345,56347,56350

Index: EditToolbar/EditToolbar.i18n.php
===================================================================
--- EditToolbar/EditToolbar.i18n.php	(revision 56989)
+++ EditToolbar/EditToolbar.i18n.php	(working copy)
@@ -15,7 +15,7 @@
 	'edittoolbar' => 'Editing toolbar',
 	'edittoolbar-desc' => 'Edit page toolbar with enhanced usability',
 	'edittoolbar-preference' => 'Enable enhanced editing toolbar',
-	'edittoolbar-cgd-preference' => 'Enable content generation dialogs in enhanced editing toolbar',
+	'edittoolbar-cgd-preference' => 'Enable help for adding advanced wiki text',
 	'edittoolbar-loading' => 'Loading...',
 	/* Main Section */
 	'edittoolbar-tool-bold' => 'Bold',
@@ -41,6 +41,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Invalid title',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Checking page existence...',
 	'edittoolbar-tool-link-int-invalid' => 'The title you specified is invalid.',
+	'edittoolbar-tool-link-ext-invalid' => 'The URL you specified is invalid.',
 	'edittoolbar-tool-file' => 'Embedded file',
 	'edittoolbar-tool-file-pre' => '$1{{ns:file}}:',
 	'edittoolbar-tool-file-example' => 'Example.jpg',
@@ -98,7 +99,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Include header row',
 	'edittoolbar-tool-table-insert' => 'Insert',
 	'edittoolbar-tool-table-cancel' => 'Cancel',
-	'edittoolbar-tool-replace' => 'Replace',
+	'edittoolbar-tool-replace' => 'Search and replace',
 	'edittoolbar-tool-replace-title' => 'Search and replace',
 	'edittoolbar-tool-replace-search' => 'Search for:',
 	'edittoolbar-tool-replace-replace' => 'Replace with:',
@@ -106,8 +107,9 @@
 	'edittoolbar-tool-replace-regex' => 'Treat search string as a regular expression',
 	'edittoolbar-tool-replace-all' => 'Replace all occurences',
 	'edittoolbar-tool-replace-button' => 'Replace',
-	'edittoolbar-tool-replace-close' => 'Close',
+	'edittoolbar-tool-replace-close' => 'Cancel',
 	'edittoolbar-tool-replace-nomatch' => 'Your search did not match anything.',
+	'edittoolbar-tool-replace-success' => '$1 replacement(s) made.',
 	/* Special characters Section */
 	'edittoolbar-section-characters' => 'Special characters',
 	'edittoolbar-characters-page-latin' => 'Latin',
@@ -169,7 +171,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>List item</li><li>List item</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Embedded file',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Caption text]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Caption text</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Caption text</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Reference',
 	'edittoolbar-help-content-reference-syntax' => 'Page text.&lt;ref name="test"&gt;[http://www.example.org Link text], additional text.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Page text.<sup><a href='#'>[1]</a></sup>",
@@ -192,44 +194,59 @@
 
 /** Message documentation (Message documentation)
  * @author Bennylin
+ * @author Darth Kule
  * @author EugeneZelenko
  * @author Fryed-peach
+ * @author Lloffiwr
  * @author McDutchie
  * @author Minh Nguyen
  * @author Mormegil
  * @author Purodha
  * @author SMP
  * @author Siebrand
+ * @author Umherirrender
  */
 $messages['qqq'] = array(
+	'edittoolbar-desc' => '{{desc}}',
 	'edittoolbar-preference' => 'Option in [[Special:Preferences]]',
+	'edittoolbar-cgd-preference' => "Caption of a checkbox on [[Special:Preferences]] (''editing'' tab), enabling helper dialogs for various features of the advanced edit toolbar (e.g. inserting links or tables).",
 	'edittoolbar-loading' => '{{Identical|Loading}}',
 	'edittoolbar-tool-bold' => '{{Identical|Bold}}',
 	'edittoolbar-tool-bold-example' => '{{Identical|Bold text}}',
 	'edittoolbar-tool-italic' => '{{Identical|Italic}}',
 	'edittoolbar-tool-italic-example' => '{{Identical|Italic text}}',
+	'edittoolbar-tool-ilink' => '{{Identical|Internal link}}',
 	'edittoolbar-tool-link' => '{{Identical|Link}}',
 	'edittoolbar-tool-link-cancel' => '{{Identical|Cancel}}',
 	'edittoolbar-tool-link-int-target-status-exists' => 'alt text and title text for the image shown when the title the user entered exists',
 	'edittoolbar-tool-link-int-target-status-notexists' => 'alt text and title text for the image shown when the title the user entered does not exist',
 	'edittoolbar-tool-link-int-target-status-invalid' => 'alt text and title text for the image shown when the title the user entered is invalid',
 	'edittoolbar-tool-link-int-target-status-loading' => 'alt text and title text for the image shown while the title the user entered is being checked for existence',
+	'edittoolbar-tool-file' => '{{Identical|Embedded file}}',
 	'edittoolbar-tool-reference' => '{{Identical|Reference}}',
 	'edittoolbar-group-list' => '{{Identical|List}}',
+	'edittoolbar-tool-ulist' => '{{Identical|Bulleted list}}',
+	'edittoolbar-tool-olist' => '{{Identical|Numbered list}}',
 	'edittoolbar-group-size' => '{{Identical|Size}}',
+	'edittoolbar-group-insert' => '{{Identical|Insert}}',
+	'edittoolbar-tool-table-insert' => '{{Identical|Insert}}',
 	'edittoolbar-tool-table-cancel' => '{{Identical|Cancel}}',
-	'edittoolbar-tool-replace' => '{{Identical|Replace}}',
+	'edittoolbar-tool-replace' => '{{Identical|Search and replace}}',
+	'edittoolbar-tool-replace-title' => '{{Identical|Search and replace}}',
 	'edittoolbar-tool-replace-search' => '{{Identical|Search}}',
 	'edittoolbar-tool-replace-case' => 'This could as well be translated as "case sensitive search" -
 "case" refers to character case, that is upper case, or lower case.',
 	'edittoolbar-tool-replace-button' => '{{Identical|Replace}}',
-	'edittoolbar-tool-replace-close' => '{{Identical|Close}}',
+	'edittoolbar-tool-replace-close' => '{{Identical|Cancel}}',
+	'edittoolbar-tool-replace-success' => '[[file:Bulbgraph.png|left|22px]]
+This message does not support PLURAL on $1.',
 	'edittoolbar-characters-page-latin' => 'This is the name of a script, or alphabet, not a language',
 	'edittoolbar-characters-page-ipa' => 'IPA means a script: "international phonetic alphabet" here, and not "international phonetic association", the organization behind it.',
 	'edittoolbar-characters-page-greek' => 'This is the name of a script, or alphabet, not a language.',
 	'edittoolbar-characters-page-cyrillic' => 'This is the name of a script, or a group of alphabets, used mainly in Eastern Europe and North and Central Asia.',
 	'edittoolbar-characters-page-arabic' => 'This is the name of a script, or alphabet, not a language.',
 	'edittoolbar-characters-page-hebrew' => 'This is the name of a script, or alphabet, not a language.',
+	'edittoolbar-section-help' => '{{Identical|Help}}',
 	'edittoolbar-help-heading-description' => '{{Identical|Description}}',
 	'edittoolbar-help-page-link' => '{{Identical|Links}}',
 	'edittoolbar-help-page-list' => '{{Identical|List}}',
@@ -242,6 +259,8 @@
 	'edittoolbar-help-content-bold-description' => '{{Identical|Bold}}',
 	'edittoolbar-help-content-bold-syntax' => '{{Identical|Bold text}}',
 	'edittoolbar-help-content-bold-result' => '{{Identical|Bold text}}',
+	'edittoolbar-help-content-ilink-description' => '{{Identical|Internal link}}',
+	'edittoolbar-help-content-xlink-syntax' => "www.example.org is not a real website. If you go to this page on the web it says that it cannot be registered as a real domain. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a web page for that address, such as www.Beispiel.org, using the German word for example. So it is worth checking where the translated link takes you when translating this.",
 	'edittoolbar-help-content-heading1-syntax' => '{{Identical|Heading text}}',
 	'edittoolbar-help-content-heading1-result' => '{{Identical|Heading text}}',
 	'edittoolbar-help-content-heading2-syntax' => '{{Identical|Heading text}}',
@@ -252,6 +271,10 @@
 	'edittoolbar-help-content-heading4-result' => '{{Identical|Heading text}}',
 	'edittoolbar-help-content-heading5-syntax' => '{{Identical|Heading text}}',
 	'edittoolbar-help-content-heading5-result' => '{{Identical|Heading text}}',
+	'edittoolbar-help-content-ulist-description' => '{{Identical|Bulleted list}}',
+	'edittoolbar-help-content-olist-description' => '{{Identical|Numbered list}}',
+	'edittoolbar-help-content-file-description' => '{{Identical|Embedded file}}',
+	'edittoolbar-help-content-file-syntax' => "{{doc-important|''thumb'' is a magic word. Leave it untranslated!}}",
 	'edittoolbar-help-content-file-result' => 'Do not translate anything except "Caption text" (twice) and "Enlarge" (to "{{int:thumbnail-more}}").',
 	'edittoolbar-help-content-reference-description' => '{{Identical|Reference}}',
 	'edittoolbar-help-content-reference-syntax' => 'I suggest leaving the <code>name="test"</code> string in English',
@@ -271,9 +294,12 @@
 	'edittoolbar-tool-bold' => 'Vet',
 	'edittoolbar-tool-bold-example' => 'Vetgedrukte teks',
 	'edittoolbar-tool-italic' => 'Kursief',
+	'edittoolbar-tool-ilink' => 'Interne skakel',
 	'edittoolbar-tool-link' => 'Skakel',
 	'edittoolbar-tool-link-cancel' => 'kanselleer',
+	'edittoolbar-tool-file' => 'Ingebedde lêer',
 	'edittoolbar-tool-file-example' => 'Voorbeeld.jpg',
+	'edittoolbar-section-advanced' => 'Gevorderde funksies',
 	'edittoolbar-tool-heading' => 'Opskrif',
 	'edittoolbar-tool-heading-1' => 'Vlak 1',
 	'edittoolbar-tool-heading-2' => 'Vlak 2',
@@ -282,14 +308,26 @@
 	'edittoolbar-tool-heading-5' => 'Vlak 5',
 	'edittoolbar-tool-heading-example' => 'Opskrifteks',
 	'edittoolbar-group-list' => 'Lys',
+	'edittoolbar-tool-ulist' => 'Ongenommerde lys',
+	'edittoolbar-tool-olist' => 'Genommerde lys',
 	'edittoolbar-group-size' => 'Grootte',
 	'edittoolbar-tool-big' => 'Groot',
+	'edittoolbar-tool-big-example' => 'Groot gedrukte teks',
 	'edittoolbar-tool-small' => 'Klein',
+	'edittoolbar-tool-small-example' => 'Klein gedrukte teks',
+	'edittoolbar-group-insert' => 'Invoeg',
+	'edittoolbar-tool-table' => 'Tabel',
+	'edittoolbar-tool-table-dimensions' => 'Dimensies',
+	'edittoolbar-tool-table-dimensions-rows' => 'Rye',
+	'edittoolbar-tool-table-dimensions-columns' => 'Kolomme',
+	'edittoolbar-tool-table-insert' => 'Invoeg',
 	'edittoolbar-tool-table-cancel' => 'Kanselleer',
-	'edittoolbar-tool-replace' => 'Vervang',
+	'edittoolbar-tool-replace' => 'Soek en vervang',
+	'edittoolbar-tool-replace-title' => 'Soek en vervang',
 	'edittoolbar-tool-replace-search' => 'Soek na:',
 	'edittoolbar-tool-replace-button' => 'Vervang',
-	'edittoolbar-tool-replace-close' => 'Sluit',
+	'edittoolbar-tool-replace-close' => 'Kanselleer',
+	'edittoolbar-tool-replace-success' => '$1 vervangings gemaak.',
 	'edittoolbar-section-characters' => 'Spesiale karakters',
 	'edittoolbar-characters-page-ipa' => 'IFA',
 	'edittoolbar-characters-page-symbols' => 'Simbole',
@@ -311,17 +349,27 @@
 	'edittoolbar-help-content-bold-description' => 'Vet',
 	'edittoolbar-help-content-bold-syntax' => "'''Vetgedrukte teks'''",
 	'edittoolbar-help-content-bold-result' => '<strong>Vetgedrukte teks</strong>',
+	'edittoolbar-help-content-ilink-description' => 'Interne skakel',
+	'edittoolbar-help-content-heading1-description' => 'Vlak 1 opskrif',
 	'edittoolbar-help-content-heading1-syntax' => '= Opskrifteks =',
 	'edittoolbar-help-content-heading1-result' => '<h1>Opskrifteks</h1>',
+	'edittoolbar-help-content-heading2-description' => 'Vlak 2 opskrif',
 	'edittoolbar-help-content-heading2-syntax' => '== Opskrifteks ==',
 	'edittoolbar-help-content-heading2-result' => '<h2>Opskrifteks</h2>',
+	'edittoolbar-help-content-heading3-description' => 'Vlak 3 opskrif',
 	'edittoolbar-help-content-heading3-syntax' => '=== Opskrifteks ===',
 	'edittoolbar-help-content-heading3-result' => '<h3>Opskrifteks</h3>',
+	'edittoolbar-help-content-heading4-description' => 'Vlak 4 opskrif',
 	'edittoolbar-help-content-heading4-syntax' => '==== Opskrifteks ====',
 	'edittoolbar-help-content-heading4-result' => '<h4>Opskrifteks</h4>',
+	'edittoolbar-help-content-heading5-description' => 'Vlak 5 opskrif',
 	'edittoolbar-help-content-heading5-syntax' => '===== Opskrifteks =====',
 	'edittoolbar-help-content-heading5-result' => '<h5>Opskrifteks</h5>',
+	'edittoolbar-help-content-ulist-description' => 'Ongenommerde lys',
+	'edittoolbar-help-content-olist-description' => 'Genommerde lys',
+	'edittoolbar-help-content-file-description' => 'Ingebedde lêer',
 	'edittoolbar-help-content-reference-description' => 'Verwysing',
+	'edittoolbar-help-content-signature-description' => 'Handtekening',
 );
 
 /** Arabic (العربية)
@@ -338,6 +386,10 @@
 	'edittoolbar-tool-bold-example' => 'نص عريض',
 	'edittoolbar-tool-italic' => 'مائل',
 	'edittoolbar-tool-italic-example' => 'نص مائل',
+	'edittoolbar-tool-ilink' => 'وصلة داخلية',
+	'edittoolbar-tool-ilink-example' => 'عنوان الوصلة',
+	'edittoolbar-tool-xlink' => 'وصلة خارجية (تذكر البدء بhttp://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com عنوان الوصلة',
 	'edittoolbar-tool-link' => 'وصلة',
 	'edittoolbar-tool-link-title' => 'إدراج وصلة',
 	'edittoolbar-tool-link-int' => 'لصفحة ويكي',
@@ -389,18 +441,16 @@
 	'edittoolbar-tool-table-dimensions' => 'الأبعاد',
 	'edittoolbar-tool-table-dimensions-rows' => 'الصفوف',
 	'edittoolbar-tool-table-dimensions-columns' => 'الأعمدة',
-	'edittoolbar-tool-table-dimensions-headerrows' => 'صفوف العناوين',
-	'edittoolbar-tool-table-dimensions-headercolumns' => 'عواميد العناوين',
 	'edittoolbar-tool-table-insert' => 'إدراج',
 	'edittoolbar-tool-table-cancel' => 'إلغاء',
-	'edittoolbar-tool-replace' => 'استبدال',
+	'edittoolbar-tool-replace' => 'ابحث ÙˆØ§Ø³ØªØ¨Ø¯Ù„',
 	'edittoolbar-tool-replace-title' => 'ابحث ÙˆØ§Ø³ØªØ¨Ø¯Ù„',
 	'edittoolbar-tool-replace-search' => 'إبحث Ø¹Ù†:',
 	'edittoolbar-tool-replace-replace' => 'استبدل ب:',
 	'edittoolbar-tool-replace-case' => 'مطابقة الحالة',
 	'edittoolbar-tool-replace-all' => 'استبدل كل المطابقات',
 	'edittoolbar-tool-replace-button' => 'استبدال',
-	'edittoolbar-tool-replace-close' => 'إغلاق',
+	'edittoolbar-tool-replace-close' => 'إلغاء',
 	'edittoolbar-tool-replace-nomatch' => 'بحثك لم يطابق أي شيء.',
 	'edittoolbar-section-characters' => 'محارف خاصة',
 	'edittoolbar-characters-page-latin' => 'اللاتينية',
@@ -461,7 +511,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>عنصر قائمة</li><li>عنصر قائمة</li></ol>',
 	'edittoolbar-help-content-file-description' => 'ملف مضمّن',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|تصغير|نص الشرح]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='نص التعليق' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='تكبير' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>نص التعليق</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='نص التعليق' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='تكبير' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>نص التعليق</div></div>",
 	'edittoolbar-help-content-reference-description' => 'مرجع',
 	'edittoolbar-help-content-reference-syntax' => 'نص الصفحة.&lt;ref name="test"&gt;[http://www.example.org نص الوصلة]، نص إضافي.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "نص الصفحة.<sup><a href='#'>[1]</a></sup>",
@@ -486,6 +536,8 @@
 	'edittoolbar-tool-bold-example' => 'ܟܬܒܬܐ ܥܒܝܬܐ',
 	'edittoolbar-tool-italic' => 'Ü¦Ü ÜÜ¡Ü¬Ü',
 	'edittoolbar-tool-italic-example' => 'ܟܬܒܬܐ Ü¦Ü ÜÜ¡Ü¬Ü',
+	'edittoolbar-tool-ilink' => 'ܐܣܘܪܐ ܓܘܝܐ',
+	'edittoolbar-tool-xlink' => 'ܐܣܘܪܐ ܒܪܝܐ (ܕܟܘܪ http:// ܩܕܡܝܬܐ)',
 	'edittoolbar-tool-heading-1' => 'ܫܘܝܐ 1',
 	'edittoolbar-tool-heading-2' => 'ܫܘܝܐ 2',
 	'edittoolbar-tool-heading-3' => 'ܫܘܝܐ 3',
@@ -512,11 +564,16 @@
 	'edittoolbar' => 'Панэль інструмэнтаў для рэдагаваньня',
 	'edittoolbar-desc' => 'Панэль інструмэнтаў для рэдагаваньня з палепшанай зручнасьцю',
 	'edittoolbar-preference' => 'Уключыць палепшаную панэль інструмэнтаў для рэдагаваньня',
-	'edittoolbar-loading' => 'Загрузка...',
+	'edittoolbar-cgd-preference' => 'Дазволіць дапамогу для даданьня складанага вікі-тэксту',
+	'edittoolbar-loading' => 'Загрузка…',
 	'edittoolbar-tool-bold' => 'Тлусты',
 	'edittoolbar-tool-bold-example' => 'Тлусты Ñ‚экст',
 	'edittoolbar-tool-italic' => 'Курсіў',
 	'edittoolbar-tool-italic-example' => 'Курсіўны Ñ‚экст',
+	'edittoolbar-tool-ilink' => 'Унутраная спасылка',
+	'edittoolbar-tool-ilink-example' => 'Назва спасылкі',
+	'edittoolbar-tool-xlink' => 'Вонкавая спасылка (не забывайцеся пачынаць з http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com назва спасылкі',
 	'edittoolbar-tool-link' => 'Спасылка',
 	'edittoolbar-tool-link-title' => 'Уставіць спасылку',
 	'edittoolbar-tool-link-int' => 'На вікі-старонку',
@@ -532,6 +589,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Няслушная назва',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Ідзе праверка існаваньня старонкі…',
 	'edittoolbar-tool-link-int-invalid' => 'Назва, якую Ð’Ñ‹ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ñ‹Ð»Ñ–, — няслушная.',
+	'edittoolbar-tool-link-ext-invalid' => 'Ð’Ñ‹ Ð¿Ð°Ð·Ð½Ð°Ñ‡Ñ‹Ð»Ñ– няслушны URL-адрас.',
 	'edittoolbar-tool-file' => 'Укладзены Ñ„айл',
 	'edittoolbar-tool-file-example' => 'Прыклад.jpg',
 	'edittoolbar-tool-reference' => 'Зноска',
@@ -566,6 +624,18 @@
 {{ns:file}}:Example.jpg|Подпіс2',
 	'edittoolbar-tool-newline' => 'Новы Ñ€Ð°Ð´Ð¾Ðº',
 	'edittoolbar-tool-table' => 'Табліца',
+	'edittoolbar-tool-table-example-old' => '-
+! загаловак 1
+! загаловак 2
+! загаловак 3
+|-
+| радок 1, ячэйка 1
+| радок 1, ячэйка 2
+| радок 1, ячэйка 3
+|-
+| радок 2, ячэйка 1
+| радок 2, ячэйка 2
+| радок 2, ячэйка 3',
 	'edittoolbar-tool-table-example' => 'Радок $1, ячэйка $2',
 	'edittoolbar-tool-table-example-header' => 'Радок $1, ячэйка $2 (назва)',
 	'edittoolbar-tool-table-title' => 'Уставіць табліцу',
@@ -575,7 +645,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Дадаць радок загалоўку',
 	'edittoolbar-tool-table-insert' => 'Уставіць',
 	'edittoolbar-tool-table-cancel' => 'Адмяніць',
-	'edittoolbar-tool-replace' => 'Замяніць',
+	'edittoolbar-tool-replace' => 'Знайсьці і замяніць',
 	'edittoolbar-tool-replace-title' => 'Пошук і замена',
 	'edittoolbar-tool-replace-search' => 'Шукаць:',
 	'edittoolbar-tool-replace-replace' => 'Замяніць на:',
@@ -583,8 +653,9 @@
 	'edittoolbar-tool-replace-regex' => 'Лічыць радок пошуку рэгулярным выразам',
 	'edittoolbar-tool-replace-all' => 'Замяніць усе супадзеньні',
 	'edittoolbar-tool-replace-button' => 'Замяніць',
-	'edittoolbar-tool-replace-close' => 'Закрыць',
+	'edittoolbar-tool-replace-close' => 'Адмяніць',
 	'edittoolbar-tool-replace-nomatch' => 'Па Вашаму запыту нічога ня знойдзена.',
+	'edittoolbar-tool-replace-success' => 'Колькасьць зробленых заменаў: $1.',
 	'edittoolbar-section-characters' => 'Спэцыяльныя сымбалі',
 	'edittoolbar-characters-page-latin' => 'Лацінскія',
 	'edittoolbar-characters-page-latinextended' => 'Лацінскі пашыраны',
@@ -644,7 +715,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Элемэнт сьпісу</li><li>Элемэнт сьпісу</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Укладзены Ñ„айл',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|міні|Тэкст подпісу]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Тэкст подпісу' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Тэкст подпісу</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Тэкст подпісу' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Тэкст подпісу</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Зноска',
 	'edittoolbar-help-content-reference-syntax' => 'Тэкст старонкі.&lt;ref name="test"&gt;[http://www.example.org Тэкст спасылкі], дадатковы Ñ‚экст.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Тэкст старонкі.<sup><a href='#'>[1]</a></sup>",
@@ -673,6 +744,8 @@
 	'edittoolbar-tool-bold-example' => 'Текст в получер',
 	'edittoolbar-tool-italic' => 'Курсив',
 	'edittoolbar-tool-italic-example' => 'Текст в курсив',
+	'edittoolbar-tool-ilink' => 'Вътрешна препратка',
+	'edittoolbar-tool-xlink' => 'Външна препратка (не забравяйте http:// )',
 	'edittoolbar-tool-file-example' => 'Пример.jpg',
 	'edittoolbar-group-list' => 'Списък',
 	'edittoolbar-tool-table' => 'Таблица',
@@ -702,6 +775,10 @@
 	'edittoolbar-tool-bold-example' => 'গাঢ় লেখা',
 	'edittoolbar-tool-italic' => 'ইটালিক',
 	'edittoolbar-tool-italic-example' => 'ইটালিক লেখা',
+	'edittoolbar-tool-ilink' => 'আভ্যন্তরীণ সংযোগ',
+	'edittoolbar-tool-ilink-example' => 'সংযোগের শিরোনাম',
+	'edittoolbar-tool-xlink' => 'বহিঃসংযোগ (মনে রাখবেন http:// উপসর্গ থাকবে)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com সংযোগের শিরোনাম',
 	'edittoolbar-tool-link' => 'লিংক',
 	'edittoolbar-tool-link-title' => 'লিংক যোগ করুন',
 	'edittoolbar-tool-link-int-target' => 'পাতার শিরোনাম:',
@@ -796,11 +873,16 @@
 	'edittoolbar' => 'Barrenn ostilhoù kemmañ',
 	'edittoolbar-desc' => "Barrenn ostilhoù kemmañ aesoc'h da implijout",
 	'edittoolbar-preference' => 'Gweredekaat ar varrenn ostilhoù kemmañ gwellaet',
+	'edittoolbar-cgd-preference' => "Aotren ar skoazell evit ouzhpennañ tammoù skrid wiki kempleshoc'h",
 	'edittoolbar-loading' => 'O kargañ...',
 	'edittoolbar-tool-bold' => 'Tev',
 	'edittoolbar-tool-bold-example' => 'Testenn dev',
 	'edittoolbar-tool-italic' => 'Italek',
 	'edittoolbar-tool-italic-example' => 'Testenn italek',
+	'edittoolbar-tool-ilink' => 'Liamm diabarzh',
+	'edittoolbar-tool-ilink-example' => 'Anv al liamm',
+	'edittoolbar-tool-xlink' => 'Liamm diavaez (arabat disoñjal ar rakger http:// )',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com anv al liamm',
 	'edittoolbar-tool-link' => 'Liamm',
 	'edittoolbar-tool-link-title' => "Ensoc'hañ ul liamm",
 	'edittoolbar-tool-link-int' => 'war-du ur bajenn wiki',
@@ -816,6 +898,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Titl direizh',
 	'edittoolbar-tool-link-int-target-status-loading' => 'O wiriañ hag-eñ ez eus eus ar bajenn...',
 	'edittoolbar-tool-link-int-invalid' => "Kamm eo an titl hoc'h eus merket.",
+	'edittoolbar-tool-link-ext-invalid' => "Direizh eo an URL merket ganeoc'h.",
 	'edittoolbar-tool-file' => 'Restr enframmet',
 	'edittoolbar-tool-file-example' => 'Skouer.jpg',
 	'edittoolbar-tool-reference' => 'Daveenn',
@@ -850,6 +933,18 @@
 {{ns:file}}:Skouer.jpg|Deskrivadur2',
 	'edittoolbar-tool-newline' => 'Linenn nevez',
 	'edittoolbar-tool-table' => 'Taolenn',
+	'edittoolbar-tool-table-example-old' => '-
+! talbenn 1
+! talbenn 2
+! talbenn 3
+|-
+| linenn 1, kellig 1
+| linenn 1, kellig 2
+| linenn 1, kellig 3
+|-
+| linenn 2, kellig 1
+| linenn 2, kellig 2
+| linenn 2, kellig 3',
 	'edittoolbar-tool-table-example' => 'Linenn $1, kellig $2',
 	'edittoolbar-tool-table-example-header' => 'Linenn $1, kellig $2 (talbenn)',
 	'edittoolbar-tool-table-title' => "Ensoc'hañ un daolenn",
@@ -859,7 +954,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Lakaat  al linenn dalbenn e-barzh',
 	'edittoolbar-tool-table-insert' => "Ensoc'hañ",
 	'edittoolbar-tool-table-cancel' => 'Nullañ',
-	'edittoolbar-tool-replace' => "Erlec'hiañ",
+	'edittoolbar-tool-replace' => "Klask hag erlec'hiañ",
 	'edittoolbar-tool-replace-title' => "Klask hag erlec'hiañ",
 	'edittoolbar-tool-replace-search' => 'Klask :',
 	'edittoolbar-tool-replace-replace' => "Erlec'hiañ gant :",
@@ -867,8 +962,9 @@
 	'edittoolbar-tool-replace-regex' => 'Sellet ouzh ar chadennad klask evel ouzh un droienn reoliek',
 	'edittoolbar-tool-replace-all' => "Erlec'hiañ an holl okurañsoù",
 	'edittoolbar-tool-replace-button' => "Erlec'hiañ",
-	'edittoolbar-tool-replace-close' => 'Serriñ',
+	'edittoolbar-tool-replace-close' => 'Nullañ',
 	'edittoolbar-tool-replace-nomatch' => "N'eus bet kavet netra o klotañ gant ar pezh a glaskit.",
+	'edittoolbar-tool-replace-success' => "$1 erlec'hiadenn graet",
 	'edittoolbar-section-characters' => 'Arouezennoù dibar',
 	'edittoolbar-characters-page-latin' => 'Latin',
 	'edittoolbar-characters-page-latinextended' => 'Latin astennet',
@@ -928,7 +1024,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Elfenn eus ar roll</li><li>Elfenn eus ar roll</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Restr enframmet',
 	'edittoolbar-help-content-file-syntax' => "[[{{ns:file}}:Example.png|thumb|Alc'hwez ar skeudenn]]",
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Testenn an alc'hwez' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Brasaat' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Testenn an alc'hwez</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Testenn an alc'hwez' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Brasaat' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Testenn an alc'hwez</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Daveenn',
 	'edittoolbar-help-content-reference-syntax' => 'Testenn ar bajenn.&lt;ref name="test"&gt;[http://www.example.org testenn al liamm], testenn ouzhpenn.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Testenn ar bajenn.<sup><a href='#'>[1]</a></sup>",
@@ -953,11 +1049,16 @@
 	'edittoolbar' => 'Uređivanje alatne trake',
 	'edittoolbar-desc' => 'Alatna traka stranice za uređivanje sa poboljšanom upotrebljivošću',
 	'edittoolbar-preference' => 'Omogući naprednu traku za uređivanje',
+	'edittoolbar-cgd-preference' => 'Omogući pomoć za dodavanje naprednog wiki teksta',
 	'edittoolbar-loading' => 'Punjenje...',
 	'edittoolbar-tool-bold' => 'Podebljano',
 	'edittoolbar-tool-bold-example' => 'Podebljan tekst',
 	'edittoolbar-tool-italic' => 'Ukošeno',
 	'edittoolbar-tool-italic-example' => 'Ukošeni tekst',
+	'edittoolbar-tool-ilink' => 'Unutrašnji link',
+	'edittoolbar-tool-ilink-example' => 'Naslov linka',
+	'edittoolbar-tool-xlink' => 'Vanjski link (zapamtite prefiks http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com naslov linka',
 	'edittoolbar-tool-link' => 'Link',
 	'edittoolbar-tool-link-title' => 'Ubaci link',
 	'edittoolbar-tool-link-int' => 'Na wiki stranicu',
@@ -973,6 +1074,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Nevaljan naslov',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Provjeravam postojanje stranice...',
 	'edittoolbar-tool-link-int-invalid' => 'Naslov koji ste unijeli je nevaljan.',
+	'edittoolbar-tool-link-ext-invalid' => 'URL koji ste naveli je nevaljan',
 	'edittoolbar-tool-file' => 'Uklopljena datoteka',
 	'edittoolbar-tool-file-example' => 'Primjer.jpg',
 	'edittoolbar-tool-reference' => 'Reference',
@@ -1007,6 +1109,18 @@
 {{ns:file}}:Example.jpg|Opis2',
 	'edittoolbar-tool-newline' => 'Nova linija',
 	'edittoolbar-tool-table' => 'Tabela',
+	'edittoolbar-tool-table-example-old' => '-
+! naslov 1
+! naslov 2
+! naslov 3
+|-
+| red 1, ćelija 1
+| red 1, ćelija 2
+| red 1, ćelija 3
+|-
+| red 2, ćelija 1
+| red 2, ćelija 2
+| red 2, ćelija 3',
 	'edittoolbar-tool-table-example' => 'Red $1, ćelija $2',
 	'edittoolbar-tool-table-example-header' => 'Red $1, ćelija $2 (naslov)',
 	'edittoolbar-tool-table-title' => 'Ubaci tabelu',
@@ -1016,7 +1130,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Uključi red zaglavlja',
 	'edittoolbar-tool-table-insert' => 'Ubaci',
 	'edittoolbar-tool-table-cancel' => 'Odustani',
-	'edittoolbar-tool-replace' => 'Zamijeni',
+	'edittoolbar-tool-replace' => 'Pronađi i zamijeni',
 	'edittoolbar-tool-replace-title' => 'Nađi i zamijeni',
 	'edittoolbar-tool-replace-search' => 'Pretraži:',
 	'edittoolbar-tool-replace-replace' => 'Zamijeni sa:',
@@ -1024,8 +1138,9 @@
 	'edittoolbar-tool-replace-regex' => 'Smatraj traženi pojam kao regularni izraz',
 	'edittoolbar-tool-replace-all' => 'Zamijeni sve pronađeno',
 	'edittoolbar-tool-replace-button' => 'Zamijeni',
-	'edittoolbar-tool-replace-close' => 'Zatvori',
+	'edittoolbar-tool-replace-close' => 'Odustani',
 	'edittoolbar-tool-replace-nomatch' => 'Vaša pretraga nije dala nijedan rezultat.',
+	'edittoolbar-tool-replace-success' => 'Načinjeno $1 izmjena.',
 	'edittoolbar-section-characters' => 'Posebni znakovi',
 	'edittoolbar-characters-page-latin' => 'Latinica',
 	'edittoolbar-characters-page-latinextended' => 'Prošireni latinski',
@@ -1085,7 +1200,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Stavka spiska</li><li>Stavka spiska</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Uklopljena datoteka',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Opis slike]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Opis slike' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Uvećajte' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Opis slike</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Opis slike' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Uvećajte' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Opis slike</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Reference',
 	'edittoolbar-help-content-reference-syntax' => 'Tekst stranice.&lt;ref name="test"&gt;[http://www.example.org Tekst linka], dodatni tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Tekst stranice.<sup><a href='#'>[1]</a></sup>",
@@ -1103,8 +1218,10 @@
 );
 
 /** Catalan (Català )
+ * @author Oç
  * @author Paucabot
  * @author SMP
+ * @author Vriullop
  */
 $messages['ca'] = array(
 	'edittoolbar' => "Editant la barra d'eines",
@@ -1115,6 +1232,10 @@
 	'edittoolbar-tool-bold-example' => 'Text en negreta',
 	'edittoolbar-tool-italic' => 'Cursiva',
 	'edittoolbar-tool-italic-example' => 'Text en cursiva',
+	'edittoolbar-tool-ilink' => 'Enllaç intern',
+	'edittoolbar-tool-ilink-example' => "Títol de l'enllaç",
+	'edittoolbar-tool-xlink' => 'Enllaç extern (recordeu el prefix http://)',
+	'edittoolbar-tool-xlink-example' => "http://www.example.org títol de l'enllaç",
 	'edittoolbar-tool-link' => 'Enllaç',
 	'edittoolbar-tool-link-title' => 'Insereix un enllaç',
 	'edittoolbar-tool-link-int' => 'A una pà gina del wiki',
@@ -1164,14 +1285,13 @@
 {{ns:file}}:Example.jpg|Peu2',
 	'edittoolbar-tool-newline' => 'Nova línia',
 	'edittoolbar-tool-table' => 'Taula',
+	'edittoolbar-tool-table-example' => 'Fila $1, cel·la $2',
 	'edittoolbar-tool-table-title' => 'Insereix taula',
 	'edittoolbar-tool-table-dimensions-rows' => 'Files',
 	'edittoolbar-tool-table-dimensions-columns' => 'Columnes',
-	'edittoolbar-tool-table-dimensions-headerrows' => "Files d'encapçalament",
-	'edittoolbar-tool-table-dimensions-headercolumns' => "Columnes d'encapçalament",
 	'edittoolbar-tool-table-insert' => 'Insereix',
 	'edittoolbar-tool-table-cancel' => 'Canceŀla',
-	'edittoolbar-tool-replace' => 'Reemplaça',
+	'edittoolbar-tool-replace' => 'Cerca i reemplaça',
 	'edittoolbar-tool-replace-title' => 'Cerca i reemplaça',
 	'edittoolbar-tool-replace-search' => 'Cerca:',
 	'edittoolbar-tool-replace-replace' => 'Reemplaça per:',
@@ -1179,7 +1299,7 @@
 	'edittoolbar-tool-replace-regex' => 'Tracta la cadena de cerca com una expressió regular',
 	'edittoolbar-tool-replace-all' => 'Reemplaça totes les coincidències',
 	'edittoolbar-tool-replace-button' => 'Reemplaça',
-	'edittoolbar-tool-replace-close' => 'Tanca',
+	'edittoolbar-tool-replace-close' => 'Anul·la',
 	'edittoolbar-tool-replace-nomatch' => 'La vostra cerca no ha trobat cap coincidència.',
 	'edittoolbar-section-characters' => 'Carà cters especials',
 	'edittoolbar-characters-page-latin' => 'Llatí',
@@ -1239,7 +1359,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Element de la llista</li><li>Element de la llista</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Fitxer incrustat',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Exemple.png|thumb|Text descriptiu de la imatge]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Llegenda</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Llegenda</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referències',
 	'edittoolbar-help-content-reference-syntax' => 'Text de la pà gina.&lt;ref name="test"&gt;[http://www.exemple.cat Nom de l\'enllaç], text addicional.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Text de la pà gina.<sup><a href='#'>[1]</a></sup>",
@@ -1268,6 +1388,8 @@
 	'edittoolbar-tool-bold-example' => 'دەقی تۆخ',
 	'edittoolbar-tool-italic' => 'لار',
 	'edittoolbar-tool-italic-example' => 'دەقی لار',
+	'edittoolbar-tool-ilink' => 'بەستەری ناوەکی',
+	'edittoolbar-tool-ilink-example' => 'سەردێڕی بەستەر',
 	'edittoolbar-tool-reference' => 'سەرچاوە',
 	'edittoolbar-section-advanced' => 'پەرەسەندوو',
 	'edittoolbar-tool-heading' => 'سەردێڕ',
@@ -1354,11 +1476,16 @@
 	'edittoolbar' => 'Editační panel nástrojů',
 	'edittoolbar-desc' => 'Editační panel nástrojů s vylepšenou použitelností',
 	'edittoolbar-preference' => 'Zapnout vylepšený panel nástrojů',
+	'edittoolbar-cgd-preference' => 'Zobrazovat pomocníky pro přidávání pokročilejší wikisyntaxe',
 	'edittoolbar-loading' => 'Načítá se…',
 	'edittoolbar-tool-bold' => 'Tučně',
 	'edittoolbar-tool-bold-example' => 'Tučný text',
 	'edittoolbar-tool-italic' => 'Kurzíva',
 	'edittoolbar-tool-italic-example' => 'Text kurzívou',
+	'edittoolbar-tool-ilink' => 'Vnitřní odkaz',
+	'edittoolbar-tool-ilink-example' => 'Název odkazu',
+	'edittoolbar-tool-xlink' => 'Externí odkaz (nezapomeňte na předponu http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com Titulek odkazu',
 	'edittoolbar-tool-link' => 'Odkaz',
 	'edittoolbar-tool-link-title' => 'Vložit odkaz',
 	'edittoolbar-tool-link-int' => 'Na wiki stránku',
@@ -1374,6 +1501,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Neplatný název',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Zjišťování existence stránky…',
 	'edittoolbar-tool-link-int-invalid' => 'Vámi zadaný název je neplatný.',
+	'edittoolbar-tool-link-ext-invalid' => 'Uvedené URL je neplatné.',
 	'edittoolbar-tool-file' => 'Vložený soubor',
 	'edittoolbar-tool-file-example' => 'Příklad.jpg',
 	'edittoolbar-tool-reference' => 'Poznámky',
@@ -1408,6 +1536,18 @@
 {{ns:file}}:Příklad.jpg|Titulek 2',
 	'edittoolbar-tool-newline' => 'Nový řádek',
 	'edittoolbar-tool-table' => 'Tabulka',
+	'edittoolbar-tool-table-example-old' => '-
+! hlavička 1
+! hlavička 2
+! hlavička 3
+|-
+| řádek 1, buňka 1
+| řádek 1, buňka 2
+| řádek 1, buňka 3
+|-
+| řádek 2, buňka 1
+| řádek 2, buňka 2
+| řádek 2, buňka 3',
 	'edittoolbar-tool-table-example' => 'Řádek $1, buňka $2',
 	'edittoolbar-tool-table-example-header' => 'Řádek $1, buňka $2 (záhlaví)',
 	'edittoolbar-tool-table-title' => 'Vložení tabulky',
@@ -1417,7 +1557,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Přidat řádek s hlavičkou',
 	'edittoolbar-tool-table-insert' => 'Vložit',
 	'edittoolbar-tool-table-cancel' => 'Storno',
-	'edittoolbar-tool-replace' => 'Nahradit',
+	'edittoolbar-tool-replace' => 'Najít a nahradit',
 	'edittoolbar-tool-replace-title' => 'Najít a nahradit',
 	'edittoolbar-tool-replace-search' => 'Najít:',
 	'edittoolbar-tool-replace-replace' => 'Nahradit za:',
@@ -1425,8 +1565,9 @@
 	'edittoolbar-tool-replace-regex' => 'Hledat pomocí regulárního výrazu',
 	'edittoolbar-tool-replace-all' => 'Nahradit všechny výskyty',
 	'edittoolbar-tool-replace-button' => 'Nahradit',
-	'edittoolbar-tool-replace-close' => 'Zavřít',
+	'edittoolbar-tool-replace-close' => 'Storno',
 	'edittoolbar-tool-replace-nomatch' => 'Zadanému hledání nic neodpovídá.',
+	'edittoolbar-tool-replace-success' => 'Nahrazeno $1krát.',
 	'edittoolbar-section-characters' => 'Zvláštní znaky',
 	'edittoolbar-characters-page-latin' => 'Latinka',
 	'edittoolbar-characters-page-latinextended' => 'Rozšíření latinky',
@@ -1486,7 +1627,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Položka seznamu</li><li>Položka seznamu</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Vložení souboru',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Příklad.png|thumb|Text titulku]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Text titulku' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Zvětšit' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Text titulku</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Text titulku' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Zvětšit' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Text titulku</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Poznámka',
 	'edittoolbar-help-content-reference-syntax' => 'Text stránky.&lt;ref name="test"&gt;[http://www.example.org Text odkazu], další text.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Text stránky.<sup><a href='#'>[1]</a></sup>",
@@ -1503,6 +1644,175 @@
 	'edittoolbar-help-content-indent-result' => 'Základní text<dl><dd>Odsazený text<dl><dd>Odsazený text</dd></dl></dd></dl>',
 );
 
+/** Welsh (Cymraeg)
+ * @author Lloffiwr
+ */
+$messages['cy'] = array(
+	'edittoolbar' => 'Bar offer golygu',
+	'edittoolbar-preference' => "Defnyddio'r bar offer golygu estynedig",
+	'edittoolbar-loading' => "Wrthi'n llwytho...",
+	'edittoolbar-tool-bold' => 'Praff',
+	'edittoolbar-tool-bold-example' => 'Testun praff',
+	'edittoolbar-tool-italic' => 'Italig',
+	'edittoolbar-tool-italic-example' => 'Testun italig',
+	'edittoolbar-tool-ilink' => 'Cyswllt mewnol',
+	'edittoolbar-tool-ilink-example' => 'Teitl y cyswllt',
+	'edittoolbar-tool-xlink' => 'Cyswllt allanol (cofiwch rhagddodi http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com teitl y cyswllt',
+	'edittoolbar-tool-link' => 'Cyswllt',
+	'edittoolbar-tool-link-title' => 'Mewnosod cyswllt',
+	'edittoolbar-tool-link-int' => 'At dudalen wici',
+	'edittoolbar-tool-link-int-target' => 'Teitl y dudalen:',
+	'edittoolbar-tool-link-int-text' => 'Testun y cyswllt:',
+	'edittoolbar-tool-link-ext' => 'At dudalen we allanol',
+	'edittoolbar-tool-link-ext-target' => 'URL y cyswllt:',
+	'edittoolbar-tool-link-ext-text' => 'Ysgrifen y cyswllt:',
+	'edittoolbar-tool-link-insert' => 'Mewnosod cyswllt',
+	'edittoolbar-tool-link-cancel' => 'Diddymu',
+	'edittoolbar-tool-link-int-target-status-exists' => 'Y dudalen ar gael',
+	'edittoolbar-tool-link-int-target-status-notexists' => "Nid yw'r dudalen ar gael",
+	'edittoolbar-tool-link-int-target-status-invalid' => 'Teitl annilys',
+	'edittoolbar-tool-link-int-target-status-loading' => "Wrthi'n gwirio a yw'r dudalen ar gael...",
+	'edittoolbar-tool-link-int-invalid' => 'Ysgrifennwyd teitl annilys.',
+	'edittoolbar-tool-link-ext-invalid' => "Nid yw'r URL a nodwyd yn ddilys.",
+	'edittoolbar-tool-file' => 'Ffeil mewnosodol',
+	'edittoolbar-tool-file-example' => 'Enghraifft.jpg',
+	'edittoolbar-tool-reference' => 'Troednodyn',
+	'edittoolbar-tool-reference-example' => 'Ysgrifennwch droednodyn fan hyn',
+	'edittoolbar-tool-signature' => 'Llofnod a stamp amser',
+	'edittoolbar-section-advanced' => 'Uwch',
+	'edittoolbar-tool-heading' => 'Pennawd',
+	'edittoolbar-tool-heading-1' => 'Lefel 1',
+	'edittoolbar-tool-heading-2' => 'Lefel 2',
+	'edittoolbar-tool-heading-3' => 'Lefel 3',
+	'edittoolbar-tool-heading-4' => 'Lefel 4',
+	'edittoolbar-tool-heading-5' => 'Lefel 5',
+	'edittoolbar-tool-heading-example' => 'Ysgrifennwch y pennawd fan hyn',
+	'edittoolbar-group-list' => 'Rhestr',
+	'edittoolbar-tool-ulist' => 'Rhestr gyda bwledi',
+	'edittoolbar-tool-ulist-example' => 'Eitem ar restr gyda bwledi',
+	'edittoolbar-tool-olist' => "Rhestr wedi'i rhifo",
+	'edittoolbar-tool-olist-example' => "Eitem ar restr wedi'i rhifo",
+	'edittoolbar-group-size' => 'Maint',
+	'edittoolbar-tool-big' => 'Mawr',
+	'edittoolbar-tool-big-example' => 'Llythrennau mawr',
+	'edittoolbar-tool-small' => 'Bach',
+	'edittoolbar-tool-small-example' => 'Ysgrifen bach',
+	'edittoolbar-group-baseline' => 'Gwaelodlin',
+	'edittoolbar-tool-superscript' => 'Uwchysgrif',
+	'edittoolbar-tool-superscript-example' => 'Ysgrifennwch uwchysgrif fan hyn',
+	'edittoolbar-tool-subscript' => 'Isysgrif',
+	'edittoolbar-tool-subscript-example' => 'Ysgrifennwch isysgrif fan hyn',
+	'edittoolbar-group-insert' => 'Mewnosod',
+	'edittoolbar-tool-gallery' => 'Galeri lluniau',
+	'edittoolbar-tool-gallery-example' => '{{ns:file}}:Enghraifft.jpg|Disgrifiad1
+{{ns:file}}:Enghraifft.jpg|Disgrifiad2',
+	'edittoolbar-tool-newline' => 'Llinell newydd',
+	'edittoolbar-tool-table' => 'Tabl',
+	'edittoolbar-tool-table-example-old' => '-
+! pennawd 1
+! pennawd 2
+! pennawd 3
+|-
+| rhes 1, cell 1
+| rhes 1, cell 2
+| rhes 1, cell 3
+|-
+| rhes 2, cell 1
+| rhes 2, cell 2
+| rhes 2, cell 3',
+	'edittoolbar-tool-table-example' => 'Rhes $1, cell $2',
+	'edittoolbar-tool-table-example-header' => 'Rhes $1, cell $2 (pennawd)',
+	'edittoolbar-tool-table-title' => 'Mewnosod tabl',
+	'edittoolbar-tool-table-dimensions' => 'Hyd a lled',
+	'edittoolbar-tool-table-dimensions-rows' => 'Rhesi',
+	'edittoolbar-tool-table-dimensions-columns' => 'Colofnau',
+	'edittoolbar-tool-table-dimensions-header' => 'Cynhwysir rhes y penawdau',
+	'edittoolbar-tool-table-insert' => 'Mewnosod',
+	'edittoolbar-tool-table-cancel' => 'Diddymu',
+	'edittoolbar-tool-replace' => 'Canfod a disodli',
+	'edittoolbar-tool-replace-title' => 'Canfod a disodli',
+	'edittoolbar-tool-replace-search' => 'Chwilier am:',
+	'edittoolbar-tool-replace-replace' => 'Gosoder yn ei le:',
+	'edittoolbar-tool-replace-case' => 'Trin llythrennau mawr a bach fel llythrennau gwahanol',
+	'edittoolbar-tool-replace-all' => 'Disodler y cyfan',
+	'edittoolbar-tool-replace-button' => 'Disodler',
+	'edittoolbar-tool-replace-close' => 'Diddymu',
+	'edittoolbar-tool-replace-nomatch' => 'Ni chanfyddwyd yr hyn a chwiliwyd amdano.',
+	'edittoolbar-tool-replace-success' => 'Gwnaethpwyd $1 amnewidiad.',
+	'edittoolbar-section-characters' => 'Nodau arbennig',
+	'edittoolbar-characters-page-latin' => 'Lladin',
+	'edittoolbar-characters-page-latinextended' => 'Lladin estynedig',
+	'edittoolbar-characters-page-ipa' => 'Yr wyddor phonetig rhyngwladol (IPA)',
+	'edittoolbar-characters-page-symbols' => 'Symbolau',
+	'edittoolbar-characters-page-greek' => 'Groeg',
+	'edittoolbar-characters-page-cyrillic' => 'Cyrilig',
+	'edittoolbar-characters-page-arabic' => 'Arabeg',
+	'edittoolbar-characters-page-hebrew' => 'Hebraeg',
+	'edittoolbar-characters-page-telugu' => 'Telugu',
+	'edittoolbar-section-help' => 'Cymorth',
+	'edittoolbar-help-heading-description' => 'Disgrifiad',
+	'edittoolbar-help-heading-syntax' => 'Pan deipiwch hyn',
+	'edittoolbar-help-heading-result' => 'fe gewch',
+	'edittoolbar-help-page-format' => 'Fformatio',
+	'edittoolbar-help-page-link' => 'Cysylltau',
+	'edittoolbar-help-page-heading' => 'Penawdau',
+	'edittoolbar-help-page-list' => 'Rhestri',
+	'edittoolbar-help-page-file' => 'Ffeiliau',
+	'edittoolbar-help-page-reference' => 'Troednodion',
+	'edittoolbar-help-page-discussion' => 'Sgwrs',
+	'edittoolbar-help-content-italic-description' => 'Italig',
+	'edittoolbar-help-content-italic-syntax' => "''Ysgrifen italig''",
+	'edittoolbar-help-content-italic-result' => '<em>Ysgrifen italig</em>',
+	'edittoolbar-help-content-bold-description' => 'Praff',
+	'edittoolbar-help-content-bold-syntax' => "'''Testun praff'''",
+	'edittoolbar-help-content-bold-result' => '<strong>Testun praff</strong>',
+	'edittoolbar-help-content-bolditalic-description' => 'Praff &amp; italig',
+	'edittoolbar-help-content-bolditalic-syntax' => "'''''Ysgrifen praff &amp; italig'''''",
+	'edittoolbar-help-content-bolditalic-result' => '<strong><em>Ysgrifen praff &amp; italig</em></strong>',
+	'edittoolbar-help-content-ilink-description' => 'Cyswllt mewnol',
+	'edittoolbar-help-content-ilink-syntax' => '[[Page title|Label y cyswllt]]<br />[[Teitl y dudalen]]',
+	'edittoolbar-help-content-ilink-result' => "<a href='#'>Label y cyswllt</a><br /><a href='#'>Teitl y dudalen</a>",
+	'edittoolbar-help-content-xlink-description' => 'Cyswllt allanol',
+	'edittoolbar-help-content-xlink-syntax' => '[http://www.enghraifft.org Label y cyswllt]<br />[http://www.enghraifft.org]<br />http://www.enghraifft.org',
+	'edittoolbar-help-content-heading1-description' => 'pennawd ar lefel 1',
+	'edittoolbar-help-content-heading1-syntax' => '= Y pennawd =',
+	'edittoolbar-help-content-heading1-result' => '<h1>Y pennawd</h1>',
+	'edittoolbar-help-content-heading2-description' => 'pennawd ar lefel 2',
+	'edittoolbar-help-content-heading2-syntax' => '== Y pennawd ==',
+	'edittoolbar-help-content-heading2-result' => '<h2>Y pennawd</h2>',
+	'edittoolbar-help-content-heading3-description' => 'pennawd ar lefel 3',
+	'edittoolbar-help-content-heading3-syntax' => '=== Y pennawd ===',
+	'edittoolbar-help-content-heading3-result' => '<h3>Y pennawd</h3>',
+	'edittoolbar-help-content-heading4-description' => 'pennawd ar lefel 4',
+	'edittoolbar-help-content-heading4-syntax' => '==== Y pennawd ====',
+	'edittoolbar-help-content-heading4-result' => '<h4>Y pennawd</h4>',
+	'edittoolbar-help-content-heading5-description' => 'pennawd ar lefel 5',
+	'edittoolbar-help-content-heading5-syntax' => '===== Y pennawd =====',
+	'edittoolbar-help-content-heading5-result' => '<h5>Y pennawd</h5>',
+	'edittoolbar-help-content-ulist-description' => 'Rhestr gyda bwledi',
+	'edittoolbar-help-content-ulist-syntax' => '* Eitem ar y rhestr<br />* Eitem ar y rhestr',
+	'edittoolbar-help-content-ulist-result' => '<ul><li>Eitem ar y rhestr</li><li>Eitem ar y rhestr</li></ul>',
+	'edittoolbar-help-content-olist-description' => "Rhestr wedi'i rhifo",
+	'edittoolbar-help-content-olist-syntax' => '# Eitem ar y rhestr<br /># Eitem ar y rhestr',
+	'edittoolbar-help-content-olist-result' => '<ol><li>Eitem ar y rhestr</li><li>Eitem ar y rhestr</li></ol>',
+	'edittoolbar-help-content-file-description' => 'Ffeil mewnosodol',
+	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Enghraifft.png|mân-lun|Disgrifiad]]',
+	'edittoolbar-help-content-reference-description' => 'Troednodyn',
+	'edittoolbar-help-content-reference-syntax' => 'Testun y dudalen.&lt;ref name="test"&gt;[http://www.enghraifft.org ysgrifen y cyswllt], ysgrifen ychwanegol.&lt;/ref&gt;',
+	'edittoolbar-help-content-reference-result' => 'Testun y dudalen.',
+	'edittoolbar-help-content-rereference-description' => 'Ail-ddefnyddio troednodyn',
+	'edittoolbar-help-content-rereference-result' => "Testun y dudalen.<sup><a href='#'>[1]</a></sup>",
+	'edittoolbar-help-content-showreferences-description' => 'Dangos y troednodion',
+	'edittoolbar-help-content-signaturetimestamp-description' => 'Llofnod gyda stamp amser',
+	'edittoolbar-help-content-signaturetimestamp-result' => "<a href='#' title='{{#special:mypage}}'>Enw defnyddiwr</a> (<a href='#' title='{{#special:mytalk}}'>sgwrs</a>) 15:54, 10 Mehefin 2009 (UTC)",
+	'edittoolbar-help-content-signature-description' => 'Llofnod',
+	'edittoolbar-help-content-signature-result' => "<a href='#' title='{{#special:mypage}}'>Enw defnyddiwr</a> (<a href='#' title='{{#special:mytalk}}'>sgwrs</a>)",
+	'edittoolbar-help-content-indent-description' => 'Mewnoli',
+	'edittoolbar-help-content-indent-syntax' => "Ysgrifen rheolaidd<br />:Ysgrifen wedi'i mewnoli<br />::Ysgrifen wedi'i mewnoli",
+	'edittoolbar-help-content-indent-result' => "Ysgrifen rheolaidd<dl><dd>Ysgrifen wedi'i mewnoli<dl><dd>Ysgrifen wedi'i mewnoli</dd></dl></dd></dl>",
+);
+
 /** Danish (Dansk)
  * @author Byrial
  * @author Leolaursen
@@ -1516,6 +1826,10 @@
 	'edittoolbar-tool-bold-example' => 'Fed tekst',
 	'edittoolbar-tool-italic' => 'Kursiv',
 	'edittoolbar-tool-italic-example' => 'Kursiv tekst',
+	'edittoolbar-tool-ilink' => 'Intern henvisning',
+	'edittoolbar-tool-ilink-example' => 'Henvisningstekst',
+	'edittoolbar-tool-xlink' => 'Ekstern henvisning (husk http:// først)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com henvisningstekst',
 	'edittoolbar-tool-link' => 'Henvisning',
 	'edittoolbar-tool-link-title' => 'Indsæt henvisning',
 	'edittoolbar-tool-link-int' => 'Til en wikiartikel/-side',
@@ -1531,6 +1845,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Ugyldig titel',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Kontrollerer om siden findes ...',
 	'edittoolbar-tool-link-int-invalid' => 'Titlen du gav, er ugyldig.',
+	'edittoolbar-tool-link-ext-invalid' => "URL'en som du angav, er ugyldig.",
 	'edittoolbar-tool-file' => 'Indlejret fil',
 	'edittoolbar-tool-file-example' => 'Eksempel.jpg',
 	'edittoolbar-tool-reference' => 'Fodnote',
@@ -1571,11 +1886,9 @@
 	'edittoolbar-tool-table-dimensions' => 'Dimensioner',
 	'edittoolbar-tool-table-dimensions-rows' => 'Rækker',
 	'edittoolbar-tool-table-dimensions-columns' => 'Kolonner',
-	'edittoolbar-tool-table-dimensions-headerrows' => 'Overskriftsrækker',
-	'edittoolbar-tool-table-dimensions-headercolumns' => 'Overskriftskolonner',
 	'edittoolbar-tool-table-insert' => 'Indsæt',
 	'edittoolbar-tool-table-cancel' => 'Annullér',
-	'edittoolbar-tool-replace' => 'Erstat',
+	'edittoolbar-tool-replace' => 'Søg og erstat',
 	'edittoolbar-tool-replace-title' => 'Søg og erstat',
 	'edittoolbar-tool-replace-search' => 'Søg efter:',
 	'edittoolbar-tool-replace-replace' => 'Erstat med:',
@@ -1583,7 +1896,7 @@
 	'edittoolbar-tool-replace-regex' => 'Behandl søgestrengen som et regulært udtryk',
 	'edittoolbar-tool-replace-all' => 'Erstat alle forekomster',
 	'edittoolbar-tool-replace-button' => 'Erstat',
-	'edittoolbar-tool-replace-close' => 'Luk',
+	'edittoolbar-tool-replace-close' => 'Annullér',
 	'edittoolbar-tool-replace-nomatch' => 'Din søgning gav ingen resultater',
 	'edittoolbar-section-characters' => 'Specialtegn',
 	'edittoolbar-characters-page-latin' => 'Latin',
@@ -1644,7 +1957,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Listeelement</li><li>Listeelement</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Indlejret fil',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Billedtekst]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Billedtekst' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Forstør' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Billedtekst</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Billedtekst' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Forstør' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Billedtekst</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Fodnote',
 	'edittoolbar-help-content-reference-syntax' => 'Sidetekst.&lt;ref name="test"&gt;[http://www.example.org Henvisningstekst], yderligere tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Sidetekst.<sup><a href='#'>[1]</a></sup>",
@@ -1676,11 +1989,16 @@
 	'edittoolbar' => 'Bearbeiten-Werkzeugleiste',
 	'edittoolbar-desc' => 'Bearbeiten-Werkzeugleiste mit erweiterter Benutzerfreundlichkeit',
 	'edittoolbar-preference' => 'Erweiterte Bearbeiten-Werkzeugleiste aktivieren',
+	'edittoolbar-cgd-preference' => 'Hilfe für erweiterte Wikisyntax aktivieren',
 	'edittoolbar-loading' => 'Laden …',
 	'edittoolbar-tool-bold' => 'Fett',
 	'edittoolbar-tool-bold-example' => 'Fetter Text',
 	'edittoolbar-tool-italic' => 'Kursiv',
 	'edittoolbar-tool-italic-example' => 'Kursiver Text',
+	'edittoolbar-tool-ilink' => 'Interner Link',
+	'edittoolbar-tool-ilink-example' => 'Linktitel',
+	'edittoolbar-tool-xlink' => 'Externer Link (http:// beachten)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com Link-Text',
 	'edittoolbar-tool-link' => 'Link',
 	'edittoolbar-tool-link-title' => 'Link einfügen',
 	'edittoolbar-tool-link-int' => 'Zu einer Wiki-Seite',
@@ -1696,6 +2014,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Ungültiger Titel',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Prüfe, ob Seite existiert …',
 	'edittoolbar-tool-link-int-invalid' => 'Der von dir angegebene Seitenname ist ungültig.',
+	'edittoolbar-tool-link-ext-invalid' => 'Die angegebene URL ist ungültig.',
 	'edittoolbar-tool-file' => 'Eingebettete Datei',
 	'edittoolbar-tool-file-example' => 'Beispiel.jpg',
 	'edittoolbar-tool-reference' => 'Quellennachweis',
@@ -1730,6 +2049,18 @@
 {{ns:file}}:Beispiel.jpg|Beschreibung2',
 	'edittoolbar-tool-newline' => 'Neue Zeile',
 	'edittoolbar-tool-table' => 'Tabelle',
+	'edittoolbar-tool-table-example-old' => '-
+! Ãœberschrift 1
+! Ãœberschrift 2
+! Ãœberschrift 3
+|-
+| Zeile 1, Zelle 1
+| Zeile 1, Zelle 2
+| Zeile 1, Zelle 3
+|-
+| Zeile 2, Zelle 1
+| Zeile 2, Zelle 2
+| Zeile 2, Zelle 3',
 	'edittoolbar-tool-table-example' => 'Zeile $1, Zelle $2',
 	'edittoolbar-tool-table-example-header' => 'Zeile $1, Zelle $2 (Ãœberschrift)',
 	'edittoolbar-tool-table-title' => 'Tabelle einfügen',
@@ -1739,7 +2070,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Kopfzeile einschließen',
 	'edittoolbar-tool-table-insert' => 'Einfügen',
 	'edittoolbar-tool-table-cancel' => 'Abbrechen',
-	'edittoolbar-tool-replace' => 'Ersetzen',
+	'edittoolbar-tool-replace' => 'Suchen und Ersetzen',
 	'edittoolbar-tool-replace-title' => 'Suchen und Ersetzen',
 	'edittoolbar-tool-replace-search' => 'Suche nach:',
 	'edittoolbar-tool-replace-replace' => 'Ersetze durch:',
@@ -1747,8 +2078,9 @@
 	'edittoolbar-tool-replace-regex' => 'Suchzeichenkette als regulären Ausdruck behandeln',
 	'edittoolbar-tool-replace-all' => 'Ersetze alle Vorkommen',
 	'edittoolbar-tool-replace-button' => 'Ersetzen',
-	'edittoolbar-tool-replace-close' => 'Schließen',
+	'edittoolbar-tool-replace-close' => 'Abbrechen',
 	'edittoolbar-tool-replace-nomatch' => 'Deine Suche hat keine Ergebnisse erzielt.',
+	'edittoolbar-tool-replace-success' => '$1 Ersetzung(en) durchgeführt.',
 	'edittoolbar-section-characters' => 'Sonderzeichen',
 	'edittoolbar-characters-page-latin' => 'Lateinisch',
 	'edittoolbar-characters-page-latinextended' => 'Lateinisch, erweitert',
@@ -1808,7 +2140,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Listeneintrag</li><li>Listeneintrag</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Eingebettete Datei',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Beispiel.png|thumb|Beschreibung]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Beschreibung' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergrößern' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Beschreibung</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Beschreibung' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergrößern' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Beschreibung</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Quellennachweis',
 	'edittoolbar-help-content-reference-syntax' => 'Seitentext.&lt;ref name="test"&gt;[http://www.beispiel.org Linktext], zusätzlicher Text.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Seitentext.<sup><a href='#'>[1]</a></sup>",
@@ -1841,11 +2173,16 @@
 	'edittoolbar' => 'Wobźěłowańska rědowa kšoma',
 	'edittoolbar-desc' => 'Rědowa kšoma za wobźěłowanje bokow z pólěpšoneju wužywajobnosću',
 	'edittoolbar-preference' => 'Pólěpšonu wobźěłowańsku rědowu kšomu aktiwěrowaś',
+	'edittoolbar-cgd-preference' => 'Pomoc za pśidawanje rozšyrjonego wikiteksta zmóžniś',
 	'edittoolbar-loading' => 'Zacytujo se...',
 	'edittoolbar-tool-bold' => 'Tucny',
 	'edittoolbar-tool-bold-example' => 'Tucny tekst',
 	'edittoolbar-tool-italic' => 'Kursiwny',
 	'edittoolbar-tool-italic-example' => 'Kursiwny tekst',
+	'edittoolbar-tool-ilink' => 'Interny wótkaz',
+	'edittoolbar-tool-ilink-example' => 'Titel wótkaza',
+	'edittoolbar-tool-xlink' => 'Eksterny wótkaz (njezabydni prefiks http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.pśikład.de titel wótkaza',
 	'edittoolbar-tool-link' => 'Wótkaz',
 	'edittoolbar-tool-link-title' => 'Wótkaz zasunuś',
 	'edittoolbar-tool-link-int' => 'K wikijowemu nastawkoju/bokoju',
@@ -1861,6 +2198,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Njepłaśiwy titel',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Eksistenca boka se pśekontrolěrujo...',
 	'edittoolbar-tool-link-int-invalid' => 'Titel, kótaryž sy pódał, jo njepłaśiwy.',
+	'edittoolbar-tool-link-ext-invalid' => 'URL, kótaryž sy pódał, jo njepłaśiwy.',
 	'edittoolbar-tool-file' => 'Zasajźona dataja',
 	'edittoolbar-tool-file-example' => 'Psikład.jpg',
 	'edittoolbar-tool-reference' => 'Referenca',
@@ -1895,6 +2233,18 @@
 {{ns:file}}:Pśikład.jpg|Pópisanje2',
 	'edittoolbar-tool-newline' => 'Nowa smužka',
 	'edittoolbar-tool-table' => 'Tabela',
+	'edittoolbar-tool-table-example-old' => '-
+! głowa 1
+! głowa 2
+! głowa 3
+|-
+| smužka 1, cela 1
+| smužka 1, cela 2
+| smužka 1, cela 3
+|-
+| smužka 2, cela 1
+| smužka 2, cela 2
+| smužka 2, cela 3',
 	'edittoolbar-tool-table-example' => 'Smužka $1, cela $2',
 	'edittoolbar-tool-table-example-header' => 'Smužka $1, cela $2 (głowa)',
 	'edittoolbar-tool-table-title' => 'Tabelu zasunuÅ›',
@@ -1904,7 +2254,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Smužku głowy zapśěgnuś',
 	'edittoolbar-tool-table-insert' => 'ZasunuÅ›',
 	'edittoolbar-tool-table-cancel' => 'Pśetergnuś',
-	'edittoolbar-tool-replace' => 'Wuměniś',
+	'edittoolbar-tool-replace' => 'Pytaś a wuměniś',
 	'edittoolbar-tool-replace-title' => 'Pytaś a wuměniś',
 	'edittoolbar-tool-replace-search' => 'PytaÅ› za:',
 	'edittoolbar-tool-replace-replace' => 'Wuměniś pśez:',
@@ -1912,8 +2262,9 @@
 	'edittoolbar-tool-replace-regex' => 'Z pytańskim teksto ako z regularnym wurazom wobchadaś',
 	'edittoolbar-tool-replace-all' => 'Wšykne wustupowanja wuměniś',
 	'edittoolbar-tool-replace-button' => 'Wuměniś',
-	'edittoolbar-tool-replace-close' => 'ZacyniÅ›',
+	'edittoolbar-tool-replace-close' => 'Pśetergnuś',
 	'edittoolbar-tool-replace-nomatch' => 'Twójo pytanje njejo žedne wustupowanje namakało.',
+	'edittoolbar-tool-replace-success' => '$1 {{PLURAL:$1|wuměnjenje pśewjeźone|wuměnjeni pśewjeźonej|wuměnjenja pśewjeźone|wuměnjenjow pśewjeźonych}}.',
 	'edittoolbar-section-characters' => 'Specialne znamješka',
 	'edittoolbar-characters-page-latin' => 'Łatyńske',
 	'edittoolbar-characters-page-latinextended' => 'Łatyńske rozšyrjone',
@@ -1973,7 +2324,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Lisćinowy zapisk</li><li>Lisćinowy zapisk</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Zasajźona dataja',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Pśikład.png|thumb|Wobrazowe pópisanje]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Wobrazowe pópisanje' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Powětšyś' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Wobrazowe pópisanje</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Wobrazowe pópisanje' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Powětšyś' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Wobrazowe pópisanje</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referenca',
 	'edittoolbar-help-content-reference-syntax' => 'Tekst boka.&lt;ref name="test"&gt;[http://www.example.org Tekst wótkaza], pśidatny tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Tekst boka.<sup><a href='#'>[1]</a></sup>",
@@ -1992,6 +2343,7 @@
 
 /** Greek (Ελληνικά)
  * @author Consta
+ * @author Crazymadlover
  * @author Omnipaedista
  * @author ZaDiak
  */
@@ -2004,6 +2356,10 @@
 	'edittoolbar-tool-bold-example' => 'Έντονο κείμενο',
 	'edittoolbar-tool-italic' => 'Πλάγια',
 	'edittoolbar-tool-italic-example' => 'Κείμενο με πλάγιους χαρακτήρες',
+	'edittoolbar-tool-ilink' => 'Εσωτερικός σύνδεσμος',
+	'edittoolbar-tool-ilink-example' => 'Τίτλος συνδέσμου',
+	'edittoolbar-tool-xlink' => 'Εξωτερικός σύνδεσμος (μην ξεχάστε το πρόθεμα http:// )',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com τίτλος συνδέσμου',
 	'edittoolbar-tool-link' => 'Σύνδεσμος',
 	'edittoolbar-tool-link-title' => 'Εισαγωγή συνδέσμου',
 	'edittoolbar-tool-link-int' => 'Σε μία σελίδα wiki',
@@ -2019,6 +2375,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Άκυρος τίτλος',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Έλεγχος ύπαρξης σελίδας...',
 	'edittoolbar-tool-link-int-invalid' => 'Ο τίτλος που καθορίσατε είναι μη έγκυρος.',
+	'edittoolbar-tool-link-ext-invalid' => 'Το URL που καθορίσατε είναι μη έγκυρο.',
 	'edittoolbar-tool-file' => 'Ενσωματωμένο αρχείο',
 	'edittoolbar-tool-file-example' => 'Paradeigma.jpg',
 	'edittoolbar-tool-reference' => 'Παραπομπή',
@@ -2062,7 +2419,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Περίληψη σειράς επικεφαλίδας',
 	'edittoolbar-tool-table-insert' => 'Εισαγωγή',
 	'edittoolbar-tool-table-cancel' => 'Άκυρο',
-	'edittoolbar-tool-replace' => 'Αντικατάσταση',
+	'edittoolbar-tool-replace' => 'Αναζήτηση και αντικατάσταση',
 	'edittoolbar-tool-replace-title' => 'Αναζήτηση και αντικατάσταση',
 	'edittoolbar-tool-replace-search' => 'Αναζήτηση για:',
 	'edittoolbar-tool-replace-replace' => 'Αντικατάσταση από:',
@@ -2070,8 +2427,9 @@
 	'edittoolbar-tool-replace-regex' => 'Αντιμετώπιση του "αναζήτηση ορμαθού" ως τακτικής έκφρασης',
 	'edittoolbar-tool-replace-all' => 'Αντικατάσταση όλων',
 	'edittoolbar-tool-replace-button' => 'Αντικατάσταση',
-	'edittoolbar-tool-replace-close' => 'Κλείσιμο',
+	'edittoolbar-tool-replace-close' => 'Ακύρωση',
 	'edittoolbar-tool-replace-nomatch' => 'Η αναζήτηση δεν ταίριαξε με κάτι.',
+	'edittoolbar-tool-replace-success' => 'Έγιναν $1 αντικαταστάσεις.',
 	'edittoolbar-section-characters' => 'Ειδικοί χαρακτήρες',
 	'edittoolbar-characters-page-latin' => 'Λατινικό',
 	'edittoolbar-characters-page-latinextended' => 'Προέκταση του λατινικού',
@@ -2131,7 +2489,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Στοιχείο λίστας</li><li>Στοιχείο λίστας</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Ενσωματωμένο αρχείο',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Κείμενο περιγραφής]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Κείμενο τίτλων' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Κείμενο τίτλων</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Κείμενο τίτλων' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Κείμενο τίτλων</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Παραπομπή',
 	'edittoolbar-help-content-reference-syntax' => 'Κείμενο σελίδας.&lt;ref name="test"&gt;[http://www.example.org Κείμενο συνδέσμου], επιπλέον κείμενο.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Κείμενο σελίδας.<sup><a href='#'>[1]</a></sup>",
@@ -2155,11 +2513,16 @@
 	'edittoolbar' => 'Redakta ilobreto',
 	'edittoolbar-desc' => 'Redakta ilobreto kun plibonigita uzebleco',
 	'edittoolbar-preference' => 'Åœalti plibonigitan redaktan ilobreton',
+	'edittoolbar-cgd-preference' => 'Åœalti helpon por aldoni progresan vikitekston',
 	'edittoolbar-loading' => 'Ŝarĝante...',
 	'edittoolbar-tool-bold' => 'Grasa',
 	'edittoolbar-tool-bold-example' => 'Grasa teksto',
 	'edittoolbar-tool-italic' => 'Kursiva',
 	'edittoolbar-tool-italic-example' => 'Kursiva teksto',
+	'edittoolbar-tool-ilink' => 'Interna ligilo',
+	'edittoolbar-tool-ilink-example' => 'Ligila titolo',
+	'edittoolbar-tool-xlink' => 'Ekstera ligilo (Memoru prefikson http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.ekzemplo.com ligila titolo',
 	'edittoolbar-tool-link' => 'Ligilo',
 	'edittoolbar-tool-link-title' => 'Enmeti ligilon',
 	'edittoolbar-tool-link-int' => 'Iri vikian paĝon',
@@ -2175,6 +2538,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Malvalida titolo',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Kontrolante ekziston de paĝo...',
 	'edittoolbar-tool-link-int-invalid' => 'La titolo kiun vi enmetis estas malvalida.',
+	'edittoolbar-tool-link-ext-invalid' => 'La URL-o kiun vi enigis estas malvalida.',
 	'edittoolbar-tool-file' => 'Enmetata dosiero',
 	'edittoolbar-tool-file-example' => 'Ekzemplo.jpg',
 	'edittoolbar-tool-reference' => 'Referenco',
@@ -2209,6 +2573,18 @@
 {{ns:file}}:Ekzemplo.jpg|Teksto2 pri dosiero',
 	'edittoolbar-tool-newline' => 'Nova linio',
 	'edittoolbar-tool-table' => 'Tabelo',
+	'edittoolbar-tool-table-example-old' => '-
+! titolo 1
+! titolo 2
+! titolo 3
+|-
+| vico 1, ĉelo 1
+| vico 1, ĉelo 2
+| vico 1, ĉelo 3
+|-
+| vico 2, ĉelo 1
+| vico 2, ĉelo 2
+| vico 2, ĉelo 3',
 	'edittoolbar-tool-table-example' => 'Vico $1, ĉelo $2',
 	'edittoolbar-tool-table-example-header' => 'Vico $1, ĉelo $2 (titolo)',
 	'edittoolbar-tool-table-title' => 'Enmeti tabelon',
@@ -2218,7 +2594,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Inkluzivi titolan vicon',
 	'edittoolbar-tool-table-insert' => 'Enmeti',
 	'edittoolbar-tool-table-cancel' => 'Nuligi',
-	'edittoolbar-tool-replace' => 'AnstataÅ­igi',
+	'edittoolbar-tool-replace' => 'Serĉi kaj anstataŭigi',
 	'edittoolbar-tool-replace-title' => 'Serĉi kaj anstataŭigi',
 	'edittoolbar-tool-replace-search' => 'Serĉi:',
 	'edittoolbar-tool-replace-replace' => 'AnstataÅ­igi kun:',
@@ -2226,8 +2602,9 @@
 	'edittoolbar-tool-replace-regex' => 'Trakti signoĉenon kiel regularan esprimon',
 	'edittoolbar-tool-replace-all' => 'Anstataŭigi ĉiujn aperojn',
 	'edittoolbar-tool-replace-button' => 'AnstataÅ­igi',
-	'edittoolbar-tool-replace-close' => 'Fermi',
+	'edittoolbar-tool-replace-close' => 'Nuligi',
 	'edittoolbar-tool-replace-nomatch' => 'Via serĉo trafis nenion.',
+	'edittoolbar-tool-replace-success' => '$1 anstataŭigoj fariĝis.',
 	'edittoolbar-section-characters' => 'Specialaj signoj',
 	'edittoolbar-characters-page-latin' => 'Latina',
 	'edittoolbar-characters-page-latinextended' => 'Latina etendita',
@@ -2287,7 +2664,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Listero</li><li>Listero</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Enmetita dosiero',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Ekzemplo.png|thumb|Teksto pri dosiero]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Pligrandigi' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Teksto pri dosiero</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Pligrandigi' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Teksto pri dosiero</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referenco',
 	'edittoolbar-help-content-reference-syntax' => 'Paĝa teksto.&lt;ref name="test"&gt;[http://www.ekzemplo.org Ligila teksto], aldona teksto.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Paĝa teksto.<sup><a href='#'>[1]</a></sup>",
@@ -2315,11 +2692,16 @@
 	'edittoolbar' => 'Editando barra de herramientas',
 	'edittoolbar-desc' => 'Barra de herramientas de página de edición con usabilidad mejorada',
 	'edittoolbar-preference' => 'Habilitar barra de herramientas de edición mejorada',
+	'edittoolbar-cgd-preference' => 'Habilitar ayuda para agregar texto wiki avanzado',
 	'edittoolbar-loading' => 'Cargando...',
 	'edittoolbar-tool-bold' => 'Negrita',
 	'edittoolbar-tool-bold-example' => 'Texto en negrita',
 	'edittoolbar-tool-italic' => 'Itálico',
 	'edittoolbar-tool-italic-example' => 'Texto itálico',
+	'edittoolbar-tool-ilink' => 'Vínculo interno',
+	'edittoolbar-tool-ilink-example' => 'Título del vínculo',
+	'edittoolbar-tool-xlink' => 'Vínculo externo (recordar prefijo http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com título del vínculo',
 	'edittoolbar-tool-link' => 'Enlace',
 	'edittoolbar-tool-link-title' => 'Insertar enlace',
 	'edittoolbar-tool-link-int' => 'A una página wiki',
@@ -2335,6 +2717,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Título inválido',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Revisando existencia de la página...',
 	'edittoolbar-tool-link-int-invalid' => 'El título que ha especificado no es válido.',
+	'edittoolbar-tool-link-ext-invalid' => 'El URL que especificaste es inválido.',
 	'edittoolbar-tool-file' => 'Archivo empotrado',
 	'edittoolbar-tool-file-example' => 'Example.jpg',
 	'edittoolbar-tool-reference' => 'Referencia',
@@ -2369,6 +2752,18 @@
 {{ns:file}}:Ejemplo.jpg|Descripción2',
 	'edittoolbar-tool-newline' => 'Nueva línea',
 	'edittoolbar-tool-table' => 'Tabla',
+	'edittoolbar-tool-table-example-old' => '-
+! encabezado 1
+! encabezado 2
+! encabezado 3
+|-
+| fila 1, celda 1
+| fila 1, celda 2
+| fila 1, celda 3
+|-
+| fila 2, celda 1
+| fila 2, celda 2
+| fila 2, celda 3',
 	'edittoolbar-tool-table-example' => 'Fila $1, celda $2',
 	'edittoolbar-tool-table-example-header' => 'Fila $1, celda $2 (encabezado)',
 	'edittoolbar-tool-table-title' => 'Inserte tabla',
@@ -2378,7 +2773,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Incluir encabezado de fila',
 	'edittoolbar-tool-table-insert' => 'Insertar',
 	'edittoolbar-tool-table-cancel' => 'Cancelar',
-	'edittoolbar-tool-replace' => 'Reemplazar',
+	'edittoolbar-tool-replace' => 'Buscar y reemplazar',
 	'edittoolbar-tool-replace-title' => 'Buscar y reemplazar',
 	'edittoolbar-tool-replace-search' => 'Buscar:',
 	'edittoolbar-tool-replace-replace' => 'Reemplazar por:',
@@ -2386,8 +2781,9 @@
 	'edittoolbar-tool-replace-regex' => 'Tratar la cadena de búsqueda como expresión regular.',
 	'edittoolbar-tool-replace-all' => 'Reemplazar todas las coincidencias',
 	'edittoolbar-tool-replace-button' => 'Reemplazar',
-	'edittoolbar-tool-replace-close' => 'Cerrar',
+	'edittoolbar-tool-replace-close' => 'Cancelar',
 	'edittoolbar-tool-replace-nomatch' => 'Su búsqueda no halló resultados.',
+	'edittoolbar-tool-replace-success' => '$1 reemplazos hechos',
 	'edittoolbar-section-characters' => 'Carácteres especiales',
 	'edittoolbar-characters-page-latin' => 'Latín',
 	'edittoolbar-characters-page-latinextended' => 'Latín extendido',
@@ -2447,7 +2843,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Listar item</li><li>Listar item</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Archivo empotrado',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Texto leyenda]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Texto leyenda</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Texto leyenda</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referencia',
 	'edittoolbar-help-content-reference-syntax' => 'Texto de página.&lt;ref name="test"&gt;[http://www.example.org Texto de vínculo], texto adicional.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Texto de página.<sup><a href='#'>[1]</a></sup>",
@@ -2477,6 +2873,10 @@
 	'edittoolbar-tool-bold-example' => 'Rasvane kiri',
 	'edittoolbar-tool-italic' => 'Kursiiv',
 	'edittoolbar-tool-italic-example' => 'Kaldkiri',
+	'edittoolbar-tool-ilink' => 'Siselink',
+	'edittoolbar-tool-ilink-example' => 'Lingi pealkiri',
+	'edittoolbar-tool-xlink' => 'Välislink (ära unusta eesliidet http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.näide.ee lingi pealkiri',
 	'edittoolbar-tool-link-title' => 'Lingi lisamine',
 	'edittoolbar-tool-link-int' => 'Vikileheküljele',
 	'edittoolbar-tool-link-int-target' => 'Lehekülje pealkiri:',
@@ -2491,6 +2891,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Vigane pealkiri',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Lehekülje olemasolu kindlakstegemine...',
 	'edittoolbar-tool-link-int-invalid' => 'Määratud pealkiri on vigane.',
+	'edittoolbar-tool-link-ext-invalid' => 'Esitatud internetiaadress on vigane.',
 	'edittoolbar-tool-file' => 'Manusfail',
 	'edittoolbar-tool-file-example' => 'Näide.jpg',
 	'edittoolbar-tool-reference' => 'Viide',
@@ -2525,24 +2926,34 @@
 {{ns:file}}:Näide.jpg|Pildiallkiri2',
 	'edittoolbar-tool-newline' => 'Uus rida',
 	'edittoolbar-tool-table' => 'Tabel',
+	'edittoolbar-tool-table-example-old' => '-
+! päis 1
+! päis 2
+! päis 3
+|-
+| 1. rida, 1. lahter
+| 1. rida, 2. lahter
+| 1. rida, 3. lahter
+|-
+| 2. rida, 1. lahter
+| 2. rida, 2. lahter
+| 2. rida, 3. lahter',
 	'edittoolbar-tool-table-example' => '$1. rida, $2. lahter',
 	'edittoolbar-tool-table-example-header' => '$1. rida, $2. lahter (päis)',
 	'edittoolbar-tool-table-title' => 'Tabeli lisamine',
 	'edittoolbar-tool-table-dimensions' => 'Suurus',
 	'edittoolbar-tool-table-dimensions-rows' => 'Ridu',
 	'edittoolbar-tool-table-dimensions-columns' => 'Veerge',
-	'edittoolbar-tool-table-dimensions-headerrows' => 'Päiseridu',
-	'edittoolbar-tool-table-dimensions-headercolumns' => 'Päiseveerge',
 	'edittoolbar-tool-table-insert' => 'Lisa',
 	'edittoolbar-tool-table-cancel' => 'Loobu',
-	'edittoolbar-tool-replace' => 'Asenda',
+	'edittoolbar-tool-replace' => 'Otsi ja asenda',
 	'edittoolbar-tool-replace-title' => 'Otsimine ja asendus',
 	'edittoolbar-tool-replace-search' => 'Otsitav:',
 	'edittoolbar-tool-replace-replace' => 'Asendaja:',
 	'edittoolbar-tool-replace-case' => 'Erista suurtähti',
 	'edittoolbar-tool-replace-all' => 'Asenda kõik',
 	'edittoolbar-tool-replace-button' => 'Asenda',
-	'edittoolbar-tool-replace-close' => 'Sule',
+	'edittoolbar-tool-replace-close' => 'Loobu',
 	'edittoolbar-tool-replace-nomatch' => 'Ãœhtegi otsitavat ei leitud.',
 	'edittoolbar-section-characters' => 'Erimärgid',
 	'edittoolbar-characters-page-latin' => 'Ladina',
@@ -2603,7 +3014,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Loendi liige</li><li>Loendi liige</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Manusfail',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Näide.png|thumb|Pildiallkiri]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Pildiallkiri' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Suurenda' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Pildiallkiri</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Pildiallkiri' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Suurenda' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Pildiallkiri</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Viide',
 	'edittoolbar-help-content-reference-syntax' => 'Lehekülje tekst.&lt;ref name="test"&gt;[http://www.näide.ee Lingi tekst], täiendav tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Lehekülje tekst.<sup><a href='#'>[1]</a></sup>",
@@ -2633,6 +3044,10 @@
 	'edittoolbar-tool-bold-example' => 'Testu beltza',
 	'edittoolbar-tool-italic' => 'Etzana',
 	'edittoolbar-tool-italic-example' => 'Testu etzana',
+	'edittoolbar-tool-ilink' => 'Barne lotura',
+	'edittoolbar-tool-ilink-example' => 'Loturaren izenburua',
+	'edittoolbar-tool-xlink' => 'Kanpo lotura (gogoratu http:// aurrizkia)',
+	'edittoolbar-tool-xlink-example' => 'http://www.adibidea.com lotura izenburua',
 	'edittoolbar-tool-link' => 'Lotura',
 	'edittoolbar-tool-link-title' => 'Sartu lotura',
 	'edittoolbar-tool-link-int' => 'Wiki orrialde batera',
@@ -2677,13 +3092,33 @@
 {{ns:file}}:Adibidea.jpg|Epigrafea2',
 	'edittoolbar-tool-newline' => 'Lerro berria',
 	'edittoolbar-tool-table' => 'Taula',
-	'edittoolbar-tool-replace' => 'Aldatu',
+	'edittoolbar-tool-table-example-old' => '-
+! goiburua 1
+! goiburua 2
+! goiburua 3
+|-
+| errenkada 1, gela 1
+| errenkada 1, gela 2
+| errenkada 1, gela 3
+|-
+| errenkada 2, gela 1
+| errenkada 2, gela 2
+| errenkada 2, gela 3',
+	'edittoolbar-tool-table-example' => 'Errenkada $1, gela $2',
+	'edittoolbar-tool-table-example-header' => 'Errenkada $1, gela $2 (goiburua)',
+	'edittoolbar-tool-table-title' => 'Taula txertatu',
+	'edittoolbar-tool-table-dimensions-rows' => 'Errenkadak',
+	'edittoolbar-tool-table-dimensions-columns' => 'Zutabeak',
+	'edittoolbar-tool-table-insert' => 'Txertatu',
+	'edittoolbar-tool-table-cancel' => 'Ezeztatu',
+	'edittoolbar-tool-replace' => 'Bilatu eta ordezkatu',
 	'edittoolbar-tool-replace-title' => 'Bilatu eta aldatu',
 	'edittoolbar-tool-replace-search' => 'Honakoa bilatu:',
 	'edittoolbar-tool-replace-replace' => 'Honegatik aldatu:',
 	'edittoolbar-tool-replace-all' => 'Aldatu agertzen den guztietan',
 	'edittoolbar-tool-replace-button' => 'Aldatu',
-	'edittoolbar-tool-replace-close' => 'Itxi',
+	'edittoolbar-tool-replace-close' => 'Ezeztatu',
+	'edittoolbar-tool-replace-success' => '$1 ordezkapen eginda.',
 	'edittoolbar-section-characters' => 'Karaktere bereziak',
 	'edittoolbar-characters-page-latin' => 'Latinoa',
 	'edittoolbar-characters-page-latinextended' => 'Latin hedatua',
@@ -2713,7 +3148,10 @@
 	'edittoolbar-help-content-bolditalic-syntax' => "'''''Testu beltza eta etzana'''''",
 	'edittoolbar-help-content-bolditalic-result' => '<strong><em>Testu beltza eta etzana</em></strong>',
 	'edittoolbar-help-content-ilink-description' => 'Barne lotura',
+	'edittoolbar-help-content-ilink-syntax' => '[[Orriaren titulua|Loturaren izena]]<br />[[Orriaren titulua]]',
+	'edittoolbar-help-content-ilink-result' => "<a href='#'>Loturaren izena</a><br /><a href='#'>Orriaren titulua</a>",
 	'edittoolbar-help-content-xlink-description' => 'Kanpo lotura',
+	'edittoolbar-help-content-xlink-syntax' => '[http://www.adibidea.org Loturaren izena]<br />[http://www.adibidea.org]<br />http://www.adibidea.org',
 	'edittoolbar-help-content-heading1-description' => '1. mailako goiburua',
 	'edittoolbar-help-content-heading1-syntax' => '= Izenburuaren testua =',
 	'edittoolbar-help-content-heading1-result' => '<h1>Izenburuaren testua</h1>',
@@ -2744,6 +3182,53 @@
 	'edittoolbar-help-content-indent-syntax' => 'Testu normala<br />:Koskadun testua<br />::Koskadun testua',
 );
 
+/** Persian (فارسی)
+ * @author Ladsgroup
+ */
+$messages['fa'] = array(
+	'edittoolbar-tool-italic' => 'ایتالیک',
+	'edittoolbar-tool-italic-example' => 'متن ایتالیک',
+	'edittoolbar-tool-ilink' => 'پیوند داخلی',
+	'edittoolbar-tool-ilink-example' => 'عنوان پیوند',
+	'edittoolbar-tool-xlink' => 'پیوند به بیرون (پیشوند http:// فراموش نشود)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com عنوان پیوند',
+	'edittoolbar-tool-link' => 'پیوند',
+	'edittoolbar-tool-link-title' => 'افزودن پیوند',
+	'edittoolbar-tool-link-int' => 'به یک صفحه ویکی',
+	'edittoolbar-tool-link-int-target' => 'عنوان صفحه:',
+	'edittoolbar-tool-link-int-text' => 'متن عنوان:',
+	'edittoolbar-tool-link-ext' => 'به یک صفحه وب خارج از ویکی',
+	'edittoolbar-tool-link-ext-target' => 'آدرس اینترنتی پیوند:',
+	'edittoolbar-tool-link-ext-text' => 'متن پیوند:',
+	'edittoolbar-tool-link-insert' => 'افزودن پیوند',
+	'edittoolbar-tool-link-cancel' => 'لغو',
+	'edittoolbar-tool-link-int-target-status-exists' => 'صفحه وجود دارد',
+	'edittoolbar-tool-link-int-target-status-notexists' => 'صفحه وجود ندارد',
+	'edittoolbar-tool-link-int-target-status-invalid' => 'عنوان نادرست',
+	'edittoolbar-tool-file-example' => 'مثال.jpg',
+	'edittoolbar-tool-reference' => 'منبع',
+	'edittoolbar-tool-signature' => 'امضا و زمان',
+	'edittoolbar-section-advanced' => 'پیشرفته',
+	'edittoolbar-tool-heading-example' => 'عنوان سطح',
+	'edittoolbar-group-list' => 'فهرست',
+	'edittoolbar-group-size' => 'اندازه',
+	'edittoolbar-tool-big' => 'بزرگ',
+	'edittoolbar-tool-big-example' => 'متن بزرگ',
+	'edittoolbar-tool-small' => 'Ú©ÙˆÚ†Ú©',
+	'edittoolbar-tool-small-example' => 'متن کوچک',
+	'edittoolbar-tool-newline' => 'خط جدید',
+	'edittoolbar-tool-table' => 'جدول',
+	'edittoolbar-tool-table-cancel' => 'لغو',
+	'edittoolbar-characters-page-greek' => 'یونانی',
+	'edittoolbar-characters-page-cyrillic' => 'سیریلیک',
+	'edittoolbar-characters-page-arabic' => 'عربی',
+	'edittoolbar-characters-page-hebrew' => 'عبری',
+	'edittoolbar-characters-page-telugu' => 'تالوگو',
+	'edittoolbar-section-help' => 'راهنما',
+	'edittoolbar-help-content-italic-description' => 'ایتالیک',
+	'edittoolbar-help-content-signature-description' => 'امضا',
+);
+
 /** Finnish (Suomi)
  * @author Cimon Avaro
  * @author Crt
@@ -2759,6 +3244,10 @@
 	'edittoolbar-tool-bold-example' => 'Lihavoitu teksti',
 	'edittoolbar-tool-italic' => 'Kursiivi',
 	'edittoolbar-tool-italic-example' => 'Kursivoitu teksti',
+	'edittoolbar-tool-ilink' => 'Sisäinen linkki',
+	'edittoolbar-tool-ilink-example' => 'Linkin otsikko',
+	'edittoolbar-tool-xlink' => 'Ulkoinen linkki (muista http://-etuliite)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com linkin otsikko',
 	'edittoolbar-tool-link' => 'Linkki',
 	'edittoolbar-tool-link-title' => 'Lisää linkki',
 	'edittoolbar-tool-link-int' => 'Wikisivuun',
@@ -2815,7 +3304,7 @@
 	'edittoolbar-tool-table-dimensions-columns' => 'Sarakkeet',
 	'edittoolbar-tool-table-insert' => 'Lisää',
 	'edittoolbar-tool-table-cancel' => 'Peruuta',
-	'edittoolbar-tool-replace' => 'Korvaa',
+	'edittoolbar-tool-replace' => 'Etsi ja korvaa',
 	'edittoolbar-tool-replace-title' => 'Etsi ja korvaa',
 	'edittoolbar-tool-replace-search' => 'Etsi seuraavaa:',
 	'edittoolbar-tool-replace-replace' => 'Korvaa seuraavalla:',
@@ -2823,7 +3312,7 @@
 	'edittoolbar-tool-replace-regex' => 'Kohtele hakuarvoa säännöllisenä lausekkeena',
 	'edittoolbar-tool-replace-all' => 'Korvaa kaikki esiintymät',
 	'edittoolbar-tool-replace-button' => 'Korvaa',
-	'edittoolbar-tool-replace-close' => 'Sulje',
+	'edittoolbar-tool-replace-close' => 'Peruuta',
 	'edittoolbar-tool-replace-nomatch' => 'Hakusi ei tuottanut osumia.',
 	'edittoolbar-section-characters' => 'Erikoismerkit',
 	'edittoolbar-characters-page-latin' => 'Latinalainen kirjaimisto',
@@ -2884,7 +3373,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Luettelon kohta</li><li>Luettelon kohta</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Tallennettu tiedosto',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Esimerkki.png|thumb|Kuvateksti]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Kuvateksti' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Kuvateksti</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Kuvateksti' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Kuvateksti</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Lähde',
 	'edittoolbar-help-content-reference-syntax' => 'Sivun teksti.&lt;ref name="testi"&gt;[http://www.example.org Linkin teksti], lisäteksti.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Sivun teksti.<sup><a href='#'>[1]</a></sup>",
@@ -2909,6 +3398,7 @@
  * @author McDutchie
  * @author Mormegil
  * @author Omnipaedista
+ * @author Peter17
  * @author PieRRoMaN
  * @author Verdy p
  */
@@ -2916,11 +3406,16 @@
 	'edittoolbar' => 'Barre d’outils de modification',
 	'edittoolbar-desc' => "Barre d'outils de modification avec l'utilisabilité améliorée",
 	'edittoolbar-preference' => "Activer la barre d'outils améliorée",
+	'edittoolbar-cgd-preference' => "Activer l'aide pour ajouter du texte wiki avancé",
 	'edittoolbar-loading' => 'Chargement ...',
 	'edittoolbar-tool-bold' => 'Gras',
 	'edittoolbar-tool-bold-example' => 'Texte en gras',
 	'edittoolbar-tool-italic' => 'Italique',
 	'edittoolbar-tool-italic-example' => 'Texte en italique',
+	'edittoolbar-tool-ilink' => 'Lien interne',
+	'edittoolbar-tool-ilink-example' => 'Titre du lien',
+	'edittoolbar-tool-xlink' => 'Lien externe ( n’oubliez pas le préfixe http:// )',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com titre du lien',
 	'edittoolbar-tool-link' => 'Lien',
 	'edittoolbar-tool-link-title' => 'Insérer un lien',
 	'edittoolbar-tool-link-int' => 'Vers un article / une page wiki',
@@ -2936,6 +3431,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Titre invalide',
 	'edittoolbar-tool-link-int-target-status-loading' => "Vérification de l'existence de la page...",
 	'edittoolbar-tool-link-int-invalid' => 'Le titre que vous avez spécifié est incorrect.',
+	'edittoolbar-tool-link-ext-invalid' => "L'URL que vous avez spécifiée est invalide.",
 	'edittoolbar-tool-file' => 'Fichier inséré',
 	'edittoolbar-tool-file-example' => 'Exemple.jpg',
 	'edittoolbar-tool-reference' => 'Référence',
@@ -2970,6 +3466,18 @@
 {{ns:file}}:Exemple.jpg|Description 2',
 	'edittoolbar-tool-newline' => 'Saut de ligne',
 	'edittoolbar-tool-table' => 'Tableau',
+	'edittoolbar-tool-table-example-old' => '-
+! en-tête 1
+! en-tête 2
+! en-tête 3
+|-
+| ligne 1, case 1
+| ligne 1, case 2
+| ligne 1, case 3
+|-
+| ligne 2, case 1
+| ligne 2, case 2
+| ligne 2, case 3',
 	'edittoolbar-tool-table-example' => 'Ligne $1, cellule $2',
 	'edittoolbar-tool-table-example-header' => 'Ligne $1, cellule $2 (en-tête)',
 	'edittoolbar-tool-table-title' => 'Insérer un tableau',
@@ -2979,7 +3487,7 @@
 	'edittoolbar-tool-table-dimensions-header' => "Inclure la ligne d'en-tête",
 	'edittoolbar-tool-table-insert' => 'Insérer',
 	'edittoolbar-tool-table-cancel' => 'Annuler',
-	'edittoolbar-tool-replace' => 'Remplacer',
+	'edittoolbar-tool-replace' => 'Rechercher et remplacer',
 	'edittoolbar-tool-replace-title' => 'Rechercher et remplacer',
 	'edittoolbar-tool-replace-search' => 'Rechercher :',
 	'edittoolbar-tool-replace-replace' => 'Remplacer avec :',
@@ -2987,8 +3495,9 @@
 	'edittoolbar-tool-replace-regex' => 'Traiter la chaîne de recherche comme une expression régulière',
 	'edittoolbar-tool-replace-all' => 'Remplacer toutes les occurrences',
 	'edittoolbar-tool-replace-button' => 'Remplacer',
-	'edittoolbar-tool-replace-close' => 'Fermer',
+	'edittoolbar-tool-replace-close' => 'Annuler',
 	'edittoolbar-tool-replace-nomatch' => 'Votre recherche n’a abouti à aucune correspondance.',
+	'edittoolbar-tool-replace-success' => '$1 remplacements faits.',
 	'edittoolbar-section-characters' => 'Caractères spéciaux',
 	'edittoolbar-characters-page-latin' => 'latin',
 	'edittoolbar-characters-page-latinextended' => 'latin étendu',
@@ -3048,7 +3557,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Élément de la liste</li><li>Élément de la liste</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Fichier inséré',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Exemple.png|thumb|Texte affiché]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Texte affiché' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Texte affiché</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Texte affiché' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Texte affiché</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Référence',
 	'edittoolbar-help-content-reference-syntax' => 'Texte de la page.&lt;ref name="test"&gt;[http://www.example.org texte du lien], texte additionnel.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Texte de la page <sup><a href='#'>[1]</a></sup>",
@@ -3075,6 +3584,10 @@
 	'edittoolbar-tool-bold-example' => 'Tèxto grâs',
 	'edittoolbar-tool-italic' => 'Étalico',
 	'edittoolbar-tool-italic-example' => 'Tèxto étalico',
+	'edittoolbar-tool-ilink' => 'Lim de dedens',
+	'edittoolbar-tool-ilink-example' => 'Titro du lim',
+	'edittoolbar-tool-xlink' => 'Lim de defôr (oubliâd pas lo prèfixo http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.ègzemplo.com titro du lim',
 	'edittoolbar-tool-link' => 'Lim',
 	'edittoolbar-tool-link-int-text' => 'Tèxto du lim :',
 	'edittoolbar-tool-link-ext-text' => 'Tèxto du lim :',
@@ -3143,11 +3656,16 @@
 	'edittoolbar' => 'Barra de ferramentas de edición',
 	'edittoolbar-desc' => 'Editar a páxina da barra de ferramentas cunha mellor usabilidade',
 	'edittoolbar-preference' => 'Activar a barra de ferramentas de edición mellorada',
+	'edittoolbar-cgd-preference' => 'Activar a axuda para engadir texto wiki avanzado',
 	'edittoolbar-loading' => 'Cargando...',
 	'edittoolbar-tool-bold' => 'Negra',
 	'edittoolbar-tool-bold-example' => 'Texto en negra',
 	'edittoolbar-tool-italic' => 'Cursiva',
 	'edittoolbar-tool-italic-example' => 'Texto en cursiva',
+	'edittoolbar-tool-ilink' => 'Ligazón interna',
+	'edittoolbar-tool-ilink-example' => 'Título de ligazón',
+	'edittoolbar-tool-xlink' => 'Ligazón externa (lembre o prefixo http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com título de ligazón',
 	'edittoolbar-tool-link' => 'Ligazón',
 	'edittoolbar-tool-link-title' => 'Inserir unha ligazón',
 	'edittoolbar-tool-link-int' => 'Cara a unha páxina wiki',
@@ -3163,6 +3681,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Título non válido',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Comprobando a existencia da páxina...',
 	'edittoolbar-tool-link-int-invalid' => 'O título que especificou non é válido.',
+	'edittoolbar-tool-link-ext-invalid' => 'O enderezo URL que especificou é incorrecto.',
 	'edittoolbar-tool-file' => 'Ficheiro embelecido',
 	'edittoolbar-tool-file-example' => 'Exemplo.jpg',
 	'edittoolbar-tool-reference' => 'Referencia',
@@ -3197,6 +3716,18 @@
 {{ns:file}}:Example.jpg|Pé_de_foto_2',
 	'edittoolbar-tool-newline' => 'Nova liña',
 	'edittoolbar-tool-table' => 'Táboa',
+	'edittoolbar-tool-table-example-old' => '-
+! cabeceira 1
+! cabeceira 2
+! cabeceira 3
+|-
+| liña 1, cela 1
+| liña 1, cela 2
+| liña 1, cela 3
+|-
+| liña 2, cela 1
+| liña 2, cela 2
+| liña 2, cela 3',
 	'edittoolbar-tool-table-example' => 'Fila $1, cela $2',
 	'edittoolbar-tool-table-example-header' => 'Fila $1, cela $2 (cabeceira)',
 	'edittoolbar-tool-table-title' => 'Inserir unha táboa',
@@ -3206,7 +3737,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Incluír a liña de cabeceira',
 	'edittoolbar-tool-table-insert' => 'Inserir',
 	'edittoolbar-tool-table-cancel' => 'Cancelar',
-	'edittoolbar-tool-replace' => 'Substituír',
+	'edittoolbar-tool-replace' => 'Buscar e substituír',
 	'edittoolbar-tool-replace-title' => 'Buscar e substituír',
 	'edittoolbar-tool-replace-search' => 'Buscar:',
 	'edittoolbar-tool-replace-replace' => 'Substituír por:',
@@ -3214,8 +3745,9 @@
 	'edittoolbar-tool-replace-regex' => 'Tratar a secuencia de busca como unha expresión regular',
 	'edittoolbar-tool-replace-all' => 'Substituír todas as coincidencias',
 	'edittoolbar-tool-replace-button' => 'Substituír',
-	'edittoolbar-tool-replace-close' => 'Pechar',
+	'edittoolbar-tool-replace-close' => 'Cancelar',
 	'edittoolbar-tool-replace-nomatch' => 'A súa busca non atopou nada.',
+	'edittoolbar-tool-replace-success' => 'Fixéronse $1 substitucións.',
 	'edittoolbar-section-characters' => 'Caracteres especiais',
 	'edittoolbar-characters-page-latin' => 'Latín',
 	'edittoolbar-characters-page-latinextended' => 'Latín estendido',
@@ -3275,7 +3807,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Elemento da lista</li><li>Elemento da lista</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Ficheiro embelecido',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Pé de foto.]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Pé de foto.</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Pé de foto.</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referencia',
 	'edittoolbar-help-content-reference-syntax' => 'Texto da páxina&lt;ref name="test"&gt;[http://www.example.org Texto da ligazón], texto adicional.&lt;/ref&gt;.',
 	'edittoolbar-help-content-reference-result' => "Texto da páxina<sup><a href='#'>[1]</a></sup>.",
@@ -3303,6 +3835,11 @@
 	'edittoolbar-tool-bold-example' => 'Γράμματα παχέα',
 	'edittoolbar-tool-italic' => 'πλάγιον',
 	'edittoolbar-tool-italic-example' => 'Γράμματα πλάγια',
+	'edittoolbar-tool-ilink' => 'Ἐσωτερικὸς σύνδεσμος',
+	'edittoolbar-tool-ilink-example' => 'Συνδέσμου ὄνομα',
+	'edittoolbar-tool-xlink' => 'Ἐξώτερος σύνδεσμος (μέμνησο τοῦ προθέματος http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com ὄνομα συνδέσμου',
+	'edittoolbar-tool-link-cancel' => 'Ἀκυροῦν',
 	'edittoolbar-tool-file' => 'Ἐμβεβαπτισμένον ἀρχεῖον',
 	'edittoolbar-tool-reference' => 'Ἀναφορά',
 	'edittoolbar-tool-reference-example' => 'Εἰσάγειν κείμενον παραπομπῆς ὧδε',
@@ -3325,11 +3862,13 @@
 	'edittoolbar-tool-gallery' => 'Πινακοθήκη',
 	'edittoolbar-tool-newline' => 'Νέα γραμμή',
 	'edittoolbar-tool-table' => 'Πίναξ',
-	'edittoolbar-tool-replace' => 'Ὑποκαθιστάναι',
+	'edittoolbar-tool-table-cancel' => 'Ἀκυροῦν',
+	'edittoolbar-tool-replace' => 'Ζητεῖν καὶ ὑποκαθιστάναι',
 	'edittoolbar-tool-replace-title' => 'Ζητεῖν καὶ ὑποκαθιστάναι',
 	'edittoolbar-tool-replace-search' => 'Zήτησις περί:',
 	'edittoolbar-tool-replace-replace' => 'Ὑποκατάστασις ὑπό:',
 	'edittoolbar-tool-replace-button' => 'Ὑποκαθιστάναι',
+	'edittoolbar-tool-replace-close' => 'Ἀκυροῦν',
 	'edittoolbar-section-characters' => 'Εἰδικοὶ χαρακτῆρες',
 	'edittoolbar-characters-page-latin' => 'Λατινικόν',
 	'edittoolbar-characters-page-latinextended' => 'Λατινικὸν προεκτεταμένον',
@@ -3390,11 +3929,16 @@
 	'edittoolbar' => 'Wärchzygchäschtli bearbeite',
 	'edittoolbar-desc' => 'Wärchzygchäschtli mit ere verbesserete Benutzerfrejndligkeit bearbeite',
 	'edittoolbar-preference' => 'Verbesseret Bearbeitigs-Wärchzygchäschtli meglig mache',
+	'edittoolbar-cgd-preference' => 'Hilf fir fortgschrittene Wikitext megli mache',
 	'edittoolbar-loading' => 'Am Lade ...',
 	'edittoolbar-tool-bold' => 'Fätt',
 	'edittoolbar-tool-bold-example' => 'Tekscht fätt',
 	'edittoolbar-tool-italic' => 'Kursiv',
 	'edittoolbar-tool-italic-example' => 'Tekscht kursiv',
+	'edittoolbar-tool-ilink' => 'Intärn Gleich (Link)',
+	'edittoolbar-tool-ilink-example' => 'Gleichtitel',
+	'edittoolbar-tool-xlink' => 'Extärn Gleich (Link) (dänk an s Präfix http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.byschpil.com Gleichtitel',
 	'edittoolbar-tool-link' => 'Gleich',
 	'edittoolbar-tool-link-title' => 'Gleich yysetze',
 	'edittoolbar-tool-link-int' => 'Zuen eme Wikiartikel/ere Wikisyte',
@@ -3410,6 +3954,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Nit giltige Titel',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Am Priefe, eb s Syte git ...',
 	'edittoolbar-tool-link-int-invalid' => 'Dr Titel, wu Du aagee hesch, isch nit giltig.',
+	'edittoolbar-tool-link-ext-invalid' => 'D URL, wu Duu aagee hesch, isch nit giltig.',
 	'edittoolbar-tool-file' => 'Yygfiegti Datei',
 	'edittoolbar-tool-file-example' => 'Byschpil.jpg',
 	'edittoolbar-tool-reference' => 'Quälle',
@@ -3444,6 +3989,18 @@
 {{ns:file}}:Byschpil.jpg|Bschriftig2',
 	'edittoolbar-tool-newline' => 'Neji Zeile',
 	'edittoolbar-tool-table' => 'Tabälle',
+	'edittoolbar-tool-table-example-old' => '-
+! Chopf 1
+! Chopf 2
+! Chopf 3
+|-
+| Zyylete 1, Zälle 1
+| Zyylete 1, Zälle 2
+| Zyylete 1, Zälle 3
+|-
+| Zyylete 2, Zälle 1
+| Zyylete 2, Zälle 2
+| Zyylete 2, Zälle 3',
 	'edittoolbar-tool-table-example' => 'Zyle $1, Zälle $2',
 	'edittoolbar-tool-table-example-header' => 'Zyle $1, Zälle $2 (Chopf)',
 	'edittoolbar-tool-table-title' => 'Tabälle yyfiege',
@@ -3453,7 +4010,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Iberschrift yyfiege',
 	'edittoolbar-tool-table-insert' => 'Yyfiege',
 	'edittoolbar-tool-table-cancel' => 'Abbräche',
-	'edittoolbar-tool-replace' => 'Ersetze',
+	'edittoolbar-tool-replace' => 'Suechen un ersetze',
 	'edittoolbar-tool-replace-title' => 'Sueche un ersetze',
 	'edittoolbar-tool-replace-search' => 'Sueche no:',
 	'edittoolbar-tool-replace-replace' => 'Ersetze dur:',
@@ -3461,8 +4018,9 @@
 	'edittoolbar-tool-replace-regex' => 'D Zeichechette wu gsuecht soll wäre as reguläre Uusdruck versueche',
 	'edittoolbar-tool-replace-all' => 'Alli Stelle, wu s vorchunnt, ersetze',
 	'edittoolbar-tool-replace-button' => 'Ersetze',
-	'edittoolbar-tool-replace-close' => 'Zuemache',
+	'edittoolbar-tool-replace-close' => 'Abbräche',
 	'edittoolbar-tool-replace-nomatch' => 'Zue Dyyre Suech git s kei Träffer.',
+	'edittoolbar-tool-replace-success' => '$1 Ersetzige durgfiert.',
 	'edittoolbar-section-characters' => 'Sunderzeiche',
 	'edittoolbar-characters-page-latin' => 'Latynisch',
 	'edittoolbar-characters-page-latinextended' => 'Latin Extended',
@@ -3522,7 +4080,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Lischtepunkt</li><li>Lischtepunkt</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Yygfiegti Datei',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Bildbschriftig]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bildbschriftig' class='image' href='/wiki/Datei:Wiki.png'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='Bschriftig'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Bildbschriftig</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bildbschriftig' class='image' href='/wiki/Datei:Wiki.png'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='Bschriftig'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Bildbschriftig</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Quälle',
 	'edittoolbar-help-content-reference-syntax' => 'Sytetekscht.&lt;ref name="test"&gt;[http://www.byschpil.org Gleichtekscht], zuesätzlige Tekscht.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Sytetekscht.<sup><a href='#'>[1]</a></sup>",
@@ -3580,11 +4138,16 @@
 	'edittoolbar' => 'סרגל עריכה',
 	'edittoolbar-desc' => 'שיפור השימושיות של סרגל עריכת הדף',
 	'edittoolbar-preference' => 'הפעלת סרגל עריכה משופר',
+	'edittoolbar-cgd-preference' => 'הפעלת העזרה להוספת תחביר ויקי מתקדם',
 	'edittoolbar-loading' => '×‘×˜×¢×™× ×”...',
 	'edittoolbar-tool-bold' => 'הדגשה',
 	'edittoolbar-tool-bold-example' => 'טקסט מודגש',
 	'edittoolbar-tool-italic' => 'הטיה',
 	'edittoolbar-tool-italic-example' => 'טקסט × ×˜×•×™',
+	'edittoolbar-tool-ilink' => 'קישור ×¤× ×™×ž×™',
+	'edittoolbar-tool-ilink-example' => 'כותרת הקישור',
+	'edittoolbar-tool-xlink' => 'קישור ×—×™×¦×•× ×™ (זכרו להוסיף את הקידומת http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com כותרת הקישור',
 	'edittoolbar-tool-link' => 'קישור',
 	'edittoolbar-tool-link-title' => 'הוספת קישור',
 	'edittoolbar-tool-link-int' => 'לדף ויקי',
@@ -3598,7 +4161,9 @@
 	'edittoolbar-tool-link-int-target-status-exists' => 'הדף קיים',
 	'edittoolbar-tool-link-int-target-status-notexists' => 'הדף ××™× ×• קיים',
 	'edittoolbar-tool-link-int-target-status-invalid' => 'כותרת בלתי ×ª×§×™× ×”',
+	'edittoolbar-tool-link-int-target-status-loading' => 'בדיקה האם הדף קיים...',
 	'edittoolbar-tool-link-int-invalid' => 'הכותרת ×©×¦×•×™× ×” ××™× ×” ×ª×§×™× ×”.',
+	'edittoolbar-tool-link-ext-invalid' => 'הכתובת ×©×¦×•×™× ×” ××™× ×” ×ª×§×™× ×”.',
 	'edittoolbar-tool-file' => 'קובץ המוצג בדף',
 	'edittoolbar-tool-file-example' => 'דוגמה.jpg',
 	'edittoolbar-tool-reference' => 'הערת שוליים',
@@ -3633,6 +4198,18 @@
 {{ns:file}}:דוגמה.jpg|כותרת 2',
 	'edittoolbar-tool-newline' => 'שורה חדשה',
 	'edittoolbar-tool-table' => 'טבלה',
+	'edittoolbar-tool-table-example-old' => '-
+! כותרת 1
+! כותרת 2
+! כותרת 3
+|-
+| שורה 1, תא 1
+| שורה 1, תא 2
+| שורה 1, תא 3
+|-
+| שורה 2, תא 1
+| שורה 2, תא 2
+| שורה 2, תא 3',
 	'edittoolbar-tool-table-example' => 'שורה $1, תא $2',
 	'edittoolbar-tool-table-example-header' => 'שורה $1, תא $2 (כותרת)',
 	'edittoolbar-tool-table-title' => 'הוספת טבלה',
@@ -3642,19 +4219,21 @@
 	'edittoolbar-tool-table-dimensions-header' => 'כולל שורת הכותרת',
 	'edittoolbar-tool-table-insert' => 'הוספה',
 	'edittoolbar-tool-table-cancel' => 'ביטול',
-	'edittoolbar-tool-replace' => 'החלפה',
+	'edittoolbar-tool-replace' => 'חיפוש והחלפה',
 	'edittoolbar-tool-replace-title' => 'חיפוש והחלפה',
 	'edittoolbar-tool-replace-search' => 'חיפוש של:',
 	'edittoolbar-tool-replace-replace' => 'החלפה ב:',
 	'edittoolbar-tool-replace-case' => 'התאמת רישיות',
-	'edittoolbar-tool-replace-regex' => 'התייחסות אל מחרוזות חיפוש כאל ביטויים רגולאריים',
+	'edittoolbar-tool-replace-regex' => 'בדיקת מחרוזת החיפוש כביטוי רגולרי',
 	'edittoolbar-tool-replace-all' => 'החלפת כל המופעים',
 	'edittoolbar-tool-replace-button' => 'החלפה',
-	'edittoolbar-tool-replace-close' => 'סגירה',
+	'edittoolbar-tool-replace-close' => 'ביטול',
 	'edittoolbar-tool-replace-nomatch' => 'לא התקבלו התאמות לחיפושכם.',
+	'edittoolbar-tool-replace-success' => 'בוצעו $1 החלפות.',
 	'edittoolbar-section-characters' => 'תווים מיוחדים',
 	'edittoolbar-characters-page-latin' => '×œ×˜×™× ×™',
 	'edittoolbar-characters-page-latinextended' => '×œ×˜×™× ×™ מורחב',
+	'edittoolbar-characters-page-ipa' => 'אלפבית ×¤×•× ×˜×™ ×‘×™× ×œ××•×ž×™ (IPA)',
 	'edittoolbar-characters-page-symbols' => '×¡×™×ž× ×™×',
 	'edittoolbar-characters-page-greek' => '×™×•×•× ×™',
 	'edittoolbar-characters-page-cyrillic' => 'קירילי',
@@ -3710,7 +4289,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>פריט רשימה</li><li>פריט רשימה</li></ol>',
 	'edittoolbar-help-content-file-description' => 'קובץ המוצג בדף',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:דוגמה.png|ממוזער|טקסט הכותרת]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='טקסט הכותרת' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>טקסט הכותרת</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='טקסט הכותרת' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>טקסט הכותרת</div></div>",
 	'edittoolbar-help-content-reference-description' => 'הערת שוליים',
 	'edittoolbar-help-content-reference-syntax' => 'טקסט הדף.&lt;ref name="test"&gt;[http://www.example.org טקסט הקישור], טקסט × ×•×¡×£.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "טקסט הדף.<sup><a href='#'>[1]</a></sup>",
@@ -3748,6 +4327,10 @@
 	'edittoolbar-tool-bold-example' => 'Podebljani tekst',
 	'edittoolbar-tool-italic' => 'Kurziv',
 	'edittoolbar-tool-italic-example' => 'Kurzivni tekst',
+	'edittoolbar-tool-ilink' => 'Unutarnja poveznica',
+	'edittoolbar-tool-ilink-example' => 'Naziv poveznice',
+	'edittoolbar-tool-xlink' => 'Vanjska poveznica (nužan je prefiks http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.primjer.com naziv poveznice',
 	'edittoolbar-tool-link' => 'Poveznica',
 	'edittoolbar-tool-link-title' => 'Umetni poveznicu',
 	'edittoolbar-tool-link-int' => 'U wiki stranicu',
@@ -3803,8 +4386,6 @@
 	'edittoolbar-tool-table-dimensions' => 'Dimenzije',
 	'edittoolbar-tool-table-dimensions-rows' => 'Retci',
 	'edittoolbar-tool-table-dimensions-columns' => 'Stupci',
-	'edittoolbar-tool-table-dimensions-headerrows' => 'Zaglavlje redaka',
-	'edittoolbar-tool-table-dimensions-headercolumns' => 'Zaglavlje stupaca',
 	'edittoolbar-tool-table-insert' => 'Umetni',
 	'edittoolbar-tool-table-cancel' => 'Odustani',
 	'edittoolbar-tool-replace' => 'Zamijeni',
@@ -3876,7 +4457,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>stavka popisa</li><li>stavka popisa</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Uložena datoteka',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Primjer.jpg|thumb|Tekst opisa]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Tekst opisa' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Povećaj' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Tekst opisa'</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Tekst opisa' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Povećaj' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Tekst opisa'</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Bilješke',
 	'edittoolbar-help-content-reference-syntax' => 'Tekst stranice.&lt;ref name="test"&gt;[http://www.primjer.org Tekst poveznice], dodatni tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Tekst stranice.<sup><a href='#'>[1]</a></sup>",
@@ -3900,11 +4481,16 @@
 	'edittoolbar' => 'Gratowa lajsta za wobdźěłowanje',
 	'edittoolbar-desc' => 'Gratowa lajsta za wobdźěłowanje stronow z polěpšenej wužiwajomnosću',
 	'edittoolbar-preference' => 'Polěpšenu gratowu lajstu za wobdźěłowanje aktiwizować',
+	'edittoolbar-cgd-preference' => 'Pomoc za přidawanje rozšěrjeneho wikiteksta zmóžnić',
 	'edittoolbar-loading' => 'ÄŒita so...',
 	'edittoolbar-tool-bold' => 'Tučny',
 	'edittoolbar-tool-bold-example' => 'Tučny tekst',
 	'edittoolbar-tool-italic' => 'Kursiwny',
 	'edittoolbar-tool-italic-example' => 'Kursiwny tekst',
+	'edittoolbar-tool-ilink' => 'Interny wotkaz',
+	'edittoolbar-tool-ilink-example' => 'Titul wotkaza',
+	'edittoolbar-tool-xlink' => 'Eksterny wotkaz (njezabudź na prefiks http://)',
+	'edittoolbar-tool-xlink-example' => 'titul wotkaza http://www.přikład.de',
 	'edittoolbar-tool-link' => 'Wotkaz',
 	'edittoolbar-tool-link-title' => 'Wotkaz zasunyć',
 	'edittoolbar-tool-link-int' => 'K wikinastawkej/stronje',
@@ -3920,6 +4506,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Njepłaćiwy titul',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Eksistenca strony so přepruwuje...',
 	'edittoolbar-tool-link-int-invalid' => 'Titul, kotryž sy podał, je njepłaćiwy.',
+	'edittoolbar-tool-link-ext-invalid' => 'URL, kotryž sy podał, je njepłaćiwy.',
 	'edittoolbar-tool-file' => 'Zasadźena dataja',
 	'edittoolbar-tool-file-example' => 'Přikład.jpg',
 	'edittoolbar-tool-reference' => 'Referenca',
@@ -3954,6 +4541,18 @@
 {{ns:file}}:Example.jpg|Popis2',
 	'edittoolbar-tool-newline' => 'Nowa linka',
 	'edittoolbar-tool-table' => 'Tabela',
+	'edittoolbar-tool-table-example-old' => '-
+! hłowa 1
+! hłowa 2
+! hłowa 3
+|-
+| rjadka 1, cela 1
+| rjadka 1, cela 2
+| rjadka 1, cela 3
+|-
+| rjadka 2, cela 1
+| rjadka 2, cela 2
+| rjadka 2, cela 3',
 	'edittoolbar-tool-table-example' => 'Rjadka $1, cela $2',
 	'edittoolbar-tool-table-example-header' => 'Rjadka $1, cela $2 (hłowa)',
 	'edittoolbar-tool-table-title' => 'Tabelu zasunyć',
@@ -3963,7 +4562,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Rjadku hłowy zapřijeć',
 	'edittoolbar-tool-table-insert' => 'Zasunyć',
 	'edittoolbar-tool-table-cancel' => 'Přetorhnyć',
-	'edittoolbar-tool-replace' => 'Narunać',
+	'edittoolbar-tool-replace' => 'Pytać a narunać',
 	'edittoolbar-tool-replace-title' => 'Pytać a narunać',
 	'edittoolbar-tool-replace-search' => 'Pytać za:',
 	'edittoolbar-tool-replace-replace' => 'Narunać přez:',
@@ -3971,8 +4570,9 @@
 	'edittoolbar-tool-replace-regex' => 'Z pytanskim tekstom kaž z regularnym wurazom wobchadźeć',
 	'edittoolbar-tool-replace-all' => 'Wšě wustupjenja narunać',
 	'edittoolbar-tool-replace-button' => 'Narunać',
-	'edittoolbar-tool-replace-close' => 'Začinić',
+	'edittoolbar-tool-replace-close' => 'Přetorhnyć',
 	'edittoolbar-tool-replace-nomatch' => 'Twoje pytanje njeje wotpowědnik namakał.',
+	'edittoolbar-tool-replace-success' => '$1 {{PLURAL:$1|narunanje přewjedźene|narunani přewjedźenej|narunanja přewjedźene|narunanjow přewjedźenych}}.',
 	'edittoolbar-section-characters' => 'Specialne znamješka',
 	'edittoolbar-characters-page-latin' => 'Łaćonske',
 	'edittoolbar-characters-page-latinextended' => 'Łaćonske rozšěrjene',
@@ -4032,7 +4632,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Lisćinowy zapisk</li><li>Lisćinowy zapisk</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Zasadźena dataja',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Tekst wobrazoweho popisa]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Tekst wobrazeho popisa' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Powjetšić' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Tekst wobrazoweho popisa</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Tekst wobrazeho popisa' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Powjetšić' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Tekst wobrazoweho popisa</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referenca',
 	'edittoolbar-help-content-reference-syntax' => 'Tekst strony.&lt;ref name="test"&gt;[http://www.example.org tekst wotkaza], přidatny tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Tekst strony.<sup><a href='#'>[1]</a></sup>",
@@ -4054,14 +4654,19 @@
  * @author Glanthor Reviol
  */
 $messages['hu'] = array(
-	'edittoolbar' => 'Szerkesztő eszköztár',
+	'edittoolbar' => 'Szerkesztő-eszköztár',
 	'edittoolbar-desc' => 'Használhatóbb szerkesztő eszköztár',
 	'edittoolbar-preference' => 'Fejlettebb szerkesztő-eszköztár használata',
+	'edittoolbar-cgd-preference' => 'Segítség haladó wikiszöveg hozzáadásához',
 	'edittoolbar-loading' => 'Betöltés...',
 	'edittoolbar-tool-bold' => 'Félkövér',
 	'edittoolbar-tool-bold-example' => 'Félkövér szöveg',
 	'edittoolbar-tool-italic' => 'DÅ‘lt',
 	'edittoolbar-tool-italic-example' => 'Dőlt szöveg',
+	'edittoolbar-tool-ilink' => 'Belső hivatkozás',
+	'edittoolbar-tool-ilink-example' => 'Hivatkozás címe',
+	'edittoolbar-tool-xlink' => 'Külső hivatkozás (ne felejtkezz el a http:// előtagról)',
+	'edittoolbar-tool-xlink-example' => 'http://www.peldaoldal.hu hivatkozás címe',
 	'edittoolbar-tool-link' => 'Hivatkozás',
 	'edittoolbar-tool-link-title' => 'Hivatkozás beszúrása',
 	'edittoolbar-tool-link-int' => 'A wiki egy lapjára',
@@ -4077,6 +4682,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Érvénytelen cím',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Ellenőrzöm, hogy létezik-e a lap…',
 	'edittoolbar-tool-link-int-invalid' => 'A megadott cím érvénytelen',
+	'edittoolbar-tool-link-ext-invalid' => 'A megadott URL nem érvényes.',
 	'edittoolbar-tool-file' => 'Fájl beszúrása',
 	'edittoolbar-tool-file-example' => 'Egyszerikép.jpg',
 	'edittoolbar-tool-reference' => 'Forráshivatkozás',
@@ -4111,15 +4717,28 @@
 {{ns:file}}:Példa.jpg|képaláírás2',
 	'edittoolbar-tool-newline' => 'Új sor',
 	'edittoolbar-tool-table' => 'Táblázat',
+	'edittoolbar-tool-table-example-old' => '-
+! 1. fejléc
+! 2. fejléc
+! 3. fejléc
+|-
+| 1. sor, 1. cella
+| 1. sor, 2. cella
+| 1. sor, 3. cella
+|-
+| 2. sor, 1. cella
+| 2. sor, 2. cella
+| 2. sor, 3. cella',
 	'edittoolbar-tool-table-example' => '$1. sor, $2. cella',
 	'edittoolbar-tool-table-example-header' => '$1. sor, $2. cella (fejléc)',
 	'edittoolbar-tool-table-title' => 'Tábla beszúrása',
 	'edittoolbar-tool-table-dimensions' => 'Méret',
 	'edittoolbar-tool-table-dimensions-rows' => 'Sorok száma',
 	'edittoolbar-tool-table-dimensions-columns' => 'Oszlopok száma',
+	'edittoolbar-tool-table-dimensions-header' => 'A fejlécet is beleértve',
 	'edittoolbar-tool-table-insert' => 'Beszúrás',
 	'edittoolbar-tool-table-cancel' => 'Mégse',
-	'edittoolbar-tool-replace' => 'Csere',
+	'edittoolbar-tool-replace' => 'Keresés és csere',
 	'edittoolbar-tool-replace-title' => 'Keresés és csere',
 	'edittoolbar-tool-replace-search' => 'Keresendő szöveg:',
 	'edittoolbar-tool-replace-replace' => 'Csere:',
@@ -4127,8 +4746,9 @@
 	'edittoolbar-tool-replace-regex' => 'A beírt szöveg egy reguláris kifejezés',
 	'edittoolbar-tool-replace-all' => 'Az összes előfordulás lecserélése',
 	'edittoolbar-tool-replace-button' => 'Csere',
-	'edittoolbar-tool-replace-close' => 'Bezárás',
+	'edittoolbar-tool-replace-close' => 'Mégse',
 	'edittoolbar-tool-replace-nomatch' => 'Nincs egyetlen találat sem.',
+	'edittoolbar-tool-replace-success' => '$1 csere történt.',
 	'edittoolbar-section-characters' => 'Különleges karakterek',
 	'edittoolbar-characters-page-latin' => 'Latin',
 	'edittoolbar-characters-page-latinextended' => 'Bővített latin',
@@ -4188,7 +4808,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Listaelem</li><li>Listaelem</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Beszúrt fájl',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|bélyegkép|Képaláírás]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='A kép nagyítása' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Képaláírás</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='A kép nagyítása' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Képaláírás</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Forráshivatkozás',
 	'edittoolbar-help-content-reference-syntax' => 'Lap szövege.<ref name="test">[http://www.példaoldal.hu Hivatkozás szövege], további szöveg.</ref>',
 	'edittoolbar-help-content-reference-result' => "Lap szövege.<sup><a href='#'>[1]</a></sup>",
@@ -4212,11 +4832,16 @@
 	'edittoolbar' => 'Instrumentario de modification',
 	'edittoolbar-desc' => 'Barra con instrumentos de modification con augmento de usabilitate',
 	'edittoolbar-preference' => 'Activar le instrumentario de modification meliorate',
+	'edittoolbar-cgd-preference' => 'Activar le adjuta pro adder texto wiki avantiate',
 	'edittoolbar-loading' => 'Cargamento in curso…',
 	'edittoolbar-tool-bold' => 'Grasse',
 	'edittoolbar-tool-bold-example' => 'Texto grasse',
-	'edittoolbar-tool-italic' => 'Cursive',
-	'edittoolbar-tool-italic-example' => 'Texto cursive',
+	'edittoolbar-tool-italic' => 'Italic',
+	'edittoolbar-tool-italic-example' => 'Texto italic',
+	'edittoolbar-tool-ilink' => 'Ligamine interne',
+	'edittoolbar-tool-ilink-example' => 'Titulo del ligamine',
+	'edittoolbar-tool-xlink' => 'Ligamine externe (non oblida le prefixo http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com titulo del ligamine',
 	'edittoolbar-tool-link' => 'Ligamine',
 	'edittoolbar-tool-link-title' => 'Inserer ligamine',
 	'edittoolbar-tool-link-int' => 'A un pagina wiki',
@@ -4232,25 +4857,26 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Titulo invalide',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Verifica existentia del pagina...',
 	'edittoolbar-tool-link-int-invalid' => 'Le titulo que tu specificava es invalide.',
+	'edittoolbar-tool-link-ext-invalid' => 'Le URL que tu specificava es invalide.',
 	'edittoolbar-tool-file' => 'File incastrate',
 	'edittoolbar-tool-file-example' => 'Exemplo.jpg',
 	'edittoolbar-tool-reference' => 'Referentia',
 	'edittoolbar-tool-reference-example' => 'Inserer hic le texto del nota',
 	'edittoolbar-tool-signature' => 'Signatura con data e hora',
 	'edittoolbar-section-advanced' => 'Avantiate',
-	'edittoolbar-tool-heading' => 'Capite',
+	'edittoolbar-tool-heading' => 'Titulo',
 	'edittoolbar-tool-heading-1' => 'Nivello 1',
 	'edittoolbar-tool-heading-2' => 'Nivello 2',
 	'edittoolbar-tool-heading-3' => 'Nivello 3',
 	'edittoolbar-tool-heading-4' => 'Nivello 4',
 	'edittoolbar-tool-heading-5' => 'Nivello 5',
-	'edittoolbar-tool-heading-example' => 'Texto del capite',
+	'edittoolbar-tool-heading-example' => 'Texto del titulo',
 	'edittoolbar-group-list' => 'Lista',
 	'edittoolbar-tool-ulist' => 'Lista a punctos',
 	'edittoolbar-tool-ulist-example' => 'Elemento de lista a punctos',
 	'edittoolbar-tool-olist' => 'Lista numerate',
 	'edittoolbar-tool-olist-example' => 'Elemento de lista numerate',
-	'edittoolbar-group-size' => 'Dimension',
+	'edittoolbar-group-size' => 'Grandor',
 	'edittoolbar-tool-big' => 'Grande',
 	'edittoolbar-tool-big-example' => 'Texto grande',
 	'edittoolbar-tool-small' => 'Micre',
@@ -4266,6 +4892,18 @@
 {{ns:file}}:Exemplo.jpg|Legenda2',
 	'edittoolbar-tool-newline' => 'Nove linea',
 	'edittoolbar-tool-table' => 'Tabella',
+	'edittoolbar-tool-table-example-old' => '-
+! capite 1
+! capite 2
+! capite 3
+|-
+| linea 1, cellula 1
+| linea 1, cellula 2
+| linea 1, cellula 3
+|-
+| linea 2, cellula 1
+| linea 2, cellula 2
+| linea 2, cellula 3',
 	'edittoolbar-tool-table-example' => 'Linea $1, cellula $2',
 	'edittoolbar-tool-table-example-header' => 'Linea $1, cellula $2 (capite)',
 	'edittoolbar-tool-table-title' => 'Inserer tabella',
@@ -4275,7 +4913,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Includer linea de capite',
 	'edittoolbar-tool-table-insert' => 'Inserer',
 	'edittoolbar-tool-table-cancel' => 'Cancellar',
-	'edittoolbar-tool-replace' => 'Reimplaciar',
+	'edittoolbar-tool-replace' => 'Cercar e reimplaciar',
 	'edittoolbar-tool-replace-title' => 'Cercar e reimplaciar',
 	'edittoolbar-tool-replace-search' => 'Cercar:',
 	'edittoolbar-tool-replace-replace' => 'Reimplaciar per:',
@@ -4283,8 +4921,9 @@
 	'edittoolbar-tool-replace-regex' => 'Tractar le catena de recerca como un expression regular',
 	'edittoolbar-tool-replace-all' => 'Reimplaciar tote le occurrentias',
 	'edittoolbar-tool-replace-button' => 'Reimplaciar',
-	'edittoolbar-tool-replace-close' => 'Clauder',
+	'edittoolbar-tool-replace-close' => 'Cancellar',
 	'edittoolbar-tool-replace-nomatch' => 'Tu recerca non ha producite resultatos.',
+	'edittoolbar-tool-replace-success' => '$1 reimplaciamentos facite.',
 	'edittoolbar-section-characters' => 'Characteres special',
 	'edittoolbar-characters-page-latin' => 'Latin',
 	'edittoolbar-characters-page-latinextended' => 'Latin extendite',
@@ -4293,49 +4932,49 @@
 	'edittoolbar-characters-page-greek' => 'Grec',
 	'edittoolbar-characters-page-cyrillic' => 'Cyrillic',
 	'edittoolbar-characters-page-arabic' => 'Arabe',
-	'edittoolbar-characters-page-hebrew' => 'Hebreo',
+	'edittoolbar-characters-page-hebrew' => 'Hebree',
 	'edittoolbar-characters-page-telugu' => 'Telugu',
 	'edittoolbar-section-help' => 'Adjuta',
 	'edittoolbar-help-heading-description' => 'Description',
-	'edittoolbar-help-heading-syntax' => 'Lo que tu scribe',
-	'edittoolbar-help-heading-result' => 'Lo que tu obtene',
-	'edittoolbar-help-page-format' => 'Formatation',
+	'edittoolbar-help-heading-syntax' => 'Entrata',
+	'edittoolbar-help-heading-result' => 'Resultato',
+	'edittoolbar-help-page-format' => 'Typographia',
 	'edittoolbar-help-page-link' => 'Ligamines',
-	'edittoolbar-help-page-heading' => 'Capites',
+	'edittoolbar-help-page-heading' => 'Titulos',
 	'edittoolbar-help-page-list' => 'Listas',
 	'edittoolbar-help-page-file' => 'Files',
 	'edittoolbar-help-page-reference' => 'Referentias',
 	'edittoolbar-help-page-discussion' => 'Discussion',
-	'edittoolbar-help-content-italic-description' => 'Cursive',
-	'edittoolbar-help-content-italic-syntax' => "''Texto cursive''",
-	'edittoolbar-help-content-italic-result' => '<em>Texto cursive</em>',
+	'edittoolbar-help-content-italic-description' => 'Italic',
+	'edittoolbar-help-content-italic-syntax' => "''Texto italic''",
+	'edittoolbar-help-content-italic-result' => '<em>Texto italic</em>',
 	'edittoolbar-help-content-bold-description' => 'Grasse',
 	'edittoolbar-help-content-bold-syntax' => "'''Texto grasse'''",
 	'edittoolbar-help-content-bold-result' => '<strong>Texto grasse</strong>',
-	'edittoolbar-help-content-bolditalic-description' => 'Grasse &amp; cursive',
-	'edittoolbar-help-content-bolditalic-syntax' => "'''''Texto grasse &amp; cursive'''''",
-	'edittoolbar-help-content-bolditalic-result' => '<strong><em>Texto grasse &amp; cursive</em></strong>',
+	'edittoolbar-help-content-bolditalic-description' => 'Grasse &amp; italic',
+	'edittoolbar-help-content-bolditalic-syntax' => "'''''Texto grasse &amp; italic'''''",
+	'edittoolbar-help-content-bolditalic-result' => '<strong><em>Texto grasse &amp; italic</em></strong>',
 	'edittoolbar-help-content-ilink-description' => 'Ligamine interne',
 	'edittoolbar-help-content-ilink-syntax' => '[[Titulo del pagina|Texto del ligamine]]<br />[[Titulo del pagina]]',
 	'edittoolbar-help-content-ilink-result' => "<a href='#'>Texto del ligamine</a><br /><a href='#'>Titulo del pagina</a>",
 	'edittoolbar-help-content-xlink-description' => 'Ligamine externe',
 	'edittoolbar-help-content-xlink-syntax' => '[http://www.example.org Texto del ligamine]<br />[http://www.example.org]<br />http://www.example.org',
 	'edittoolbar-help-content-xlink-result' => "<a href='#' class='external'>Texto del ligamine</a><br /><a href='#' class='external autonumber'>[1]</a><br /><a href='#' class='external'>http://www.example.org</a>",
-	'edittoolbar-help-content-heading1-description' => 'Capite de prime nivello',
-	'edittoolbar-help-content-heading1-syntax' => '= Texto del capite =',
-	'edittoolbar-help-content-heading1-result' => '<h1>Texto del capite</h1>',
-	'edittoolbar-help-content-heading2-description' => 'Capite del secunde nivello',
-	'edittoolbar-help-content-heading2-syntax' => '== Texto del capite ==',
-	'edittoolbar-help-content-heading2-result' => '<h2>Texto del capite</h2>',
-	'edittoolbar-help-content-heading3-description' => 'Capite del tertie nivello',
-	'edittoolbar-help-content-heading3-syntax' => '=== Texto del capite ===',
-	'edittoolbar-help-content-heading3-result' => '<h3>Texto del capite</h3>',
-	'edittoolbar-help-content-heading4-description' => 'Capite del quarte nivello',
-	'edittoolbar-help-content-heading4-syntax' => '==== Texto del capite ====',
-	'edittoolbar-help-content-heading4-result' => '<h4>Texto del capite</h4>',
-	'edittoolbar-help-content-heading5-description' => 'Capite del quinte nivello',
-	'edittoolbar-help-content-heading5-syntax' => '===== Texto del capite =====',
-	'edittoolbar-help-content-heading5-result' => '<h5>Texto del capite</h5>',
+	'edittoolbar-help-content-heading1-description' => 'Titulo de prime nivello',
+	'edittoolbar-help-content-heading1-syntax' => '= Texto del titulo =',
+	'edittoolbar-help-content-heading1-result' => '<h1>Texto del titulo</h1>',
+	'edittoolbar-help-content-heading2-description' => 'Titulo del secunde nivello',
+	'edittoolbar-help-content-heading2-syntax' => '== Texto del titulo ==',
+	'edittoolbar-help-content-heading2-result' => '<h2>Texto del titulo</h2>',
+	'edittoolbar-help-content-heading3-description' => 'Titulo del tertie nivello',
+	'edittoolbar-help-content-heading3-syntax' => '=== Texto del titulo ===',
+	'edittoolbar-help-content-heading3-result' => '<h3>Texto del titulo</h3>',
+	'edittoolbar-help-content-heading4-description' => 'Titulo del quarte nivello',
+	'edittoolbar-help-content-heading4-syntax' => '==== Texto del titulo ====',
+	'edittoolbar-help-content-heading4-result' => '<h4>Texto del titulo</h4>',
+	'edittoolbar-help-content-heading5-description' => 'Titulo del quinte nivello',
+	'edittoolbar-help-content-heading5-syntax' => '===== Texto del titulo =====',
+	'edittoolbar-help-content-heading5-result' => '<h5>Texto del titulo</h5>',
 	'edittoolbar-help-content-ulist-description' => 'Lista a punctos',
 	'edittoolbar-help-content-ulist-syntax' => '* Elemento del lista<br />* Elemento del lista',
 	'edittoolbar-help-content-ulist-result' => '<ul><li>Elemento del lista</li><li>Elemento del lista</li></ul>',
@@ -4344,7 +4983,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Elemento del lista</li><li>Elemento del lista</li></ol>',
 	'edittoolbar-help-content-file-description' => 'File incastrate',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Exemplo.png|thumb|Texto del legenda]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Texto del legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Texto del legenda</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Texto del legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Texto del legenda</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referentia',
 	'edittoolbar-help-content-reference-syntax' => 'Texto del pagina.&lt;ref name="test"&gt;[http://www.example.org Texto del ligamine], texto additional.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Texto del pagina.<sup><a href='#'>[1]</a></sup>",
@@ -4370,11 +5009,16 @@
 	'edittoolbar' => 'Batang alat penyuntingan',
 	'edittoolbar-desc' => 'Batang alat penyuntingan dengan kebergunaan yang ditingkatkan',
 	'edittoolbar-preference' => 'Aktifkan batang alat penyuntingan yang telah ditingkatkan',
+	'edittoolbar-cgd-preference' => 'Mengaktifkan bantuan untuk menambahkan teks wiki',
 	'edittoolbar-loading' => 'Memuat...',
 	'edittoolbar-tool-bold' => 'Tebal',
 	'edittoolbar-tool-bold-example' => 'Teks tebal',
 	'edittoolbar-tool-italic' => 'Miring',
 	'edittoolbar-tool-italic-example' => 'Teks miring',
+	'edittoolbar-tool-ilink' => 'Pranala internal',
+	'edittoolbar-tool-ilink-example' => 'Judul pranala',
+	'edittoolbar-tool-xlink' => 'Pranala luar (ingat prefiks http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.contoh.com judul pranala',
 	'edittoolbar-tool-link' => 'Pranala',
 	'edittoolbar-tool-link-title' => 'Masukkan pranala',
 	'edittoolbar-tool-link-int' => 'Ke halaman wiki',
@@ -4390,6 +5034,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Judul tidak sah',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Memeriksa keberadaan halaman...',
 	'edittoolbar-tool-link-int-invalid' => 'Judul yang Anda berikan tidak sah.',
+	'edittoolbar-tool-link-ext-invalid' => 'URL yang anda berikan tidak sah.',
 	'edittoolbar-tool-file' => 'Sisipkan berkas',
 	'edittoolbar-tool-file-example' => 'Contoh.jpg',
 	'edittoolbar-tool-reference' => 'Referensi',
@@ -4424,6 +5069,18 @@
 {{ns:file}}:Contoh.jpg|Judul2',
 	'edittoolbar-tool-newline' => 'Baris baru',
 	'edittoolbar-tool-table' => 'Tabel',
+	'edittoolbar-tool-table-example-old' => '	-
+! judul bagian 1
+! judul bagian 2
+! judul bagian 3
+|-
+| baris 1, sel 1
+| baris 1, sel 2
+| baris 1, sel 3
+|-
+| baris 2, sel 1
+| baris 2, sel 2
+| baris 2, sel 3',
 	'edittoolbar-tool-table-example' => 'Baris $1, sel $2',
 	'edittoolbar-tool-table-example-header' => 'Baris $1, sel $2 (kepala bagian)',
 	'edittoolbar-tool-table-title' => 'Masukkan tabel',
@@ -4433,7 +5090,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Sertakan baris',
 	'edittoolbar-tool-table-insert' => 'Masukkan',
 	'edittoolbar-tool-table-cancel' => 'Batalkan',
-	'edittoolbar-tool-replace' => 'Gantikan',
+	'edittoolbar-tool-replace' => 'Cari dan gantikan',
 	'edittoolbar-tool-replace-title' => 'Cari dan ganti',
 	'edittoolbar-tool-replace-search' => 'Cari:',
 	'edittoolbar-tool-replace-replace' => 'Ganti dengan:',
@@ -4441,8 +5098,9 @@
 	'edittoolbar-tool-replace-regex' => "Perlakukan string pencarian sebagai ''regular expression (regex)''",
 	'edittoolbar-tool-replace-all' => 'Ganti semua yang cocok',
 	'edittoolbar-tool-replace-button' => 'Gantikan',
-	'edittoolbar-tool-replace-close' => 'Tutup',
+	'edittoolbar-tool-replace-close' => 'Batalkan',
 	'edittoolbar-tool-replace-nomatch' => 'Pencarian Anda tidak membuahkan hasil.',
+	'edittoolbar-tool-replace-success' => '$1 terjadi penggantian.',
 	'edittoolbar-section-characters' => 'Karakter spesial',
 	'edittoolbar-characters-page-latin' => 'Latin',
 	'edittoolbar-characters-page-latinextended' => 'Ekstensi Latin',
@@ -4502,7 +5160,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Isi daftar</li><li>Isi daftar</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Menyisipkan berkas',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Contoh.png|thumb|Teks judul gambar]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Teks judul gambar' class='image' href='/wiki/Berkas:Wiki.png'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Perbesar' class='internal' href='/wiki/Berkas:Wiki.png'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Teks judul gambar</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Teks judul gambar' class='image' href='/wiki/Berkas:Wiki.png'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Perbesar' class='internal' href='/wiki/Berkas:Wiki.png'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Teks judul gambar</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referensi',
 	'edittoolbar-help-content-reference-syntax' => 'Teks halaman.&lt;ref name="test"&gt;[http://www.contoh.org Teks pranala], teks tambahan.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Teks halaman.<sup><a href='#'>[1]</a></sup>",
@@ -4522,16 +5180,21 @@
 /** Italian (Italiano)
  * @author Darth Kule
  * @author Melos
+ * @author Nemo bis
  */
 $messages['it'] = array(
 	'edittoolbar' => 'Barra degli strumenti di modifica',
-	'edittoolbar-desc' => 'Modifica barra degli strumenti della pagina con una maggiore usabilità ',
+	'edittoolbar-desc' => 'Barra degli strumenti di modifica della pagina con migliorata usabilità ',
 	'edittoolbar-preference' => 'Abilita barra degli strumenti di modifica avanzata',
 	'edittoolbar-loading' => 'Caricamento in corso...',
 	'edittoolbar-tool-bold' => 'Grassetto',
 	'edittoolbar-tool-bold-example' => 'Testo in grassetto',
 	'edittoolbar-tool-italic' => 'Corsivo',
 	'edittoolbar-tool-italic-example' => 'Testo in corsivo',
+	'edittoolbar-tool-ilink' => 'Collegamento interno',
+	'edittoolbar-tool-ilink-example' => 'Titolo del collegamento',
+	'edittoolbar-tool-xlink' => 'Collegamento esterno (ricorda il prefisso http:// )',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com titolo del collegamento',
 	'edittoolbar-tool-link' => 'Link',
 	'edittoolbar-tool-link-title' => 'Inserisci link',
 	'edittoolbar-tool-link-int' => 'A una pagina wiki',
@@ -4588,7 +5251,7 @@
 	'edittoolbar-tool-table-dimensions-columns' => 'Colonne',
 	'edittoolbar-tool-table-insert' => 'Inserisci',
 	'edittoolbar-tool-table-cancel' => 'Annulla',
-	'edittoolbar-tool-replace' => 'Sostituisci',
+	'edittoolbar-tool-replace' => 'Cerca e sostituisci',
 	'edittoolbar-tool-replace-title' => 'Cerca e sostituisci',
 	'edittoolbar-tool-replace-search' => 'Cerca per:',
 	'edittoolbar-tool-replace-replace' => 'Sostituisci con:',
@@ -4596,7 +5259,7 @@
 	'edittoolbar-tool-replace-regex' => "Tratta la stringa di ricerca come un'espressione regolare",
 	'edittoolbar-tool-replace-all' => 'Sostituisci tutte le occorrenze',
 	'edittoolbar-tool-replace-button' => 'Sostituisci',
-	'edittoolbar-tool-replace-close' => 'Chiudi',
+	'edittoolbar-tool-replace-close' => 'Annulla',
 	'edittoolbar-tool-replace-nomatch' => 'La tua ricerca non ha prodotto risultati.',
 	'edittoolbar-section-characters' => 'Caratteri speciali',
 	'edittoolbar-characters-page-latin' => 'Latino',
@@ -4657,7 +5320,7 @@
 	'edittoolbar-help-content-olist-result' => "<ol><li>Elemento dell'elenco</li><li>Elemento dell'elenco</li></ol>",
 	'edittoolbar-help-content-file-description' => 'File incorporato',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Esempio.png|thumb|Testo della didascalia]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Testo della didascalia</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Testo della didascalia</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Nota',
 	'edittoolbar-help-content-reference-syntax' => 'Testo della pagina.&lt;ref name="test"&gt;[http://www.example.org Testo del collegamento], testo aggiuntivo.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Testo della pagina.<sup><a href='#'>[1]</a></sup>",
@@ -4678,17 +5341,23 @@
  * @author Aotake
  * @author Fievarsty
  * @author Fryed-peach
+ * @author Whym
  * @author 青子守歌
  */
 $messages['ja'] = array(
 	'edittoolbar' => '編集ツールバー',
 	'edittoolbar-desc' => '使いやすさの向上したページ編集ツールバー',
 	'edittoolbar-preference' => '改良型編集ツールバーを有効にする',
+	'edittoolbar-cgd-preference' => 'é«˜åº¦ãªã‚¦ã‚£ã‚­ãƒ†ã‚­ã‚¹ãƒˆã®è¿½åŠ ã«é–¢ã™ã‚‹ãƒ˜ãƒ«ãƒ—ã‚’æœ‰åŠ¹åŒ–ã™ã‚‹',
 	'edittoolbar-loading' => '読み込み中…',
 	'edittoolbar-tool-bold' => '太字',
 	'edittoolbar-tool-bold-example' => '太字テキスト',
 	'edittoolbar-tool-italic' => '斜体',
 	'edittoolbar-tool-italic-example' => '斜体テキスト',
+	'edittoolbar-tool-ilink' => '内部リンク',
+	'edittoolbar-tool-ilink-example' => 'リンクタイトル',
+	'edittoolbar-tool-xlink' => '外部リンク (æŽ¥é ­è¾ž http:// を忘れずに)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com リンクタイトル',
 	'edittoolbar-tool-link' => 'リンク',
 	'edittoolbar-tool-link-title' => 'リンクの挿入',
 	'edittoolbar-tool-link-int' => 'ウィキページへ',
@@ -4704,6 +5373,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'ページ名として無効です',
 	'edittoolbar-tool-link-int-target-status-loading' => 'ページの存在を確認中…',
 	'edittoolbar-tool-link-int-invalid' => '指定したページ名は無効です。',
+	'edittoolbar-tool-link-ext-invalid' => 'あなたが指定した URL は無効です。',
 	'edittoolbar-tool-file' => '埋め込みファイル',
 	'edittoolbar-tool-file-example' => 'Example.jpg',
 	'edittoolbar-tool-reference' => '注釈',
@@ -4738,6 +5408,18 @@
 {{ns:file}}:Example.jpg|キャプション2',
 	'edittoolbar-tool-newline' => '改行',
 	'edittoolbar-tool-table' => '表',
+	'edittoolbar-tool-table-example-old' => '-
+! 見出し 1
+! 見出し 2
+! 見出し 3
+|-
+| è¡Œ 1, セル 1
+| è¡Œ 1, セル 2
+| è¡Œ 1, セル 3
+|-
+| è¡Œ 2, セル 1
+| è¡Œ 2, セル 2
+| è¡Œ 2, セル 3',
 	'edittoolbar-tool-table-example' => 'è¡Œ $1、 セル $2',
 	'edittoolbar-tool-table-example-header' => 'è¡Œ $1、 セル $2 (見出し)',
 	'edittoolbar-tool-table-title' => '表を挿入',
@@ -4747,7 +5429,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'ヘッダ列を含める',
 	'edittoolbar-tool-table-insert' => '挿入',
 	'edittoolbar-tool-table-cancel' => '中止',
-	'edittoolbar-tool-replace' => '置換',
+	'edittoolbar-tool-replace' => '検索と置換',
 	'edittoolbar-tool-replace-title' => '検索と置換',
 	'edittoolbar-tool-replace-search' => '検索する文字列:',
 	'edittoolbar-tool-replace-replace' => '置換後の文字列:',
@@ -4755,8 +5437,9 @@
 	'edittoolbar-tool-replace-regex' => '正規表現で検索する',
 	'edittoolbar-tool-replace-all' => 'すべて置換する',
 	'edittoolbar-tool-replace-button' => '置換',
-	'edittoolbar-tool-replace-close' => '閉じる',
+	'edittoolbar-tool-replace-close' => '中止',
 	'edittoolbar-tool-replace-nomatch' => '検索文字列に一致するものはありませんでした。',
+	'edittoolbar-tool-replace-success' => '$1回の置換が行われました。',
 	'edittoolbar-section-characters' => '特殊文字',
 	'edittoolbar-characters-page-latin' => 'ラテン文字',
 	'edittoolbar-characters-page-latinextended' => '拡張ラテン文字',
@@ -4816,7 +5499,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>ç®‡æ¡æ›¸ãé …ç›®</li><li>ç®‡æ¡æ›¸ãé …ç›®</li></ol>',
 	'edittoolbar-help-content-file-description' => '埋め込みファイル',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|キャプション]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='キャプション' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>キャプション</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='キャプション' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>キャプション</div></div>",
 	'edittoolbar-help-content-reference-description' => '注釈',
 	'edittoolbar-help-content-reference-syntax' => 'ページ本文&lt;ref name="test"&gt;[http://www.example.org リンクタイトル]ã€è¿½åŠ ãƒ†ã‚­ã‚¹ãƒˆ&lt;/ref&gt;。',
 	'edittoolbar-help-content-reference-result' => "ページ本文<sup><a href='#'>[1]</a></sup>。",
@@ -4846,6 +5529,10 @@
 	'edittoolbar-tool-bold-example' => 'მუქი ტექსტი',
 	'edittoolbar-tool-italic' => 'კურსივი',
 	'edittoolbar-tool-italic-example' => 'კურსივის ტექსტი',
+	'edittoolbar-tool-ilink' => 'შიდა ბმული',
+	'edittoolbar-tool-ilink-example' => 'ბმულის სათაური',
+	'edittoolbar-tool-xlink' => 'გარე ბმული (გახსოვდეთ http:// პრეფიქსი)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com ბმულის სათაური',
 	'edittoolbar-tool-file' => 'ჩასმული ფაილი',
 	'edittoolbar-tool-file-example' => 'მაგალითი.jpg',
 	'edittoolbar-tool-reference' => 'მინიშნებები',
@@ -4937,7 +5624,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>სიის ელემენტი</li><li>სიის ელემენტი</li></ol>',
 	'edittoolbar-help-content-file-description' => 'ჩასმული ფაილი',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|წარწერის ტექსტი]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='წარწერის ტექსტი' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>წარწერის ტექსტი</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='წარწერის ტექსტი' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>წარწერის ტექსტი</div></div>",
 	'edittoolbar-help-content-reference-description' => 'მინიშნება',
 	'edittoolbar-help-content-reference-syntax' => 'გვერდის ტექსტი&lt;ref name="test"&gt;[http://www.example.org ბმულის ტექსტი], დამატებითი ტექსტი.&lt;/ref&gt;.',
 	'edittoolbar-help-content-reference-result' => "გვერდის ტექსტი<sup><a href='#'>[1]</a></sup>.",
@@ -4965,6 +5652,10 @@
 	'edittoolbar-tool-bold-example' => 'អត្ថបទជាអក្សរដិត',
 	'edittoolbar-tool-italic' => 'អក្សរទ្រេត',
 	'edittoolbar-tool-italic-example' => 'អត្ថបទជាអក្សរទ្រេត',
+	'edittoolbar-tool-ilink' => 'តំណភ្ជាប់​ខាងក្នុង',
+	'edittoolbar-tool-ilink-example' => 'ចំណងជើង​តំណភ្ជាប់',
+	'edittoolbar-tool-xlink' => 'តំណភ្ជាប់​ខាងក្រៅ (កុំភ្លេច​ដាក់ http:// នៅពីមុខ)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com ចំណងជើង​តំណភ្ជាប់',
 	'edittoolbar-tool-file' => 'រូបភាពបង្កប់',
 	'edittoolbar-tool-file-example' => 'ឧទាហរណ៍.jpg',
 	'edittoolbar-tool-reference' => 'ឯកសារយោង',
@@ -5104,6 +5795,10 @@
 	'edittoolbar-tool-bold-example' => '굵은 글씨',
 	'edittoolbar-tool-italic' => '기울인 글씨',
 	'edittoolbar-tool-italic-example' => '기울인 글씨',
+	'edittoolbar-tool-ilink' => '내부 링크',
+	'edittoolbar-tool-ilink-example' => '문서 ì œëª©',
+	'edittoolbar-tool-xlink' => '외부 링크 ( http:// 를 붙여 주세요 )',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com 링크 이름',
 	'edittoolbar-tool-link-ext-target' => '링크 URL:',
 	'edittoolbar-tool-file' => '파일 넣기',
 	'edittoolbar-tool-file-example' => 'Exemple.jpg',
@@ -5197,7 +5892,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>목록 항목</li><li>목록 항목</li></ol>',
 	'edittoolbar-help-content-file-description' => '파일 넣기',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|그림 설명]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='ì‹¤ì œ 크기로' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>그림 설명</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='ì‹¤ì œ 크기로' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>그림 설명</div></div>",
 	'edittoolbar-help-content-reference-description' => '출처',
 	'edittoolbar-help-content-reference-syntax' => '문서 ë‚´ìš©.&lt;ref name="test"&gt;[http://www.example.org 링크 ì œëª©], 기타 설명.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "문서 내용.<sup><a href='#'>[1]</a></sup>",
@@ -5221,11 +5916,16 @@
 	'edittoolbar' => 'Werkzüsh för et Ändere',
 	'edittoolbar-desc' => 'Verbesserte Werkzüsh för et Ändere',
 	'edittoolbar-preference' => 'Donn et ußföerlesh Werkzüsh för et Ändere aanzeije (bruch Java_Skripp)',
+	'edittoolbar-cgd-preference' => 'Donn Hülp aanzeije för fottjeschredde Wikitäx ennzefööje',
 	'edittoolbar-loading' => 'Am Laade{{int:ellipsis}}',
 	'edittoolbar-tool-bold' => 'Fätte Schreff',
 	'edittoolbar-tool-bold-example' => 'Fätte Schreff',
 	'edittoolbar-tool-italic' => 'Scheive Schreff',
 	'edittoolbar-tool-italic-example' => 'Scheive Schreff',
+	'edittoolbar-tool-ilink' => 'Lenk en et Wiki',
+	'edittoolbar-tool-ilink-example' => 'Dä Tittel vun dä Sigk, woh dä Lengk drop jonn sull',
+	'edittoolbar-tool-xlink' => 'Lengk noh Ußerhallf vum Wiki',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com Täx för Aanzezeije, för däm Lengk singe Anker',
 	'edittoolbar-tool-link' => 'Lenk',
 	'edittoolbar-tool-link-title' => 'Donn ene Lengk dobei',
 	'edittoolbar-tool-link-int' => 'Op en Sigg em Wiki',
@@ -5241,6 +5941,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Dat es ene onjöltijje Tittel för en Sigg',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Ben aam Prööfe, ov et di Sigg jitt{{int:ellipsis}}',
 	'edittoolbar-tool-link-int-invalid' => 'Dä aanjejovve Tittel för en Sigg en onjöltesch.',
+	'edittoolbar-tool-link-ext-invalid' => 'Do häs ene onjültijje <i lang="en">URL</i> aanjejovve',
 	'edittoolbar-tool-file' => 'Enjefösh Dattei',
 	'edittoolbar-tool-file-example' => 'Beld_Beishpöll.jpeg',
 	'edittoolbar-tool-reference' => 'Fohßnoht',
@@ -5275,6 +5976,18 @@
 {{ns:file}}:Beishpell.jpg|zweijte Beld-Täx',
 	'edittoolbar-tool-newline' => 'Neu Reih',
 	'edittoolbar-tool-table' => 'Tabäll',
+	'edittoolbar-tool-table-example-old' => '-
+! 1. Shpalldekopp
+! 2. Shpalldekopp
+! 3. Shpalldekopp
+|-
+| 1. Reij, 1. Shpalldt
+| 1. Reij, 2. Shpalldt
+| 1. Reij, 3. Shpalldt
+|-
+| 2. Reij, 1. Shpalldt
+| 2. Reij, 2. Shpalldt
+| 2. Reij, 3. Shpalldt',
 	'edittoolbar-tool-table-example' => 'De $2. Kolommne en de $1. Reij',
 	'edittoolbar-tool-table-example-header' => 'De $2. Kolommne en de $1. Reij (Kopp)',
 	'edittoolbar-tool-table-title' => 'Tabäll ennfööje',
@@ -5292,8 +6005,9 @@
 	'edittoolbar-tool-replace-regex' => '„{{int:Edittoolbar-tool-replace-search}}“ es en <i lang="en">regular expression</i>',
 	'edittoolbar-tool-replace-all' => 'Överall Ußtuusche',
 	'edittoolbar-tool-replace-button' => 'Lohß Jonn!',
-	'edittoolbar-tool-replace-close' => 'Zohmaache',
+	'edittoolbar-tool-replace-close' => 'Ophüüre!',
 	'edittoolbar-tool-replace-nomatch' => 'Doh ham_mer nix jefonge.',
+	'edittoolbar-tool-replace-success' => '$1 Mohl jet <!--{{PLURAL:$1|Eijmol|$1 Mohl jet|Nix}}--> jetuusch.',
 	'edittoolbar-section-characters' => 'Sönderzeijsche',
 	'edittoolbar-characters-page-latin' => 'Lateinesch',
 	'edittoolbar-characters-page-latinextended' => 'Lateinesch met Extras',
@@ -5353,7 +6067,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Enndraach en de Leß</li><li>Enndraach en de Leß</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Enjeföösch Dattei',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Beld_Ungerschreff]]',
-	'edittoolbar-help-content-file-result' => '<div style="width:104px;" class="thumbinner"><a title="Schreff unger dä Beld" class="image" href="/wiki/File:Wiki.png"><img height="50" width="100" border="0" class="thumbimage" src="extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png" alt=""/></a><div class="thumbcaption"><div class="magnify"><a title="Enlarge" class="internal" href="/wiki/File:Wiki.png"><img height="11" width="15" alt="" src="skins/common/images/magnify-clip.png"/></a></div>Schreff unger dä Beld</div></div>',
+	'edittoolbar-help-content-file-result' => '<div style="width:104px;" class="thumbinner"><a title="Schreff unger dä Beld" class="image" href="/wiki/File:Wiki.png"><img height="50" width="100" border="0" class="thumbimage" src="extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png" alt=""/></a><div class="thumbcaption"><div class="magnify"><a title="Enlarge" class="internal" href="/wiki/File:Wiki.png"><img height="11" width="15" alt="" src="{{STYLEPATH}}/common/images/magnify-clip.png"/></a></div>Schreff unger dä Beld</div></div>',
 	'edittoolbar-help-content-reference-description' => 'Fohßnoht',
 	'edittoolbar-help-content-reference-syntax' => 'Tex en dä Sigg. &lt;ref name="versoht"&gt;[http://www.example.org Täx för dä Lengk], un noch jät mieh Täx.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => 'Tex en dä Sigg. <sup><a href="#">[1]</a></sup>',
@@ -5370,11 +6084,21 @@
 	'edittoolbar-help-content-indent-result' => 'Nommaale Täx<dl><dd>Enjerök<dl><dd>Un norrens enjerök</dd></dl></dd></dl>',
 );
 
+/** Cornish (Kernowek)
+ * @author Kernoweger
+ */
+$messages['kw'] = array(
+	'edittoolbar-help-page-discussion' => 'Dadhelva',
+);
+
 /** Latin (Latina)
  * @author Omnipaedista
  */
 $messages['la'] = array(
 	'edittoolbar-loading' => 'Depromens…',
+	'edittoolbar-tool-ilink-example' => 'Titulus nexus externi',
+	'edittoolbar-tool-xlink' => 'Nexus externus (memento praefixi http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.exemplum.com titulus nexus externi',
 	'edittoolbar-tool-file' => 'Fasciculus in pagina impositus',
 	'edittoolbar-tool-file-example' => 'Exemplum.jpg',
 	'edittoolbar-tool-reference' => 'Referentia bibliographica',
@@ -5433,11 +6157,16 @@
 	'edittoolbar' => 'Toolbar änneren',
 	'edittoolbar-desc' => 'Toolbar vun de Säitenännerunge mat erweiderter Benotzerfrëndlechkeet',
 	'edittoolbar-preference' => 'Déi erweidert Ännerungs-Toolbar aktivéieren',
+	'edittoolbar-cgd-preference' => 'Hëllef fir erweiderte Wikitext derbäisetzen',
 	'edittoolbar-loading' => 'Lueden...',
 	'edittoolbar-tool-bold' => 'Fettgedréckt',
 	'edittoolbar-tool-bold-example' => 'Fettgedréckten Text',
 	'edittoolbar-tool-italic' => 'Kursiv',
 	'edittoolbar-tool-italic-example' => 'Kursiven Text',
+	'edittoolbar-tool-ilink' => 'Interne Link',
+	'edittoolbar-tool-ilink-example' => 'Titel vum Link',
+	'edittoolbar-tool-xlink' => 'Externe Link (denkt un de Prefix http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com Titel vum Link',
 	'edittoolbar-tool-link' => 'Link',
 	'edittoolbar-tool-link-title' => 'Link drasetzen',
 	'edittoolbar-tool-link-int' => 'Op e Wikiartikel/eng Wikisäit',
@@ -5453,6 +6182,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Net valabelen Titel',
 	'edittoolbar-tool-link-int-target-status-loading' => "Et gëtt nogekuckt ob et d'Säit gëtt...",
 	'edittoolbar-tool-link-int-invalid' => 'Den Titel deen Dir uginn hutt ass net valabel.',
+	'edittoolbar-tool-link-ext-invalid' => "D'URL déi Dir uginn hutt as net valabel.",
 	'edittoolbar-tool-file' => 'Agebonnene Fichier',
 	'edittoolbar-tool-file-example' => 'Beispill.jpg',
 	'edittoolbar-tool-reference' => 'Referenz',
@@ -5487,6 +6217,18 @@
 {{ns:file}}:Example.jpg|Beschreiwung2',
 	'edittoolbar-tool-newline' => 'Nei Linn',
 	'edittoolbar-tool-table' => 'Tabell',
+	'edittoolbar-tool-table-example-old' => '-
+! Iwwerschrëft 1
+! Iwwerschrëft 2
+! Iwwerschrëft 3
+|-
+| Rei 1, Zell 1
+| Rei 1, Zell 2
+| Rei 1, Zell 3
+|-
+| Rei 2, Zell 1
+| Rei 2, Zell 2
+| Rei 2, Zell 3',
 	'edittoolbar-tool-table-example' => 'Rei $1, Zell $2',
 	'edittoolbar-tool-table-example-header' => 'Rei $1, Zell $2 (Iwwerschrëft)',
 	'edittoolbar-tool-table-title' => 'Tabell drasetzen',
@@ -5496,7 +6238,7 @@
 	'edittoolbar-tool-table-dimensions-header' => "D'Rei vun der Iwwerschrëft matabezéien",
 	'edittoolbar-tool-table-insert' => 'Drasetzen',
 	'edittoolbar-tool-table-cancel' => 'Ofbriechen',
-	'edittoolbar-tool-replace' => 'Ersetzen',
+	'edittoolbar-tool-replace' => 'Sichen an ersetzen',
 	'edittoolbar-tool-replace-title' => 'Sichen an ersetzen',
 	'edittoolbar-tool-replace-search' => 'Sichen no:',
 	'edittoolbar-tool-replace-replace' => 'Ersetzen duerch:',
@@ -5504,8 +6246,9 @@
 	'edittoolbar-tool-replace-regex' => 'Dat no deem Dir sicht als regulären Ausdrock behandelen',
 	'edittoolbar-tool-replace-all' => 'Iwerall (wou et fonnt gouf) ersetzen',
 	'edittoolbar-tool-replace-button' => 'Ersetzen',
-	'edittoolbar-tool-replace-close' => 'Zoumaachen',
+	'edittoolbar-tool-replace-close' => 'Ofbriechen',
 	'edittoolbar-tool-replace-nomatch' => 'Är Sich hat kee Resultat.',
+	'edittoolbar-tool-replace-success' => '$1 mol ersat.',
 	'edittoolbar-section-characters' => 'Spezialzeechen',
 	'edittoolbar-characters-page-latin' => 'Laténgesch',
 	'edittoolbar-characters-page-latinextended' => 'Laténgesch, erweidert',
@@ -5573,7 +6316,7 @@
 </ol>',
 	'edittoolbar-help-content-file-description' => 'Agebonnene Fichier',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Ugewisenen Text]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Ugewisenen Texte' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Ugewisenen Text</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Ugewisenen Texte' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Ugewisenen Text</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referenz',
 	'edittoolbar-help-content-reference-syntax' => 'Text vun der Säit.&lt;ref name="test"&gt;[http://www.example.org Text vum Link], zousätzlechen Text.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Text vun der Säit <sup><a href='#'>[1]</a></sup>",
@@ -5602,6 +6345,7 @@
 );
 
 /** Lithuanian (Lietuvių)
+ * @author Homo
  * @author Matasg
  */
 $messages['lt'] = array(
@@ -5613,6 +6357,11 @@
 	'edittoolbar-tool-bold-example' => 'Paryškinti tekstą',
 	'edittoolbar-tool-italic' => 'Kursyvas',
 	'edittoolbar-tool-italic-example' => 'Tekstas kursyvu',
+	'edittoolbar-tool-ilink' => 'VidinÄ— nuoroda',
+	'edittoolbar-tool-ilink-example' => 'Nuorodos pavadinimas',
+	'edittoolbar-tool-xlink' => 'Išorinė nuoroda (nepamirškite http:// priedėlio)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com nuorodos pavadinimas',
+	'edittoolbar-tool-link-cancel' => 'Atšaukti',
 	'edittoolbar-tool-file' => 'Įdėti failą',
 	'edittoolbar-tool-file-example' => 'Pavyzdys.jpg',
 	'edittoolbar-tool-reference' => 'Išnaša',
@@ -5697,7 +6446,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Sąrašo elementas</li><li>Sąrašo elementas</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Įterpti failą',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Aprašymas]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Aprašymas</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Aprašymas</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Išnaša',
 	'edittoolbar-help-content-reference-syntax' => 'Puslapio tekstas.&lt;ref name="test"&gt;[http://www.example.org Nuorodos tekstas], papildomas tekstas.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Puslapio tekstas.<sup><a href='#'>[1]</a></sup>",
@@ -5717,6 +6466,7 @@
 /** Latvian (Latviešu)
  * @author Marozols
  * @author Papuass
+ * @author Yyy
  */
 $messages['lv'] = array(
 	'edittoolbar' => 'Rediģēšanas rīku josla',
@@ -5727,6 +6477,10 @@
 	'edittoolbar-tool-bold-example' => 'Pustrekns teksts',
 	'edittoolbar-tool-italic' => 'Kursīvā',
 	'edittoolbar-tool-italic-example' => 'Teksts kursīvā',
+	'edittoolbar-tool-ilink' => 'Iekšējā saite',
+	'edittoolbar-tool-ilink-example' => 'Saites teksts',
+	'edittoolbar-tool-xlink' => 'Ārējā saite (neaizmirsti adresi sākt ar "http://")',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com saites teksts',
 	'edittoolbar-tool-link' => 'Saite',
 	'edittoolbar-tool-link-title' => 'Ievietot saiti',
 	'edittoolbar-tool-link-int' => 'Iekšēja saite',
@@ -5771,7 +6525,7 @@
 {{ns:file}}:Example.jpg|Apraksts2',
 	'edittoolbar-tool-newline' => 'Jauna rinda',
 	'edittoolbar-tool-table' => 'Tabula',
-	'edittoolbar-tool-replace' => 'Aizstāt',
+	'edittoolbar-tool-replace' => 'Meklēt un aizstāt',
 	'edittoolbar-tool-replace-title' => 'Meklēt un aizstāt',
 	'edittoolbar-tool-replace-search' => 'Meklēt:',
 	'edittoolbar-tool-replace-replace' => 'Aizstāt ar:',
@@ -5840,7 +6594,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Saraksta elements</li><li>Saraksta elements</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Iekļauts fails',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Apraksts]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Apraksts' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Palielināt' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Apraksts</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Apraksts' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Palielināt' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Apraksts</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Atsauce',
 	'edittoolbar-help-content-reference-syntax' => 'Lapas teksts.&lt;ref name="test"&gt;[http://www.example.org Saites teksts], papildus teksts.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Lapas teksts.<sup><a href='#'>[1]</a></sup>",
@@ -5869,6 +6623,10 @@
 	'edittoolbar-tool-bold-example' => 'Задебелен текст',
 	'edittoolbar-tool-italic' => 'Косо',
 	'edittoolbar-tool-italic-example' => 'Закосен текст',
+	'edittoolbar-tool-ilink' => 'Внатрешна врска',
+	'edittoolbar-tool-ilink-example' => 'Наслов на врската',
+	'edittoolbar-tool-xlink' => 'Надворешна врска (бара префикс http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.пример.com наслов на врската',
 	'edittoolbar-tool-link' => 'Врска',
 	'edittoolbar-tool-link-title' => 'Вметни врска',
 	'edittoolbar-tool-link-int' => 'Кон вики-страница',
@@ -5923,8 +6681,6 @@
 	'edittoolbar-tool-table-dimensions' => 'Димензии',
 	'edittoolbar-tool-table-dimensions-rows' => 'Редови',
 	'edittoolbar-tool-table-dimensions-columns' => 'Колони',
-	'edittoolbar-tool-table-dimensions-headerrows' => 'Насловни редови',
-	'edittoolbar-tool-table-dimensions-headercolumns' => 'Насловни колони',
 	'edittoolbar-tool-table-insert' => 'Вметни',
 	'edittoolbar-tool-table-cancel' => 'Откажи',
 	'edittoolbar-tool-replace' => 'Замени',
@@ -5996,7 +6752,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Ставка</li><li>Ставка</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Вметната податотека',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Пример.png|мини|Опис]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Опис' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Зголеми' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Опис</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Опис' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Зголеми' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Опис</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Навод',
 	'edittoolbar-help-content-reference-syntax' => 'Текст во страницата.&lt;ref name="test"&gt;[http://www.пример.org Текст на врската], дополнителен текст.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Текст во страницата.<sup><a href='#'>[1]</a></sup>",
@@ -6014,10 +6770,113 @@
 );
 
 /** Malayalam (മലയാളം)
+ * @author Praveenp
  * @author Sadik Khalid
  */
 $messages['ml'] = array(
+	'edittoolbar' => 'തിരുത്തൽ ടൂൾബാർ',
+	'edittoolbar-desc' => 'തിരുത്താനുള്ള താളിൽ മെച്ചപ്പെട്ട ഉപയോഗത്തിനായുള്ള ടൂൾബാർ',
+	'edittoolbar-preference' => 'തിരുത്തുവാനുള്ള വിശദ പണിപ്പെട്ടി ഉപയോഗപ്പെടുത്തുക',
+	'edittoolbar-cgd-preference' => 'വിപുലമായ വിക്കി എഴുത്തുകൾ ചേർക്കാനുള്ള സഹായം നൽകുക',
+	'edittoolbar-loading' => 'ശേഖരിക്കുന്നു...',
+	'edittoolbar-tool-bold' => 'കടുപ്പിക്കുക',
+	'edittoolbar-tool-bold-example' => 'കട്ടികൂട്ടിയ എഴുത്ത്',
+	'edittoolbar-tool-italic' => 'ചരിച്ച്',
+	'edittoolbar-tool-italic-example' => 'ചരിച്ചുള്ള എഴുത്ത്',
+	'edittoolbar-tool-ilink' => 'ആന്തരിക കണ്ണി',
+	'edittoolbar-tool-ilink-example' => 'കണ്ണിയുടെ തലക്കെട്ട്',
+	'edittoolbar-tool-xlink' => 'പുറത്തേയ്ക്കുള്ള കണ്ണി (ആദ്യം http:// കൊടുക്കാൻ ഓർക്കുക)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com കണ്ണി തലക്കെട്ട്',
+	'edittoolbar-tool-link' => 'കണ്ണി',
+	'edittoolbar-tool-link-title' => 'കണ്ണി ഉൾപ്പെടുത്തുക',
+	'edittoolbar-tool-link-int' => 'ഒരു വിക്കി താളിലേയ്ക്ക്',
+	'edittoolbar-tool-link-int-target' => 'താളിന്റെ തലക്കെട്ട്',
+	'edittoolbar-tool-link-int-text' => 'കണ്ണിയാവേണ്ട എഴുത്ത്:',
+	'edittoolbar-tool-link-ext' => 'പുറത്തുള്ള വെബ് താളിലേയ്ക്ക്',
+	'edittoolbar-tool-link-ext-target' => 'കണ്ണിയുടെ യൂആർഎൽ',
+	'edittoolbar-tool-link-ext-text' => 'കണ്ണിയാകേണ്ട എഴുത്ത്:',
+	'edittoolbar-tool-link-insert' => 'കണ്ണി ഉൾപ്പെടുത്തുക',
+	'edittoolbar-tool-link-cancel' => 'റദ്ദാക്കുക',
+	'edittoolbar-tool-link-int-target-status-exists' => 'താൾ നിലനിൽക്കുന്നു',
+	'edittoolbar-tool-link-int-target-status-notexists' => 'താൾ നിലനിൽക്കുന്നില്ല',
+	'edittoolbar-tool-link-int-target-status-invalid' => 'അസാധുവായ തലക്കെട്ട്',
+	'edittoolbar-tool-link-int-target-status-loading' => 'താൾ നിലനിൽക്കുന്നുണ്ടോ à´Žà´¨àµà´¨àµ പരിശോധിക്കുന്നു...',
+	'edittoolbar-tool-link-int-invalid' => 'താങ്കൾ നൽകിയ തലക്കെട്ട് അസാധുവാണ്.',
+	'edittoolbar-tool-link-ext-invalid' => 'താങ്കൾ നൽകിയ യൂആർഎൽ അസാധുവാണ്.',
+	'edittoolbar-tool-reference' => 'അവലംബം',
+	'edittoolbar-tool-signature' => 'ഒപ്പും സമയമുദ്രയും',
+	'edittoolbar-section-advanced' => 'വിപുലീകരിക്കപ്പെട്ടവ',
+	'edittoolbar-tool-heading' => 'തലക്കെട്ട്',
+	'edittoolbar-tool-heading-1' => 'തലം 1',
+	'edittoolbar-tool-heading-2' => 'തലം 2',
+	'edittoolbar-tool-heading-3' => 'തലം 3',
+	'edittoolbar-tool-heading-4' => 'തലം 4',
+	'edittoolbar-tool-heading-5' => 'തലം 5',
+	'edittoolbar-tool-heading-example' => 'തലക്കെട്ടാകാനുള്ള എഴുത്ത്',
+	'edittoolbar-group-size' => 'വലിപ്പം',
+	'edittoolbar-tool-big' => 'വലുത്',
+	'edittoolbar-tool-big-example' => 'വലിയ എഴുത്ത്',
+	'edittoolbar-tool-small' => 'ചെറിയത്',
+	'edittoolbar-tool-small-example' => 'ചെറിയ എഴുത്ത്',
+	'edittoolbar-group-insert' => 'ഉൾപ്പെടുത്തുക',
+	'edittoolbar-tool-gallery' => 'ചിത്രസഞ്ചയം',
+	'edittoolbar-tool-newline' => 'പുതിയ വരി',
+	'edittoolbar-tool-table-cancel' => 'റദ്ദാക്കുക',
+	'edittoolbar-tool-replace' => 'കണ്ടെത്തുക മാറ്റുക',
+	'edittoolbar-tool-replace-title' => 'കണ്ടെത്തുക മാറ്റുക',
+	'edittoolbar-tool-replace-search' => 'ഇതു കണ്ടെത്തുക:',
+	'edittoolbar-tool-replace-replace' => 'ഇതുകൊണ്ടു മാറ്റുക',
+	'edittoolbar-tool-replace-case' => 'അക്ഷരമാലാ തരവും (case) ഒത്തുനോക്കുക',
+	'edittoolbar-tool-replace-all' => 'ഒത്തുപോകുന്നതെല്ലാം മാറ്റുക',
+	'edittoolbar-tool-replace-button' => 'പകരം മാറ്റുക',
+	'edittoolbar-tool-replace-close' => 'റദ്ദാക്കുക',
+	'edittoolbar-tool-replace-nomatch' => 'താങ്കളുടെ തിരച്ചിലുമായി ഒന്നും ഒത്തുപോകുന്നില്ല.',
+	'edittoolbar-tool-replace-success' => '$1 മാറ്റിവെയ്ക്കൽ(കൾ) നടത്തി.',
+	'edittoolbar-section-characters' => 'പ്രത്യേക ലിപികൾ',
+	'edittoolbar-characters-page-latin' => 'ലാറ്റിൻ',
+	'edittoolbar-characters-page-latinextended' => 'ലാറ്റിൻ വിപുലം',
+	'edittoolbar-characters-page-ipa' => 'ഐ.പി.എ.',
+	'edittoolbar-characters-page-symbols' => 'ചിഹ്നനങ്ങൾ',
+	'edittoolbar-characters-page-greek' => 'ഗ്രീക്ക്',
+	'edittoolbar-characters-page-cyrillic' => 'സിറിലിക്',
+	'edittoolbar-characters-page-arabic' => 'അറബിക്',
+	'edittoolbar-characters-page-hebrew' => 'ഹീബ്രു',
+	'edittoolbar-characters-page-telugu' => 'തെലുങ്ക്',
+	'edittoolbar-section-help' => 'സഹായം',
+	'edittoolbar-help-heading-description' => 'വിവരണം',
+	'edittoolbar-help-heading-syntax' => 'താങ്കൾ ടൈപ്പ് ചെയ്യുന്നത്',
+	'edittoolbar-help-heading-result' => 'താങ്കൾക്ക് ലഭിക്കുന്നത്',
+	'edittoolbar-help-page-link' => 'കണ്ണികൾ',
+	'edittoolbar-help-page-heading' => 'തലക്കെട്ടുകൾ',
+	'edittoolbar-help-page-file' => 'പ്രമാണങ്ങൾ',
+	'edittoolbar-help-page-reference' => 'അവലംബങ്ങൾ',
 	'edittoolbar-help-page-discussion' => 'സംവാദം',
+	'edittoolbar-help-content-italic-description' => 'ചരിച്ചുള്ളത്',
+	'edittoolbar-help-content-italic-syntax' => "''ചരിച്ചുള്ള എഴുത്ത്''",
+	'edittoolbar-help-content-italic-result' => '<em>ചരിച്ചുള്ള എഴുത്ത്</em>',
+	'edittoolbar-help-content-bold-description' => 'കട്ടികൂട്ടിയുള്ള',
+	'edittoolbar-help-content-bold-syntax' => "'''കട്ടികൂട്ടിയ എഴുത്ത്'''",
+	'edittoolbar-help-content-bold-result' => '<strong>കട്ടികൂട്ടിയ എഴുത്ത്</strong>',
+	'edittoolbar-help-content-bolditalic-description' => 'കട്ടികൂട്ടി ചരിച്ചുള്ളത്',
+	'edittoolbar-help-content-bolditalic-syntax' => "'''''കട്ടികൂട്ടി ചരിച്ചുള്ള എഴുത്ത്'''''",
+	'edittoolbar-help-content-bolditalic-result' => '<strong><em>കട്ടികൂട്ടി ചരിച്ചുള്ള എഴുത്ത്</em></strong>',
+	'edittoolbar-help-content-ilink-syntax' => '[[താളിന്റെ തലക്കെട്ട്|കണ്ണിയുടെ നാമം]]<br />[[താളിന്റെ തലക്കെട്ട്]]',
+	'edittoolbar-help-content-ilink-result' => "<a href='#'>കണ്ണിയുടെ നാമം</a><br /><a href='#'>താളിന്റെ തലക്കെട്ട്</a>",
+	'edittoolbar-help-content-xlink-description' => 'പുറത്തേയ്ക്കുള്ള കണ്ണി',
+	'edittoolbar-help-content-xlink-syntax' => '[http://www.example.org കണ്ണിയുടെ പേര്]<br />[http://www.example.org]<br />http://www.example.org',
+	'edittoolbar-help-content-xlink-result' => "<a href='#' class='external'>കണ്ണിയുടെ പേര്</a><br /><a href='#' class='external autonumber'>[1]</a><br /><a href='#' class='external'>http://www.example.org</a>",
+	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|ലഘു|വിവരണ കുറിപ്പ്]]',
+	'edittoolbar-help-content-reference-description' => 'അവലംബം',
+	'edittoolbar-help-content-reference-syntax' => 'താളിലെ എഴുത്ത്.&lt;ref name="test"&gt;[http://www.example.org കണ്ണിയായുള്ള എഴുത്ത്], കൂടുതൽ എഴുത്ത്.&lt;/ref&gt;',
+	'edittoolbar-help-content-reference-result' => "താളിലെ എഴുത്ത്.<sup><a href='#'>[1]</a></sup>",
+	'edittoolbar-help-content-rereference-description' => 'അതേ അവലംബത്തിന്റെ കൂടുതൽ ഉപയോഗം',
+	'edittoolbar-help-content-rereference-result' => "താളിലെ എഴുത്ത്.<sup><a href='#'>[1]</a></sup>",
+	'edittoolbar-help-content-showreferences-description' => 'അവലംബങ്ങൾ പ്രദർശിപ്പിക്കുക',
+	'edittoolbar-help-content-showreferences-result' => "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>കണ്ണിയായുള്ള എഴുത്ത്</a>, കൂടുതൽ എഴുത്ത്.</li></ol>",
+	'edittoolbar-help-content-signaturetimestamp-description' => 'സമയമുദ്രയോടുകൂടിയ ഒപ്പ്',
+	'edittoolbar-help-content-signaturetimestamp-result' => "<a href='#' title='{{#special:mypage}}'>ഉപയോക്തൃനാമം</a> (<a href='#' title='{{#special:mytalk}}'>സംവാദം</a>) 15:54, 10 ജൂൺ 2009 (UTC)",
+	'edittoolbar-help-content-signature-description' => 'ഒപ്പ്',
+	'edittoolbar-help-content-signature-result' => "<a href='#' title='{{#special:mypage}}'>ഉപയോക്തൃനാമം</a> (<a href='#' title='{{#special:mytalk}}'>സംവാദം</a>)",
 );
 
 /** Mongolian (Монгол)
@@ -6042,6 +6901,10 @@
 	'edittoolbar-tool-bold-example' => 'Teks tebal',
 	'edittoolbar-tool-italic' => 'Teks condong',
 	'edittoolbar-tool-italic-example' => 'Teks condong',
+	'edittoolbar-tool-ilink' => 'Pautan dalaman',
+	'edittoolbar-tool-ilink-example' => 'Tajuk pautan',
+	'edittoolbar-tool-xlink' => 'Pautan luar (ingat http:// singkatan)',
+	'edittoolbar-tool-xlink-example' => 'http://www.contoh.com tajuk pautan',
 	'edittoolbar-tool-link' => 'Pautan',
 	'edittoolbar-tool-link-title' => 'Letakkan pautan',
 	'edittoolbar-tool-link-int' => 'Ke laman wiki',
@@ -6171,7 +7034,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Perkara senarai</li><li>Perkara senarai</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Fail terbenam',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Contoh.png|thumb|Teks kapsyen]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Teks kapsyen' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Besarkan' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Teks kapsyen</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Teks kapsyen' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Besarkan' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Teks kapsyen</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Rujukan',
 	'edittoolbar-help-content-reference-syntax' => 'Teks laman.&lt;ref nama="cubaan"&gt;[http://www.contoh.org Teks pautan], teks tambahan.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Teks laman.<sup><a href='#'>[1]</a></sup>",
@@ -6194,11 +7057,17 @@
 $messages['mt'] = array(
 	'edittoolbar' => 'Kaxxa tal-għodda għall-immodifikar',
 	'edittoolbar-desc' => "Immodifika l-kaxxa tal-għodda b'akbar użabilità ",
+	'edittoolbar-preference' => 'Awtorizza l-użu tal-kaxxa tal-għodda estiża',
+	'edittoolbar-cgd-preference' => "Awtorizza l-għajnuna għaż-żieda ta' test wiki avvanzat",
 	'edittoolbar-loading' => 'Tiela...',
 	'edittoolbar-tool-bold' => 'Tipa ħoxna',
 	'edittoolbar-tool-bold-example' => 'Tipa ħoxna',
 	'edittoolbar-tool-italic' => 'Tipa korsiva',
 	'edittoolbar-tool-italic-example' => 'Tipa korsiva',
+	'edittoolbar-tool-ilink' => 'Ħolqa interna',
+	'edittoolbar-tool-ilink-example' => 'Titlu tal-ħolqa',
+	'edittoolbar-tool-xlink' => 'Ħolqa esterna (ftakar il-prefiss http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com titlu tal-ħolqa',
 	'edittoolbar-tool-link' => 'Ħolqa',
 	'edittoolbar-tool-link-title' => 'Daħħal ħolqa',
 	'edittoolbar-tool-link-int' => 'Lejn paġna wiki',
@@ -6214,6 +7083,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Titlu invalidu',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Kontroll tal-eżistenza tal-paġna...',
 	'edittoolbar-tool-link-int-invalid' => 'It-titlu li speċifikjat huwa invalidu.',
+	'edittoolbar-tool-link-ext-invalid' => 'Il-URL li speċifikajt hi invalida.',
 	'edittoolbar-tool-file' => 'Fajl inkorporat',
 	'edittoolbar-tool-file-example' => 'Eżempju.jpg',
 	'edittoolbar-tool-reference' => 'Nota',
@@ -6248,21 +7118,38 @@
 {{ns:file}}:Eżempju.jpg|Deskrizzjoni2',
 	'edittoolbar-tool-newline' => 'Linja Ä¡dida',
 	'edittoolbar-tool-table' => 'Tabella',
+	'edittoolbar-tool-table-example-old' => '-
+! ras 1
+! ras 2
+! ras 3
+|-
+| filliera 1, Ä‹ellola 1
+| filliera 1, Ä‹ellola 2
+| filliera 1, Ä‹ellola 3
+|-
+| filliera 2, Ä‹ellola 1
+| filliera 2, Ä‹ellola 2
+| filliera 2, Ä‹ellola 3',
+	'edittoolbar-tool-table-example' => 'Filliera $1, Ä‹ellola $2',
+	'edittoolbar-tool-table-example-header' => 'Filliera $1, Ä‹ellola $2 (ras)',
 	'edittoolbar-tool-table-title' => 'Daħħal tabella',
 	'edittoolbar-tool-table-dimensions' => 'Dimensjonijiet',
 	'edittoolbar-tool-table-dimensions-rows' => 'Fillieri',
 	'edittoolbar-tool-table-dimensions-columns' => 'Kolonni',
+	'edittoolbar-tool-table-dimensions-header' => "Inkludi l-filliera ta' fuq",
 	'edittoolbar-tool-table-insert' => 'Daħħal',
 	'edittoolbar-tool-table-cancel' => 'Annulla',
-	'edittoolbar-tool-replace' => 'Biddel',
+	'edittoolbar-tool-replace' => 'Fittex u biddel',
 	'edittoolbar-tool-replace-title' => 'Fittex u biddel',
 	'edittoolbar-tool-replace-search' => 'Fittex għal:',
 	'edittoolbar-tool-replace-replace' => "Biddel ma':",
+	'edittoolbar-tool-replace-case' => 'Ittra kapitali/żgħira',
 	'edittoolbar-tool-replace-regex' => 'Tratta t-test tat-tfittxija bħala espressjoni regulari',
 	'edittoolbar-tool-replace-all' => 'Biddel kull okkorrenza',
 	'edittoolbar-tool-replace-button' => 'Biddel',
-	'edittoolbar-tool-replace-close' => 'Agħlaq',
+	'edittoolbar-tool-replace-close' => 'Annulla',
 	'edittoolbar-tool-replace-nomatch' => 'It-tfittxija ma tat l-ebda riżultat.',
+	'edittoolbar-tool-replace-success' => 'saru $1 tibdila.',
 	'edittoolbar-section-characters' => 'Karattri speċjali',
 	'edittoolbar-characters-page-latin' => 'Latin',
 	'edittoolbar-characters-page-latinextended' => 'Latin estiż',
@@ -6322,7 +7209,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Element tal-lista</li><li>Element tal-lista</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Fajl inkorporat',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Eżempju.png|thumb|Test tad-deskrizzjoni]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Test tad-deskrizzjoni' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Kabbar' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Test tad-deskrizzjoni</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Test tad-deskrizzjoni' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Kabbar' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Test tad-deskrizzjoni</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referenza',
 	'edittoolbar-help-content-reference-syntax' => 'Test tal-paġna.&lt;ref name="test"&gt;[http://www.example.org Test tal-ħolqa], test addizzjonali.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Test tal-paġna.<sup><a href='#'>[1]</a></sup>",
@@ -6374,6 +7261,10 @@
 	'edittoolbar-tool-bold-example' => 'Vet-edrokken tekse',
 	'edittoolbar-tool-italic' => 'Schunedrok',
 	'edittoolbar-tool-italic-example' => 'Schunedrokken tekse',
+	'edittoolbar-tool-ilink' => 'Interne verwiezing',
+	'edittoolbar-tool-ilink-example' => 'Verwiezingsbeschrieving',
+	'edittoolbar-tool-xlink' => "Uutgaonde verwiezing (vergeet 't veurvoegsel http:// neet)",
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com beschrieving',
 	'edittoolbar-tool-link' => 'Verwiezing',
 	'edittoolbar-tool-link-title' => 'Verwiezing derbie doon',
 	'edittoolbar-tool-link-int' => 'Naor een wikipagina',
@@ -6469,7 +7360,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Regel in een lieste mit nummers</li><li>Regel in een lieste mit nummers</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Bestaand derbie doon',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Veurbeeld.png|thumb|Bieschrifte]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bieschrifte' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroten' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Bieschrifte</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bieschrifte' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroten' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Bieschrifte</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Rifferentie',
 	'edittoolbar-help-content-reference-syntax' => 'Paginatekse.&lt;ref name="test"&gt;[http://www.example.org Beschrieving], eventuele tekse.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Paginatekse <sup><a href='#'>[1]</a></sup>",
@@ -6487,17 +7378,23 @@
 );
 
 /** Dutch (Nederlands)
+ * @author McDutchie
  * @author Siebrand
  */
 $messages['nl'] = array(
 	'edittoolbar' => 'Bewerkingswerkbalk',
 	'edittoolbar-desc' => 'Bewerkingsbalk die eenvoudiger te gebruiken is',
 	'edittoolbar-preference' => 'Uitgebreide bewerkingsbalk inschakelen',
+	'edittoolbar-cgd-preference' => 'Hulp voor het toevoegen van gevorderde wikitekst inschakelen',
 	'edittoolbar-loading' => 'Bezig met laden...',
 	'edittoolbar-tool-bold' => 'Vet',
 	'edittoolbar-tool-bold-example' => 'Vetgedrukte tekst',
 	'edittoolbar-tool-italic' => 'Cursief',
 	'edittoolbar-tool-italic-example' => 'Cursief gedrukte tekst',
+	'edittoolbar-tool-ilink' => 'Interne verwijzing',
+	'edittoolbar-tool-ilink-example' => 'Verwijzingsbeschrijving',
+	'edittoolbar-tool-xlink' => 'Externe verwijzing (vergeet het voorvoegsel http:// niet)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com verwijzingsbeschrijving',
 	'edittoolbar-tool-link' => 'Verwijzing',
 	'edittoolbar-tool-link-title' => 'Verwijzing invoegen',
 	'edittoolbar-tool-link-int' => 'Naar een wikipagina',
@@ -6513,6 +7410,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Ongeldige paginanaam',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Bezig met controleren of de pagina al bestaat...',
 	'edittoolbar-tool-link-int-invalid' => 'De opgegeven pagina is ongeldig.',
+	'edittoolbar-tool-link-ext-invalid' => 'De opgegeven URL is ongeldig.',
 	'edittoolbar-tool-file' => 'Ingebed bestand',
 	'edittoolbar-tool-file-example' => 'Voorbeeld.jpg',
 	'edittoolbar-tool-reference' => 'Referentie',
@@ -6547,6 +7445,18 @@
 {{ns:file}}:Voorbeeld2|Bijschrift2',
 	'edittoolbar-tool-newline' => 'Nieuwe regel',
 	'edittoolbar-tool-table' => 'Tabel',
+	'edittoolbar-tool-table-example-old' => '-
+! kop 1
+! kop 2
+! kop 3
+|-
+| rij 1, cel 1
+| rij 1, cel 2
+| rij 1, cel 3
+|-
+| rij 2, cel 1
+| rij 2, cel 2
+| rij 2, cel 3',
 	'edittoolbar-tool-table-example' => 'Rij $1, cel $2',
 	'edittoolbar-tool-table-example-header' => 'Rij $1, cel $2 (kop)',
 	'edittoolbar-tool-table-title' => 'Tabel invoegen',
@@ -6556,7 +7466,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Koprij toevoegen',
 	'edittoolbar-tool-table-insert' => 'Invoegen',
 	'edittoolbar-tool-table-cancel' => 'Annuleren',
-	'edittoolbar-tool-replace' => 'Vervangen',
+	'edittoolbar-tool-replace' => 'Zoeken en vervangen',
 	'edittoolbar-tool-replace-title' => 'Zoeken en vervangen',
 	'edittoolbar-tool-replace-search' => 'Zoeken naar:',
 	'edittoolbar-tool-replace-replace' => 'Vervangen door:',
@@ -6564,8 +7474,9 @@
 	'edittoolbar-tool-replace-regex' => 'De zoekreeks als reguliere expressie behandelen',
 	'edittoolbar-tool-replace-all' => 'Alles vervangen',
 	'edittoolbar-tool-replace-button' => 'Vervangen',
-	'edittoolbar-tool-replace-close' => 'Sluiten',
+	'edittoolbar-tool-replace-close' => 'Annuleren',
 	'edittoolbar-tool-replace-nomatch' => 'Uw zoekopdracht heeft geen resultaten opgeleverd.',
+	'edittoolbar-tool-replace-success' => 'Er zijn $1 items vervangen.',
 	'edittoolbar-section-characters' => 'Speciale tekens',
 	'edittoolbar-characters-page-latin' => 'Latijns',
 	'edittoolbar-characters-page-latinextended' => 'Latijns uitgebreid',
@@ -6579,7 +7490,7 @@
 	'edittoolbar-section-help' => 'Hulp',
 	'edittoolbar-help-heading-description' => 'Beschrijving',
 	'edittoolbar-help-heading-syntax' => 'Wat u typt',
-	'edittoolbar-help-heading-result' => 'Wat u krijgt te zien',
+	'edittoolbar-help-heading-result' => 'Wat u te zien krijgt',
 	'edittoolbar-help-page-format' => 'Opmaak',
 	'edittoolbar-help-page-link' => 'Verwijzingen',
 	'edittoolbar-help-page-heading' => 'Kopjes',
@@ -6625,7 +7536,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Regel in genummerde lijst</li><li>Regel in genummerde lijst</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Ingebed bestand',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Voorbeeld.png|thumb|Bijschrift]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bijschrift' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroten' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Bijschrift</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bijschrift' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroten' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Bijschrift</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referentie',
 	'edittoolbar-help-content-reference-syntax' => 'Paginatekst.&lt;ref name="test"&gt;[http://www.example.org Verwijzingstekst], additionele tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Paginatekst <sup><a href='#'>[1]</a></sup>",
@@ -6643,6 +7554,7 @@
 );
 
 /** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+ * @author Gunnernett
  * @author Harald Khan
  */
 $messages['nn'] = array(
@@ -6651,8 +7563,19 @@
 	'edittoolbar-tool-bold-example' => 'Feit tekst',
 	'edittoolbar-tool-italic' => 'Kursiv',
 	'edittoolbar-tool-italic-example' => 'Kursiv tekst',
+	'edittoolbar-tool-ilink' => 'Intern lenkja',
+	'edittoolbar-tool-ilink-example' => 'Lenkjetittel',
+	'edittoolbar-tool-xlink' => 'Ekstern lenkja (hugs http:// -forstavinga)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com lenkjetittel',
+	'edittoolbar-tool-link-int' => 'Til ei wikiside',
+	'edittoolbar-tool-link-int-target' => 'Sidetittel/artikkeltittel:',
+	'edittoolbar-tool-link-ext-target' => 'Lenkeadresse URL:',
+	'edittoolbar-tool-link-int-target-status-exists' => 'Sida finst',
 	'edittoolbar-tool-file-example' => 'Døme.jpg',
 	'edittoolbar-tool-reference' => 'Referanse',
+	'edittoolbar-section-advanced' => 'Avansert',
+	'edittoolbar-group-size' => 'Storleik',
+	'edittoolbar-tool-subscript' => 'Senka skrift',
 	'edittoolbar-group-insert' => 'Set inn',
 	'edittoolbar-tool-gallery' => 'Biletgalleri',
 	'edittoolbar-tool-gallery-example' => '{{ns:file}}:Døme.jpg|Bilettekst1
@@ -6674,6 +7597,7 @@
 );
 
 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
+ * @author Gunnernett
  * @author Laaknor
  * @author Nghtwlkr
  * @author Simny
@@ -6688,6 +7612,10 @@
 	'edittoolbar-tool-bold-example' => 'Fet tekst',
 	'edittoolbar-tool-italic' => 'Kursiv',
 	'edittoolbar-tool-italic-example' => 'Kursiv tekst',
+	'edittoolbar-tool-ilink' => 'Intern lenke',
+	'edittoolbar-tool-ilink-example' => 'Lenketittel',
+	'edittoolbar-tool-xlink' => 'Ekstern lenke (husk http:// først)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com lenketittel',
 	'edittoolbar-tool-link-int' => 'Til en wikiartikkel/-side',
 	'edittoolbar-tool-link-int-target' => 'Sidetittel/artikkeltittel:',
 	'edittoolbar-tool-link-ext' => 'Til en ekstern webside',
@@ -6732,7 +7660,7 @@
 	'edittoolbar-tool-newline' => 'Linjeskift',
 	'edittoolbar-tool-table' => 'Tabell',
 	'edittoolbar-tool-table-cancel' => 'Avbryt',
-	'edittoolbar-tool-replace' => 'Erstatt',
+	'edittoolbar-tool-replace' => 'Søk og erstatt',
 	'edittoolbar-tool-replace-title' => 'Søk og erstatt',
 	'edittoolbar-tool-replace-search' => 'Søk etter:',
 	'edittoolbar-tool-replace-replace' => 'Erstatt med:',
@@ -6803,7 +7731,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Listeelement</li><li>Listeelement</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Fil',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Bildetekst]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bildetekst' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Forstørr' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Bildetekst</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bildetekst' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Forstørr' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Bildetekst</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referanse',
 	'edittoolbar-help-content-reference-syntax' => 'Tekst.&lt;ref name="test"&gt;[http://www.example.org Lenketekst], ytterligere tekst.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Tekst.<sup><a href='#'>[1]</a></sup>",
@@ -6827,11 +7755,16 @@
 	'edittoolbar' => 'Modificacion de la barra d’espleches',
 	'edittoolbar-desc' => "Modificacion de la barra d'espleches amb l'utilizabilitat melhorada",
 	'edittoolbar-preference' => "Activar la barra d'espleches melhorada",
+	'edittoolbar-cgd-preference' => "Activar l'ajuda per apondre de tèxte wiki avançat",
 	'edittoolbar-loading' => 'Cargament ...',
 	'edittoolbar-tool-bold' => 'Gras',
 	'edittoolbar-tool-bold-example' => 'Tèxte en gras',
 	'edittoolbar-tool-italic' => 'Italica',
 	'edittoolbar-tool-italic-example' => 'Tèxte en italica',
+	'edittoolbar-tool-ilink' => 'Ligam intèrne',
+	'edittoolbar-tool-ilink-example' => 'Títol del ligam',
+	'edittoolbar-tool-xlink' => 'Ligam extèrne ( doblidetz pas lo prefix http:// )',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com títol del ligam',
 	'edittoolbar-tool-link' => 'Ligam',
 	'edittoolbar-tool-link-title' => 'Inserir un ligam',
 	'edittoolbar-tool-link-int' => 'Cap a un article / una pagina wiki',
@@ -6847,6 +7780,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Títol invalid',
 	'edittoolbar-tool-link-int-target-status-loading' => "Verificacion de l'existéncia de la pagina...",
 	'edittoolbar-tool-link-int-invalid' => "Lo títol qu'avètz especificat es incorrècte.",
+	'edittoolbar-tool-link-ext-invalid' => "L'URL qu'avètz especificada es invalida.",
 	'edittoolbar-tool-file' => 'Fichièr inserit',
 	'edittoolbar-tool-file-example' => 'Exemple.jpg',
 	'edittoolbar-tool-reference' => 'Referéncia',
@@ -6881,6 +7815,18 @@
 {{ns:file}}:Exemple.jpg|Descripcion 2',
 	'edittoolbar-tool-newline' => 'Saut de linha',
 	'edittoolbar-tool-table' => 'Tablèu',
+	'edittoolbar-tool-table-example-old' => '-
+! entèsta 1
+! entèsta 2
+! entèsta 3
+|-
+| linha 1, casa 1
+| linha 1, casa 2
+| linha 1, casa 3
+|-
+| linha 2, casa 1
+| linha 2, casa 2
+| linha 2, casa 3',
 	'edittoolbar-tool-table-example' => 'Linha $1, cellula $2',
 	'edittoolbar-tool-table-example-header' => 'Linha $1, cellula $2 (entèsta)',
 	'edittoolbar-tool-table-title' => 'Inserir un tablèu',
@@ -6890,7 +7836,7 @@
 	'edittoolbar-tool-table-dimensions-header' => "Inclure la linha d'entèsta",
 	'edittoolbar-tool-table-insert' => 'Inserir',
 	'edittoolbar-tool-table-cancel' => 'Anullar',
-	'edittoolbar-tool-replace' => 'Remplaçar',
+	'edittoolbar-tool-replace' => 'Recercar & remplaçar',
 	'edittoolbar-tool-replace-title' => 'Recercar e remplaçar',
 	'edittoolbar-tool-replace-search' => 'Recercar :',
 	'edittoolbar-tool-replace-replace' => 'Remplaçar amb :',
@@ -6898,8 +7844,9 @@
 	'edittoolbar-tool-replace-regex' => 'Tractar la cadena de recèrca coma una expression regulara',
 	'edittoolbar-tool-replace-all' => 'remplaçar totas las occurréncias',
 	'edittoolbar-tool-replace-button' => 'Remplaçar',
-	'edittoolbar-tool-replace-close' => 'Tampar',
+	'edittoolbar-tool-replace-close' => 'Anullar',
 	'edittoolbar-tool-replace-nomatch' => 'Vòstra recèrca a pas trobat cap de correspondéncia.',
+	'edittoolbar-tool-replace-success' => '$1 remplaçaments faches.',
 	'edittoolbar-section-characters' => 'Caractèrs especials',
 	'edittoolbar-characters-page-latin' => 'Latin',
 	'edittoolbar-characters-page-latinextended' => 'Latin espandit',
@@ -6959,7 +7906,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Element de la lista</li><li>Element de la lista</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Fichièr inserit',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Tèxte afichat]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Tèxte afichat' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Tèxte afichat</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Tèxte afichat' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Tèxte afichat</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referéncia',
 	'edittoolbar-help-content-reference-syntax' => 'Tèxte de la pagina.&lt;ref name="test"&gt;[http://www.example.org tèxte del ligam], tèxte adicional.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Tèxte de la pagina <sup><a href='#'>[1]</a></sup>",
@@ -6982,6 +7929,8 @@
 $messages['pdc'] = array(
 	'edittoolbar' => 'Gscharr fer Enneringe',
 	'edittoolbar-tool-bold' => 'Fett',
+	'edittoolbar-tool-ilink' => 'Gleecher',
+	'edittoolbar-tool-xlink' => 'Gewebbgleecher (acht uff http://)',
 	'edittoolbar-group-list' => 'Lischt',
 	'edittoolbar-group-size' => 'Grees',
 	'edittoolbar-tool-big' => 'Gross',
@@ -7006,11 +7955,16 @@
 	'edittoolbar' => 'Pasek narzędzi edycyjnych',
 	'edittoolbar-desc' => 'Ułatwiający pracę pasek narzędzi edycyjnych',
 	'edittoolbar-preference' => 'Włącz rozszerzony pasek narzędzi edycyjnych',
+	'edittoolbar-cgd-preference' => 'WÅ‚Ä…cz pomoc dla dodawania zaawansowanego tekstu Wiki',
 	'edittoolbar-loading' => 'Ładowanie...',
 	'edittoolbar-tool-bold' => 'Wytłuszczenie',
 	'edittoolbar-tool-bold-example' => 'Tekst tłustą czcionką',
 	'edittoolbar-tool-italic' => 'Pochyły',
 	'edittoolbar-tool-italic-example' => 'Tekst pochyłą czcionką',
+	'edittoolbar-tool-ilink' => 'Link wewnętrzny',
+	'edittoolbar-tool-ilink-example' => 'Tytuł linku',
+	'edittoolbar-tool-xlink' => 'Link zewnętrzny (pamiętaj o przedrostku http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.przyklad.com opis linku',
 	'edittoolbar-tool-link' => 'Link',
 	'edittoolbar-tool-link-title' => 'Wstaw link',
 	'edittoolbar-tool-link-int' => 'Do strony wiki',
@@ -7026,6 +7980,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Nieprawidłowy tytuł',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Sprawdzanie czy strona istnieje…',
 	'edittoolbar-tool-link-int-invalid' => 'Wprowadzony tytuł jest nieprawidłowy.',
+	'edittoolbar-tool-link-ext-invalid' => 'Podano nieprawidłowy adres URL.',
 	'edittoolbar-tool-file' => 'Plik osadzony',
 	'edittoolbar-tool-file-example' => 'Przykład.jpg',
 	'edittoolbar-tool-reference' => 'Przypis',
@@ -7060,6 +8015,18 @@
 {{ns:file}}:Example.jpg|Podpis2',
 	'edittoolbar-tool-newline' => 'Nowy wiersz',
 	'edittoolbar-tool-table' => 'Tabela',
+	'edittoolbar-tool-table-example-old' => '-
+! nagłówek 1
+! nagłówek 2
+! nagłówek 3
+| -
+| wiersz 1, komórka 1
+| wiersz 1, komórka 2
+| wiersz 1, komórka 3
+| -
+| wiersz 2, komórka 1
+| wiersz 2, komórka 2
+| wiersz 2, komórka 3',
 	'edittoolbar-tool-table-example' => 'Wiersz $1, komórka $2',
 	'edittoolbar-tool-table-example-header' => 'Wiersz $1, kolumna $2 (nagłówek)',
 	'edittoolbar-tool-table-title' => 'Wstaw tabelÄ™',
@@ -7069,7 +8036,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Dołącz wiersz nagłówka',
 	'edittoolbar-tool-table-insert' => 'Wstaw',
 	'edittoolbar-tool-table-cancel' => 'Anuluj',
-	'edittoolbar-tool-replace' => 'ZastÄ…p',
+	'edittoolbar-tool-replace' => 'Wyszukaj i zastÄ…p',
 	'edittoolbar-tool-replace-title' => 'Wyszukaj i zamień',
 	'edittoolbar-tool-replace-search' => 'Szukaj',
 	'edittoolbar-tool-replace-replace' => 'Zamień na',
@@ -7077,8 +8044,9 @@
 	'edittoolbar-tool-replace-regex' => 'Traktuj wyszukiwany ciąg jako wyrażenie regularne',
 	'edittoolbar-tool-replace-all' => 'ZastÄ…p wszystkie',
 	'edittoolbar-tool-replace-button' => 'ZastÄ…p',
-	'edittoolbar-tool-replace-close' => 'Zamknij',
+	'edittoolbar-tool-replace-close' => 'Anuluj',
 	'edittoolbar-tool-replace-nomatch' => 'Wyszukiwanego wzorca nie odnaleziono.',
+	'edittoolbar-tool-replace-success' => 'Wykonano $1 zamian.',
 	'edittoolbar-section-characters' => 'Znaki specjalne',
 	'edittoolbar-characters-page-latin' => 'Łacińskie',
 	'edittoolbar-characters-page-latinextended' => 'Łacińskie – rozszerzony',
@@ -7138,7 +8106,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Pozycja listy</li><li>Pozycja listy</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Plik osadzony',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Przykład.png|mały|Podpis pod plikiem]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Tekst podpisu</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Tekst podpisu</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Przypis',
 	'edittoolbar-help-content-reference-syntax' => 'Treść strony.&lt;ref name="test"&gt; [http://www.przyklad.org Opis linku], dodatkowy tekst. &lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Treść strony.<sup><a href='#'>[1]</a></sup>",
@@ -7200,6 +8168,10 @@
 	'edittoolbar-tool-bold-example' => 'Texto a negrito',
 	'edittoolbar-tool-italic' => 'Itálico',
 	'edittoolbar-tool-italic-example' => 'Texto em itálico',
+	'edittoolbar-tool-ilink' => 'Ligação interna',
+	'edittoolbar-tool-ilink-example' => 'Título da ligação',
+	'edittoolbar-tool-xlink' => 'Ligação externa (lembre-se do prefixo http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com ligação externa',
 	'edittoolbar-tool-link' => 'Ligação',
 	'edittoolbar-tool-link-title' => 'Insere uma ligação',
 	'edittoolbar-tool-link-int' => 'Para uma página wiki',
@@ -7215,6 +8187,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Título inválido',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Verificando existência da página...',
 	'edittoolbar-tool-link-int-invalid' => 'O título que você especificou é inválido.',
+	'edittoolbar-tool-link-ext-invalid' => 'A URL que especificou é inválida.',
 	'edittoolbar-tool-file' => 'Ficheiro embutido',
 	'edittoolbar-tool-file-example' => 'Exemplo.jpg',
 	'edittoolbar-tool-reference' => 'Referência',
@@ -7258,7 +8231,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Inclui linha de cabeçalho',
 	'edittoolbar-tool-table-insert' => 'Inserir',
 	'edittoolbar-tool-table-cancel' => 'Cancelar',
-	'edittoolbar-tool-replace' => 'Substituir',
+	'edittoolbar-tool-replace' => 'Pesquisar e substituir',
 	'edittoolbar-tool-replace-title' => 'Localizar e substituir',
 	'edittoolbar-tool-replace-search' => 'Procurar por:',
 	'edittoolbar-tool-replace-replace' => 'Substituir por:',
@@ -7266,7 +8239,7 @@
 	'edittoolbar-tool-replace-regex' => 'Tratar string de busca como uma expressão regular',
 	'edittoolbar-tool-replace-all' => 'Substituir todas as ocorrências',
 	'edittoolbar-tool-replace-button' => 'Substituir',
-	'edittoolbar-tool-replace-close' => 'Fechar',
+	'edittoolbar-tool-replace-close' => 'Cancelar',
 	'edittoolbar-tool-replace-nomatch' => 'Sua busca não encontrou nenhum resultado.',
 	'edittoolbar-section-characters' => 'Carateres especiais',
 	'edittoolbar-characters-page-latin' => 'Latim',
@@ -7327,7 +8300,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Item de lista</li><li>Item de lista</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Ficheiro integrado',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Exemplo.png|thumb|Legenda]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Aumentar' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Legenda</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Aumentar' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Legenda</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referência',
 	'edittoolbar-help-content-reference-syntax' => 'Texto da página.&lt;ref name="teste"&gt;[http://www.exemplo.org Texto da ligação], texto adicional.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Texto da página.<sup><a href='#'>[1]</a></sup>",
@@ -7347,6 +8320,7 @@
 /** Brazilian Portuguese (Português do Brasil)
  * @author Eduardo.mps
  * @author Heldergeovane
+ * @author Luckas Blade
  */
 $messages['pt-br'] = array(
 	'edittoolbar' => 'Barra de ferramentas de edição',
@@ -7357,6 +8331,10 @@
 	'edittoolbar-tool-bold-example' => 'Texto em negrito',
 	'edittoolbar-tool-italic' => 'Itálico',
 	'edittoolbar-tool-italic-example' => 'Texto em itálico',
+	'edittoolbar-tool-ilink' => 'Ligação interna',
+	'edittoolbar-tool-ilink-example' => 'Título da ligação',
+	'edittoolbar-tool-xlink' => 'Ligação externa (lembre-se do prefixo http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com título da ligação',
 	'edittoolbar-tool-link' => 'Ligação',
 	'edittoolbar-tool-link-title' => 'Inserir ligação',
 	'edittoolbar-tool-link-int' => 'Para um artigo ou página wiki',
@@ -7372,6 +8350,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Título inválido',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Verificando existência da página...',
 	'edittoolbar-tool-link-int-invalid' => 'O título que você especificou é inválido.',
+	'edittoolbar-tool-link-ext-invalid' => 'A URL que você especificou é inválida.',
 	'edittoolbar-tool-file' => 'Arquivo embutido',
 	'edittoolbar-tool-file-example' => 'Exemplo.jpg',
 	'edittoolbar-tool-reference' => 'Referência',
@@ -7405,6 +8384,12 @@
 	'edittoolbar-tool-gallery-example' => '{{ns:file}}:Exemplo1.jpg|Legenda1',
 	'edittoolbar-tool-newline' => 'Nova linha',
 	'edittoolbar-tool-table' => 'Tabela',
+	'edittoolbar-tool-table-title' => 'Inserir tabela',
+	'edittoolbar-tool-table-dimensions' => 'Dimensões',
+	'edittoolbar-tool-table-dimensions-rows' => 'Linhas',
+	'edittoolbar-tool-table-dimensions-columns' => 'Colunas',
+	'edittoolbar-tool-table-insert' => 'Inserir',
+	'edittoolbar-tool-table-cancel' => 'Cancelar',
 	'edittoolbar-tool-replace' => 'Substituir',
 	'edittoolbar-tool-replace-title' => 'Localizar e substituir',
 	'edittoolbar-tool-replace-search' => 'Localizar:',
@@ -7474,7 +8459,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Item de lista</li><li>Item de lista</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Arquivo embutido',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Exemplo.png|thumb|Legenda]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Aumentar' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Legenda</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Aumentar' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Legenda</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referência',
 	'edittoolbar-help-content-reference-syntax' => 'Texto da página.&lt;ref name="teste"&gt;[http://www.exemplo.org Texto da ligação], texto adicional.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Texto da página.<sup><a href='#'>[1]</a></sup>",
@@ -7501,6 +8486,7 @@
 	'edittoolbar-tool-bold-example' => 'Text aldin',
 	'edittoolbar-tool-italic' => 'Cursiv',
 	'edittoolbar-tool-italic-example' => 'Text cursiv',
+	'edittoolbar-tool-ilink' => 'Legătură internă',
 	'edittoolbar-tool-file-example' => 'Exemplu.jpg',
 	'edittoolbar-tool-reference' => 'Referinţă',
 	'edittoolbar-section-advanced' => 'Avansat',
@@ -7596,6 +8582,7 @@
 	'edittoolbar-tool-bold-example' => 'Teste grascette',
 	'edittoolbar-tool-italic' => 'Corsive',
 	'edittoolbar-tool-italic-example' => 'Teste corsive',
+	'edittoolbar-tool-ilink-example' => "Titele d'u collegamende",
 	'edittoolbar-tool-link' => 'Collegamende',
 	'edittoolbar-tool-link-title' => "'Nzerisce 'nu collegamende",
 	'edittoolbar-tool-link-int' => "A 'na vôsce/pà gene de Uicchi",
@@ -7606,6 +8593,7 @@
 	'edittoolbar-tool-link-ext-text' => "Teste d'u collegamende:",
 	'edittoolbar-tool-link-insert' => "'Nzerisce 'nu collegamende",
 	'edittoolbar-tool-link-cancel' => 'Scangille',
+	'edittoolbar-tool-link-int-target-status-invalid' => 'Titele invalide',
 	'edittoolbar-tool-file' => 'Fiel ingapsulate',
 	'edittoolbar-tool-file-example' => 'Esembie.jpg',
 	'edittoolbar-tool-reference' => 'Riferimende',
@@ -7617,6 +8605,7 @@
 	'edittoolbar-tool-heading-3' => 'Levèlle 3',
 	'edittoolbar-tool-heading-4' => 'Levèlle 4',
 	'edittoolbar-tool-heading-5' => 'Levèlle 5',
+	'edittoolbar-group-list' => 'Liste',
 	'edittoolbar-group-size' => 'Dimenzione',
 	'edittoolbar-tool-big' => 'Granne',
 	'edittoolbar-tool-small' => 'Piccinne',
@@ -7624,12 +8613,14 @@
 	'edittoolbar-tool-gallery' => 'Gallerìe fotografeche',
 	'edittoolbar-tool-newline' => 'Linèa nove',
 	'edittoolbar-tool-table' => 'Tabbelle',
-	'edittoolbar-tool-replace' => 'Sostituisce',
+	'edittoolbar-tool-table-example' => 'Riga $1, celle $2',
+	'edittoolbar-tool-table-example-header' => 'Riga $1, celle $2 (testate)',
+	'edittoolbar-tool-replace' => 'Cirche e sostituisce',
 	'edittoolbar-tool-replace-title' => 'Cirche e sostituisce',
 	'edittoolbar-tool-replace-search' => 'Cirche pe:',
 	'edittoolbar-tool-replace-replace' => 'Sostituisce cu:',
 	'edittoolbar-tool-replace-button' => 'Sostituisce',
-	'edittoolbar-tool-replace-close' => 'Achiude',
+	'edittoolbar-tool-replace-close' => 'Annulle',
 	'edittoolbar-characters-page-latin' => 'Latine',
 	'edittoolbar-characters-page-latinextended' => 'Latine estese',
 	'edittoolbar-characters-page-ipa' => 'IPA',
@@ -7652,6 +8643,7 @@
 	'edittoolbar-help-content-bold-description' => 'Grascette',
 	'edittoolbar-help-content-bold-syntax' => "'''Teste Grascette'''",
 	'edittoolbar-help-content-bold-result' => '<strong>Teste Grascette</strong>',
+	'edittoolbar-help-content-signature-description' => 'Firme',
 );
 
 /** Russian (Русский)
@@ -7664,11 +8656,16 @@
 	'edittoolbar' => 'Панель редактирования',
 	'edittoolbar-desc' => 'Панель редактирования с улучшенным юзабилити',
 	'edittoolbar-preference' => 'Включить улучшенную панель редактирования',
+	'edittoolbar-cgd-preference' => 'Включите справку по добавлению более сложного вики-текста',
 	'edittoolbar-loading' => 'Загрузка…',
 	'edittoolbar-tool-bold' => 'Полужирный',
 	'edittoolbar-tool-bold-example' => 'Полужирное начертание',
 	'edittoolbar-tool-italic' => 'Курсив',
 	'edittoolbar-tool-italic-example' => 'Курсивное начертание',
+	'edittoolbar-tool-ilink' => 'Внутренняя ссылка',
+	'edittoolbar-tool-ilink-example' => 'Заголовок ссылки',
+	'edittoolbar-tool-xlink' => 'Внешняя ссылка (не забудьте о префиксе http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com заголовок ссылки',
 	'edittoolbar-tool-link' => 'Ссылка',
 	'edittoolbar-tool-link-title' => 'Вставить ссылку',
 	'edittoolbar-tool-link-int' => 'На вики-страницу',
@@ -7684,6 +8681,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Недопустимое название',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Проверка существования страницы…',
 	'edittoolbar-tool-link-int-invalid' => 'Указанное название недопустимо.',
+	'edittoolbar-tool-link-ext-invalid' => 'Указан ошибочный URL.',
 	'edittoolbar-tool-file' => 'Встроенный файл',
 	'edittoolbar-tool-file-example' => 'Example.jpg',
 	'edittoolbar-tool-reference' => 'Примечание',
@@ -7718,6 +8716,18 @@
 {{ns:file}}:Example.jpg|Описание2',
 	'edittoolbar-tool-newline' => 'Новая строка',
 	'edittoolbar-tool-table' => 'Таблица',
+	'edittoolbar-tool-table-example-old' => '-
+! заголовок 1
+! заголовок 2
+! заголовок 3
+|-
+| строка 1, ячейка 1
+| строка 1, ячейка 2
+| строка 1, ячейка 3
+|-
+| строка 2, ячейка 1
+| строка 2, ячейка 2
+| строка 2, ячейка 3',
 	'edittoolbar-tool-table-example' => 'Строка $1, ячейка $2',
 	'edittoolbar-tool-table-example-header' => 'Строка $1, ячейка $2 (заголовок)',
 	'edittoolbar-tool-table-title' => 'Вставить таблицу',
@@ -7727,7 +8737,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Добавить заголовочную строку',
 	'edittoolbar-tool-table-insert' => 'Вставить',
 	'edittoolbar-tool-table-cancel' => 'Отмена',
-	'edittoolbar-tool-replace' => 'Заменить',
+	'edittoolbar-tool-replace' => 'Поиск и замена',
 	'edittoolbar-tool-replace-title' => 'Поиск и замена',
 	'edittoolbar-tool-replace-search' => 'Поиск:',
 	'edittoolbar-tool-replace-replace' => 'Заменить на:',
@@ -7735,8 +8745,9 @@
 	'edittoolbar-tool-replace-regex' => 'Считать строку поиска регулярным выражением',
 	'edittoolbar-tool-replace-all' => 'Заменить все вхождения',
 	'edittoolbar-tool-replace-button' => 'Заменить',
-	'edittoolbar-tool-replace-close' => 'Закрыть',
+	'edittoolbar-tool-replace-close' => 'Отмена',
 	'edittoolbar-tool-replace-nomatch' => 'По вашему запросу ничего не найдено.',
+	'edittoolbar-tool-replace-success' => 'Произведено замен: $1.',
 	'edittoolbar-section-characters' => 'Специальные символы',
 	'edittoolbar-characters-page-latin' => 'Латинские',
 	'edittoolbar-characters-page-latinextended' => 'Латинские расширенные',
@@ -7797,7 +8808,7 @@
 	'edittoolbar-help-content-file-description' => 'Встроенный файл',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Пояснительный текст]]',
 	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='
-Сопроводительная надпись' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>
+Сопроводительная надпись' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>
 Сопроводительная надпись</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Примечание',
 	'edittoolbar-help-content-reference-syntax' => 'Текст страницы&lt;ref name="test"&gt;[http://www.example.org Текст ссылки], дополнительный текст.&lt;/ref&gt;.',
@@ -7822,11 +8833,16 @@
 	'edittoolbar' => 'Көннөрүү хаптаһына (панель)',
 	'edittoolbar-desc' => 'Тупсарыллыбыт уларытыы Ñ…аптаһына',
 	'edittoolbar-preference' => 'Тупсарыллыбыт уларытыы Ñ…аптаһынын холбуурга',
+	'edittoolbar-cgd-preference' => 'Арыый уустук биики тиэкиһи туһанар туһунан көмө-суруктары ÐºÓ©ÑÑ‚Ó©Ñ€ гыныы',
 	'edittoolbar-loading' => 'Киллэрии...',
 	'edittoolbar-tool-bold' => 'Модьу',
 	'edittoolbar-tool-bold-example' => 'Модьу бичик',
 	'edittoolbar-tool-italic' => 'Иҥнэри',
 	'edittoolbar-tool-italic-example' => 'Иҥнэри бичик',
+	'edittoolbar-tool-ilink' => 'Ис сигэ',
+	'edittoolbar-tool-ilink-example' => 'Сигэ баһа',
+	'edittoolbar-tool-xlink' => 'Тас сигэ (http:// диэни умнума)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com сигэ быһаарыыта',
 	'edittoolbar-tool-link' => 'Сигэ',
 	'edittoolbar-tool-link-title' => 'Сигэни туруоруу',
 	'edittoolbar-tool-link-int' => 'Биики сирэйгэ',
@@ -7842,6 +8858,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Сатаммат бас',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Сирэй баарын тургутуу...',
 	'edittoolbar-tool-link-int-invalid' => 'Суруллубут аат туттуллара сатаммат.',
+	'edittoolbar-tool-link-ext-invalid' => 'Алҕастаах URL ыйыллыбыт.',
 	'edittoolbar-tool-file' => 'Иһинээҕи билэ',
 	'edittoolbar-tool-file-example' => 'Example.jpg',
 	'edittoolbar-tool-reference' => 'Быһаарыы',
@@ -7876,6 +8893,18 @@
 {{ns:file}}:Example.jpg|Сурук2',
 	'edittoolbar-tool-newline' => 'Кыһыл устуруока',
 	'edittoolbar-tool-table' => 'Таабыл',
+	'edittoolbar-tool-table-example-old' => '-
+! баһа 1
+! баһа 2
+! баһа 3
+|-
+| строка 1, ячейка 1
+| строка 1, ячейка 2
+| строка 1, ячейка 3
+|-
+| строка 2, ячейка 1
+| строка 2, ячейка 2
+| строка 2, ячейка 3',
 	'edittoolbar-tool-table-example' => 'Устуруока $1, ячейка $2',
 	'edittoolbar-tool-table-example-header' => 'Устуруока $1, ячейка $2 (баһа)',
 	'edittoolbar-tool-table-title' => 'Табылыыссаны ÑƒÐ³ÑƒÑƒ',
@@ -7885,14 +8914,17 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Бас устуруоканы ÑÐ±Ð¸Ð¸',
 	'edittoolbar-tool-table-insert' => 'Киллэрэргэ',
 	'edittoolbar-tool-table-cancel' => 'Бигэргэтимэ',
-	'edittoolbar-tool-replace' => 'Уларыт',
+	'edittoolbar-tool-replace' => 'Көрдөөһүн уонна уларытыы',
 	'edittoolbar-tool-replace-title' => 'Бул уонна уларыт',
 	'edittoolbar-tool-replace-search' => 'Көрдөөһүн:',
 	'edittoolbar-tool-replace-replace' => 'Манан уларыт:',
 	'edittoolbar-tool-replace-case' => 'Регистрын учуоттуурга',
+	'edittoolbar-tool-replace-regex' => 'Көрдөөһүн устуруокатын регулярнай выражение курдук көрөргө',
+	'edittoolbar-tool-replace-all' => 'Барытын уларыт',
 	'edittoolbar-tool-replace-button' => 'Уларыт',
-	'edittoolbar-tool-replace-close' => 'Сап',
+	'edittoolbar-tool-replace-close' => 'Таҕыс',
 	'edittoolbar-tool-replace-nomatch' => 'Эн көрдөбүлгүнэн туох да көстүбэтэ.',
+	'edittoolbar-tool-replace-success' => 'Бачча уларытыы Ð¾Ò¥Ð¾Ò»ÑƒÐ»ÑƒÐ½Ð½Ð°: $1.',
 	'edittoolbar-section-characters' => 'Анал бэлиэлэр',
 	'edittoolbar-characters-page-latin' => 'Латыынныы',
 	'edittoolbar-characters-page-latinextended' => 'Латыынныы ÐºÑÑ‚ирэтиллибиттэр',
@@ -7953,7 +8985,7 @@
 	'edittoolbar-help-content-file-description' => 'Иһинээҕи билэ',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|Быһаарыыта]]',
 	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='
-Быһаарыы ÑÑƒÑ€ÑƒÐº' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>
+Быһаарыы ÑÑƒÑ€ÑƒÐº' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>
 Быһаарыы ÑÑƒÑ€ÑƒÐº</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Быһаарыы',
 	'edittoolbar-help-content-reference-syntax' => 'Сирэй тиэкиһэ.&lt;ref name="test"&gt;[http://www.example.org Сигэ быһаарыыта], эбии быһаарыы.&lt;/ref&gt;',
@@ -8003,6 +9035,69 @@
 	'edittoolbar-characters-page-ipa' => 'IPA',
 );
 
+/** Sinhala (සිංහල)
+ * @author Calcey
+ */
+$messages['si'] = array(
+	'edittoolbar-tool-ilink' => 'අභ්‍යන්තර සබැඳුම',
+	'edittoolbar-tool-ilink-example' => 'සබැඳුම් මාතෘකාව',
+	'edittoolbar-tool-link' => 'සබැඳුම',
+	'edittoolbar-tool-link-title' => 'සබැඳුමක් අැතුල් කිරීම',
+	'edittoolbar-tool-link-int' => 'විකි පිටුවක් ෙවත',
+	'edittoolbar-tool-link-int-target' => 'පිටු මාතෘකාව:',
+	'edittoolbar-tool-link-int-text' => 'සබැඳුම් පෙළ:',
+	'edittoolbar-tool-link-ext' => 'බාහිර ෙවබ් පිටුවක් ෙවත',
+	'edittoolbar-tool-link-ext-target' => ' URL සබැඳුම:',
+	'edittoolbar-tool-link-insert' => 'සබැඳුමක් අැතුල් කරන්න',
+	'edittoolbar-tool-link-int-target-status-exists' => 'පිටුව පවතී',
+	'edittoolbar-tool-link-int-target-status-invalid' => 'වලංගු මාතෘකාවක් ෙනාෙව්.',
+	'edittoolbar-tool-link-int-target-status-loading' => 'පිටුෙව් පැවැත්ම පරීක්ෂා කරමින් පවතී...',
+	'edittoolbar-tool-link-int-invalid' => 'ඔබ සඳහන් කළ මාතෘකාව වලංගු ෙනාෙව්.',
+	'edittoolbar-tool-reference' => 'ෙයාමුව',
+	'edittoolbar-section-advanced' => 'දියුණු කළ',
+	'edittoolbar-tool-heading' => 'ශීර්ෂය',
+	'edittoolbar-tool-heading-1' => '1 මට්ටම',
+	'edittoolbar-tool-heading-2' => '2 මට්ටම',
+	'edittoolbar-tool-heading-3' => '3 මට්ටම',
+	'edittoolbar-tool-heading-4' => '4 මට්ටම',
+	'edittoolbar-tool-heading-5' => '5 මට්ටම',
+	'edittoolbar-tool-heading-example' => 'ශීර්ෂ ෙපළ',
+	'edittoolbar-group-list' => 'ලැයිස්තුව',
+	'edittoolbar-tool-ulist' => 'රටා සහිත ලැයිස්තුව',
+	'edittoolbar-tool-ulist-example' => 'රටා සහිත ලයිස්තු අයිතමය',
+	'edittoolbar-tool-olist' => 'අංකිත ලැයිස්තුව',
+	'edittoolbar-group-size' => 'විශාලත්වය',
+	'edittoolbar-tool-big' => 'විශාල',
+	'edittoolbar-tool-big-example' => 'විශාල ෙපළ',
+	'edittoolbar-tool-small' => 'කුඩා',
+	'edittoolbar-tool-small-example' => 'කුඩා ෙපළ',
+	'edittoolbar-group-baseline' => 'පාද ෙර්ඛාව',
+	'edittoolbar-tool-superscript' => 'උඩු ලකුණු',
+	'edittoolbar-tool-superscript-example' => 'උඩු ලකණු ෙපළ',
+	'edittoolbar-tool-subscript' => 'යටි ලකුණු',
+	'edittoolbar-tool-subscript-example' => 'යටි ලකුණු ෙපළ',
+	'edittoolbar-tool-gallery' => 'පිංතූර ගැලරිය',
+	'edittoolbar-tool-newline' => 'නව ෙප්ළිය',
+	'edittoolbar-tool-table' => 'වගුව',
+	'edittoolbar-tool-table-title' => 'වගුවක් අැතුල් කිරීම',
+	'edittoolbar-tool-table-dimensions' => 'මාන',
+	'edittoolbar-tool-table-dimensions-rows' => 'ෙප්ළි',
+	'edittoolbar-tool-table-dimensions-columns' => 'තීරු',
+	'edittoolbar-tool-table-dimensions-header' => 'ශීර්ෂ ෙප්ළියක් අැතුල් කරන්න',
+	'edittoolbar-tool-table-insert' => 'අැතුල් කරන්න',
+	'edittoolbar-tool-table-cancel' => 'අවලංගු කරන්න',
+	'edittoolbar-tool-replace-title' => 'ෙසවීම හා ප්‍රතිස්ථාපනය',
+	'edittoolbar-tool-replace-search' => 'ෙසායන්ෙන්',
+	'edittoolbar-tool-replace-replace' => 'ප්‍රතිස්ථාපනය කළ යුත්ෙත්',
+	'edittoolbar-tool-replace-case' => 'අවස්ථාව ගළපන්න',
+	'edittoolbar-tool-replace-regex' => 'ෙසායන පදය නියත ප්‍රකාශනයක් ෙලස සලකන්න',
+	'edittoolbar-tool-replace-all' => 'සියලුම අවස්ථාවන් ප්‍රතිස්ථාපනය කරන්න.',
+	'edittoolbar-tool-replace-button' => 'ප්‍රතිස්ථාපනය කරන්න',
+	'edittoolbar-tool-replace-nomatch' => 'ඔෙබ් ෙසවීම කිසිදු පදයක් හා ෙනාගැළපේ',
+	'edittoolbar-tool-replace-success' => 'ඒක් ප්‍රතිස්ථාපනයක් සිදු කරන ලදී.',
+	'edittoolbar-section-characters' => 'විෙශ්ෂ අනු ලකුණු',
+);
+
 /** Slovak (Slovenčina)
  * @author Helix84
  * @author Rudko
@@ -8011,11 +9106,16 @@
 	'edittoolbar' => 'Panel nástrojov na úpravy',
 	'edittoolbar-desc' => 'Panel nástrojov na úpravy stránky s rozšírenou použiteľnosťou',
 	'edittoolbar-preference' => 'Zapnúť rozšírený panel nástrojov na úpravy',
+	'edittoolbar-cgd-preference' => 'Povoliť pomocníka k pridávaniu rozšíreného wiki textu',
 	'edittoolbar-loading' => 'Načítava sa...',
 	'edittoolbar-tool-bold' => 'Hrubý',
 	'edittoolbar-tool-bold-example' => 'Hrubý text',
 	'edittoolbar-tool-italic' => 'Kurzíva',
 	'edittoolbar-tool-italic-example' => 'Text kurzívou',
+	'edittoolbar-tool-ilink' => 'Interný odkaz',
+	'edittoolbar-tool-ilink-example' => 'Názov odkazu',
+	'edittoolbar-tool-xlink' => 'Externý odkaz (pamätajte na predponu http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com názov odkazu',
 	'edittoolbar-tool-link' => 'Odkaz',
 	'edittoolbar-tool-link-title' => 'Vložiť odkaz',
 	'edittoolbar-tool-link-int' => 'Na wiki stránku',
@@ -8031,6 +9131,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Neplatný názov',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Kontroluje sa existencia stránky...',
 	'edittoolbar-tool-link-int-invalid' => 'Názov, ktorý ste zadali nie je platný.',
+	'edittoolbar-tool-link-ext-invalid' => 'URL, ktorý ste uviedli nie je platný.',
 	'edittoolbar-tool-file' => 'Vložený súbor',
 	'edittoolbar-tool-file-example' => 'Príklad.jpg',
 	'edittoolbar-tool-reference' => 'Referencia',
@@ -8065,6 +9166,18 @@
 {{ns:file}}:Príklad.jpg|Popis2',
 	'edittoolbar-tool-newline' => 'Nový riadok',
 	'edittoolbar-tool-table' => 'Tabuľka',
+	'edittoolbar-tool-table-example-old' => '-
+! hlavička 1
+! hlavička 2
+! hlavička 3
+|-
+| riadok 1, bunka 1
+| riadok 1, bunka 2
+| riadok 1, bunka 3
+|-
+| riadok 2, bunka 1
+| riadok 2, bunka 2
+| riadok 2, bunka 3',
 	'edittoolbar-tool-table-example' => 'Riadok $1, bunka $2',
 	'edittoolbar-tool-table-example-header' => 'Riadok $1, bunka $2 (hlavička)',
 	'edittoolbar-tool-table-title' => 'Vložiť tabuľku',
@@ -8074,7 +9187,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Vrátane hlavičkového riadka',
 	'edittoolbar-tool-table-insert' => 'Vložiť',
 	'edittoolbar-tool-table-cancel' => 'Zrušiť',
-	'edittoolbar-tool-replace' => 'Nahradiť',
+	'edittoolbar-tool-replace' => 'Hľadať a nahradiť',
 	'edittoolbar-tool-replace-title' => 'Hľadať a nahradiť',
 	'edittoolbar-tool-replace-search' => 'Hľadať:',
 	'edittoolbar-tool-replace-replace' => 'Nahradiť čím:',
@@ -8082,8 +9195,9 @@
 	'edittoolbar-tool-replace-regex' => 'Vyhľadávací reťazec je regulárny výraz',
 	'edittoolbar-tool-replace-all' => 'Nahradiť všetky výskyty',
 	'edittoolbar-tool-replace-button' => 'Nahradiť',
-	'edittoolbar-tool-replace-close' => 'Zatvoriť',
+	'edittoolbar-tool-replace-close' => 'Zrušiť',
 	'edittoolbar-tool-replace-nomatch' => 'Vyhľadávanie nenašlo vyhovujúce položky.',
+	'edittoolbar-tool-replace-success' => 'Nahradilo sa $1 výskytov.',
 	'edittoolbar-section-characters' => 'Špeciálne znaky',
 	'edittoolbar-characters-page-latin' => 'Latinka',
 	'edittoolbar-characters-page-latinextended' => 'Latina rozšírené',
@@ -8143,7 +9257,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Položka zoznamu</li><li>Položka zoznamu</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Vložený súbor',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Príklad.png|náhľad|Text nadpisu]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Text nadpisu' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Zväčšiť' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Text nadpisu</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Text nadpisu' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Zväčšiť' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Text nadpisu</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referencie',
 	'edittoolbar-help-content-reference-syntax' => 'Text stránky.&lt;ref name="test"&gt;[http://www.example.org Text odkazu], ďalší text.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Text stránky.<sup><a href='#'>[1]</a></sup>",
@@ -8172,6 +9286,10 @@
 	'edittoolbar-tool-bold-example' => 'Krepko besedilo',
 	'edittoolbar-tool-italic' => 'Ležeče',
 	'edittoolbar-tool-italic-example' => 'Ležeče besedilo',
+	'edittoolbar-tool-ilink' => 'Notranja povezava',
+	'edittoolbar-tool-ilink-example' => 'Naslov povezave',
+	'edittoolbar-tool-xlink' => 'Zunanja povezava (ne pozabite na predpono http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com naslov povezave',
 	'edittoolbar-tool-link' => 'Povezava',
 	'edittoolbar-tool-link-title' => 'Vstavi povezavo',
 	'edittoolbar-tool-link-int' => 'Na wiki stran',
@@ -8227,8 +9345,6 @@
 	'edittoolbar-tool-table-dimensions' => 'Dimenzije',
 	'edittoolbar-tool-table-dimensions-rows' => 'Vrstice',
 	'edittoolbar-tool-table-dimensions-columns' => 'Stolpci',
-	'edittoolbar-tool-table-dimensions-headerrows' => 'Naslovna vrstica',
-	'edittoolbar-tool-table-dimensions-headercolumns' => 'Naslovni stolpec',
 	'edittoolbar-tool-table-insert' => 'Vstavi',
 	'edittoolbar-tool-table-cancel' => 'Prekliči',
 	'edittoolbar-tool-replace' => 'Zamenjaj',
@@ -8300,7 +9416,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li> Vnos a </li><li> Vnos b </li></ol>',
 	'edittoolbar-help-content-file-description' => 'Vgradnja slike',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Primer.jpg|thumb|Napis pod sliko]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'> <a title=\"Napis pod sliko\" class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a> <div class='thumbcaption'><div class='magnify'> <a title=\"Povečaj\" class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a> </div> Napis pod sliko </div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'> <a title=\"Napis pod sliko\" class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a> <div class='thumbcaption'><div class='magnify'> <a title=\"Povečaj\" class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a> </div> Napis pod sliko </div></div>",
 	'edittoolbar-help-content-reference-description' => 'Sprotna opomba',
 	'edittoolbar-help-content-reference-syntax' => 'Besedilo strani. &lt;ref name=&quot;test&quot;&gt; [http://www.example.org Oznaka povezave], dodatno besedilo. &lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Besedilo strani. <a href='#'><sup>[1]</sup></a>",
@@ -8318,6 +9434,7 @@
 );
 
 /** Serbian Cyrillic ekavian (Српски (ћирилица))
+ * @author Sasa Stefanovic
  * @author Михајло Анђелковић
  */
 $messages['sr-ec'] = array(
@@ -8326,6 +9443,23 @@
 	'edittoolbar-tool-bold-example' => 'Подебљан текст',
 	'edittoolbar-tool-italic' => 'Корзив',
 	'edittoolbar-tool-italic-example' => 'Курзиван текст',
+	'edittoolbar-tool-ilink' => 'Унутрашња веза',
+	'edittoolbar-tool-ilink-example' => 'Наслов везе',
+	'edittoolbar-tool-xlink' => 'Спољашња веза (не заборавите http:// префикс)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com наслов везе',
+	'edittoolbar-tool-link' => 'Веза',
+	'edittoolbar-tool-link-title' => 'Убаци везу',
+	'edittoolbar-tool-link-int-target' => 'Наслов стране:',
+	'edittoolbar-tool-link-int-text' => 'Текст везе:',
+	'edittoolbar-tool-link-ext-target' => 'Путања везе (УРЛ):',
+	'edittoolbar-tool-link-ext-text' => 'Текст везе:',
+	'edittoolbar-tool-link-cancel' => 'Прекини',
+	'edittoolbar-tool-link-int-target-status-exists' => 'Страница постоји',
+	'edittoolbar-tool-link-int-target-status-notexists' => 'Страница не постоји',
+	'edittoolbar-tool-link-int-target-status-invalid' => 'Погрешан наслов',
+	'edittoolbar-tool-link-int-target-status-loading' => 'Провера постојања странице...',
+	'edittoolbar-tool-link-int-invalid' => 'Наслов који сте изабрали није валидан',
+	'edittoolbar-tool-link-ext-invalid' => 'Веза коју сте изабрали није валидна',
 	'edittoolbar-tool-file-example' => 'Primer.jpg',
 	'edittoolbar-tool-reference' => 'Референца',
 	'edittoolbar-tool-reference-example' => 'Унесите текст фусноте овде',
@@ -8339,6 +9473,47 @@
 	'edittoolbar-tool-heading-example' => 'Текст одељка',
 	'edittoolbar-group-list' => 'Списак',
 	'edittoolbar-group-size' => 'Величина',
+	'edittoolbar-tool-big' => 'Велик',
+	'edittoolbar-tool-big-example' => 'Велик текст',
+	'edittoolbar-tool-small' => 'Мали',
+	'edittoolbar-tool-small-example' => 'Мали текст',
+	'edittoolbar-group-insert' => 'Убаци',
+	'edittoolbar-tool-gallery' => 'Галерија слика',
+	'edittoolbar-tool-newline' => 'Нова линија',
+	'edittoolbar-tool-table' => 'Табела',
+	'edittoolbar-tool-table-example-old' => '-
+! наслов 1
+! наслов 2
+! наслов 3
+|-
+| ред 1, ћелија 1
+| ред 1, ћелија 2
+| ред 1, ћелија 3
+|-
+| ред 2, ћелија 1
+| ред 2, ћелија 2
+| ред 2, ћелија 3',
+	'edittoolbar-tool-table-example' => 'Ред $1, ћелија $2',
+	'edittoolbar-tool-table-example-header' => 'Ред $1, ћелија $2 (наслов)',
+	'edittoolbar-tool-table-title' => 'Убаци табелу',
+	'edittoolbar-tool-replace-button' => 'Замени',
+	'edittoolbar-tool-replace-close' => 'одустани',
+	'edittoolbar-characters-page-latin' => 'латиница',
+	'edittoolbar-characters-page-latinextended' => 'проширена латиница',
+	'edittoolbar-characters-page-ipa' => 'ИПА',
+	'edittoolbar-characters-page-symbols' => 'Симболи',
+	'edittoolbar-characters-page-greek' => 'грчки',
+	'edittoolbar-characters-page-cyrillic' => 'ћирилица',
+	'edittoolbar-characters-page-arabic' => 'арапски',
+	'edittoolbar-characters-page-telugu' => 'телугу',
+	'edittoolbar-section-help' => 'Помоћ',
+	'edittoolbar-help-heading-description' => 'Опис',
+	'edittoolbar-help-heading-syntax' => 'Шта куцате',
+	'edittoolbar-help-heading-result' => 'Шта добијете',
+	'edittoolbar-help-page-format' => 'Форматирање',
+	'edittoolbar-help-page-link' => 'Везе',
+	'edittoolbar-help-page-heading' => 'Наслови',
+	'edittoolbar-help-page-list' => 'Спискови',
 	'edittoolbar-help-content-heading1-description' => 'одељак првог нивоа',
 	'edittoolbar-help-content-heading1-syntax' => '= Наслов одељка =',
 	'edittoolbar-help-content-heading1-result' => '<h1>Наслов одељка</h1>',
@@ -8365,6 +9540,10 @@
 	'edittoolbar-tool-bold-example' => 'Podebljan tekst',
 	'edittoolbar-tool-italic' => 'Korziv',
 	'edittoolbar-tool-italic-example' => 'Kurzivan tekst',
+	'edittoolbar-tool-ilink' => 'Unutrašnja veza',
+	'edittoolbar-tool-ilink-example' => 'Naslov veze',
+	'edittoolbar-tool-xlink' => 'Spoljašnja veza (ne zaboravite <a href="http://">http://</a> prefiks)',
+	'edittoolbar-tool-xlink-example' => '<a href="http://www.example.com">http://www.example.com</a> naslov veze',
 	'edittoolbar-tool-file-example' => 'Primer.jpg',
 	'edittoolbar-tool-reference' => 'Referenca',
 	'edittoolbar-tool-reference-example' => 'Unesite tekst fusnote ovde',
@@ -8419,6 +9598,10 @@
 	'edittoolbar-tool-bold-example' => 'Fet text',
 	'edittoolbar-tool-italic' => 'Kursiv',
 	'edittoolbar-tool-italic-example' => 'Kursiv text',
+	'edittoolbar-tool-ilink' => 'Intern länk',
+	'edittoolbar-tool-ilink-example' => 'Länktitel',
+	'edittoolbar-tool-xlink' => 'Extern länk (kom ihåg http:// -prefixet)',
+	'edittoolbar-tool-xlink-example' => 'http://www.exempel.com länktitel',
 	'edittoolbar-tool-link' => 'Länk',
 	'edittoolbar-tool-link-title' => 'Lägg till länk',
 	'edittoolbar-tool-link-int' => 'Till en wikisida',
@@ -8540,7 +9723,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Listelement</li><li>Listelement</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Inbäddad fil',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|miniatyr|Bildtext]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bildtext' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Förstora' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Bildtext</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Bildtext' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Förstora' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Bildtext</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Referens',
 	'edittoolbar-help-content-reference-syntax' => 'Brödtext.&lt;ref name="test"&gt;[http://www.example.org Länktext], ytterligare text.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Brödtext.<sup><a href='#'>[1]</a></sup>",
@@ -8561,7 +9744,34 @@
  * @author Lloffiwr
  */
 $messages['sw'] = array(
+	'edittoolbar-loading' => 'Inapakizwa...',
+	'edittoolbar-tool-bold' => 'Koze',
+	'edittoolbar-tool-bold-example' => 'Maandishi ya kooze',
+	'edittoolbar-tool-italic' => 'Italiki',
+	'edittoolbar-tool-link' => 'Kiungo',
+	'edittoolbar-tool-link-title' => 'Kuweka kiungo',
+	'edittoolbar-tool-link-int-target' => 'Jina la ukurasa:',
+	'edittoolbar-tool-link-int-text' => 'Maandishi ya kiungo:',
+	'edittoolbar-tool-link-int-target-status-exists' => 'Ukurasa unapatikana',
+	'edittoolbar-tool-link-int-target-status-notexists' => 'Ukurasa haupatikani',
+	'edittoolbar-group-list' => 'Orodha',
+	'edittoolbar-group-size' => 'Ukubwa',
+	'edittoolbar-tool-big' => 'Kubwa',
+	'edittoolbar-tool-big-example' => 'Maandishi makubwa',
+	'edittoolbar-tool-small' => 'Ndogo',
+	'edittoolbar-tool-small-example' => 'Maandishi madogo',
+	'edittoolbar-tool-table-dimensions-rows' => 'Mistari',
+	'edittoolbar-tool-table-dimensions-columns' => 'Safu',
+	'edittoolbar-tool-replace-search' => 'Tafuta:',
+	'edittoolbar-section-help' => 'Msaada',
+	'edittoolbar-help-heading-description' => 'Elezo',
+	'edittoolbar-help-page-link' => 'Viungo',
+	'edittoolbar-help-page-list' => 'Orodha',
 	'edittoolbar-help-page-file' => 'Mafaili',
+	'edittoolbar-help-content-italic-description' => 'Italiki',
+	'edittoolbar-help-content-bold-description' => 'Koze',
+	'edittoolbar-help-content-bold-syntax' => "'''Maandishi ya kooze'''",
+	'edittoolbar-help-content-bold-result' => '<strong>Maandishi ya kooze</strong>',
 );
 
 /** Telugu (తెలుగు)
@@ -8576,6 +9786,10 @@
 	'edittoolbar-tool-bold-example' => 'బొద్దు పాఠ్యం',
 	'edittoolbar-tool-italic' => 'వాలు',
 	'edittoolbar-tool-italic-example' => 'వాలు పాఠ్యం',
+	'edittoolbar-tool-ilink' => 'అంతర్గత లింకు',
+	'edittoolbar-tool-ilink-example' => 'లంకె లంకెపేరు',
+	'edittoolbar-tool-xlink' => 'బయటి లింకు (http:// ఉపసర్గని మరిచిపోకండి)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com లంకె లంకెపేరు',
 	'edittoolbar-tool-link' => 'లంకె',
 	'edittoolbar-tool-link-title' => 'లంకె కలుపు',
 	'edittoolbar-tool-link-int' => 'ఒక వికీ పేజీకి',
@@ -8588,11 +9802,14 @@
 	'edittoolbar-tool-link-int-target-status-notexists' => 'పేజీ ఉనికిలో à°²à±‡à°¦à±',
 	'edittoolbar-tool-reference' => 'సాక్ష్యాలు',
 	'edittoolbar-tool-signature' => 'టైంస్టాంపుతో à°¸à°¹à°¾ మీ సంతకం',
+	'edittoolbar-section-advanced' => 'ఉన్నత',
+	'edittoolbar-tool-heading' => 'శీర్షిక',
 	'edittoolbar-tool-heading-1' => '1వ స్థాయి',
 	'edittoolbar-tool-heading-2' => '2వ స్థాయి',
 	'edittoolbar-tool-heading-3' => '3వ స్థాయి',
 	'edittoolbar-tool-heading-4' => '4వ స్థాయి',
 	'edittoolbar-tool-heading-5' => '5వ స్థాయి',
+	'edittoolbar-tool-heading-example' => 'శీర్షిక పాఠ్యం',
 	'edittoolbar-group-list' => 'జాబితా',
 	'edittoolbar-group-size' => 'పరిమాణం',
 	'edittoolbar-tool-big' => 'పెద్ద',
@@ -8629,9 +9846,25 @@
 	'edittoolbar-help-content-bold-syntax' => "'''బొద్దు పాఠ్యం'''",
 	'edittoolbar-help-content-bold-result' => '<strong>బొద్దు పాఠ్యం</strong>',
 	'edittoolbar-help-content-bolditalic-description' => 'బొద్దు &amp; వాలు',
+	'edittoolbar-help-content-bolditalic-syntax' => "'''''బొద్దు &amp; వాలు పాఠ్యం'''''",
 	'edittoolbar-help-content-bolditalic-result' => '<strong><em>బొద్దు &amp; వాలు పాఠ్యం</em></strong>',
 	'edittoolbar-help-content-ilink-description' => 'అంతర్గత లింకు',
 	'edittoolbar-help-content-xlink-description' => 'బయటి లింకు',
+	'edittoolbar-help-content-heading1-description' => '1వ స్థాయి శీర్షిక',
+	'edittoolbar-help-content-heading1-syntax' => '= శీర్షిక పాఠ్యం =',
+	'edittoolbar-help-content-heading1-result' => '<h1>శీర్షిక పాఠ్యం</h1>',
+	'edittoolbar-help-content-heading2-description' => '2వ స్థాయి శీర్షిక',
+	'edittoolbar-help-content-heading2-syntax' => '== శీర్షిక పాఠ్యం ==',
+	'edittoolbar-help-content-heading2-result' => '<h2>శీర్షిక పాఠ్యం</h2>',
+	'edittoolbar-help-content-heading3-description' => '3వ స్థాయి శీర్షిక',
+	'edittoolbar-help-content-heading3-syntax' => '=== శీర్షిక పాఠ్యం ===',
+	'edittoolbar-help-content-heading3-result' => '<h3>శీర్షిక పాఠ్యం</h3>',
+	'edittoolbar-help-content-heading4-description' => '4వ స్థాయి శీర్షిక',
+	'edittoolbar-help-content-heading4-syntax' => '==== శీర్షిక పాఠ్యం ====',
+	'edittoolbar-help-content-heading4-result' => '<h4>శీర్షిక పాఠ్యం</h4>',
+	'edittoolbar-help-content-heading5-description' => '5వ స్థాయి శీర్షిక',
+	'edittoolbar-help-content-heading5-syntax' => '===== శీర్షిక పాఠ్యం =====',
+	'edittoolbar-help-content-heading5-result' => '<h5>శీర్షిక పాఠ్యం</h5>',
 	'edittoolbar-help-content-olist-description' => 'సంఖ్యానుగుణ జాబితా',
 	'edittoolbar-help-content-reference-description' => 'సాక్ష్యాలు',
 	'edittoolbar-help-content-reference-result' => "పేజీ పాఠ్యం.<sup><a href='#'>[1]</a></sup>",
@@ -8687,11 +9920,16 @@
 	'edittoolbar' => 'Araç çubuğu düzenleme',
 	'edittoolbar-desc' => 'Gelişmiş kullanılabilirlik ile sayfa araç çubuğunu değiştir',
 	'edittoolbar-preference' => 'Gelişmiş düzenleme araç çubuğunu etkinleştir',
+	'edittoolbar-cgd-preference' => 'Gelişmiş viki metni eklemek için yardımı etkinleştir',
 	'edittoolbar-loading' => 'Yükleniyor...',
 	'edittoolbar-tool-bold' => 'Kalın',
 	'edittoolbar-tool-bold-example' => 'Kalın metin',
 	'edittoolbar-tool-italic' => 'Ä°talik',
 	'edittoolbar-tool-italic-example' => 'Ä°talik metin',
+	'edittoolbar-tool-ilink' => 'İç bağlantı',
+	'edittoolbar-tool-ilink-example' => 'Bağlantı başlığı',
+	'edittoolbar-tool-xlink' => 'Dış bağlantı (http:// önekini unutmayın)',
+	'edittoolbar-tool-xlink-example' => 'http://www.ornek.com bağlantı başlığı',
 	'edittoolbar-tool-link' => 'Bağlantı',
 	'edittoolbar-tool-link-title' => 'Bağlantı ekle',
 	'edittoolbar-tool-link-int' => 'Bir viki sayfasına',
@@ -8707,6 +9945,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Geçersiz başlık',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Sayfanın mevcudiyeti kontrol ediliyor...',
 	'edittoolbar-tool-link-int-invalid' => 'Belirttiğiniz başlık geçersiz.',
+	'edittoolbar-tool-link-ext-invalid' => 'Belirttiğiniz URL geçersiz.',
 	'edittoolbar-tool-file' => 'Gömülü dosya',
 	'edittoolbar-tool-file-example' => 'Örnek.jpg',
 	'edittoolbar-tool-reference' => 'Kaynakça',
@@ -8741,6 +9980,18 @@
 {{ns:file}}:Örnek.jpg|Resimyazısı2',
 	'edittoolbar-tool-newline' => 'Yeni satır',
 	'edittoolbar-tool-table' => 'Tablo',
+	'edittoolbar-tool-table-example-old' => '-
+! başlık 1
+! başlık 2
+! başlık 3
+|-
+| satır 1, hücre 1
+| satır 1, hücre 2
+| satır 1, hücre 3
+|-
+| satır 2, hücre 1
+| satır 2, hücre 2
+| satır 2, hücre 3',
 	'edittoolbar-tool-table-example' => 'Satır $1, hücre $2',
 	'edittoolbar-tool-table-example-header' => 'Satır $1, hücre $2 (başlık)',
 	'edittoolbar-tool-table-title' => 'Tablo ekle',
@@ -8750,7 +10001,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Başlık satırını içer',
 	'edittoolbar-tool-table-insert' => 'Ekle',
 	'edittoolbar-tool-table-cancel' => 'Ä°ptal',
-	'edittoolbar-tool-replace' => 'DeÄŸiÅŸtir',
+	'edittoolbar-tool-replace' => 'Ara ve deÄŸiÅŸtir',
 	'edittoolbar-tool-replace-title' => 'Ara ve deÄŸiÅŸtir',
 	'edittoolbar-tool-replace-search' => 'Şunun için ara:',
 	'edittoolbar-tool-replace-replace' => 'Åžununla deÄŸiÅŸtir:',
@@ -8758,8 +10009,9 @@
 	'edittoolbar-tool-replace-regex' => 'Arama dizesine bir düzenli ifade muamelesi yap',
 	'edittoolbar-tool-replace-all' => 'Tüm bulunanları değiştir',
 	'edittoolbar-tool-replace-button' => 'DeÄŸiÅŸtir',
-	'edittoolbar-tool-replace-close' => 'Kapat',
+	'edittoolbar-tool-replace-close' => 'Ä°ptal',
 	'edittoolbar-tool-replace-nomatch' => 'Aramanız hiçbir şeyle uyuşmuyor.',
+	'edittoolbar-tool-replace-success' => '$1 değiştirme yapıldı.',
 	'edittoolbar-section-characters' => 'Özel karakter',
 	'edittoolbar-characters-page-latin' => 'Latin',
 	'edittoolbar-characters-page-latinextended' => 'GeniÅŸletilmiÅŸ Latince',
@@ -8819,7 +10071,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Liste öğesi</li><li>Liste öğesi</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Gömülü dosya',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Ornek.png|thumb|Resim yazısı]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Resim yazısı</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Resim yazısı</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Kaynak',
 	'edittoolbar-help-content-reference-syntax' => 'Sayfa metni.&lt;ref name="deneme"&gt;[http://www.ornek.org Bağlanı metni], ek metin.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Sayfa metni.<sup><a href='#'>[1]</a></sup>",
@@ -8848,6 +10100,10 @@
 	'edittoolbar-tool-bold-example' => 'Жирний текст',
 	'edittoolbar-tool-italic' => 'Курсив',
 	'edittoolbar-tool-italic-example' => 'Курсивний текст',
+	'edittoolbar-tool-ilink' => 'Внутрішнє посилання',
+	'edittoolbar-tool-ilink-example' => 'Заголовок посилання',
+	'edittoolbar-tool-xlink' => "Зовнішнє посилання (пам'ятайте про префікс http://)",
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com заголовок посилання',
 	'edittoolbar-tool-file' => 'Вкладений файл',
 	'edittoolbar-tool-file-example' => 'Example.jpg',
 	'edittoolbar-tool-reference' => 'Виноска',
@@ -8934,6 +10190,10 @@
 	'edittoolbar-tool-bold-example' => 'Testo in grasseto',
 	'edittoolbar-tool-italic' => 'Corsivo',
 	'edittoolbar-tool-italic-example' => 'Testo in corsivo',
+	'edittoolbar-tool-ilink' => 'Colegamento interno',
+	'edittoolbar-tool-ilink-example' => 'Titolo del colegamento',
+	'edittoolbar-tool-xlink' => 'Colegamento esterno (ricòrdete el prefisso http:// )',
+	'edittoolbar-tool-xlink-example' => 'http://www.esenpio.com titolo del colegamento',
 	'edittoolbar-tool-link' => 'Colegamento',
 	'edittoolbar-tool-link-title' => 'Inserissi colegamento',
 	'edittoolbar-tool-link-int' => 'a na pagina wiki',
@@ -8949,6 +10209,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Titolo mia valido',
 	'edittoolbar-tool-link-int-target-status-loading' => "So' drio controlar se la pagina la esiste o no...",
 	'edittoolbar-tool-link-int-invalid' => "El titolo che te ghè indicà no'l xe mia valido.",
+	'edittoolbar-tool-link-ext-invalid' => "L'indirisso indicà no'l xe mia và lido.",
 	'edittoolbar-tool-file' => 'File incorporado',
 	'edittoolbar-tool-file-example' => 'Esenpio.jpg',
 	'edittoolbar-tool-reference' => 'Nota',
@@ -8983,6 +10244,18 @@
 {{ns:file}}:Esenpio.jpg|Didascalia2',
 	'edittoolbar-tool-newline' => 'Riga nova',
 	'edittoolbar-tool-table' => 'Tabèla',
+	'edittoolbar-tool-table-example-old' => '-
+! intestassion 1
+! intestassion 2
+! intestassion 3
+|-
+| riga 1, casèla 1
+| riga 1, casèla 2
+| riga 1, casèla 3
+|-
+| riga 2, casèla 1
+| riga 2, casèla 2
+| riga 2, casèla 3',
 	'edittoolbar-tool-table-example' => 'Lìnia $1, colòna $2',
 	'edittoolbar-tool-table-example-header' => 'Lìnia $1, colòna $2 (intestassion)',
 	'edittoolbar-tool-table-title' => 'Inserissi na tabèla',
@@ -8992,7 +10265,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Includi la riga de intestassion',
 	'edittoolbar-tool-table-insert' => 'Inserissi',
 	'edittoolbar-tool-table-cancel' => 'Anùla',
-	'edittoolbar-tool-replace' => 'Sostituìssi',
+	'edittoolbar-tool-replace' => 'Serca e sostituìssi',
 	'edittoolbar-tool-replace-title' => 'Serca e sostituìssi',
 	'edittoolbar-tool-replace-search' => 'Serca:',
 	'edittoolbar-tool-replace-replace' => 'Sostituìssi con:',
@@ -9000,8 +10273,9 @@
 	'edittoolbar-tool-replace-regex' => 'Testo de la riserca come espression regolare',
 	'edittoolbar-tool-replace-all' => 'Sostituìssi tute le olte che te lo cati',
 	'edittoolbar-tool-replace-button' => 'Sostituìssi',
-	'edittoolbar-tool-replace-close' => 'Sara',
+	'edittoolbar-tool-replace-close' => 'Anùla',
 	'edittoolbar-tool-replace-nomatch' => 'No gavemo catà gnente che corisponde a quel che te serchi.',
+	'edittoolbar-tool-replace-success' => '$1 sostitussion fate.',
 	'edittoolbar-section-characters' => 'Carà teri speciali',
 	'edittoolbar-characters-page-latin' => 'Latìn',
 	'edittoolbar-characters-page-latinextended' => 'Latìn esteso',
@@ -9061,7 +10335,7 @@
 	'edittoolbar-help-content-olist-result' => "<ol><li>Elemento de l'elenco</li><li>Elemento de l'elenco</li></ol>",
 	'edittoolbar-help-content-file-description' => 'File incorporado',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Esenpio.png|thumb|Testo de la didascalia]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Testo de la didascalia</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Testo de la didascalia</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Nota',
 	'edittoolbar-help-content-reference-syntax' => 'Testo de la pagina.&lt;ref name="test"&gt;[http://www.esenpio.org Testo del colegamento], altro testo in più.&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "Testo de la pagina.<sup><a href='#'>[1]</a></sup>",
@@ -9078,6 +10352,64 @@
 	'edittoolbar-help-content-indent-result' => 'Testo normal<dl><dd>Testo rientrà <dl><dd>Testo rientrà </dd></dl></dd></dl>',
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'edittoolbar-tool-bold' => 'Lihavoitud',
+	'edittoolbar-tool-bold-example' => 'Lihavoitud tekst',
+	'edittoolbar-tool-link' => 'Kosketuz',
+	'edittoolbar-tool-link-title' => 'Ližada kosketuz',
+	'edittoolbar-tool-link-ext-target' => 'Kosketusen URL:',
+	'edittoolbar-tool-link-ext-text' => 'Kosketusen tekst:',
+	'edittoolbar-tool-link-cancel' => 'Heitta',
+	'edittoolbar-tool-link-int-target-status-invalid' => 'Vär nimi',
+	'edittoolbar-tool-file' => 'Mülütadud fail',
+	'edittoolbar-group-list' => 'Nimikirjutez',
+	'edittoolbar-tool-ulist-example' => 'Markiruidud nimikirjutez',
+	'edittoolbar-tool-olist' => 'Nomeroitud nimikirjutez',
+	'edittoolbar-group-size' => 'Suruz',
+	'edittoolbar-tool-big' => "Sur'",
+	'edittoolbar-tool-big-example' => 'Järed tekst',
+	'edittoolbar-tool-small' => "Pen'",
+	'edittoolbar-tool-small-example' => "Pen' tekst",
+	'edittoolbar-group-insert' => 'Ližata',
+	'edittoolbar-tool-gallery' => 'Kuviden gallerei',
+	'edittoolbar-tool-newline' => "Uz' rivi",
+	'edittoolbar-tool-table-title' => 'Ližada tablut',
+	'edittoolbar-tool-table-dimensions' => 'Suruz',
+	'edittoolbar-tool-table-dimensions-rows' => 'Rivid',
+	'edittoolbar-tool-table-insert' => 'Ližata',
+	'edittoolbar-tool-table-cancel' => 'Heitta',
+	'edittoolbar-tool-replace-close' => 'Heitta',
+	'edittoolbar-characters-page-latin' => 'Latinalaine',
+	'edittoolbar-characters-page-latinextended' => 'Levitadud latinalaine',
+	'edittoolbar-characters-page-ipa' => 'IPA',
+	'edittoolbar-characters-page-symbols' => 'Simvolad',
+	'edittoolbar-characters-page-greek' => 'Grekalaine',
+	'edittoolbar-characters-page-cyrillic' => 'Kirilline',
+	'edittoolbar-characters-page-arabic' => 'Arabine',
+	'edittoolbar-characters-page-hebrew' => 'Evrejine',
+	'edittoolbar-characters-page-telugu' => 'Telugu',
+	'edittoolbar-section-help' => 'Abu',
+	'edittoolbar-help-page-link' => 'Kosketused',
+	'edittoolbar-help-page-list' => 'Nimikirjutesed',
+	'edittoolbar-help-page-file' => 'Failad',
+	'edittoolbar-help-content-bold-description' => 'Lihavoitud',
+	'edittoolbar-help-content-bold-syntax' => "'''Lihavoitud tekst'''",
+	'edittoolbar-help-content-ilink-description' => 'Südäikosketuz',
+	'edittoolbar-help-content-xlink-description' => 'Irdkosketuz',
+	'edittoolbar-help-content-heading1-syntax' => '= Pälkirjutesen tekst =',
+	'edittoolbar-help-content-heading2-syntax' => '== Pälkirjutesen tekst ==',
+	'edittoolbar-help-content-heading3-syntax' => '=== Pälkirjutesen tekst ===',
+	'edittoolbar-help-content-heading4-syntax' => '==== Pälkirjutesen tekst ====',
+	'edittoolbar-help-content-heading5-syntax' => '===== Pälkirjutesen tekst =====',
+	'edittoolbar-help-content-ulist-description' => 'Markiruidud nimikirjutez',
+	'edittoolbar-help-content-olist-description' => 'Nomeroitud nimikirjutez',
+	'edittoolbar-help-content-file-description' => 'Mülütadud fail',
+	'edittoolbar-help-content-signature-description' => 'Allekirjutez',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Minh Nguyen
  * @author Vinhtantran
@@ -9086,11 +10418,16 @@
 	'edittoolbar' => 'Thanh công cụ sửa đổi',
 	'edittoolbar-desc' => 'Thanh công cụ ở trang sửa đổi được cải tiến để dễ sử dụng hơn',
 	'edittoolbar-preference' => 'Sử dụng thanh công cụ sửa đổi nâng cao',
+	'edittoolbar-cgd-preference' => 'Mở trợ giúp về cách thêm mã wiki nâng cao',
 	'edittoolbar-loading' => 'Đang tải…',
 	'edittoolbar-tool-bold' => 'Đậm',
 	'edittoolbar-tool-bold-example' => 'Chữ đậm',
 	'edittoolbar-tool-italic' => 'Xiên',
 	'edittoolbar-tool-italic-example' => 'Chữ xiên',
+	'edittoolbar-tool-ilink' => 'Liên kết trong',
+	'edittoolbar-tool-ilink-example' => 'Tựa đề liên kết',
+	'edittoolbar-tool-xlink' => 'Liên kết ngoà i (nhớ ghi http://)',
+	'edittoolbar-tool-xlink-example' => 'http://www.vidu.com tựa đề liên kết',
 	'edittoolbar-tool-link' => 'Liên kết',
 	'edittoolbar-tool-link-title' => 'Chèn liên kết',
 	'edittoolbar-tool-link-int' => 'Đến một trang wiki',
@@ -9106,6 +10443,7 @@
 	'edittoolbar-tool-link-int-target-status-invalid' => 'Tá»±a sai',
 	'edittoolbar-tool-link-int-target-status-loading' => 'Kiểm tra trang đã tồn tại chưa...',
 	'edittoolbar-tool-link-int-invalid' => 'Tựa trang chỉ định không hợp lệ.',
+	'edittoolbar-tool-link-ext-invalid' => 'URL không đúng.',
 	'edittoolbar-tool-file' => 'Chèn tập tin',
 	'edittoolbar-tool-file-example' => 'Ví dụ.jpg',
 	'edittoolbar-tool-reference' => 'Chú thích tham khảo',
@@ -9140,6 +10478,18 @@
 {{ns:file}}:Ví dụ.jpg|Chú thích 2',
 	'edittoolbar-tool-newline' => 'Dòng mới',
 	'edittoolbar-tool-table' => 'Bảng',
+	'edittoolbar-tool-table-example-old' => '-
+! tiêu đề 1
+! tiêu đề 2
+! tiêu đề 3
+|-
+| hà ng 1, cột 1
+| hà ng 1, cột 2
+| hà ng 1, cột 3
+|-
+| hà ng 2, cột 1
+| hà ng 2, cột 2
+| hà ng 2, cột 3',
 	'edittoolbar-tool-table-example' => 'Hà ng $1, ô $2',
 	'edittoolbar-tool-table-example-header' => 'Hà ng $1, cột $2 (tiêu đề)',
 	'edittoolbar-tool-table-title' => 'Chèn bảng',
@@ -9149,7 +10499,7 @@
 	'edittoolbar-tool-table-dimensions-header' => 'Có hà ng tiêu đề',
 	'edittoolbar-tool-table-insert' => 'Chèn',
 	'edittoolbar-tool-table-cancel' => 'Hủy bỏ',
-	'edittoolbar-tool-replace' => 'Thay thế',
+	'edittoolbar-tool-replace' => 'Tìm và thay thế',
 	'edittoolbar-tool-replace-title' => 'Tìm và thay thế',
 	'edittoolbar-tool-replace-search' => 'Tìm kiếm:',
 	'edittoolbar-tool-replace-replace' => 'Thay thế bằng:',
@@ -9157,8 +10507,9 @@
 	'edittoolbar-tool-replace-regex' => 'Xem chuỗi tìm kiếm là biểu thức chính quy',
 	'edittoolbar-tool-replace-all' => 'Thay thế mọi từ tìm thấy',
 	'edittoolbar-tool-replace-button' => 'Thay thế',
-	'edittoolbar-tool-replace-close' => 'Đóng',
+	'edittoolbar-tool-replace-close' => 'Hủy bỏ',
 	'edittoolbar-tool-replace-nomatch' => 'Không tìm thấy',
+	'edittoolbar-tool-replace-success' => 'Đã thực hiện $1 thay thế.',
 	'edittoolbar-section-characters' => 'Ký tự đặc biệt',
 	'edittoolbar-characters-page-latin' => 'La tinh',
 	'edittoolbar-characters-page-latinextended' => 'La tinh mở rộng',
@@ -9218,7 +10569,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>Mục danh sách</li><li>Mục danh sách</li></ol>',
 	'edittoolbar-help-content-file-description' => 'Chèn tập tin',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Ví dụ.png|nhỏ|Văn bản chú thích]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Văn bản chú thích' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Phóng lớn' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>Văn bản chú thích</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Văn bản chú thích' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Phóng lớn' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>Văn bản chú thích</div></div>",
 	'edittoolbar-help-content-reference-description' => 'Tham khảo',
 	'edittoolbar-help-content-reference-syntax' => 'Nội dung trang&lt;ref name="thử"&gt;[http://www.vidu.org Văn bản liên kết], văn bản bổ sung.&lt;/ref&gt;.',
 	'edittoolbar-help-content-reference-result' => "Ná»™i dung trang<sup><a href='#'>[1]</a></sup>.",
@@ -9235,6 +10586,14 @@
 	'edittoolbar-help-content-indent-result' => 'Văn bản thường<dl><dd>Văn bản được tăng lề<dl><dd>Văn bản được tăng lề</dd></dl></dd></dl>',
 );
 
+/** Yiddish (ייִדיש)
+ * @author פוילישער
+ */
+$messages['yi'] = array(
+	'edittoolbar-tool-replace-search' => 'זוכן פֿאַר:',
+	'edittoolbar-section-help' => 'הילף',
+);
+
 /** Yue (粵語)
  * @author Shinjiman
  */
@@ -9247,6 +10606,10 @@
 	'edittoolbar-tool-bold-example' => '粗體字',
 	'edittoolbar-tool-italic' => '斜體',
 	'edittoolbar-tool-italic-example' => '斜體字',
+	'edittoolbar-tool-ilink' => '內連',
+	'edittoolbar-tool-ilink-example' => '拎題',
+	'edittoolbar-tool-xlink' => '外連(記住 http:// å­—é ­ï¼‰',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com 連結標題',
 	'edittoolbar-tool-file' => '結合標題',
 	'edittoolbar-tool-reference' => '參考',
 	'edittoolbar-tool-reference-example' => '響呢度插入底文字',
@@ -9280,6 +10643,18 @@
 {{ns:file}}:Example.jpg|標題2',
 	'edittoolbar-tool-newline' => '新行',
 	'edittoolbar-tool-table' => '表',
+	'edittoolbar-tool-table-example-old' => '-
+! è¡¨é ­ 1
+! è¡¨é ­ 2
+! è¡¨é ­ 3
+|-
+| è¡Œ 1, æ ¼ 1
+| è¡Œ 1, æ ¼ 2
+| è¡Œ 1, æ ¼ 3
+|-
+| è¡Œ 2, æ ¼ 1
+| è¡Œ 2, æ ¼ 2
+| è¡Œ 2, æ ¼ 3',
 	'edittoolbar-tool-table-example' => '-
 ! è¡¨é ­ 1
 ! è¡¨é ­ 2
@@ -9348,7 +10723,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>ä¸€è¦½é …ç›®</li><li>ä¸€è¦½é …ç›®</li></ol>',
 	'edittoolbar-help-content-file-description' => '結合檔',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|標題字]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='標題字' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>標題字</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='標題字' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>標題字</div></div>",
 	'edittoolbar-help-content-reference-description' => '參考',
 	'edittoolbar-help-content-reference-syntax' => 'é å­—ã€‚&lt;ref name="test"&gt;[http://www.example.org 連字]ï¼Œé™„åŠ å­—ã€‚&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "é å­—ã€‚<sup><a href='#'>[1]</a></sup>",
@@ -9380,6 +10755,10 @@
 	'edittoolbar-tool-bold-example' => '粗体文本',
 	'edittoolbar-tool-italic' => '斜体',
 	'edittoolbar-tool-italic-example' => '斜体文本',
+	'edittoolbar-tool-ilink' => '内部链接',
+	'edittoolbar-tool-ilink-example' => 'é“¾æŽ¥æ ‡é¢˜',
+	'edittoolbar-tool-xlink' => '外部链接(需以“http://”前缀)',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com é“¾æŽ¥æ ‡é¢˜',
 	'edittoolbar-tool-link' => '链接',
 	'edittoolbar-tool-link-title' => '插入链接',
 	'edittoolbar-tool-link-int' => '链往wiki页面',
@@ -9435,8 +10814,6 @@
 	'edittoolbar-tool-table-dimensions' => '大小',
 	'edittoolbar-tool-table-dimensions-rows' => '行',
 	'edittoolbar-tool-table-dimensions-columns' => '列',
-	'edittoolbar-tool-table-dimensions-headerrows' => 'æ ‡é¢˜è¡Œ',
-	'edittoolbar-tool-table-dimensions-headercolumns' => 'æ ‡é¢˜åˆ—',
 	'edittoolbar-tool-table-insert' => '插入',
 	'edittoolbar-tool-table-cancel' => '取消',
 	'edittoolbar-tool-replace' => '替换',
@@ -9508,7 +10885,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>列表项</li><li>列表项</li></ol>',
 	'edittoolbar-help-content-file-description' => '嵌入文件',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|æ ‡é¢˜æ–‡æœ¬]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='æ ‡é¢˜æ–‡æœ¬' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>æ ‡é¢˜æ–‡æœ¬</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='æ ‡é¢˜æ–‡æœ¬' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>æ ‡é¢˜æ–‡æœ¬</div></div>",
 	'edittoolbar-help-content-reference-description' => '参考',
 	'edittoolbar-help-content-reference-syntax' => '页面文本。&lt;ref name="test"&gt;[http://www.example.org 链接文本]ï¼Œé™„åŠ æ–‡æœ¬ã€‚&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "页面文本。<sup><a href='#'>[1]</a></sup>",
@@ -9538,6 +10915,10 @@
 	'edittoolbar-tool-bold-example' => '粗體文字',
 	'edittoolbar-tool-italic' => '斜體',
 	'edittoolbar-tool-italic-example' => '斜體文字',
+	'edittoolbar-tool-ilink' => '內部連結',
+	'edittoolbar-tool-ilink-example' => '連結標題',
+	'edittoolbar-tool-xlink' => '外部連結(記住 http:// æ–‡å­—é–‹é ­ï¼‰',
+	'edittoolbar-tool-xlink-example' => 'http://www.example.com 連結標題',
 	'edittoolbar-tool-file' => '結合標題',
 	'edittoolbar-tool-reference' => '參考',
 	'edittoolbar-tool-reference-example' => 'åœ¨é€™è£æ’å…¥é åº•æ–‡å­—',
@@ -9571,6 +10952,18 @@
 {{ns:file}}:Example.jpg|標題2',
 	'edittoolbar-tool-newline' => '換行',
 	'edittoolbar-tool-table' => 'è¡¨æ ¼',
+	'edittoolbar-tool-table-example-old' => '-
+! è¡¨é ­ 1
+! è¡¨é ­ 2
+! è¡¨é ­ 3
+|-
+| è¡Œ 1, æ ¼ 1
+| è¡Œ 1, æ ¼ 2
+| è¡Œ 1, æ ¼ 3
+|-
+| è¡Œ 2, æ ¼ 1
+| è¡Œ 2, æ ¼ 2
+| è¡Œ 2, æ ¼ 3',
 	'edittoolbar-tool-table-example' => '-
 ! è¡¨é ­ 1
 ! è¡¨é ­ 2
@@ -9640,7 +11033,7 @@
 	'edittoolbar-help-content-olist-result' => '<ol><li>åˆ—è¡¨é …ç›®</li><li>åˆ—è¡¨é …ç›®</li></ol>',
 	'edittoolbar-help-content-file-description' => '結合檔',
 	'edittoolbar-help-content-file-syntax' => '[[{{ns:file}}:Example.png|thumb|標題文字]]',
-	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='標題文字' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='skins/common/images/magnify-clip.png'/></a></div>標題文字</div></div>",
+	'edittoolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='標題文字' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='extensions/UsabilityInitiative/images/wikiEditor/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='{{STYLEPATH}}/common/images/magnify-clip.png'/></a></div>標題文字</div></div>",
 	'edittoolbar-help-content-reference-description' => '參考',
 	'edittoolbar-help-content-reference-syntax' => 'é é¢æ–‡å­—ã€‚&lt;ref name="test"&gt;[http://www.example.org 連結文字]ï¼Œé™„åŠ æ–‡å­—ã€‚&lt;/ref&gt;',
 	'edittoolbar-help-content-reference-result' => "é é¢æ–‡å­—ã€‚<sup><a href='#'>[1]</a></sup>",
Index: EditToolbar/EditToolbar.php
===================================================================
--- EditToolbar/EditToolbar.php	(revision 56989)
+++ EditToolbar/EditToolbar.php	(working copy)
@@ -19,7 +19,7 @@
 /* Configuration */
 
 // Bump the version number every time you change any of the .css/.js files
-$wgEditToolbarStyleVersion = 34;
+$wgEditToolbarStyleVersion = 38;
 
 // Set this to true to simply override the stock toolbar for everyone
 $wgEditToolbarGlobalEnable = false;
Index: ClickTracking/SpecialClickTracking.php
===================================================================
--- ClickTracking/SpecialClickTracking.php	(revision 56989)
+++ ClickTracking/SpecialClickTracking.php	(working copy)
@@ -7,18 +7,345 @@
  */
 
 class SpecialClickTracking extends SpecialPage {
+	
+	//set to zero for 'all'
+	private $top_results = 10;
+	private $normalize_top_results = false;
+	private $normalize_results = false;
+	private $use_timeframes = false;
+	private $begin_timeframe = '20090815'; //YYYYMMDD (+1 for today)
+	private $end_timeframe = '20090902';
+	
+	
+	//array of event_id => event_name
+	public static $join_conds = " LEFT JOIN click_tracking_events ON event_id=click_tracking_events.id";
+	public static $expert_user_conds = "user_total_contribs > 10 ";
+	public static $intermediate_user_conds = "user_total_contribs < 10 AND user_total_contribs > 1 ";
+	public static $basic_user_conds = "user_total_contribs <= 1";
+	
+	/*
+	 * " DISTINCT session_id "
+	 * 
+	 * " select count(*), event_id from click_tracking group by event_id order by count(*) desc limit 10;"
+	 * 
+	 */
+	
+	private $event_id_to_name = array();
+	private $name_to_event_id = array();
+	private $time_constraint_sql = "";
+	
+	
+	
 	function __construct() {
 		parent::__construct( 'ClickTracking' );
 		wfLoadExtensionMessages( 'ClickTracking' );
+		UsabilityInitiativeHooks::initialize();
+		UsabilityInitiativeHooks::addStyle( 'ClickTracking/SpecialClickTracking.css' );
+		UsabilityInitiativeHooks::addScript( 'ClickTracking/SpecialClickTracking.js' );
 	}
-
+	
+	
+	
+	
+	
 	function execute( $par ) {
-		global $wgOut;
+		global $wgOut, $wgUser;
+		
+		// Check permissions
+		if ( !$this->userCanExecute( $wgUser ) ) {
+			$this->displayRestrictionError();
+			return;
+		}
+		
 		$this->setHeaders();
 		$wgOut->setPageTitle( wfMsg( 'clicktracking-title' ) );
 		
+		$outputTable ="";
+		
+		
+		//grab top N
+		$events = $this->getTopEvents();
+		
+		//open table
+		$outputTable .= Xml::openElement( "table", array( "class" =>"sortable click-data", "id" => "clicktrack_data_table" )  );
+		
+		//create a row for every event
+		$i = 0;
+		$db_result;
+		
+		//build row headers
+		$header_row = array();
+		
+		$header_row["event_header"] = wfMsg( 'event-name' );
+		$header_row["expert_header"] = wfMsg( 'expert-header' );
+		$header_row["intermediate_header"] = wfMsg( 'intermediate-header' );
+		$header_row["beginner_header"] = wfMsg( 'beginner-header' );
+		$header_row["total_header"] = wfMsg( 'total-header' );
+		$outputTable .= Xml::buildTableRow( array( "class"=>"table_headers" ), $header_row );
+		
+		//foreach event, build a row
+		while(($db_result = $events->fetchRow()) != null){
+			++$i;
+			$outputTable .= $this->buildRow( $db_result, $i );
+		}
+		
+		
+		//close table
+		$outputTable .= Xml::closeElement("table");
+		
+		$wgOut->addHTML( $outputTable );
+
+		
+		//build chart
+		$wgOut->addHTML($this->buildChart("advanced.hide",10, "20090815", "20090902", 1));
+		
+		$wgOut->addHTML($this->buildControlBox());
+		
 	}
+	
 
+	/**
+	 * Gets the data to build a chart for PHP or JS purposes
+	 * @param $event_id  event id this chart is for
+	 * @param $minTime minimum day
+	 * @param $maxTime maximum day
+	 * @param $increment number of day(s) to increment in units
+	 * @return array with chart info
+	 */
+	static function getChartData($event_id, $minTime, $maxTime, $increment){
+		//get data	
+		date_default_timezone_set('UTC');
+		
+		//FIXME: On PHP 5.3+, this will be MUCH cleaner
+		$currBeginDate = new DateTime( $minTime );
+		$currEndDate = new DateTime( $minTime );
+		$endDate = new DateTime( $maxTime );
+		
+		$basicUserData = array();
+		$intermediateUserData = array();
+		$expertUserData = array();
+		
+		// PHP 5.3...hurry!
+		$plural = ( $increment == 1 ? "" : "s" );
+		
+		while( $currEndDate->format( "U" )  < $endDate->format( "U" )  ){
+			$currEndDate->modify( "+$increment day$plural" );
+			$time_constraints_statement = self::getTimeConstraintsStatement( $currBeginDate->format("Ymd"), $currEndDate->format("Ymd") );
+			$basicUserData[] = self::getTableValue( $event_id, self::$basic_user_conds, $time_constraints_statement );
+			$intermediateUserData[] = self::getTableValue( $event_id, self::$intermediate_user_conds, $time_constraints_statement );
+			$expertUserData[] = self::getTableValue( $event_id, self::$expert_user_conds, $time_constraints_statement );
+			$currBeginDate->modify( "+$increment day$plural" );
+		}
+		return array("expert" => $expertUserData, "basic" => $basicUserData, "intermediate" => $intermediateUserData);
+	}		
+
+	function buildChart($event_name, $event_id, $minTime, $maxTime, $increment){
+		$chartData = self::getChartData($event_id, $minTime, $maxTime, $increment);
+		$chartSrc = $this->getGoogleChartParams( $event_id, $event_name, $minTime, $maxTime, $chartData["basic"], $chartData["intermediate"], $chartData["expert"]);
+		return Xml::element( 'img', array( 'src' => $chartSrc , 'id' => 'chart_img' ) );
+	}
 	
+	
+	function getGoogleChartParams( $event_id, $event_name, $minDate, $maxDate, $basicUserData, $intermediateUserData, $expertUserData ) {
+		$max = max( max($basicUserData), max($intermediateUserData), max($expertUserData));
+		return "http://chart.apis.google.com/chart?" . wfArrayToCGI(
+		array(
+			'chs' => '400x400', 
+			'cht' => 'lc',
+			'chco' => 'FF0000,0000FF,00FF00',
+			'chtt' => "$event_name from $minDate to $maxDate",
+			'chdl' => 'Expert|Intermediate|Beginner',
+			'chxt' => 'x,y',
+			'chd' => 't:' . implode( "," , $expertUserData ) . "|" . 
+						implode( "," , $intermediateUserData ) . "|" . implode( "," , $basicUserData ),
+			'chds' => "0,$max,0,$max,0,$max"
+			));
+	}
+	
+	
+	function buildControlBox(){
+		
+		$control = Xml::openElement("form", array("id" => "control_box_form"));
+		$control .= Xml::openElement("table", array("id" => "control_box_table"));
+		$control .= Xml::openElement("tbody", array("id" => "control_box_tbody"));
+		
+		
+		$control .= Xml::openElement("tr", array("id" => "start_date_row"));
+		
+		$control .= Xml::openElement("td", array("id" => "start_date_label", "class" => "control_box_label"));
+		$control .= wfMsg( "start-date" );
+		$control .= Xml::closeElement("td");
+		
+		$control .= Xml::openElement("td", array("id" => "start_date_textarea"));
+		$control .= Xml::openElement("input", array("type" => "text", "id" => "start_date", "class" => "control_box_input"));
+		$control .= Xml::closeElement("input");
+		$control .= Xml::closeElement("td");
+		
+		$control .= Xml::closeElement("tr");
 
+		
+		
+		$control .= Xml::openElement("tr", array("id" => "end_date_row"));
+		
+		$control .= Xml::openElement("td", array("id" => "end_date_label", "class" => "control_box_label"));
+		$control .= wfMsg( "end-date" );
+		$control .= Xml::closeElement("td");
+		
+		$control .= Xml::openElement("td", array("id" => "end_date_textarea"));
+		$control .= Xml::openElement("input", array("type" => "text", "id" => "end_date", "class" => "control_box_input"));
+		$control .= Xml::closeElement("input");
+		$control .= Xml::closeElement("td");
+		
+		$control .= Xml::closeElement("tr");
+		
+		
+		
+		$control .= Xml::openElement("tr", array("id" => "increment_date_row"));
+		
+		$control .= Xml::openElement("td", array("id" => "increment_date_label", "class" => "control_box_label"));
+		$control .= wfMsg( "increment-by" );
+		$control .= Xml::closeElement("td");
+		
+		$control .= Xml::openElement("td", array("id" => "increment_date_textarea"));
+		$control .= Xml::openElement("input", array("type" => "text", "id" => "increment_date", "class" => "control_box_input"));
+		$control .= Xml::closeElement("input");
+		$control .= Xml::closeElement("td");
+		
+		$control .= Xml::closeElement("tr");
+		
+		
+		
+		$control .= Xml::openElement("tr", array("id" => "change_graph_row"));
+		$control .= Xml::openElement("td", array("id" => "change_graph_cell", "colspan" => 2));
+		
+		$control .= Xml::openElement("input", array("type" => "button", "id" => "change_graph", "value" => wfMsg( "change-graph" ) )  );
+		$control .= Xml::closeElement("input");
+		$control .= Xml::closeElement("td");
+		
+		$control .= Xml::closeElement("tr");
+				
+		$control .= Xml::closeElement("tbody");
+		$control .= Xml::closeElement("table");
+		$control .= Xml::closeElement("form");
+		
+		return $control;
+	}
+	
+	
+	function buildRow($data_result, $row_count){
+			
+			$outputRow = Xml::openElement("tr", array("class" => "table_data_row"));
+			
+			//event name
+			$outputRow .=Xml::openElement("td", 
+									array("class" => "event_name", "id" => "event_name_$row_count", "value" =>$data_result['event_id']));
+			$outputRow .= $data_result['event_name'];
+			$outputRow .=Xml::closeElement("td");
+			
+			//advanced users
+			$cellValue = self::getTableValue($data_result['event_id'], self::$expert_user_conds);
+			$outputRow .=Xml::openElement("td", 
+									array("class" => "event_data expert_data", "id" => "event_expert_$row_count",
+										"value" => $cellValue));
+			$outputRow .= $cellValue;
+			$outputRow .=Xml::closeElement("td");
+			
+			//intermediate users
+			$cellValue = self::getTableValue($data_result['event_id'], self::$intermediate_user_conds);
+			$outputRow .=Xml::openElement("td", 
+									array("class" => "event_data intermediate_data", "id" => "event_intermediate_$row_count", 
+										"value" => $cellValue));
+			$outputRow .= $cellValue;
+			$outputRow .=Xml::closeElement("td");
+			
+			//basic users
+			$cellValue = self::getTableValue($data_result['event_id'], self::$basic_user_conds);
+			$outputRow .=Xml::openElement("td", 
+									array("class" => "event_data basic_data", "id" => "event_basic_$row_count",
+									"value" => $cellValue));
+			$outputRow .= $cellValue;
+			$outputRow .=Xml::closeElement("td");
+			
+			//totals
+			$cellValue = $data_result["count(event_id)"];
+			$outputRow .=Xml::openElement("td", 
+									array("class" => "event_data total_data", "id" => "total_$row_count",
+									"value" => $cellValue));
+			$outputRow .= $cellValue;
+			$outputRow .=Xml::closeElement("td");
+			
+			
+			$outputRow .= Xml::closeElement("tr");
+			
+			return $outputRow;
+			
+	}
+
+	/*
+	 * get time constraints
+	 * @param minTime minimum day (YYYYMMDD)
+	 * @param maxTime max day (YYYYMMDD)
+	 * NOTE: once some of the constraints have been finalized, this will use more of the Database functions and not raw SQL
+	 */
+	static function getTimeConstraintsStatement( $minTime, $maxTime ){
+		if($minTime == 0 || $maxTime == 0){
+			return '';		
+		}
+		else {
+			return "WHERE action_time >= $minTime AND action_time <= $maxTime";	
+		}
+		
+	}
+	
+	
+	/**
+	 * Gets the top N events as set in the page pref
+	 * @param $time_constraint_statement
+	 * @return unknown_type
+	 * NOTE: once some of the constraints have been finalized, this will use more of the Database functions and not raw SQL
+	 */
+	function getTopEvents($time_constraint_statement=''){
+		$normalize = "click_tracking";
+		$time_constraint = $time_constraint_statement;
+		if($this->normalize_top_results){
+			$normalize = "(select distinct session_id, event_id from click_tracking $time_constraint_statement) as t1";
+			$time_constraint = "";
+		}
+		$limit = $this->top_results;
+		$join = self::$join_conds;
+		$sql = "select count(event_id), event_id,event_name from $normalize $join $time_constraint group by event_id order by count(event_id) desc limit $limit";
+		
+		//returns count(event_id),event_id, event_name, top one first
+		$dbr = wfGetDB( DB_SLAVE );
+		$dbresult = $dbr->query($sql);
+		
+		return $dbresult;
+	}
+
+	/**
+	 * Gets a table value for a given User ID
+	 * NOTE: once some of the constraints have been finalized, this will use more of the Database functions and not raw SQL
+	 */
+	static function getTableValue($event_id, $user_conditions, $time_constraint_statement = '', $normalize_results=false){
+		
+		$normalize = "click_tracking";
+		$time_constraint = $time_constraint_statement;
+		if($normalize_results){
+			$normalize = "(select distinct session_id, event_id, user_total_contribs, user_contribs_span1, user_contribs_span2, user_contribs_span3, is_logged_in from click_tracking $time_constraint_statement) as t1";
+			$time_constraint = "";
+		}
+		
+		
+		$where = ($time_constraint == "" ? "where" : "");
+		
+		$and = ($time_constraint == "" ? "": "and");
+		
+		$sql ="select count(*) from $normalize $where $time_constraint $and $user_conditions and event_id=$event_id";
+		
+		$dbr = wfGetDB( DB_SLAVE );
+		$result = $dbr->query($sql);
+		$resRow = $result->fetchRow();
+		return $resRow["count(*)"];
+	}
+	
 }
\ No newline at end of file
Index: ClickTracking/ClickTracking.hooks.php
===================================================================
--- ClickTracking/ClickTracking.hooks.php	(revision 56989)
+++ ClickTracking/ClickTracking.hooks.php	(working copy)
@@ -23,11 +23,6 @@
 		);
 
 		$wgExtNewTables[] = array(
-			'user_daily_contribs',
-			dirname( __FILE__ ) . '/UserDailyContribs.sql'
-		);
-
-		$wgExtNewTables[] = array(
 			'click_tracking_events',
 			dirname( __FILE__ ) . '/ClickTrackingEvents.sql'
 		);
@@ -112,20 +107,6 @@
 		return $edits;
 	}
 
-	/**
-	 * Stores a new contribution
-	 * @return true
-	 */
-	public static function storeNewContrib(){
-		global $wgUser;
-		$today = gmdate( 'Ymd', time() );
-		$dbw = wfGetDB( DB_MASTER );
-		$sql = 
-		"INSERT INTO user_daily_contribs (user_id,day,contribs) VALUES ({$wgUser->getId()},$today,1) ON DUPLICATE KEY UPDATE contribs=contribs+1;";
-		$dbw->query($sql, __METHOD__);
-		
-		return true;
-	}
 
 	/**
 	 * Get event ID from name
Index: ClickTracking/UserDailyContribs.sql
===================================================================
--- ClickTracking/UserDailyContribs.sql	(revision 56989)
+++ ClickTracking/UserDailyContribs.sql	(working copy)
@@ -1,19 +0,0 @@
---
--- Schema for UserDailyContribs
---
--- Used in clicktracking to determine how active the user is
---
-
-CREATE TABLE IF NOT EXISTS /*_*/user_daily_contribs (
-	-- user id
-	user_id integer NOT NULL default 0,
-
-	-- day
-	day DATE NOT NULL,
-
-	-- contributions on that day by that user
-	contribs integer NOT NULL default 0,
-
-	-- a unique entry for a given user_id and day
-	PRIMARY KEY(user_id, day)
-) /*$wgDBTableOptions*/;
\ No newline at end of file
Index: ClickTracking/ClickTracking.i18n.php
===================================================================
--- ClickTracking/ClickTracking.i18n.php	(revision 56989)
+++ ClickTracking/ClickTracking.i18n.php	(working copy)
@@ -13,8 +13,20 @@
  */
 $messages['en'] = array(
 	'clicktracking' => 'Usability Initiative click tracking',
-	'clicktracking-desc' => 'Click tracking, intended for tracking events that do not cause a page refresh',
-	'clicktracking-title' => 'Aggregated user clicks'
+	'clicktracking-desc' => 'Click tracking for tracking events that do not cause a page refresh',
+	'clicktracking-title' => 'Aggregated user clicks',
+	'event-name' => 'Event name',
+	'expert-header' => '"Expert" clicks',
+	'intermediate-header' => '"Intermediate" clicks',
+	'beginner-header' => '"Beginner" clicks',
+	'total-header' => 'Total clicks',
+	'start-date' => 'Start Date (YYYYMMDD)', 
+	'end-date' => 'End Date (YYYYMMDD)',
+	'increment-by' =>'Number of days each data point represents', 
+	'change-graph' =>'Change graph',
+	'beginner' => 'Beginner',
+	'intermediate' => 'Intermediate',
+	'expert' => 'Expert',
 );
 
 /** Message documentation (Message documentation)
@@ -22,16 +34,60 @@
  */
 $messages['qqq'] = array(
 	'clicktracking-desc' => '{{desc}}',
+	'expert-header' => '"Expert" is a user-definable category, these will show the number of clicks that fall into that category',
+	'intermediate-header' => '"Intermediate" is a user-definable category, these will show the number of clicks that fall into that category',
+	'beginner-header' => '"Beginner" is a user-definable category, these will show the number of clicks that fall into that category',
+	'total-header' => 'total',
+	'start-date' => 'YYYYMMDD refers to the date format (4-digit year, 2-digit month, 2-digit day)
+
+{{Identical|Start date}}',
+	'end-date' => 'YYYYMMDD  refers to the date format (4-digit year, 2-digit month, 2-digit day)
+
+{{Identical|End date}}',
+	'beginner' => 'label for a user at beginner skill level',
+	'intermediate' => 'label for a user at intermediate skill level',
+	'expert' => 'label for a user at expert skill level',
 );
 
+/** Afrikaans (Afrikaans)
+ * @author Naudefj
+ */
+$messages['af'] = array(
+	'start-date' => 'Begindatum (JJJJMMDD)',
+	'end-date' => 'Einddatum (JJJJMMDD)',
+);
+
+/** Arabic (العربية)
+ * @author Meno25
+ */
+$messages['ar'] = array(
+	'event-name' => 'اسم الحدث',
+	'beginner' => 'مبتدئ',
+	'intermediate' => 'متوسط',
+	'expert' => 'خبير',
+);
+
 /** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
  * @author EugeneZelenko
+ * @author Jim-by
  * @author Red Winged Duck
  */
 $messages['be-tarask'] = array(
 	'clicktracking' => 'Сачэньне за націскамі кампутарнай мышшу Ñž межах ініцыятывы Ð¿Ð° паляпшэньні зручнасьці Ñ– прастаты Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑÑ‚аньня',
 	'clicktracking-desc' => 'Сачэньне за націскамі кампутарнай мышшу, прызначанае для сачэньня за здарэньнямі, якія не вядуць да абнаўленьня старонкі',
 	'clicktracking-title' => 'Групаваныя націскі кнопак мышы ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–кам',
+	'event-name' => 'Назва падзеі',
+	'expert-header' => 'Націскі мышшу для «Экспэрта»',
+	'intermediate-header' => 'Націскі мышшу для «Сярэдняга»',
+	'beginner-header' => 'Націскі мышшу для «Пачынаючага»',
+	'total-header' => 'Усяго націскаў мышшу',
+	'start-date' => 'Дата пачатку (ГГГГММДзДз)',
+	'end-date' => 'Дата сканчэньня (ГГГГММДзДз)',
+	'increment-by' => 'Колькасьць дзён, якія адлюстроўваюцца ў кожным пункце зьвестак',
+	'change-graph' => 'Зьмяніць графік',
+	'beginner' => 'Пачынаючы',
+	'intermediate' => 'Сярэдні',
+	'expert' => 'Экспэрт',
 );
 
 /** Breton (Brezhoneg)
@@ -50,6 +106,18 @@
 	'clicktracking' => 'Praćenje klikova u Inicijativi upotrebljivosti',
 	'clicktracking-desc' => 'Praćenje klikova, napravljeno za praćenje događaja koji ne proizvode osvježavanje stanice',
 	'clicktracking-title' => 'Sveukupni klikovi korisnika',
+	'event-name' => 'Naziv događaja',
+	'expert-header' => "''Stručnjački'' klikovi",
+	'intermediate-header' => "''Napredni'' klikovi",
+	'beginner-header' => "''Početnički'' klikovi",
+	'total-header' => 'Ukupno klikova',
+	'start-date' => 'Početni datum (YYYYMMDD)',
+	'end-date' => 'Završni datum (YYYYMMDD)',
+	'increment-by' => 'Broj dana koje svaka tačka podataka predstavlja',
+	'change-graph' => 'Promijeni grafikon',
+	'beginner' => 'Početnik',
+	'intermediate' => 'Napredni',
+	'expert' => 'Stručnjak',
 );
 
 /** Czech (ÄŒesky)
@@ -59,6 +127,18 @@
 	'clicktracking' => 'Sledování kliknutí pro Iniciativu použitelnosti',
 	'clicktracking-desc' => 'Sledování kliknutí pro sledování událostí, které nezpůsobují znovunačtení stránky',
 	'clicktracking-title' => 'Souhrn klikání uživatelů',
+	'event-name' => 'Název události',
+	'expert-header' => 'Kliknutí „expertů“',
+	'intermediate-header' => 'Kliknutí „pokročilých“',
+	'beginner-header' => 'Kliknutí „začátečníků“',
+	'total-header' => 'Celkem kliknutí',
+	'start-date' => 'Datum začátku (RRRRMMDD)',
+	'end-date' => 'Datum konce (RRRRMMDD)',
+	'increment-by' => 'Počet dní reprezentovaných každým bodem',
+	'change-graph' => 'Změnit graf',
+	'beginner' => 'Začátečník',
+	'intermediate' => 'Pokročilý',
+	'expert' => 'Expert',
 );
 
 /** German (Deutsch)
@@ -68,6 +148,17 @@
 	'clicktracking' => 'Benutzerfreundlichkeitsinitiative Klickverfolgung',
 	'clicktracking-desc' => 'Klickverfolgung, gedacht für die Aufzeichnung von Aktionen, die nicht zu einer Seitenaktualisierung führen',
 	'clicktracking-title' => 'Erzeugte Benutzerklicks',
+	'event-name' => 'Ereignisname',
+	'expert-header' => 'Expertenklicks',
+	'intermediate-header' => 'Klicks von Mittleren',
+	'beginner-header' => 'Anfängerklicks',
+	'total-header' => 'Gesamtklicks',
+	'start-date' => 'Start (JJJJMMTT)',
+	'end-date' => 'Ende (JJJJMMTT)',
+	'change-graph' => 'Grafik ändern',
+	'beginner' => 'Anfänger',
+	'intermediate' => 'Mittlere',
+	'expert' => 'Experte',
 );
 
 /** Lower Sorbian (Dolnoserbski)
@@ -77,9 +168,22 @@
 	'clicktracking' => 'Kliknjeńske pśeslědowanje iniciatiwy wužywajobnosći',
 	'clicktracking-desc' => 'Kliknjeńske pśeslědowanje, myslone za slědowanje tšojenjow, kótarež njezawinuju aktualizaciju boka',
 	'clicktracking-title' => 'Nakopjone wužywarske kliknjenja',
+	'event-name' => 'Mě tšojenja',
+	'expert-header' => 'Kliknjenja "ekspertow"',
+	'intermediate-header' => 'Kliknjenja "pókšacanych"',
+	'beginner-header' => 'Kliknjenja "zachopjeńkarjow"',
+	'total-header' => 'Kliknjenja dogromady',
+	'start-date' => 'Zachopny datum (YYYYMMDD)',
+	'end-date' => 'Kóńcny datum (YYYYMMDD)',
+	'increment-by' => 'Licba dnjow, kótaruž kuždy datowy dypk reprezentěrujo',
+	'change-graph' => 'Grafisku liniju změniś',
+	'beginner' => 'Zachopjeńkaŕ',
+	'intermediate' => 'Pókšacony',
+	'expert' => 'Ekspert',
 );
 
 /** Greek (Ελληνικά)
+ * @author Crazymadlover
  * @author Omnipaedista
  * @author ZaDiak
  */
@@ -87,6 +191,17 @@
 	'clicktracking' => 'Πατήστε παρακολούθηση της Πρωτοβουλίας Χρηστικότητας',
 	'clicktracking-desc' => 'Πατήστε παρακολούθηση, προορίζεται για την παρακολούθηση εκδηλώσεων που δεν προκαλούν ανανέωση σελίδας',
 	'clicktracking-title' => 'Συναθροισμένα κλικ χρήστη',
+	'event-name' => 'Όνομα γεγονότος',
+	'expert-header' => 'Κλικ "ειδικοί"',
+	'intermediate-header' => 'Κλικ "μέτριοι"',
+	'beginner-header' => 'Κλικ "αρχάριοι"',
+	'total-header' => 'Συνολικά κλικ',
+	'start-date' => 'Ημερομηνία έναρξης (ΕΕΕΕΜΜΗΗ)',
+	'end-date' => 'Ημερομηνία λήξης (ΕΕΕΕΜΜΗΗ)',
+	'change-graph' => 'Αλλαγή γραφήματος',
+	'beginner' => 'Αρχάριος',
+	'intermediate' => 'Μέτριος',
+	'expert' => 'Ειδικός',
 );
 
 /** Esperanto (Esperanto)
@@ -94,15 +209,43 @@
  */
 $messages['eo'] = array(
 	'clicktracking-desc' => 'Sekvado de klakoj, por sekvi klakeventojn kiu ne kaŭzas paĝan refreŝigon',
+	'event-name' => 'Eventa nomo',
+	'expert-header' => 'Klakoj de "Spertuloj"',
+	'intermediate-header' => 'Klakoj de "progresantoj"',
+	'beginner-header' => 'Klakoj de "novuloj"',
+	'start-date' => 'Komenca Dato (JJJJMMTT)',
+	'end-date' => 'Fina Dato (JJJJMMTT)',
+	'beginner' => 'Novulo',
+	'intermediate' => 'Progresanto',
+	'expert' => 'Spertulo',
 );
 
 /** Spanish (Español)
  * @author Antur
+ * @author Crazymadlover
  */
 $messages['es'] = array(
 	'clicktracking-title' => 'Clicks de usuario agregados',
+	'total-header' => 'Clicks totales',
+	'start-date' => 'Fecha de inicio (AAMMDD)',
+	'end-date' => 'Fecha de fin (AAMMDD)',
+	'beginner' => 'Principiante',
+	'intermediate' => 'Intemedio',
+	'expert' => 'Experto',
 );
 
+/** Basque (Euskara)
+ * @author An13sa
+ */
+$messages['eu'] = array(
+	'start-date' => 'Hasiera Data (UUUUHHEE)',
+	'end-date' => 'Amaiera Data (UUUUHHEE)',
+	'change-graph' => 'Grafikoa aldatu',
+	'beginner' => 'Hasiberria',
+	'intermediate' => 'Maila ertainekoa',
+	'expert' => 'Aditua',
+);
+
 /** Finnish (Suomi)
  * @author Str4nd
  */
@@ -112,12 +255,25 @@
 );
 
 /** French (Français)
+ * @author McDutchie
  * @author PieRRoMaN
  */
 $messages['fr'] = array(
 	'clicktracking' => "Suivi de clics de l'initiative d'utilisabilité",
 	'clicktracking-desc' => 'Suivi de clics, visant à traquer les événements qui ne causent pas un rechargement de page',
 	'clicktracking-title' => "Agrégation des clics d'utilisateurs",
+	'event-name' => "Nom de l'événement",
+	'expert-header' => 'Clics « experts »',
+	'intermediate-header' => 'Clics « intermédiaires »',
+	'beginner-header' => 'Clics « débutants »',
+	'total-header' => 'Total des clics',
+	'start-date' => 'Date de début (AAAAMMJJ)',
+	'end-date' => 'Date de fin (AAAAMMJJ)',
+	'increment-by' => 'Nombre de jours que représente chaque point de donnée',
+	'change-graph' => 'Changer le graphe',
+	'beginner' => 'Débutant',
+	'intermediate' => 'Intermédiaire',
+	'expert' => 'Expert',
 );
 
 /** Galician (Galego)
@@ -127,6 +283,18 @@
 	'clicktracking' => 'Seguimento dos clics da Iniciativa de usabilidade',
 	'clicktracking-desc' => 'Seguimento dos clics, co obxectivo de seguir os acontecementos que non causan unha actualización da páxina',
 	'clicktracking-title' => 'Clics de usuario engadidos',
+	'event-name' => 'Nome do evento',
+	'expert-header' => 'Clics "expertos"',
+	'intermediate-header' => 'Clics "intermedios"',
+	'beginner-header' => 'Clics "principiantes"',
+	'total-header' => 'Total de clics',
+	'start-date' => 'Data de inicio (AAAAMMDD)',
+	'end-date' => 'Data de fin (AAAAMMDD)',
+	'increment-by' => 'Número de días que representa cada punto de datos',
+	'change-graph' => 'Gráfica de cambio',
+	'beginner' => 'Principiante',
+	'intermediate' => 'Intermedio',
+	'expert' => 'Experto',
 );
 
 /** Swiss German (Alemannisch)
@@ -136,8 +304,41 @@
 	'clicktracking' => 'D Klickverfolgig vu dr Benutzerfrejndligkeits-Initiative',
 	'clicktracking-desc' => 'Klickverfolgig, fir Aktione, wu kei Syteaktualisierig verursache',
 	'clicktracking-title' => 'Zämmegfassti Benutzerklicks',
+	'event-name' => 'Ereignis',
+	'expert-header' => '„Experte“-Klicks',
+	'intermediate-header' => 'Klicks vu „Mittlere“',
+	'beginner-header' => '„Aafänger“-Klicks',
+	'total-header' => 'Klicks insgsamt',
+	'start-date' => 'Startdatum (JJJJMMTT)',
+	'end-date' => 'Änddatum (JJJJMMTT)',
+	'increment-by' => 'Aazahl vu Täg, wu ne jede Punkt derfir stoht',
+	'change-graph' => 'Abbildig ändere',
+	'beginner' => 'Aafänger',
+	'intermediate' => 'Mittlere',
+	'expert' => 'Expert',
 );
 
+/** Hebrew (עברית)
+ * @author Rotem Liss
+ */
+$messages['he'] = array(
+	'clicktracking' => 'מעקב לחיצות במיזם השימושיות',
+	'clicktracking-desc' => 'מעקב לחיצות עבור בדיקת אירועים ×©××™× × גורמים ×œ×¨×¢× ×•×Ÿ דף',
+	'clicktracking-title' => 'לחיצות משתמשים מצטברות',
+	'event-name' => 'שם האירוע',
+	'expert-header' => 'לחיצות של "מומחים"',
+	'intermediate-header' => 'לחיצות של "×‘×™× ×•× ×™×™×"',
+	'beginner-header' => 'לחיצות של "מתחילים"',
+	'total-header' => 'סך כל הלחיצות',
+	'start-date' => 'תאריך התחלה (YYYYMMDD)', 
+	'end-date' => 'תאריך סיום (YYYYMMDD)',
+	'increment-by' =>'מספר הימים שמייצגת כל × ×§×•×“×ª מידע', 
+	'change-graph' =>'×©×™× ×•×™ הגרף',
+	'beginner' => 'מתחיל',
+	'intermediate' => '×‘×™× ×•× ×™',
+	'expert' => 'מומחה',
+);
+
 /** Croatian (Hrvatski)
  * @author Suradnik13
  */
@@ -153,14 +354,32 @@
 	'clicktracking' => 'Kliknjenske přesćěhanje iniciatiwy wužiwajomnosće',
 	'clicktracking-desc' => 'Kliknjenske přesćěhanje, myslene za přesćěhowanje podawkow, kotrež aktualizaciju strony njezawinuja',
 	'clicktracking-title' => 'Nahromadźene wužiwarske kliknjenja',
+	'event-name' => 'Mjenp podawka',
+	'expert-header' => 'Kliknjenja "ekspertow"',
+	'intermediate-header' => 'Kliknjenja "pokročenych"',
+	'beginner-header' => 'Kliknjenja "započatkarjow"',
+	'total-header' => 'Kliknjenja dohromady',
+	'start-date' => 'Spočatny datum (YYYYMMDD)',
+	'end-date' => 'Kónčny datum (YYYYMMDD)',
+	'increment-by' => 'Ličba dnjow, kotruž kóždy datowy dypk reprezentuje',
+	'change-graph' => 'Grafisku liniju změnić',
+	'beginner' => 'Započatkar',
+	'intermediate' => 'Pokročeny',
+	'expert' => 'Ekspert',
 );
 
 /** Hungarian (Magyar)
  * @author Dani
+ * @author Glanthor Reviol
  */
 $messages['hu'] = array(
 	'clicktracking' => 'Usability Initiative kattintásszámláló',
 	'clicktracking-desc' => 'Kattintásszámláló, az olyan események rögzítésére, melyekhez nem szükséges a lap frissítése',
+	'clicktracking-title' => 'A szerkesztők kattintásainak összesítése',
+	'event-name' => 'Esemény neve',
+	'total-header' => 'Összes kattintás',
+	'start-date' => 'Kezdődátum (ÉÉÉÉHHNN)',
+	'end-date' => 'Végdátum (ÉÉÉÉHHNN)',
 );
 
 /** Interlingua (Interlingua)
@@ -170,6 +389,18 @@
 	'clicktracking' => 'Traciamento de clics del Initiativa de Usabilitate',
 	'clicktracking-desc' => 'Traciamento de clics, pro traciar eventos que non causa un recargamento de pagina',
 	'clicktracking-title' => 'Clics aggregate de usatores',
+	'event-name' => 'Nomine del evento',
+	'expert-header' => 'Clics "experte"',
+	'intermediate-header' => 'Clics "intermedie"',
+	'beginner-header' => 'Clics "comenciante"',
+	'total-header' => 'Total de clics',
+	'start-date' => 'Data de initio (AAAAMMDD)',
+	'end-date' => 'Data de fin (AAAAMMDD)',
+	'increment-by' => 'Numero de dies representate per cata puncto de datos',
+	'change-graph' => 'Cambiar graphico',
+	'beginner' => 'Comenciante',
+	'intermediate' => 'Intermedie',
+	'expert' => 'Experte',
 );
 
 /** Indonesian (Bahasa Indonesia)
@@ -190,6 +421,18 @@
 	'clicktracking' => 'Usability Initiative クリック追跡',
 	'clicktracking-desc' => 'クリック追跡:ページの再描画を引き起こさないイベントを追跡記録する機能',
 	'clicktracking-title' => '利用者によるクリックの総計',
+	'event-name' => 'イベント名',
+	'expert-header' => '「上級者」のクリック数',
+	'intermediate-header' => '「中級者」のクリック数',
+	'beginner-header' => '「初級者」のクリック数',
+	'total-header' => 'クリック回数合計',
+	'start-date' => '開始日 (YYYYMMDD)',
+	'end-date' => '終了日 (YYYYMMDD)',
+	'increment-by' => '各データ点が表す日数',
+	'change-graph' => 'グラフ変更',
+	'beginner' => '初級者',
+	'intermediate' => '中級者',
+	'expert' => '上級者',
 );
 
 /** Ripoarisch (Ripoarisch)
@@ -199,6 +442,18 @@
 	'clicktracking' => 'Dä <i lang="en">Wikipedia Usability Initiative</i> ier Kleckverfolljung',
 	'clicktracking-desc' => 'Klecks un Akßuhne Verfollje, di kein neu Sigg afroofe donn.',
 	'clicktracking-title' => 'Jesammte Klecks',
+	'event-name' => 'Da Name vun dämm, wat passeet es',
+	'expert-header' => 'Klecks vun „{{int:Expert}}“',
+	'intermediate-header' => 'Klecks vun „{{int:Intermediate}}“',
+	'beginner-header' => 'Klecks vun „{{int:Beginner}}e“',
+	'total-header' => 'Jesampzahl aan Kleks',
+	'start-date' => 'Et Dattum vum Aanfang (en dä Forrem: JJJJMMDD)',
+	'end-date' => 'Et Dattum vum Engk (en dä Forrem: JJJJMMDD)',
+	'increment-by' => 'De Aanzahl Dääsch, woh jede Pungk em Diajramm daashtälle sull',
+	'change-graph' => 'Dat Diajramm ändere',
+	'beginner' => 'Aanfänger udder Neuling',
+	'intermediate' => 'Meddel',
+	'expert' => 'Mer kännt sesch uß',
 );
 
 /** Luxembourgish (Lëtzebuergesch)
@@ -206,8 +461,20 @@
  */
 $messages['lb'] = array(
 	'clicktracking' => 'Benotzerfrëndlechkeetsinitiative Suivi vun de Klicken',
-	'clicktracking-desc' => "Suivi vun de Clicken, fir déi Aktiounen z'erfaassen déi net zu engem neie Llueden vun der Säit féieren",
+	'clicktracking-desc' => "Suivi vun de Klicken, fir déi Aktiounen z'erfaassen déi net zu engem neie Luede vun der Säit féieren",
 	'clicktracking-title' => 'Vun de Benotzer gemaachte Klicken',
+	'event-name' => 'Numm vum Evenement',
+	'expert-header' => '"Expert"-Klicken',
+	'intermediate-header' => '"Duerschnëtt"-Klicken',
+	'beginner-header' => '"Ufänker"-Klicken',
+	'total-header' => 'Total vun de Klicken',
+	'start-date' => 'Ufanksdatum (YYYYMMDD)',
+	'end-date' => 'Schlussdatum (YYYYMMDD)',
+	'increment-by' => 'Zuel vun Deeg déi vun all Datepunkt duergestallt ginn',
+	'change-graph' => 'Ännerungs-Grafik',
+	'beginner' => 'Ufänger',
+	'intermediate' => 'Dertëschent',
+	'expert' => 'Expert',
 );
 
 /** Macedonian (Македонски)
@@ -233,6 +500,18 @@
 	'clicktracking' => 'Klikvolgen voor het Bruikbaarheidsinitiatief',
 	'clicktracking-desc' => 'Klikvolgen voor het volgens van handelingen die niet het oproepen van een nieuwe pagina tot gevolg hebben',
 	'clicktracking-title' => 'Samengevoegde gebruikerskliks',
+	'event-name' => 'Gebeurtenis',
+	'expert-header' => '"Expert"-kliks',
+	'intermediate-header' => '"Gemiddeld"-kliks',
+	'beginner-header' => '"Beginner"-kliks',
+	'total-header' => 'Kliktotaal',
+	'start-date' => 'Startdatum (JJJJMMDD)',
+	'end-date' => 'Einddatum (JJJJMMDD)',
+	'increment-by' => 'Aantal dagen dat ieder punt representeert',
+	'change-graph' => 'Grafiek wijzigen',
+	'beginner' => 'Beginner',
+	'intermediate' => 'Gemiddeld',
+	'expert' => 'Expert',
 );
 
 /** Occitan (Occitan)
@@ -241,6 +520,19 @@
 $messages['oc'] = array(
 	'clicktracking' => "Seguit de clics de l'iniciativa d'utilizabilitat",
 	'clicktracking-desc' => 'Seguit de clics, visant a tracar los eveniments que causan pas un recargament de pagina',
+	'clicktracking-title' => "Agregacion dels clics d'utilizaires",
+	'event-name' => "Nom de l'eveniment",
+	'expert-header' => 'Clics « expèrts »',
+	'intermediate-header' => 'Clics « intermediaris »',
+	'beginner-header' => 'Clics « debutants »',
+	'total-header' => 'Total dels clics',
+	'start-date' => 'Data de començament (AAAAMMJJ)',
+	'end-date' => 'Data de fin (AAAAMMJJ)',
+	'increment-by' => 'Nombre de jorns que representa cada punt de donada',
+	'change-graph' => 'Graf de cambi',
+	'beginner' => 'Debutant',
+	'intermediate' => 'Intermediari',
+	'expert' => 'Expèrt',
 );
 
 /** Polish (Polski)
@@ -250,6 +542,17 @@
 	'clicktracking' => 'Śledzenie kliknięć dla inicjatywy użyteczności',
 	'clicktracking-desc' => 'Śledzenie kliknięć, przeznaczone do poszukiwania zdarzeń, które nie powodują odświeżenia strony',
 	'clicktracking-title' => 'Suma kliknięć użytkowników',
+	'event-name' => 'Nazwa zdarzenia',
+	'expert-header' => 'Kliknięcia „specjalistów”',
+	'intermediate-header' => 'Kliknięcia „zaawansowanych”',
+	'beginner-header' => 'Kliknięcia „nowicjuszy”',
+	'total-header' => 'Wszystkich kliknięć',
+	'start-date' => 'Data rozpoczęcia (RRRRMMDD)',
+	'end-date' => 'Data zakończenia (RRRRMMDD)',
+	'change-graph' => 'Wykres zmian',
+	'beginner' => 'Nowicjusz',
+	'intermediate' => 'Zaawansowany',
+	'expert' => 'Specjalista',
 );
 
 /** Piedmontese (Piemontèis)
@@ -259,8 +562,30 @@
 	'clicktracking' => "Trassadura dij click ëd l'Usability Initiative",
 	'clicktracking-desc' => "Trassadura dij click, për trassé dj'event cha a causo pa ël refresh ëd na pà gina",
 	'clicktracking-title' => "Click agregà dl'utent",
+	'event-name' => "Nòm ëd l'event",
+	'expert-header' => 'Click d\'"Espert"',
+	'intermediate-header' => 'Click dj\'"antërmedi"',
+	'beginner-header' => 'Click ëd "prinsipiant"',
+	'total-header' => 'Click totaj',
+	'start-date' => 'Data ëd partensa (AAAAMMDD)',
+	'end-date' => 'Data ëd fin (AAAAMMDD)',
+	'increment-by' => 'Nùmer ëd di che minca pont a arpresenta',
+	'change-graph' => 'Cambia ël graf',
+	'beginner' => 'Prinsipiant',
+	'intermediate' => 'Antërmedi',
+	'expert' => 'Espert',
 );
 
+/** Portuguese (Português)
+ * @author Giro720
+ */
+$messages['pt'] = array(
+	'change-graph' => 'Mudar gráfico',
+	'beginner' => 'Iniciante',
+	'intermediate' => 'Intermediário',
+	'expert' => 'Experiente',
+);
+
 /** Brazilian Portuguese (Português do Brasil)
  * @author Eduardo.mps
  */
@@ -270,6 +595,7 @@
 );
 
 /** Russian (Русский)
+ * @author HalanTul
  * @author Kv75
  * @author Александр Сигачёв
  */
@@ -277,14 +603,38 @@
 	'clicktracking' => 'Отслеживание нажатий в рамках Инициативы ÑŽÐ·Ð°Ð±Ð¸Ð»Ð¸Ñ‚и',
 	'clicktracking-desc' => 'Отслеживание нажатий. Предназначается для отслеживания событий, не приводящих к обновлению страницы',
 	'clicktracking-title' => 'Собранные щелчки участников',
+	'event-name' => 'Название события',
+	'expert-header' => 'Нажатия «экспертов»',
+	'intermediate-header' => 'Нажатия «средних участников»',
+	'beginner-header' => 'Нажатия «новичков»',
+	'total-header' => 'Всего нажатий',
+	'start-date' => 'Дата начала (ГГГГММДД)',
+	'end-date' => 'Дата окончания (ГГГГММДД)',
+	'increment-by' => 'Количество дней, которое представляет каждая точка данных',
+	'change-graph' => 'Изменить график',
+	'beginner' => 'Новичок',
+	'intermediate' => 'Средний участник',
+	'expert' => 'Эксперт',
 );
 
 /** Yakut (Саха тыла)
  * @author HalanTul
  */
 $messages['sah'] = array(
+	'clicktracking' => 'Баттааһыннары Ð¢Ð°Ð±Ñ‹Ð³Ð°Ñ Ситиһиитин иһинэн кэтээһин',
 	'clicktracking-desc' => 'Баттааһыны ÐºÑÑ‚ээһин. Сирэйи саҥардыбат түбэлтэлэри кэтииргэ туттуллар',
 	'clicktracking-title' => 'Кыттааччылар баттааһыннарын хомуура',
+	'event-name' => 'Түбэлтэ аата',
+	'expert-header' => '"Экспертар" баттааһыннара (клик)',
+	'intermediate-header' => '"Орто кыттааччылар" баттааһыннара (клик)',
+	'beginner-header' => '"Саҕалааччылар" баттааһыннара (клик)',
+	'total-header' => 'Баттааһын барытын ахсаана',
+	'start-date' => 'Саҕаламмыт күнэ-ыйа (ССССЫЫКК)',
+	'end-date' => 'Бүппүт күнэ-дьыла (ССССЫЫКК)',
+	'change-graph' => 'Графигы ÑƒÐ»Ð°Ñ€Ñ‹Ñ‚Ñ‹Ñ‹',
+	'beginner' => 'Саҥа кыттааччы',
+	'intermediate' => 'Бороохтуйбут кыттааччы',
+	'expert' => 'Эксперт',
 );
 
 /** Slovak (Slovenčina)
@@ -294,6 +644,18 @@
 	'clicktracking' => 'Sledovanie kliknutí pre Iniciatívu použiteľnosti',
 	'clicktracking-desc' => 'Sledovanie kliknutí, na sledovanie udalostí, ktoré nespôsobujú opätovné načítanie stránky',
 	'clicktracking-title' => 'Agregované kliknutia používateľa',
+	'event-name' => 'Názov udalosti',
+	'expert-header' => 'Kliknutia „expertov“',
+	'intermediate-header' => 'Kliknutia „pokročilých“',
+	'beginner-header' => 'Kliknutia „začiatočníkov“',
+	'total-header' => 'Kliknutí celkom',
+	'start-date' => 'Dátum začiatku (YYYYMMDD)',
+	'end-date' => 'Dátum konca (YYYYMMDD)',
+	'increment-by' => 'Počet dní, ktorý predstavuje každý z bodov v dátach',
+	'change-graph' => 'Zmeniť graf',
+	'beginner' => 'Začiatočník',
+	'intermediate' => 'Pokročilý',
+	'expert' => 'Expert',
 );
 
 /** Slovenian (Slovenščina)
@@ -311,6 +673,18 @@
 	'clicktracking' => 'Kullanılabilirlik Girişimi tıklama izleme',
 	'clicktracking-desc' => 'Tıklama izleme, bir sayfa yenilemesine sebep olmadan olayları izleme amaçlı',
 	'clicktracking-title' => 'Toplu kullanıcı tıklamaları',
+	'event-name' => 'Olay adı',
+	'expert-header' => '"Deneyimli" tıklamaları',
+	'intermediate-header' => '"Orta düzeyde" tıklamaları',
+	'beginner-header' => '"Acemi" tıklamaları',
+	'total-header' => 'Toplam tıklama',
+	'start-date' => 'Başlangıç Tarihi (YYYYAAGG)',
+	'end-date' => 'BitiÅŸ tarihi (YYYYAAGG)',
+	'increment-by' => 'Her veri noktasının temsil ettiği gün sayısı',
+	'change-graph' => 'GrafiÄŸi deÄŸiÅŸtir',
+	'beginner' => 'Acemi',
+	'intermediate' => 'Orta düzeyde',
+	'expert' => 'Deneyimli',
 );
 
 /** Vèneto (Vèneto)
@@ -320,8 +694,27 @@
 	'clicktracking' => "Traciamento click de l'Inissiativa par l'Usabilità ",
 	'clicktracking-desc' => 'Traciamento dei click, par traciare i eventi che no provoca mia un refresh de la pagina.',
 	'clicktracking-title' => 'Agregassion dei clic dei utenti',
+	'event-name' => "Nome de l'evento",
+	'expert-header' => 'Clic de "esperti"',
+	'intermediate-header' => 'Clic de "intermedi"',
+	'beginner-header' => 'Clic de "prinsipianti"',
+	'total-header' => 'Clic totali',
+	'start-date' => 'Data de inissio (AAAAMMGG)',
+	'end-date' => 'Data de fine(AAAAMMGG)',
+	'change-graph' => 'Canbiar el grà fico',
+	'beginner' => 'Prinsipiante',
+	'intermediate' => 'Intermedio',
+	'expert' => 'Esperto',
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'beginner' => 'Augotai',
+	'expert' => 'Ekspert',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Vinhtantran
  */
@@ -329,6 +722,18 @@
 	'clicktracking' => 'Theo dõi nhấn chuột Sáng kiến Khả dụng',
 	'clicktracking-desc' => 'Theo dõi hà nh vi nhấn chuột, dùng để theo dõi các hoạt động không là m tươi trang',
 	'clicktracking-title' => 'Tổng số nhấn chuột của thà nh viên',
+	'event-name' => 'Tên sự kiện',
+	'expert-header' => 'Cú nhấn "chuyên gia"',
+	'intermediate-header' => 'Cú nhấn "trung bình"',
+	'beginner-header' => 'Cú nhấn "người mới"',
+	'total-header' => 'Tổng số lần nhấn',
+	'start-date' => 'Ngà y bắt đầu (YYYYMMDD)',
+	'end-date' => 'Ngà y kết thúc (YYYYMMDD)',
+	'increment-by' => 'Số ngà y mà mỗi điểm dữ liệu thể hiện',
+	'change-graph' => 'Đồ thị thay đổi',
+	'beginner' => 'Người mới',
+	'intermediate' => 'Trung bình',
+	'expert' => 'Chuyên gia',
 );
 
 /** Yue (粵語)
Index: ClickTracking/ClickTracking.php
===================================================================
--- ClickTracking/ClickTracking.php	(revision 56989)
+++ ClickTracking/ClickTracking.php	(working copy)
@@ -23,6 +23,7 @@
 
 // click throttle, should be seen as "1 out of every $wgClickTrackThrottle users will have it enabled"
 // setting this to 1 means all users will have it enabled
+// setting to a negative number will disable it for all users
 $wgClickTrackThrottle = 1;
 
 // set the time window for what we consider 'recent' contributions, in days
@@ -48,21 +49,20 @@
 $wgAutoloadClasses['ClickTrackingHooks'] = $dir . 'ClickTracking.hooks.php';
 $wgAutoloadClasses['ApiClickTracking'] = $dir . 'ApiClickTracking.php';
 $wgAutoloadClasses['SpecialClickTracking'] = $dir . 'SpecialClickTracking.php';
+$wgAutoloadClasses['ApiSpecialClickTracking'] = $dir .'ApiSpecialClickTracking.php';
 
-
 // Hooked functions
 $wgHooks['LoadExtensionSchemaUpdates'][] = 'ClickTrackingHooks::schema';
-$wgHooks['ArticleSaveComplete'][] = 'ClickTrackingHooks::storeNewContrib';
 $wgHooks['EditPage::showEditForm:initial'][] = 'ClickTrackingHooks::addJS';
 
 // Set up the new API module
 $wgAPIModules['clicktracking'] = 'ApiClickTracking';
+$wgAPIModules['specialclicktracking'] = 'ApiSpecialClickTracking';
 
 //Special page setup
 $wgSpecialPages['ClickTracking'] = 'SpecialClickTracking';
+$wgSpecialPageGroups['ClickTracking'] = 'admin';
 
-
-
 // Adds Internationalized Messages
 $wgExtensionMessagesFiles['ClickTracking'] = $dir . 'ClickTracking.i18n.php';
 $wgExtensionAliasesFiles['ClickTracking'] = $dir . 'ClickTracking.alias.php';
\ No newline at end of file
Index: PrefStats/PrefStats.i18n.php
===================================================================
--- PrefStats/PrefStats.i18n.php	(revision 56989)
+++ PrefStats/PrefStats.i18n.php	(working copy)
@@ -43,8 +43,10 @@
 /** Message documentation (Message documentation)
  * @author Purodha
  * @author Siebrand
+ * @author Umherirrender
  */
 $messages['qqq'] = array(
+	'prefstats-desc' => '{{desc}}',
 	'prefstats-factors' => '$1 is a list of values with a link each, and separated by {{msg-mw|pipe-separator}}.',
 	'prefstats-factor-hour' => 'One hour. Used in {{msg-mw|prefstats-factors}} as part of the pipe separated list $1.',
 	'prefstats-factor-day' => 'One day. Used in {{msg-mw|prefstats-factors}} as part of the pipe separated list $1.',
@@ -272,6 +274,16 @@
 	'prefstats-factor-day' => 'дьнь',
 );
 
+/** Welsh (Cymraeg)
+ * @author Lloffiwr
+ */
+$messages['cy'] = array(
+	'prefstats-factor-hour' => 'awr',
+	'prefstats-factor-sixhours' => 'chwech awr',
+	'prefstats-factor-day' => 'diwrnod',
+	'prefstats-factor-week' => 'wythnos',
+);
+
 /** Danish (Dansk)
  * @author Byrial
  */
@@ -478,13 +490,26 @@
  * @author Pikne
  */
 $messages['et'] = array(
+	'prefstats' => 'Eelistuste arvandmed',
 	'prefstats-desc' => 'Kogub arvandmeid kindlate eelistuste kasutatavuse kohta.',
+	'prefstats-title' => 'Eelistuste arvandmed',
+	'prefstats-list-intro' => 'Parajasti jälgitakse järgmisi eelistusi. Klõpsa ühel, et näha selle arvandmeid.',
+	'prefstats-noprefs' => 'Ühtegi eelistust ei jälgita parajasti.
+Eelistuse jälgimiseks redigeeri muutujat $wgPrefStatsTrackPrefs.',
+	'prefstats-counters' => '* $1 {{PLURAL:$1|kasutaja|kasutajat}} on alates eelistuse jälgimahakust selle eelistuse kasutusele võtnud
+** $2 {{PLURAL:$2|kasutaja kasutab|kasutajat kasutavad}} seda endiselt
+** $3 {{PLURAL:$3|kasutaja|kasutajat}} on sellest loobunud',
 	'prefstats-xaxis' => 'Kestus (tundides)',
+	'prefstats-factors' => 'Astmiku jaotis: $1',
 	'prefstats-factor-hour' => 'tund',
+	'prefstats-factor-sixhours' => 'kuus tundi',
 	'prefstats-factor-day' => 'päev',
 	'prefstats-factor-week' => 'nädal',
 	'prefstats-factor-twoweeks' => 'kaks nädalat',
 	'prefstats-factor-fourweeks' => 'neli nädalat',
+	'prefstats-factor-default' => 'vaikeastmik',
+	'prefstats-legend-out' => 'Loobunud',
+	'prefstats-legend-in' => 'Kasutanud',
 );
 
 /** Basque (Euskara)
@@ -509,6 +534,18 @@
 	'prefstats-legend-in' => 'Bat egin duzu',
 );
 
+/** Persian (فارسی)
+ * @author Mardetanha
+ */
+$messages['fa'] = array(
+	'prefstats-factor-hour' => 'ساعت',
+	'prefstats-factor-sixhours' => 'شش ساعت',
+	'prefstats-factor-day' => 'روز',
+	'prefstats-factor-week' => 'هفته',
+	'prefstats-factor-twoweeks' => 'دو هفته',
+	'prefstats-factor-fourweeks' => 'چهار هفته',
+);
+
 /** Finnish (Suomi)
  * @author Cimon Avaro
  * @author Crt
@@ -683,6 +720,7 @@
 ** {{PLURAL:$3|משתמש אחד ביטל|$3 משתמשים ביטלו}} אותה מאז
 * בסך הכול, ×ª×›×•× ×” זו מופעלת אצל {{PLURAL:$4|משתמש אחד|$4 משתמשים}}',
 	'prefstats-xaxis' => 'משך (בשעות)',
+	'prefstats-factors' => 'צפייה לפי: $1',
 	'prefstats-factor-hour' => 'שעה',
 	'prefstats-factor-sixhours' => 'שש שעות',
 	'prefstats-factor-day' => 'יום',
@@ -690,6 +728,8 @@
 	'prefstats-factor-twoweeks' => 'שבועיים',
 	'prefstats-factor-fourweeks' => 'ארבעה שבועות',
 	'prefstats-factor-default' => 'חזרה למימדי ברירת המחדל',
+	'prefstats-legend-out' => 'ביטול ההעדפה',
+	'prefstats-legend-in' => 'הפעלת ההעדפה',
 );
 
 /** Croatian (Hrvatski)
@@ -1174,6 +1214,7 @@
 );
 
 /** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+ * @author Gunnernett
  * @author Harald Khan
  */
 $messages['nn'] = array(
@@ -1182,6 +1223,13 @@
 	'prefstats-title' => 'Statistikk over innstillingar',
 	'prefstats-list-intro' => 'For tida vert dei fylgjande innstillingane spora.
 Trykk på éi for å sjå statistikk for ho.',
+	'prefstats-xaxis' => 'Tid i timar',
+	'prefstats-factor-hour' => 'time',
+	'prefstats-factor-sixhours' => 'seks timar',
+	'prefstats-factor-day' => 'dag',
+	'prefstats-factor-week' => 'veke',
+	'prefstats-factor-twoweeks' => 'to veker',
+	'prefstats-factor-fourweeks' => 'fire veker',
 );
 
 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
@@ -1276,6 +1324,18 @@
 	'prefstats-legend-in' => 'KorzystajÄ…',
 );
 
+/** Pashto (پښتو)
+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
+ */
+$messages['ps'] = array(
+	'prefstats-factor-hour' => 'ساعت',
+	'prefstats-factor-sixhours' => 'شپږ ساعته',
+	'prefstats-factor-day' => 'ورځ',
+	'prefstats-factor-week' => 'اونۍ',
+	'prefstats-factor-twoweeks' => 'دوه اونۍ',
+	'prefstats-factor-fourweeks' => 'څلور اونۍ',
+);
+
 /** Portuguese (Português)
  * @author Giro720
  * @author Malafaya
@@ -1396,8 +1456,8 @@
 	'prefstats-factor-twoweeks' => 'две недели',
 	'prefstats-factor-fourweeks' => 'четыре недели',
 	'prefstats-factor-default' => 'назад к масштабу по умолчанию',
-	'prefstats-legend-out' => 'Отключиться',
-	'prefstats-legend-in' => 'Включиться',
+	'prefstats-legend-out' => 'Подключились',
+	'prefstats-legend-in' => 'Подключились',
 );
 
 /** Yakut (Саха тыла)
@@ -1493,6 +1553,19 @@
 	'prefstats-legend-in' => 'Omogočeno',
 );
 
+/** Serbian Cyrillic ekavian (Српски (ћирилица))
+ * @author Sasa Stefanovic
+ */
+$messages['sr-ec'] = array(
+	'prefstats-xaxis' => 'Трајање (сати)',
+	'prefstats-factor-hour' => 'сат',
+	'prefstats-factor-sixhours' => 'шест сати',
+	'prefstats-factor-day' => 'дан',
+	'prefstats-factor-week' => 'недеља',
+	'prefstats-factor-twoweeks' => 'две недеље',
+	'prefstats-factor-fourweeks' => '4 недеље',
+);
+
 /** Swedish (Svenska)
  * @author Fluff
  * @author Ozp
@@ -1641,6 +1714,19 @@
 	'prefstats-factor-default' => 'torna a la scala predefinìa',
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'prefstats-factor-hour' => 'čas',
+	'prefstats-factor-sixhours' => "kuz' časud",
+	'prefstats-factor-day' => 'päiv',
+	'prefstats-factor-week' => "nedal'",
+	'prefstats-factor-twoweeks' => "kaks' nedalid",
+	'prefstats-factor-fourweeks' => "nell' nedalid",
+	'prefstats-factor-default' => 'tagaze masštabannoks augotižjärgendusen mödhe',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Minh Nguyen
  * @author Vinhtantran
Index: EditWarning/EditWarning.i18n.php
===================================================================
--- EditWarning/EditWarning.i18n.php	(revision 56989)
+++ EditWarning/EditWarning.i18n.php	(working copy)
@@ -21,9 +21,11 @@
 
 /** Message documentation (Message documentation)
  * @author McDutchie
+ * @author Umherirrender
  */
 $messages['qqq'] = array(
 	'editwarning' => "This is the name of an extension that warns people when they try to leave an edit form without saving. So it means something like \"warning about (your) edit\", '''not''' \"edit the warning\".",
+	'editwarning-desc' => '{{desc}}',
 );
 
 /** Arabic (العربية)
@@ -47,13 +49,14 @@
 /** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
  * @author EugeneZelenko
  * @author Jim-by
+ * @author Zedlik
  */
 $messages['be-tarask'] = array(
 	'editwarning' => 'Папярэджаньне рэдагаваньня',
 	'editwarning-desc' => 'Паказвае папярэджаньне, калі ўдзельнік спрабуе пакінуць форму рэдагаваньня без захаваньня',
 	'editwarning-warning' => 'Усе зробленыя Вамі зьмены Ð¼Ð¾Ð³ÑƒÑ†ÑŒ быць страчаныя, калі Ð’Ñ‹ Ð¿Ð°ÐºÑ–неце гэтую старонку.
 Ð’Ñ‹ Ð¼Ð¾Ð¶Ð°Ñ†Ðµ адключыць гэтае папярэджаньне у сэкцыі «{{int:prefs-editing}}» Вашых установак.',
-	'editwarning-preference' => 'Папярэджваць мяне, калі я буду пакідаць старонку рэдагаваньня з незахаванымі зьменамі',
+	'editwarning-preference' => 'Папярэджваць мяне, калі я буду пакідаць старонку рэдагаваньня зь незахаванымі зьменамі',
 );
 
 /** Bengali (বাংলা)
@@ -119,6 +122,16 @@
 	'editwarning-preference' => 'Upozornit, když budu opouštět editaci bez uložení změn',
 );
 
+/** Welsh (Cymraeg)
+ * @author Lloffiwr
+ */
+$messages['cy'] = array(
+	'editwarning' => 'Hysbysiad golygu',
+	'editwarning-warning' => 'Os y gadewch y dudalen hon mae\'n bosib y collwch eich newidiadau iddi.
+Gallwch ddiddymu\'r rhybudd hwn yn yr adran "{{int:prefs-editing}}" yn eich dewisiadau.',
+	'editwarning-preference' => "Tynnwch fy sylw pan wyf ar fin gadael tudalen olygu heb roi'r newidiadau ar gadw",
+);
+
 /** Danish (Dansk)
  * @author Byrial
  */
@@ -383,6 +396,7 @@
 
 /** Korean (한국어)
  * @author Klutzy
+ * @author Kwj2772
  * @author ToePeu
  */
 $messages['ko'] = array(
@@ -390,6 +404,7 @@
 	'editwarning-desc' => 'ì €ìž¥í•˜ì§€ ì•Šê³  화면을 닫을 ë•Œ ê²½ê³ ë¥¼ 표시해 줍니다.',
 	'editwarning-warning' => '이 창을 ë– ë‚˜ë©´ ì €ìž¥í•˜ì§€ 않은 편집이 모두 사라집니다.
 이 ê²½ê³ ë¥¼ 환경 ì„¤ì •ì˜ "{{int:prefs-editing}}"에서 비활성화 í•  수 있습니다.',
+	'editwarning-preference' => 'ìˆ˜ì •í•œ 내용을 ì €ìž¥í•˜ì§€ ì•Šê³  편집 양식을 닫거나 다른 페이지로 ì´ë™í•  ë•Œ 알림',
 );
 
 /** Ripoarisch (Ripoarisch)
@@ -435,6 +450,13 @@
 	'editwarning-preference' => 'Предупреди ме кога сакам да напуштам страница за уредување без да ги имам зачувано промените',
 );
 
+/** Malayalam (മലയാളം)
+ * @author Praveenp
+ */
+$messages['ml'] = array(
+	'editwarning-preference' => 'സേവ് ചെയ്യാത്ത മാറ്റങ്ങളോടു കൂടിയ തിരുത്തല്‍ താളിൽ നിന്നും പോകുമ്പോൾ എന്നെ അറിയിക്കുക',
+);
+
 /** Malay (Bahasa Melayu)
  * @author Kurniasan
  */
@@ -596,6 +618,16 @@
 	'editwarning-preference' => 'Varna mig om jag lämnar en redigeringssida där jag gjort ändringar men inte sparat.',
 );
 
+/** Swahili (Kiswahili)
+ * @author Lloffiwr
+ */
+$messages['sw'] = array(
+	'editwarning' => 'Ilani ya uhariri',
+	'editwarning-warning' => 'Ukitoka kwenye ukurasa huu labda utapoteza madabiliko uliyoyafanya.
+Unaweza kuondoa ilani hii ukienda kwenye sehemu ya "{{int:prefs-editing}}" kwenye mapendekezo yako.',
+	'editwarning-preference' => 'Unionyeshe ilani ninapotaka kutoka kwenye ukurasa ninouhariri, bila kuhifadhi mabadiliko',
+);
+
 /** Telugu (తెలుగు)
  * @author Ravichandra
  */
@@ -634,6 +666,13 @@
 	'editwarning-preference' => 'Dime se sto lassando na pagina de modifica sensa aver salvà ',
 );
 
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+	'editwarning' => 'Redaktiruida varutuz',
+);
+
 /** Vietnamese (Tiếng Việt)
  * @author Minh Nguyen
  * @author Vinhtantran
Index: js/plugins/jquery.autoEllipse.js
===================================================================
--- js/plugins/jquery.autoEllipse.js	(revision 56989)
+++ js/plugins/jquery.autoEllipse.js	(working copy)
@@ -3,17 +3,51 @@
  */
 ( function( $ ) {
 
-$.fn.autoEllipse = function() {
+$.fn.autoEllipse = function( options ) {
 	$(this).each( function() {
+		options = $.extend( {
+			'position': 'center',
+			'tooltip': false
+		}, options );
 		var text = $(this).text();
 		var $text = $( '<span />' ).text( text ).css( 'whiteSpace', 'nowrap' );
 		$(this).empty().append( $text );
-		if ( $text.outerWidth() > $(this).outerWidth() ) {
-			var i = text.length;
-			while ( $text.outerWidth() > $(this).outerWidth() && i > 0 ) {
-				$text.text( text.substr( 0, i ) + '...' );
-				i--;
+		if ( $text.outerWidth() > $(this).innerWidth() ) {
+			switch ( options.position ) {
+				case 'right':
+					var l = text.length;
+					while ( $text.outerWidth() > $(this).innerWidth() && l > 0 ) {
+						$text.text( text.substr( 0, l ) + '...' );
+						l--;
+					}
+					break;
+				case 'center':
+					var i = [Math.round( text.length / 2 ), Math.round( text.length / 2 )];
+					var side = 1; // Begin with making the end shorter
+					while ( $text.outerWidth() > ( $(this).innerWidth() ) && i[0] > 0 ) {
+						$text.text( text.substr( 0, i[0] ) + '...' + text.substr( i[1] ) );
+						// Alternate between trimming the end and begining
+						if ( side == 0 ) {
+							// Make the begining shorter
+							i[0]--;
+							side = 1;
+						} else {
+							// Make the end shorter
+							i[1]++;
+							side = 0;
+						}
+					}
+					break;
+				case 'left':
+					var r = 0;
+					while ( $text.outerWidth() > $(this).innerWidth() && r < text.length ) {
+						$text.text( '...' + text.substr( r ) );
+						r++;
+					}
+					break;
 			}
+			if ( options.tooltip )
+				$text.attr( 'title', text );
 		}
 	} );
 };

Property changes on: js/plugins/jquery.autoEllipse.js
___________________________________________________________________
Added: svn:eol-style
   + native

Index: js/plugins/jquery.suggestions.js
===================================================================
--- js/plugins/jquery.suggestions.js	(revision 56989)
+++ js/plugins/jquery.suggestions.js	(working copy)
@@ -119,30 +119,30 @@
 					} else {
 						// Rebuild the suggestions list
 						context.data.$container.show();
+						// Update the size and position of the list
+						context.data.$container.css( {
+							'top': context.config.$region.offset().top + context.config.$region.outerHeight(),
+							'bottom': 'auto',
+							'width': context.config.$region.outerWidth(),
+							'height': 'auto',
+							'left': context.config.$region.offset().left,
+							'right': 'auto'
+						} );
 						var $results = context.data.$container.children( '.suggestions-results' );
 						$results.empty();
 						for ( var i = 0; i < context.config.suggestions.length; i++ ) {
 							$result = $( '<div />' )
 								.addClass( 'suggestions-result' )
 								.attr( 'rel', i )
-								.data( 'text', context.config.suggestions[i] );
+								.data( 'text', context.config.suggestions[i] )
+								.appendTo( $results );
 							// Allow custom rendering
 							if ( typeof context.config.result.render == 'function' ) {
 								context.config.result.render.call( $result, context.config.suggestions[i] );
 							} else {
-								$result.text( context.config.suggestions[i] );
+								$result.text( context.config.suggestions[i] ).autoEllipse();
 							}
-							$results.append( $result );
 						}
-						// Update the size and position of the list
-						context.data.$container.css( {
-							'top': context.config.$region.offset().top + context.config.$region.outerHeight(),
-							'bottom': 'auto',
-							'width': context.config.$region.outerWidth(),
-							'height': 'auto',
-							'left': context.config.$region.offset().left,
-							'right': 'auto'
-						} );
 					}
 				}
 				break;
@@ -186,6 +186,10 @@
 				$.suggestions.restore( context );
 			} else {
 				context.data.$textbox.val( result.data( 'text' ) );
+				
+				// .val() doesn't call any event handlers, so
+				// let the world know what happened
+				context.data.$textbox.change();
 			}
 		}
 		$.suggestions.special( context );
@@ -194,23 +198,27 @@
 	 * Respond to keypress event
 	 * @param {Integer} key Code of key pressed
 	 */
-	keypress: function( context, key ) {
+	keypress: function( e, context, key ) {
+		var wasVisible = context.data.$container.is( ':visible' );
+		var preventDefault = false;
 		switch ( key ) {
 			// Arrow down
 			case 40:
-				if ( context.data.$container.is( ':visible' ) ) {
+				if ( wasVisible ) {
 					$.suggestions.highlight( context, 'next', true );
 				} else {
 					$.suggestions.update( context, false );
 				}
 				context.data.$textbox.trigger( 'change' );
+				preventDefault = true;
 				break;
 			// Arrow up
 			case 38:
-				if ( context.data.$container.is( ':visible' ) ) {
+				if ( wasVisible ) {
 					$.suggestions.highlight( context, 'prev', true );
 				}
 				context.data.$textbox.trigger( 'change' );
+				preventDefault = wasVisible;
 				break;
 			// Escape
 			case 27:
@@ -218,15 +226,21 @@
 				$.suggestions.restore( context );
 				$.suggestions.cancel( context );
 				context.data.$textbox.trigger( 'change' );
+				preventDefault = wasVisible;
 				break;
 			// Enter
 			case 13:
 				context.data.$container.hide();
+				preventDefault = wasVisible;
 				break;
 			default:
 				$.suggestions.update( context, true );
 				break;
 		}
+		if ( preventDefault ) {
+			e.preventDefault();
+			e.stopImmediatePropagation();
+		}
 	}
 };
 $.fn.suggestions = function() {
@@ -315,7 +329,7 @@
 							if ( $result.get( 0 ) != $other.get( 0 ) ) {
 								return;
 							}
-							highlight( $result, true );
+							$.suggestions.highlight( context, $result, true );
 							context.data.$container.hide();
 							if ( typeof context.config.result.select == 'function' ) {
 								context.config.result.select.call( $result, context.data.$textbox );
@@ -352,16 +366,32 @@
 					// Store key pressed to handle later
 					context.data.keypressed = ( e.keyCode == undefined ) ? e.which : e.keyCode;
 					context.data.keypressedCount = 0;
+					
+					switch ( context.data.keypressed ) {
+						// This preventDefault logic is duplicated from
+						// $.suggestions.keypress(), which sucks
+						case 40:
+							e.preventDefault();
+							e.stopImmediatePropagation();
+							break;
+						case 38:
+						case 27:
+						case 13:
+							if ( context.data.$container.is( ':visible' ) ) {
+								e.preventDefault();
+								e.stopImmediatePropagation();
+							}
+					}
 				} )
-				.keypress( function() {
+				.keypress( function( e ) {
 					context.data.keypressedCount++;
-					$.suggestions.keypress( context, context.data.keypressed );
+					$.suggestions.keypress( e, context, context.data.keypressed );
 				} )
-				.keyup( function() {
+				.keyup( function( e ) {
 					// Some browsers won't throw keypress() for arrow keys. If we got a keydown and a keyup without a
 					// keypress in between, solve it
 					if ( context.data.keypressedCount == 0 ) {
-						$.suggestions.keypress( context, context.data.keypressed );
+						$.suggestions.keypress( e, context, context.data.keypressed );
 					}
 				} )
 				.blur( function() {
Index: js/plugins/jquery.textSelection.js
===================================================================
--- js/plugins/jquery.textSelection.js	(revision 56989)
+++ js/plugins/jquery.textSelection.js	(working copy)
@@ -52,11 +52,6 @@
 		// Do nothing
 	} else if ( document.selection && document.selection.createRange ) {
 		// IE/Opera
-		if ( document.documentElement && document.documentElement.scrollTop ) {
-			var winScroll = document.documentElement.scrollTop;
-		} else if ( document.body ) {
-			var winScroll = document.body.scrollTop;
-		}
 		$(this).focus();
 		var range = document.selection.createRange();
 		if ( ownline && range.moveStart ) {
@@ -84,14 +79,8 @@
 			range.moveEnd( 'character', - post.length );
 		}
 		range.select();
-		if ( document.documentElement && document.documentElement.scrollTop ) {
-			document.documentElement.scrollTop = winScroll
-		} else if ( document.body ) {
-			document.body.scrollTop = winScroll;
-		}
 	} else if ( e.selectionStart || e.selectionStart == '0' ) {
 		// Mozilla
-		var textScroll = e.scrollTop;
 		$(this).focus();
 		var startPos = e.selectionStart;
 		var endPos = e.selectionEnd;
@@ -112,8 +101,9 @@
 			e.selectionStart = startPos + pre.length + selText.length + post.length;
 			e.selectionEnd = e.selectionStart;
 		}
-		e.scrollTop = textScroll;
 	}
+	// Scroll the textarea to the inserted text
+	$(this).scrollToCaretPosition();
 	$(this).trigger( 'encapsulateSelection', [ pre, peri, post, ownline, replace ] );
 },
 /**
@@ -205,18 +195,38 @@
 	}
 	return getCaret( this.get( 0 ) );
 },
+setSelection: function( start, end ) {
+	if ( typeof end == 'undefined' )
+		end = start;
+	return this.each( function() {
+		if ( this.selectionStart || this.selectionStart == '0' ) {
+			this.selectionStart = start;
+			this.selectionEnd = end;
+		} else if ( document.body.createTextRange ) {
+			var selection = document.body.createTextRange;
+			selection.setToElementText( this );
+			var length = selection.text.length;
+			selection.moveStart( 'character', start );
+			selection.moveEnd( 'character', -length + end );
+			selection.select();
+		}
+	});
+},
 /**
  * Ported from Wikia's LinkSuggest extension
  * https://svn.wikia-code.com/wikia/trunk/extensions/wikia/LinkSuggest
  * 
- * Scroll a textarea to a certain offset
+ * Scroll a textarea to the current cursor position. You can set the cursor
+ * position with setSelection()
  * @param pos Byte offset
  */
-scrollToCaretPosition: function( pos ) {
+scrollToCaretPosition: function() {
 	function getLineLength( e ) {
 		return Math.floor( e.scrollWidth / ( $.os.name == 'linux' ? 7 : 8 ) );
 	}
 	function getCaretScrollPosition( e ) {
+		// FIXME: This functions sucks and is off by a few lines most
+		// of the time. It should be replaced by something decent.
 		var text = e.value.replace( /\r/g, "" );
 		var caret = $( e ).getCaretPosition();
 		var lineLength = getLineLength( e );
@@ -261,33 +271,26 @@
 		$(this).focus();
 		if ( this.selectionStart || this.selectionStart == '0' ) {
 			// Mozilla
-			this.selectionStart = pos;
-			this.selectionEnd = pos;
 			$(this).scrollTop( getCaretScrollPosition( this ) );
 		} else if ( document.selection && document.selection.createRange ) {
 			// IE / Opera
 			/*
-			 * IE automatically scrolls the section to the bottom of the page,
-			 * except if it's already in view and the cursor position hasn't
-			 * changed, in which case it does nothing. In that case we'll force
-			 * it to act by moving one character back and forth.
+			 * IE automatically scrolls the selected text to the
+			 * bottom of the textarea at setSelection() time, except
+			 * if it was already in view and the cursor position
+			 * wasn't changed, in which case it does nothing. To
+			 * cover that case, we'll force it to act by moving one
+			 * character back and forth.
 			 */
 			var range = document.selection.createRange();
-			var oldPos = $(this).getCaretPosition();
-			var goBack = false;
-			if ( oldPos == pos ) {
-				pos++;
-				goBack = true;
-			}
+			var pos = $(this).getCaretPosition();
 			range.moveToElementText( this );
 			range.collapse();
-			range.move( 'character', pos );
+			range.move( 'character', pos + 1);
 			range.select();
 			this.scrollTop += range.offsetTop;
-			if ( goBack ) {
-				range.move( 'character', -1 );
-				range.select();
-			}
+			range.move( 'character', -1 );
+			range.select();
 		}
 		$(this).trigger( 'scrollToPosition' );
 	} );
Index: js/plugins/jquery.wikiEditor.js
===================================================================
--- js/plugins/jquery.wikiEditor.js	(revision 56989)
+++ js/plugins/jquery.wikiEditor.js	(working copy)
@@ -127,7 +127,7 @@
 	}
 	//Each browser seems to do this differently, so let's keep our editor
 	//consistent by always starting at the begining
-	context.$textarea.scrollToCaretPosition( 0 );
+	context.$textarea.setSelection( 0 ).scrollToCaretPosition();
 }
 
 // If there was a configuration passed, it's assumed to be for the addModule
Index: js/plugins/jquery.wikiEditor.dialogs.js
===================================================================
--- js/plugins/jquery.wikiEditor.dialogs.js	(revision 56989)
+++ js/plugins/jquery.wikiEditor.dialogs.js	(working copy)
@@ -67,9 +67,67 @@
 					.data( 'context', context )
 					.appendTo( $( 'body' ) )
 					.each( module.init )
-					.dialog( configuration );
+					.dialog( configuration )
+					.bind( 'dialogopen', $.wikiEditor.modules.dialogs.fn.resize )
+					.find( '.ui-tabs' ).bind( 'tabsshow', function() {
+						$(this).closest( '.ui-dialog-content' ).each(
+							$.wikiEditor.modules.dialogs.fn.resize );
+					});
+				
+				// Add tabindexes to dialog form elements
+				// Find the highest tabindex in use
+				var maxTI = 0;
+				$j( '[tabindex]' ).each( function() {
+					var ti = parseInt( $j(this).attr( 'tabindex' ) );
+					if ( ti > maxTI )
+						maxTI = ti;
+				});
+				
+				var tabIndex = maxTI + 1;
+				$j( '.ui-dialog input, .ui-dialog button' )
+					.not( '[tabindex]' )
+					.each( function() {
+						$j(this).attr( 'tabindex', tabIndex++ );
+					});
 			}
 		}
+	},
+	
+	/**
+	 * Resize a dialog so its contents fit
+	 *
+	 * Usage: dialog.each( resize ); or dialog.bind( 'blah', resize );
+	 */
+	resize: function() {
+		var wrapper = $(this).closest( '.ui-dialog' );
+		// Make sure elements don't wrapped so we get an accurate idea
+		// of whether they really fit. Also temporarily show hidden
+		// elements.
+		
+		// Work around jQuery bug where <div style="display:inline;" />
+		// inside a dialog is both :visible and :hidden 
+		var oldHidden = $(this).find( '*' ).not( ':visible' );
+		
+		// Save the style attributes of the hidden elements to restore
+		// them later. Calling hide() after show() messes up for
+		// elements hidden with a class
+		oldHidden.each( function() {
+			$(this).data( 'oldstyle', $(this).attr( 'style' ) );
+		});
+		oldHidden.show();
+		var oldWS = $(this).css( 'white-space' );
+		$(this).css( 'white-space', 'nowrap' );
+		
+		if ( wrapper.width() <= $(this).get(0).scrollWidth ) {
+			$(this).width( $(this).get(0).scrollWidth );
+			wrapper.width( wrapper.get(0).scrollWidth );
+			$(this).dialog( { 'width': wrapper.width() } );
+		}
+		
+		$(this).css( 'white-space', oldWS );
+		oldHidden.each( function() {
+			$(this).attr( 'style', $(this).data( 'oldstyle' ) );
+		});
 	}
 },
 'modules': {}
Index: js/plugins/jquery.namespaceSelect.js
===================================================================
--- js/plugins/jquery.namespaceSelect.js	(revision 56989)
+++ js/plugins/jquery.namespaceSelect.js	(working copy)
@@ -1,20 +1,20 @@
-/**
- * Plugin that fills a <select> with namespaces
- */
-
-(function ($) {
-$.fn.namespaceSelector = function( defaultNS ) {
-	if ( typeof defaultNS == 'undefined' )
-		defaultNS = 0;
-	return this.each( function() {
-		for ( var id in wgFormattedNamespaces ) {
-			var opt = $( '<option />' )
-				.attr( 'value', id )
-				.text( wgFormattedNamespaces[id] );
-			if ( id == defaultNS )
-				opt.attr( 'selected', 'selected' );
-			opt.appendTo( $(this) );
-		}
-	});
-};})(jQuery);
-
+/**
+ * Plugin that fills a <select> with namespaces
+ */
+
+(function ($) {
+$.fn.namespaceSelector = function( defaultNS ) {
+	if ( typeof defaultNS == 'undefined' )
+		defaultNS = 0;
+	return this.each( function() {
+		for ( var id in wgFormattedNamespaces ) {
+			var opt = $( '<option />' )
+				.attr( 'value', id )
+				.text( wgFormattedNamespaces[id] );
+			if ( id == defaultNS )
+				opt.attr( 'selected', 'selected' );
+			opt.appendTo( $(this) );
+		}
+	});
+};})(jQuery);
+

Property changes on: js/plugins/jquery.namespaceSelect.js
___________________________________________________________________
Added: svn:eol-style
   + native

Index: js/plugins/jquery.wikiEditor.toc.js
===================================================================
--- js/plugins/jquery.wikiEditor.toc.js	(revision 56989)
+++ js/plugins/jquery.wikiEditor.toc.js	(working copy)
@@ -43,7 +43,7 @@
 		$.wikiEditor.modules.toc.fn.build( context );
 		$.wikiEditor.modules.toc.fn.update( context );
 		context.$textarea
-			.bind( 'keyup encapsulateSelection',
+			.delayedBind( 1000, 'keyup encapsulateSelection',
 				function( event ) {
 					var context = $(this).data( 'wikiEditor-context' );
 					$(this).eachAsync( {
@@ -55,7 +55,7 @@
 					} );
 				}
 			)
-			.bind( 'mouseup scrollToPosition focus',
+			.bind( 'mouseup scrollToPosition focus keyup encapsulateSelection',
 				function( event ) {
 					var context = $(this).data( 'wikiEditor-context' );
 					$(this).eachAsync( {
@@ -144,7 +144,9 @@
 							.data( 'textbox', context.$textarea )
 							.data( 'position', structure[i].position )
 							.click( function( event ) {
-								$(this).data( 'textbox' ).scrollToCaretPosition( $(this).data( 'position' ) );
+								$(this).data( 'textbox' )
+									.setSelection( $(this).data( 'position' ) )
+									.scrollToCaretPosition();
 								event.preventDefault();
 							} )
 							.text( structure[i].text )
@@ -208,7 +210,7 @@
 			if ( outline[i].level > lastLevel ) {
 				nLevel++;
 			}
-			else if ( outline[i].level < nLevel ) {
+			else if ( outline[i].level < lastLevel ) {
 				nLevel -= Math.max( 1, lastLevel - outline[i].level );
 			}
 			if ( nLevel <= 0 ) {
@@ -223,6 +225,7 @@
 		if ( $( 'input[name=wpSection]' ).val() == '' )
 			structure.unshift( { 'text': wgPageName.replace(/_/g, ' '), 'level': 1, 'index': 0, 'position': 0 } );
 		context.modules.$toc.html( buildList( structure ) );
+		context.modules.$toc.find( 'ul a' ).autoEllipse( { 'position': 'right', 'tooltip': true } );
 		// Cache the outline for later use
 		context.data.outline = outline;
 	}

Property changes on: js/plugins/jquery.wikiEditor.toc.js
___________________________________________________________________
Deleted: svn:mergeinfo
   Reverse-merged /trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js:r56195,56207,56209,56296,56333,56355,56417,56588,56590
   Reverse-merged /trunk/phase3/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js:r56213,56215-56216,56218,56325,56334-56336,56338,56340,56343,56345,56347,56350
   Reverse-merged /branches/REL1_15/phase3/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js:r51646

Index: js/js2.combined.js
===================================================================
--- js/js2.combined.js	(revision 56989)
+++ js/js2.combined.js	(working copy)
@@ -4374,6 +4374,5083 @@
 
 });
 })();
+/*
+ * jQuery UI 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+;jQuery.ui || (function($) {
+
+var _remove = $.fn.remove,
+	isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);
+
+//Helper functions and ui object
+$.ui = {
+	version: "1.7.2",
+
+	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
+	plugin: {
+		add: function(module, option, set) {
+			var proto = $.ui[module].prototype;
+			for(var i in set) {
+				proto.plugins[i] = proto.plugins[i] || [];
+				proto.plugins[i].push([option, set[i]]);
+			}
+		},
+		call: function(instance, name, args) {
+			var set = instance.plugins[name];
+			if(!set || !instance.element[0].parentNode) { return; }
+
+			for (var i = 0; i < set.length; i++) {
+				if (instance.options[set[i][0]]) {
+					set[i][1].apply(instance.element, args);
+				}
+			}
+		}
+	},
+
+	contains: function(a, b) {
+		return document.compareDocumentPosition
+			? a.compareDocumentPosition(b) & 16
+			: a !== b && a.contains(b);
+	},
+
+	hasScroll: function(el, a) {
+
+		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+		if ($(el).css('overflow') == 'hidden') { return false; }
+
+		var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',
+			has = false;
+
+		if (el[scroll] > 0) { return true; }
+
+		// TODO: determine which cases actually cause this to happen
+		// if the element doesn't have the scroll set, see if it's possible to
+		// set the scroll
+		el[scroll] = 1;
+		has = (el[scroll] > 0);
+		el[scroll] = 0;
+		return has;
+	},
+
+	isOverAxis: function(x, reference, size) {
+		//Determines when x coordinate is over "b" element axis
+		return (x > reference) && (x < (reference + size));
+	},
+
+	isOver: function(y, x, top, left, height, width) {
+		//Determines when x, y coordinates is over "b" element
+		return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);
+	},
+
+	keyCode: {
+		BACKSPACE: 8,
+		CAPS_LOCK: 20,
+		COMMA: 188,
+		CONTROL: 17,
+		DELETE: 46,
+		DOWN: 40,
+		END: 35,
+		ENTER: 13,
+		ESCAPE: 27,
+		HOME: 36,
+		INSERT: 45,
+		LEFT: 37,
+		NUMPAD_ADD: 107,
+		NUMPAD_DECIMAL: 110,
+		NUMPAD_DIVIDE: 111,
+		NUMPAD_ENTER: 108,
+		NUMPAD_MULTIPLY: 106,
+		NUMPAD_SUBTRACT: 109,
+		PAGE_DOWN: 34,
+		PAGE_UP: 33,
+		PERIOD: 190,
+		RIGHT: 39,
+		SHIFT: 16,
+		SPACE: 32,
+		TAB: 9,
+		UP: 38
+	}
+};
+
+// WAI-ARIA normalization
+if (isFF2) {
+	var attr = $.attr,
+		removeAttr = $.fn.removeAttr,
+		ariaNS = "http://www.w3.org/2005/07/aaa",
+		ariaState = /^aria-/,
+		ariaRole = /^wairole:/;
+
+	$.attr = function(elem, name, value) {
+		var set = value !== undefined;
+
+		return (name == 'role'
+			? (set
+				? attr.call(this, elem, name, "wairole:" + value)
+				: (attr.apply(this, arguments) || "").replace(ariaRole, ""))
+			: (ariaState.test(name)
+				? (set
+					? elem.setAttributeNS(ariaNS,
+						name.replace(ariaState, "aaa:"), value)
+					: attr.call(this, elem, name.replace(ariaState, "aaa:")))
+				: attr.apply(this, arguments)));
+	};
+
+	$.fn.removeAttr = function(name) {
+		return (ariaState.test(name)
+			? this.each(function() {
+				this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));
+			}) : removeAttr.call(this, name));
+	};
+}
+
+//jQuery plugins
+$.fn.extend({
+	remove: function() {
+		// Safari has a native remove event which actually removes DOM elements,
+		// so we have to use triggerHandler instead of trigger (#3037).
+		$("*", this).add(this).each(function() {
+			$(this).triggerHandler("remove");
+		});
+		return _remove.apply(this, arguments );
+	},
+
+	enableSelection: function() {
+		return this
+			.attr('unselectable', 'off')
+			.css('MozUserSelect', '')
+			.unbind('selectstart.ui');
+	},
+
+	disableSelection: function() {
+		return this
+			.attr('unselectable', 'on')
+			.css('MozUserSelect', 'none')
+			.bind('selectstart.ui', function() { return false; });
+	},
+
+	scrollParent: function() {
+		var scrollParent;
+		if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+			scrollParent = this.parents().filter(function() {
+				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+			}).eq(0);
+		} else {
+			scrollParent = this.parents().filter(function() {
+				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+			}).eq(0);
+		}
+
+		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
+	}
+});
+
+
+//Additional selectors
+$.extend($.expr[':'], {
+	data: function(elem, i, match) {
+		return !!$.data(elem, match[3]);
+	},
+
+	focusable: function(element) {
+		var nodeName = element.nodeName.toLowerCase(),
+			tabIndex = $.attr(element, 'tabindex');
+		return (/input|select|textarea|button|object/.test(nodeName)
+			? !element.disabled
+			: 'a' == nodeName || 'area' == nodeName
+				? element.href || !isNaN(tabIndex)
+				: !isNaN(tabIndex))
+			// the element and all of its ancestors must be visible
+			// the browser may report that the area is hidden
+			&& !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length;
+	},
+
+	tabbable: function(element) {
+		var tabIndex = $.attr(element, 'tabindex');
+		return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');
+	}
+});
+
+
+// $.widget is a factory to create jQuery plugins
+// taking some boilerplate code out of the plugin code
+function getter(namespace, plugin, method, args) {
+	function getMethods(type) {
+		var methods = $[namespace][plugin][type] || [];
+		return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);
+	}
+
+	var methods = getMethods('getter');
+	if (args.length == 1 && typeof args[0] == 'string') {
+		methods = methods.concat(getMethods('getterSetter'));
+	}
+	return ($.inArray(method, methods) != -1);
+}
+
+$.widget = function(name, prototype) {
+	var namespace = name.split(".")[0];
+	name = name.split(".")[1];
+
+	// create plugin method
+	$.fn[name] = function(options) {
+		var isMethodCall = (typeof options == 'string'),
+			args = Array.prototype.slice.call(arguments, 1);
+
+		// prevent calls to internal methods
+		if (isMethodCall && options.substring(0, 1) == '_') {
+			return this;
+		}
+
+		// handle getter methods
+		if (isMethodCall && getter(namespace, name, options, args)) {
+			var instance = $.data(this[0], name);
+			return (instance ? instance[options].apply(instance, args)
+				: undefined);
+		}
+
+		// handle initialization and non-getter methods
+		return this.each(function() {
+			var instance = $.data(this, name);
+
+			// constructor
+			(!instance && !isMethodCall &&
+				$.data(this, name, new $[namespace][name](this, options))._init());
+
+			// method call
+			(instance && isMethodCall && $.isFunction(instance[options]) &&
+				instance[options].apply(instance, args));
+		});
+	};
+
+	// create widget constructor
+	$[namespace] = $[namespace] || {};
+	$[namespace][name] = function(element, options) {
+		var self = this;
+
+		this.namespace = namespace;
+		this.widgetName = name;
+		this.widgetEventPrefix = $[namespace][name].eventPrefix || name;
+		this.widgetBaseClass = namespace + '-' + name;
+
+		this.options = $.extend({},
+			$.widget.defaults,
+			$[namespace][name].defaults,
+			$.metadata && $.metadata.get(element)[name],
+			options);
+
+		this.element = $(element)
+			.bind('setData.' + name, function(event, key, value) {
+				if (event.target == element) {
+					return self._setData(key, value);
+				}
+			})
+			.bind('getData.' + name, function(event, key) {
+				if (event.target == element) {
+					return self._getData(key);
+				}
+			})
+			.bind('remove', function() {
+				return self.destroy();
+			});
+	};
+
+	// add widget prototype
+	$[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);
+
+	// TODO: merge getter and getterSetter properties from widget prototype
+	// and plugin prototype
+	$[namespace][name].getterSetter = 'option';
+};
+
+$.widget.prototype = {
+	_init: function() {},
+	destroy: function() {
+		this.element.removeData(this.widgetName)
+			.removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')
+			.removeAttr('aria-disabled');
+	},
+
+	option: function(key, value) {
+		var options = key,
+			self = this;
+
+		if (typeof key == "string") {
+			if (value === undefined) {
+				return this._getData(key);
+			}
+			options = {};
+			options[key] = value;
+		}
+
+		$.each(options, function(key, value) {
+			self._setData(key, value);
+		});
+	},
+	_getData: function(key) {
+		return this.options[key];
+	},
+	_setData: function(key, value) {
+		this.options[key] = value;
+
+		if (key == 'disabled') {
+			this.element
+				[value ? 'addClass' : 'removeClass'](
+					this.widgetBaseClass + '-disabled' + ' ' +
+					this.namespace + '-state-disabled')
+				.attr("aria-disabled", value);
+		}
+	},
+
+	enable: function() {
+		this._setData('disabled', false);
+	},
+	disable: function() {
+		this._setData('disabled', true);
+	},
+
+	_trigger: function(type, event, data) {
+		var callback = this.options[type],
+			eventName = (type == this.widgetEventPrefix
+				? type : this.widgetEventPrefix + type);
+
+		event = $.Event(event);
+		event.type = eventName;
+
+		// copy original event properties over to the new event
+		// this would happen if we could call $.event.fix instead of $.Event
+		// but we don't have a way to force an event to be fixed multiple times
+		if (event.originalEvent) {
+			for (var i = $.event.props.length, prop; i;) {
+				prop = $.event.props[--i];
+				event[prop] = event.originalEvent[prop];
+			}
+		}
+
+		this.element.trigger(event, data);
+
+		return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false
+			|| event.isDefaultPrevented());
+	}
+};
+
+$.widget.defaults = {
+	disabled: false
+};
+
+
+/** Mouse Interaction Plugin **/
+
+$.ui.mouse = {
+	_mouseInit: function() {
+		var self = this;
+
+		this.element
+			.bind('mousedown.'+this.widgetName, function(event) {
+				return self._mouseDown(event);
+			})
+			.bind('click.'+this.widgetName, function(event) {
+				if(self._preventClickEvent) {
+					self._preventClickEvent = false;
+					event.stopImmediatePropagation();
+					return false;
+				}
+			});
+
+		// Prevent text selection in IE
+		if ($.browser.msie) {
+			this._mouseUnselectable = this.element.attr('unselectable');
+			this.element.attr('unselectable', 'on');
+		}
+
+		this.started = false;
+	},
+
+	// TODO: make sure destroying one instance of mouse doesn't mess with
+	// other instances of mouse
+	_mouseDestroy: function() {
+		this.element.unbind('.'+this.widgetName);
+
+		// Restore text selection in IE
+		($.browser.msie
+			&& this.element.attr('unselectable', this._mouseUnselectable));
+	},
+
+	_mouseDown: function(event) {
+		// don't let more than one widget handle mouseStart
+		// TODO: figure out why we have to use originalEvent
+		event.originalEvent = event.originalEvent || {};
+		if (event.originalEvent.mouseHandled) { return; }
+
+		// we may have missed mouseup (out of window)
+		(this._mouseStarted && this._mouseUp(event));
+
+		this._mouseDownEvent = event;
+
+		var self = this,
+			btnIsLeft = (event.which == 1),
+			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
+		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+			return true;
+		}
+
+		this.mouseDelayMet = !this.options.delay;
+		if (!this.mouseDelayMet) {
+			this._mouseDelayTimer = setTimeout(function() {
+				self.mouseDelayMet = true;
+			}, this.options.delay);
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted = (this._mouseStart(event) !== false);
+			if (!this._mouseStarted) {
+				event.preventDefault();
+				return true;
+			}
+		}
+
+		// these delegates are required to keep context
+		this._mouseMoveDelegate = function(event) {
+			return self._mouseMove(event);
+		};
+		this._mouseUpDelegate = function(event) {
+			return self._mouseUp(event);
+		};
+		$(document)
+			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+		// preventDefault() is used to prevent the selection of text here -
+		// however, in Safari, this causes select boxes not to be selectable
+		// anymore, so this fix is needed
+		($.browser.safari || event.preventDefault());
+
+		event.originalEvent.mouseHandled = true;
+		return true;
+	},
+
+	_mouseMove: function(event) {
+		// IE mouseup check - mouseup happened when mouse was out of window
+		if ($.browser.msie && !event.button) {
+			return this._mouseUp(event);
+		}
+
+		if (this._mouseStarted) {
+			this._mouseDrag(event);
+			return event.preventDefault();
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted =
+				(this._mouseStart(this._mouseDownEvent, event) !== false);
+			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+		}
+
+		return !this._mouseStarted;
+	},
+
+	_mouseUp: function(event) {
+		$(document)
+			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+		if (this._mouseStarted) {
+			this._mouseStarted = false;
+			this._preventClickEvent = (event.target == this._mouseDownEvent.target);
+			this._mouseStop(event);
+		}
+
+		return false;
+	},
+
+	_mouseDistanceMet: function(event) {
+		return (Math.max(
+				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+			) >= this.options.distance
+		);
+	},
+
+	_mouseDelayMet: function(event) {
+		return this.mouseDelayMet;
+	},
+
+	// These are placeholder methods, to be overriden by extending plugin
+	_mouseStart: function(event) {},
+	_mouseDrag: function(event) {},
+	_mouseStop: function(event) {},
+	_mouseCapture: function(event) { return true; }
+};
+
+$.ui.mouse.defaults = {
+	cancel: null,
+	distance: 1,
+	delay: 0
+};
+
+})(jQuery);
+/*
+ * jQuery UI Draggable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function($) {
+
+$.widget("ui.draggable", $.extend({}, $.ui.mouse, {
+
+	_init: function() {
+
+		if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
+			this.element[0].style.position = 'relative';
+
+		(this.options.addClasses && this.element.addClass("ui-draggable"));
+		(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
+
+		this._mouseInit();
+
+	},
+
+	destroy: function() {
+		if(!this.element.data('draggable')) return;
+		this.element
+			.removeData("draggable")
+			.unbind(".draggable")
+			.removeClass("ui-draggable"
+				+ " ui-draggable-dragging"
+				+ " ui-draggable-disabled");
+		this._mouseDestroy();
+	},
+
+	_mouseCapture: function(event) {
+
+		var o = this.options;
+
+		if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
+			return false;
+
+		//Quit if we're not on a valid handle
+		this.handle = this._getHandle(event);
+		if (!this.handle)
+			return false;
+
+		return true;
+
+	},
+
+	_mouseStart: function(event) {
+
+		var o = this.options;
+
+		//Create and append the visible helper
+		this.helper = this._createHelper(event);
+
+		//Cache the helper size
+		this._cacheHelperProportions();
+
+		//If ddmanager is used for droppables, set the global draggable
+		if($.ui.ddmanager)
+			$.ui.ddmanager.current = this;
+
+		/*
+		 * - Position generation -
+		 * This block generates everything position related - it's the core of draggables.
+		 */
+
+		//Cache the margins of the original element
+		this._cacheMargins();
+
+		//Store the helper's css position
+		this.cssPosition = this.helper.css("position");
+		this.scrollParent = this.helper.scrollParent();
+
+		//The element's absolute position on the page minus margins
+		this.offset = this.element.offset();
+		this.offset = {
+			top: this.offset.top - this.margins.top,
+			left: this.offset.left - this.margins.left
+		};
+
+		$.extend(this.offset, {
+			click: { //Where the click happened, relative to the element
+				left: event.pageX - this.offset.left,
+				top: event.pageY - this.offset.top
+			},
+			parent: this._getParentOffset(),
+			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+		});
+
+		//Generate the original position
+		this.originalPosition = this._generatePosition(event);
+		this.originalPageX = event.pageX;
+		this.originalPageY = event.pageY;
+
+		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
+		if(o.cursorAt)
+			this._adjustOffsetFromHelper(o.cursorAt);
+
+		//Set a containment if given in the options
+		if(o.containment)
+			this._setContainment();
+
+		//Call plugins and callbacks
+		this._trigger("start", event);
+
+		//Recache the helper size
+		this._cacheHelperProportions();
+
+		//Prepare the droppable offsets
+		if ($.ui.ddmanager && !o.dropBehaviour)
+			$.ui.ddmanager.prepareOffsets(this, event);
+
+		this.helper.addClass("ui-draggable-dragging");
+		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+		return true;
+	},
+
+	_mouseDrag: function(event, noPropagation) {
+
+		//Compute the helpers position
+		this.position = this._generatePosition(event);
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		//Call plugins and callbacks and use the resulting position if something is returned
+		if (!noPropagation) {
+			var ui = this._uiHash();
+			this._trigger('drag', event, ui);
+			this.position = ui.position;
+		}
+
+		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		//If we are using droppables, inform the manager about the drop
+		var dropped = false;
+		if ($.ui.ddmanager && !this.options.dropBehaviour)
+			dropped = $.ui.ddmanager.drop(this, event);
+
+		//if a drop comes from outside (a sortable)
+		if(this.dropped) {
+			dropped = this.dropped;
+			this.dropped = false;
+		}
+
+		if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+			var self = this;
+			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+				self._trigger("stop", event);
+				self._clear();
+			});
+		} else {
+			this._trigger("stop", event);
+			this._clear();
+		}
+
+		return false;
+	},
+
+	_getHandle: function(event) {
+
+		var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
+		$(this.options.handle, this.element)
+			.find("*")
+			.andSelf()
+			.each(function() {
+				if(this == event.target) handle = true;
+			});
+
+		return handle;
+
+	},
+
+	_createHelper: function(event) {
+
+		var o = this.options;
+		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element);
+
+		if(!helper.parents('body').length)
+			helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
+
+		if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
+			helper.css("position", "absolute");
+
+		return helper;
+
+	},
+
+	_adjustOffsetFromHelper: function(obj) {
+		if(obj.left != undefined) this.offset.click.left = obj.left + this.margins.left;
+		if(obj.right != undefined) this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+		if(obj.top != undefined) this.offset.click.top = obj.top + this.margins.top;
+		if(obj.bottom != undefined) this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+	},
+
+	_getParentOffset: function() {
+
+		//Get the offsetParent and cache its position
+		this.offsetParent = this.helper.offsetParent();
+		var po = this.offsetParent.offset();
+
+		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+			po.left += this.scrollParent.scrollLeft();
+			po.top += this.scrollParent.scrollTop();
+		}
+
+		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
+		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+			po = { top: 0, left: 0 };
+
+		return {
+			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+		};
+
+	},
+
+	_getRelativeOffset: function() {
+
+		if(this.cssPosition == "relative") {
+			var p = this.element.position();
+			return {
+				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+			};
+		} else {
+			return { top: 0, left: 0 };
+		}
+
+	},
+
+	_cacheMargins: function() {
+		this.margins = {
+			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+			top: (parseInt(this.element.css("marginTop"),10) || 0)
+		};
+	},
+
+	_cacheHelperProportions: function() {
+		this.helperProportions = {
+			width: this.helper.outerWidth(),
+			height: this.helper.outerHeight()
+		};
+	},
+
+	_setContainment: function() {
+
+		var o = this.options;
+		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
+		if(o.containment == 'document' || o.containment == 'window') this.containment = [
+			0 - this.offset.relative.left - this.offset.parent.left,
+			0 - this.offset.relative.top - this.offset.parent.top,
+			$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
+			($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+		];
+
+		if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
+			var ce = $(o.containment)[0]; if(!ce) return;
+			var co = $(o.containment).offset();
+			var over = ($(ce).css("overflow") != 'hidden');
+
+			this.containment = [
+				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+			];
+		} else if(o.containment.constructor == Array) {
+			this.containment = o.containment;
+		}
+
+	},
+
+	_convertPositionTo: function(d, pos) {
+
+		if(!pos) pos = this.position;
+		var mod = d == "absolute" ? 1 : -1;
+		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+		return {
+			top: (
+				pos.top																	// The absolute mouse position
+				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
+				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+			),
+			left: (
+				pos.left																// The absolute mouse position
+				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
+				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+			)
+		};
+
+	},
+
+	_generatePosition: function(event) {
+
+		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+		// This is another very weird special case that only happens for relative elements:
+		// 1. If the css position is relative
+		// 2. and the scroll parent is the document or similar to the offset parent
+		// we have to refresh the relative offset during the scroll so there are no jumps
+		if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
+			this.offset.relative = this._getRelativeOffset();
+		}
+
+		var pageX = event.pageX;
+		var pageY = event.pageY;
+
+		/*
+		 * - Position constraining -
+		 * Constrain the position to a mix of grid, containment.
+		 */
+
+		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+			if(this.containment) {
+				if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
+				if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
+				if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
+				if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
+			}
+
+			if(o.grid) {
+				var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+				pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+				var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+				pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+			}
+
+		}
+
+		return {
+			top: (
+				pageY																// The absolute mouse position
+				- this.offset.click.top													// Click offset (relative to the element)
+				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
+				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
+				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+			),
+			left: (
+				pageX																// The absolute mouse position
+				- this.offset.click.left												// Click offset (relative to the element)
+				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
+				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
+				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+			)
+		};
+
+	},
+
+	_clear: function() {
+		this.helper.removeClass("ui-draggable-dragging");
+		if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
+		//if($.ui.ddmanager) $.ui.ddmanager.current = null;
+		this.helper = null;
+		this.cancelHelperRemoval = false;
+	},
+
+	// From now on bulk stuff - mainly helpers
+
+	_trigger: function(type, event, ui) {
+		ui = ui || this._uiHash();
+		$.ui.plugin.call(this, type, [event, ui]);
+		if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
+		return $.widget.prototype._trigger.call(this, type, event, ui);
+	},
+
+	plugins: {},
+
+	_uiHash: function(event) {
+		return {
+			helper: this.helper,
+			position: this.position,
+			absolutePosition: this.positionAbs, //deprecated
+			offset: this.positionAbs
+		};
+	}
+
+}));
+
+$.extend($.ui.draggable, {
+	version: "1.7.2",
+	eventPrefix: "drag",
+	defaults: {
+		addClasses: true,
+		appendTo: "parent",
+		axis: false,
+		cancel: ":input,option",
+		connectToSortable: false,
+		containment: false,
+		cursor: "auto",
+		cursorAt: false,
+		delay: 0,
+		distance: 1,
+		grid: false,
+		handle: false,
+		helper: "original",
+		iframeFix: false,
+		opacity: false,
+		refreshPositions: false,
+		revert: false,
+		revertDuration: 500,
+		scope: "default",
+		scroll: true,
+		scrollSensitivity: 20,
+		scrollSpeed: 20,
+		snap: false,
+		snapMode: "both",
+		snapTolerance: 20,
+		stack: false,
+		zIndex: false
+	}
+});
+
+$.ui.plugin.add("draggable", "connectToSortable", {
+	start: function(event, ui) {
+
+		var inst = $(this).data("draggable"), o = inst.options,
+			uiSortable = $.extend({}, ui, { item: inst.element });
+		inst.sortables = [];
+		$(o.connectToSortable).each(function() {
+			var sortable = $.data(this, 'sortable');
+			if (sortable && !sortable.options.disabled) {
+				inst.sortables.push({
+					instance: sortable,
+					shouldRevert: sortable.options.revert
+				});
+				sortable._refreshItems();	//Do a one-time refresh at start to refresh the containerCache
+				sortable._trigger("activate", event, uiSortable);
+			}
+		});
+
+	},
+	stop: function(event, ui) {
+
+		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+		var inst = $(this).data("draggable"),
+			uiSortable = $.extend({}, ui, { item: inst.element });
+
+		$.each(inst.sortables, function() {
+			if(this.instance.isOver) {
+
+				this.instance.isOver = 0;
+
+				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+
+				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
+				if(this.shouldRevert) this.instance.options.revert = true;
+
+				//Trigger the stop of the sortable
+				this.instance._mouseStop(event);
+
+				this.instance.options.helper = this.instance.options._helper;
+
+				//If the helper has been the original item, restore properties in the sortable
+				if(inst.options.helper == 'original')
+					this.instance.currentItem.css({ top: 'auto', left: 'auto' });
+
+			} else {
+				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+				this.instance._trigger("deactivate", event, uiSortable);
+			}
+
+		});
+
+	},
+	drag: function(event, ui) {
+
+		var inst = $(this).data("draggable"), self = this;
+
+		var checkPos = function(o) {
+			var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
+			var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
+			var itemHeight = o.height, itemWidth = o.width;
+			var itemTop = o.top, itemLeft = o.left;
+
+			return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
+		};
+
+		$.each(inst.sortables, function(i) {
+			
+			//Copy over some variables to allow calling the sortable's native _intersectsWith
+			this.instance.positionAbs = inst.positionAbs;
+			this.instance.helperProportions = inst.helperProportions;
+			this.instance.offset.click = inst.offset.click;
+			
+			if(this.instance._intersectsWith(this.instance.containerCache)) {
+
+				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+				if(!this.instance.isOver) {
+
+					this.instance.isOver = 1;
+					//Now we fake the start of dragging for the sortable instance,
+					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+					this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
+					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+					this.instance.options.helper = function() { return ui.helper[0]; };
+
+					event.target = this.instance.currentItem[0];
+					this.instance._mouseCapture(event, true);
+					this.instance._mouseStart(event, true, true);
+
+					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+					this.instance.offset.click.top = inst.offset.click.top;
+					this.instance.offset.click.left = inst.offset.click.left;
+					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+
+					inst._trigger("toSortable", event);
+					inst.dropped = this.instance.element; //draggable revert needs that
+					//hack so receive/update callbacks work (mostly)
+					inst.currentItem = inst.element;
+					this.instance.fromOutside = inst;
+
+				}
+
+				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+				if(this.instance.currentItem) this.instance._mouseDrag(event);
+
+			} else {
+
+				//If it doesn't intersect with the sortable, and it intersected before,
+				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+				if(this.instance.isOver) {
+
+					this.instance.isOver = 0;
+					this.instance.cancelHelperRemoval = true;
+					
+					//Prevent reverting on this forced stop
+					this.instance.options.revert = false;
+					
+					// The out event needs to be triggered independently
+					this.instance._trigger('out', event, this.instance._uiHash(this.instance));
+					
+					this.instance._mouseStop(event, true);
+					this.instance.options.helper = this.instance.options._helper;
+
+					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+					this.instance.currentItem.remove();
+					if(this.instance.placeholder) this.instance.placeholder.remove();
+
+					inst._trigger("fromSortable", event);
+					inst.dropped = false; //draggable revert needs that
+				}
+
+			};
+
+		});
+
+	}
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+	start: function(event, ui) {
+		var t = $('body'), o = $(this).data('draggable').options;
+		if (t.css("cursor")) o._cursor = t.css("cursor");
+		t.css("cursor", o.cursor);
+	},
+	stop: function(event, ui) {
+		var o = $(this).data('draggable').options;
+		if (o._cursor) $('body').css("cursor", o._cursor);
+	}
+});
+
+$.ui.plugin.add("draggable", "iframeFix", {
+	start: function(event, ui) {
+		var o = $(this).data('draggable').options;
+		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+			$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
+			.css({
+				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+				position: "absolute", opacity: "0.001", zIndex: 1000
+			})
+			.css($(this).offset())
+			.appendTo("body");
+		});
+	},
+	stop: function(event, ui) {
+		$("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers
+	}
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+	start: function(event, ui) {
+		var t = $(ui.helper), o = $(this).data('draggable').options;
+		if(t.css("opacity")) o._opacity = t.css("opacity");
+		t.css('opacity', o.opacity);
+	},
+	stop: function(event, ui) {
+		var o = $(this).data('draggable').options;
+		if(o._opacity) $(ui.helper).css('opacity', o._opacity);
+	}
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+	start: function(event, ui) {
+		var i = $(this).data("draggable");
+		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
+	},
+	drag: function(event, ui) {
+
+		var i = $(this).data("draggable"), o = i.options, scrolled = false;
+
+		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
+
+			if(!o.axis || o.axis != 'x') {
+				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+				else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
+					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+			}
+
+			if(!o.axis || o.axis != 'y') {
+				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+				else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
+					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+			}
+
+		} else {
+
+			if(!o.axis || o.axis != 'x') {
+				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+			}
+
+			if(!o.axis || o.axis != 'y') {
+				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+			}
+
+		}
+
+		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+			$.ui.ddmanager.prepareOffsets(i, event);
+
+	}
+});
+
+$.ui.plugin.add("draggable", "snap", {
+	start: function(event, ui) {
+
+		var i = $(this).data("draggable"), o = i.options;
+		i.snapElements = [];
+
+		$(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
+			var $t = $(this); var $o = $t.offset();
+			if(this != i.element[0]) i.snapElements.push({
+				item: this,
+				width: $t.outerWidth(), height: $t.outerHeight(),
+				top: $o.top, left: $o.left
+			});
+		});
+
+	},
+	drag: function(event, ui) {
+
+		var inst = $(this).data("draggable"), o = inst.options;
+		var d = o.snapTolerance;
+
+		var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+		for (var i = inst.snapElements.length - 1; i >= 0; i--){
+
+			var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
+				t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
+
+			//Yes, I know, this is insane ;)
+			if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
+				if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+				inst.snapElements[i].snapping = false;
+				continue;
+			}
+
+			if(o.snapMode != 'inner') {
+				var ts = Math.abs(t - y2) <= d;
+				var bs = Math.abs(b - y1) <= d;
+				var ls = Math.abs(l - x2) <= d;
+				var rs = Math.abs(r - x1) <= d;
+				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+			}
+
+			var first = (ts || bs || ls || rs);
+
+			if(o.snapMode != 'outer') {
+				var ts = Math.abs(t - y1) <= d;
+				var bs = Math.abs(b - y2) <= d;
+				var ls = Math.abs(l - x1) <= d;
+				var rs = Math.abs(r - x2) <= d;
+				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+			}
+
+			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
+				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+		};
+
+	}
+});
+
+$.ui.plugin.add("draggable", "stack", {
+	start: function(event, ui) {
+
+		var o = $(this).data("draggable").options;
+
+		var group = $.makeArray($(o.stack.group)).sort(function(a,b) {
+			return (parseInt($(a).css("zIndex"),10) || o.stack.min) - (parseInt($(b).css("zIndex"),10) || o.stack.min);
+		});
+
+		$(group).each(function(i) {
+			this.style.zIndex = o.stack.min + i;
+		});
+
+		this[0].style.zIndex = o.stack.min + group.length;
+
+	}
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+	start: function(event, ui) {
+		var t = $(ui.helper), o = $(this).data("draggable").options;
+		if(t.css("zIndex")) o._zIndex = t.css("zIndex");
+		t.css('zIndex', o.zIndex);
+	},
+	stop: function(event, ui) {
+		var o = $(this).data("draggable").options;
+		if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
+	}
+});
+
+})(jQuery);
+/*
+ * jQuery UI Resizable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function($) {
+
+$.widget("ui.resizable", $.extend({}, $.ui.mouse, {
+
+	_init: function() {
+
+		var self = this, o = this.options;
+		this.element.addClass("ui-resizable");
+
+		$.extend(this, {
+			_aspectRatio: !!(o.aspectRatio),
+			aspectRatio: o.aspectRatio,
+			originalElement: this.element,
+			_proportionallyResizeElements: [],
+			_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
+		});
+
+		//Wrap the element if it cannot hold child nodes
+		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+
+			//Opera fix for relative positioning
+			if (/relative/.test(this.element.css('position')) && $.browser.opera)
+				this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
+
+			//Create a wrapper element and set the wrapper to the new current internal element
+			this.element.wrap(
+				$('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
+					position: this.element.css('position'),
+					width: this.element.outerWidth(),
+					height: this.element.outerHeight(),
+					top: this.element.css('top'),
+					left: this.element.css('left')
+				})
+			);
+
+			//Overwrite the original this.element
+			this.element = this.element.parent().data(
+				"resizable", this.element.data('resizable')
+			);
+
+			this.elementIsWrapper = true;
+
+			//Move margins to the wrapper
+			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+
+			//Prevent Safari textarea resize
+			this.originalResizeStyle = this.originalElement.css('resize');
+			this.originalElement.css('resize', 'none');
+
+			//Push the actual element to our proportionallyResize internal array
+			this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
+
+			// avoid IE jump (hard set the margin)
+			this.originalElement.css({ margin: this.originalElement.css('margin') });
+
+			// fix handlers offset
+			this._proportionallyResize();
+
+		}
+
+		this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
+		if(this.handles.constructor == String) {
+
+			if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
+			var n = this.handles.split(","); this.handles = {};
+
+			for(var i = 0; i < n.length; i++) {
+
+				var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
+				var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
+
+				// increase zIndex of sw, se, ne, nw axis
+				//TODO : this modifies original option
+				if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+
+				//TODO : What's going on here?
+				if ('se' == handle) {
+					axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
+				};
+
+				//Insert into internal handles object and append to element
+				this.handles[handle] = '.ui-resizable-'+handle;
+				this.element.append(axis);
+			}
+
+		}
+
+		this._renderAxis = function(target) {
+
+			target = target || this.element;
+
+			for(var i in this.handles) {
+
+				if(this.handles[i].constructor == String)
+					this.handles[i] = $(this.handles[i], this.element).show();
+
+				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+
+					var axis = $(this.handles[i], this.element), padWrapper = 0;
+
+					//Checking the correct pad and border
+					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+					//The padding type i have to apply...
+					var padPos = [ 'padding',
+						/ne|nw|n/.test(i) ? 'Top' :
+						/se|sw|s/.test(i) ? 'Bottom' :
+						/^e$/.test(i) ? 'Right' : 'Left' ].join("");
+
+					target.css(padPos, padWrapper);
+
+					this._proportionallyResize();
+
+				}
+
+				//TODO: What's that good for? There's not anything to be executed left
+				if(!$(this.handles[i]).length)
+					continue;
+
+			}
+		};
+
+		//TODO: make renderAxis a prototype function
+		this._renderAxis(this.element);
+
+		this._handles = $('.ui-resizable-handle', this.element)
+			.disableSelection();
+
+		//Matching axis name
+		this._handles.mouseover(function() {
+			if (!self.resizing) {
+				if (this.className)
+					var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+				//Axis, default = se
+				self.axis = axis && axis[1] ? axis[1] : 'se';
+			}
+		});
+
+		//If we want to auto hide the elements
+		if (o.autoHide) {
+			this._handles.hide();
+			$(this.element)
+				.addClass("ui-resizable-autohide")
+				.hover(function() {
+					$(this).removeClass("ui-resizable-autohide");
+					self._handles.show();
+				},
+				function(){
+					if (!self.resizing) {
+						$(this).addClass("ui-resizable-autohide");
+						self._handles.hide();
+					}
+				});
+		}
+
+		//Initialize the mouse interaction
+		this._mouseInit();
+
+	},
+
+	destroy: function() {
+
+		this._mouseDestroy();
+
+		var _destroy = function(exp) {
+			$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+				.removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+		};
+
+		//TODO: Unwrap at same DOM position
+		if (this.elementIsWrapper) {
+			_destroy(this.element);
+			var wrapper = this.element;
+			wrapper.parent().append(
+				this.originalElement.css({
+					position: wrapper.css('position'),
+					width: wrapper.outerWidth(),
+					height: wrapper.outerHeight(),
+					top: wrapper.css('top'),
+					left: wrapper.css('left')
+				})
+			).end().remove();
+		}
+
+		this.originalElement.css('resize', this.originalResizeStyle);
+		_destroy(this.originalElement);
+
+	},
+
+	_mouseCapture: function(event) {
+
+		var handle = false;
+		for(var i in this.handles) {
+			if($(this.handles[i])[0] == event.target) handle = true;
+		}
+
+		return this.options.disabled || !!handle;
+
+	},
+
+	_mouseStart: function(event) {
+
+		var o = this.options, iniPos = this.element.position(), el = this.element;
+
+		this.resizing = true;
+		this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
+
+		// bugfix for http://dev.jquery.com/ticket/1749
+		if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
+			el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
+		}
+
+		//Opera fixing relative position
+		if ($.browser.opera && (/relative/).test(el.css('position')))
+			el.css({ position: 'relative', top: 'auto', left: 'auto' });
+
+		this._renderProxy();
+
+		var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
+
+		if (o.containment) {
+			curleft += $(o.containment).scrollLeft() || 0;
+			curtop += $(o.containment).scrollTop() || 0;
+		}
+
+		//Store needed variables
+		this.offset = this.helper.offset();
+		this.position = { left: curleft, top: curtop };
+		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+		this.originalPosition = { left: curleft, top: curtop };
+		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+		//Aspect Ratio
+		this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+
+	    var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+	    $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
+
+		el.addClass("ui-resizable-resizing");
+		this._propagate("start", event);
+		return true;
+	},
+
+	_mouseDrag: function(event) {
+
+		//Increase performance, avoid regex
+		var el = this.helper, o = this.options, props = {},
+			self = this, smp = this.originalMousePosition, a = this.axis;
+
+		var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
+		var trigger = this._change[a];
+		if (!trigger) return false;
+
+		// Calculate the attrs that will be change
+		var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
+
+		if (this._aspectRatio || event.shiftKey)
+			data = this._updateRatio(data, event);
+
+		data = this._respectSize(data, event);
+
+		// plugins callbacks need to be called first
+		this._propagate("resize", event);
+
+		el.css({
+			top: this.position.top + "px", left: this.position.left + "px",
+			width: this.size.width + "px", height: this.size.height + "px"
+		});
+
+		if (!this._helper && this._proportionallyResizeElements.length)
+			this._proportionallyResize();
+
+		this._updateCache(data);
+
+		// calling the user callback at the end
+		this._trigger('resize', event, this.ui());
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		this.resizing = false;
+		var o = this.options, self = this;
+
+		if(this._helper) {
+			var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+						soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+							soffsetw = ista ? 0 : self.sizeDiff.width;
+
+			var s = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+				left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+				top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+			if (!o.animate)
+				this.element.css($.extend(s, { top: top, left: left }));
+
+			self.helper.height(self.size.height);
+			self.helper.width(self.size.width);
+
+			if (this._helper && !o.animate) this._proportionallyResize();
+		}
+
+		$('body').css('cursor', 'auto');
+
+		this.element.removeClass("ui-resizable-resizing");
+
+		this._propagate("stop", event);
+
+		if (this._helper) this.helper.remove();
+		return false;
+
+	},
+
+	_updateCache: function(data) {
+		var o = this.options;
+		this.offset = this.helper.offset();
+		if (isNumber(data.left)) this.position.left = data.left;
+		if (isNumber(data.top)) this.position.top = data.top;
+		if (isNumber(data.height)) this.size.height = data.height;
+		if (isNumber(data.width)) this.size.width = data.width;
+	},
+
+	_updateRatio: function(data, event) {
+
+		var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
+
+		if (data.height) data.width = (csize.height * this.aspectRatio);
+		else if (data.width) data.height = (csize.width / this.aspectRatio);
+
+		if (a == 'sw') {
+			data.left = cpos.left + (csize.width - data.width);
+			data.top = null;
+		}
+		if (a == 'nw') {
+			data.top = cpos.top + (csize.height - data.height);
+			data.left = cpos.left + (csize.width - data.width);
+		}
+
+		return data;
+	},
+
+	_respectSize: function(data, event) {
+
+		var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
+				ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+					isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
+
+		if (isminw) data.width = o.minWidth;
+		if (isminh) data.height = o.minHeight;
+		if (ismaxw) data.width = o.maxWidth;
+		if (ismaxh) data.height = o.maxHeight;
+
+		var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
+		var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+
+		if (isminw && cw) data.left = dw - o.minWidth;
+		if (ismaxw && cw) data.left = dw - o.maxWidth;
+		if (isminh && ch)	data.top = dh - o.minHeight;
+		if (ismaxh && ch)	data.top = dh - o.maxHeight;
+
+		// fixing jump error on top/left - bug #2330
+		var isNotwh = !data.width && !data.height;
+		if (isNotwh && !data.left && data.top) data.top = null;
+		else if (isNotwh && !data.top && data.left) data.left = null;
+
+		return data;
+	},
+
+	_proportionallyResize: function() {
+
+		var o = this.options;
+		if (!this._proportionallyResizeElements.length) return;
+		var element = this.helper || this.element;
+
+		for (var i=0; i < this._proportionallyResizeElements.length; i++) {
+
+			var prel = this._proportionallyResizeElements[i];
+
+			if (!this.borderDif) {
+				var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
+					p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
+
+				this.borderDif = $.map(b, function(v, i) {
+					var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
+					return border + padding;
+				});
+			}
+
+			if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
+				continue;
+
+			prel.css({
+				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+			});
+
+		};
+
+	},
+
+	_renderProxy: function() {
+
+		var el = this.element, o = this.options;
+		this.elementOffset = el.offset();
+
+		if(this._helper) {
+
+			this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
+
+			// fix ie6 offset TODO: This seems broken
+			var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
+			pxyoffset = ( ie6 ? 2 : -1 );
+
+			this.helper.addClass(this._helper).css({
+				width: this.element.outerWidth() + pxyoffset,
+				height: this.element.outerHeight() + pxyoffset,
+				position: 'absolute',
+				left: this.elementOffset.left - ie6offset +'px',
+				top: this.elementOffset.top - ie6offset +'px',
+				zIndex: ++o.zIndex //TODO: Don't modify option
+			});
+
+			this.helper
+				.appendTo("body")
+				.disableSelection();
+
+		} else {
+			this.helper = this.element;
+		}
+
+	},
+
+	_change: {
+		e: function(event, dx, dy) {
+			return { width: this.originalSize.width + dx };
+		},
+		w: function(event, dx, dy) {
+			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+			return { left: sp.left + dx, width: cs.width - dx };
+		},
+		n: function(event, dx, dy) {
+			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+			return { top: sp.top + dy, height: cs.height - dy };
+		},
+		s: function(event, dx, dy) {
+			return { height: this.originalSize.height + dy };
+		},
+		se: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+		},
+		sw: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+		},
+		ne: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+		},
+		nw: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+		}
+	},
+
+	_propagate: function(n, event) {
+		$.ui.plugin.call(this, n, [event, this.ui()]);
+		(n != "resize" && this._trigger(n, event, this.ui()));
+	},
+
+	plugins: {},
+
+	ui: function() {
+		return {
+			originalElement: this.originalElement,
+			element: this.element,
+			helper: this.helper,
+			position: this.position,
+			size: this.size,
+			originalSize: this.originalSize,
+			originalPosition: this.originalPosition
+		};
+	}
+
+}));
+
+$.extend($.ui.resizable, {
+	version: "1.7.2",
+	eventPrefix: "resize",
+	defaults: {
+		alsoResize: false,
+		animate: false,
+		animateDuration: "slow",
+		animateEasing: "swing",
+		aspectRatio: false,
+		autoHide: false,
+		cancel: ":input,option",
+		containment: false,
+		delay: 0,
+		distance: 1,
+		ghost: false,
+		grid: false,
+		handles: "e,s,se",
+		helper: false,
+		maxHeight: null,
+		maxWidth: null,
+		minHeight: 10,
+		minWidth: 10,
+		zIndex: 1000
+	}
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+	start: function(event, ui) {
+
+		var self = $(this).data("resizable"), o = self.options;
+
+		_store = function(exp) {
+			$(exp).each(function() {
+				$(this).data("resizable-alsoresize", {
+					width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10),
+					left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10)
+				});
+			});
+		};
+
+		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
+			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0];	_store(o.alsoResize); }
+			else { $.each(o.alsoResize, function(exp, c) { _store(exp); }); }
+		}else{
+			_store(o.alsoResize);
+		}
+	},
+
+	resize: function(event, ui){
+		var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
+
+		var delta = {
+			height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
+			top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
+		},
+
+		_alsoResize = function(exp, c) {
+			$(exp).each(function() {
+				var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left'];
+
+				$.each(css || ['width', 'height', 'top', 'left'], function(i, prop) {
+					var sum = (start[prop]||0) + (delta[prop]||0);
+					if (sum && sum >= 0)
+						style[prop] = sum || null;
+				});
+
+				//Opera fixing relative position
+				if (/relative/.test(el.css('position')) && $.browser.opera) {
+					self._revertToRelativePosition = true;
+					el.css({ position: 'absolute', top: 'auto', left: 'auto' });
+				}
+
+				el.css(style);
+			});
+		};
+
+		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+			$.each(o.alsoResize, function(exp, c) { _alsoResize(exp, c); });
+		}else{
+			_alsoResize(o.alsoResize);
+		}
+	},
+
+	stop: function(event, ui){
+		var self = $(this).data("resizable");
+
+		//Opera fixing relative position
+		if (self._revertToRelativePosition && $.browser.opera) {
+			self._revertToRelativePosition = false;
+			el.css({ position: 'relative' });
+		}
+
+		$(this).removeData("resizable-alsoresize-start");
+	}
+});
+
+$.ui.plugin.add("resizable", "animate", {
+
+	stop: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options;
+
+		var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+					soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+						soffsetw = ista ? 0 : self.sizeDiff.width;
+
+		var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+					left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+						top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+
+		self.element.animate(
+			$.extend(style, top && left ? { top: top, left: left } : {}), {
+				duration: o.animateDuration,
+				easing: o.animateEasing,
+				step: function() {
+
+					var data = {
+						width: parseInt(self.element.css('width'), 10),
+						height: parseInt(self.element.css('height'), 10),
+						top: parseInt(self.element.css('top'), 10),
+						left: parseInt(self.element.css('left'), 10)
+					};
+
+					if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
+
+					// propagating resize, and updating values for each animation step
+					self._updateCache(data);
+					self._propagate("resize", event);
+
+				}
+			}
+		);
+	}
+
+});
+
+$.ui.plugin.add("resizable", "containment", {
+
+	start: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options, el = self.element;
+		var oc = o.containment,	ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+		if (!ce) return;
+
+		self.containerElement = $(ce);
+
+		if (/document/.test(oc) || oc == document) {
+			self.containerOffset = { left: 0, top: 0 };
+			self.containerPosition = { left: 0, top: 0 };
+
+			self.parentData = {
+				element: $(document), left: 0, top: 0,
+				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+			};
+		}
+
+		// i'm a node, so compute top, left, right, bottom
+		else {
+			var element = $(ce), p = [];
+			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+
+			self.containerOffset = element.offset();
+			self.containerPosition = element.position();
+			self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+
+			var co = self.containerOffset, ch = self.containerSize.height,	cw = self.containerSize.width,
+						width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+
+			self.parentData = {
+				element: ce, left: co.left, top: co.top, width: width, height: height
+			};
+		}
+	},
+
+	resize: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options,
+				ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
+				pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
+
+		if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
+
+		if (cp.left < (self._helper ? co.left : 0)) {
+			self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
+			if (pRatio) self.size.height = self.size.width / o.aspectRatio;
+			self.position.left = o.helper ? co.left : 0;
+		}
+
+		if (cp.top < (self._helper ? co.top : 0)) {
+			self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
+			if (pRatio) self.size.width = self.size.height * o.aspectRatio;
+			self.position.top = self._helper ? co.top : 0;
+		}
+
+		self.offset.left = self.parentData.left+self.position.left;
+		self.offset.top = self.parentData.top+self.position.top;
+
+		var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
+					hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
+
+		var isParent = self.containerElement.get(0) == self.element.parent().get(0),
+		    isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
+
+		if(isParent && isOffsetRelative) woset -= self.parentData.left;
+
+		if (woset + self.size.width >= self.parentData.width) {
+			self.size.width = self.parentData.width - woset;
+			if (pRatio) self.size.height = self.size.width / self.aspectRatio;
+		}
+
+		if (hoset + self.size.height >= self.parentData.height) {
+			self.size.height = self.parentData.height - hoset;
+			if (pRatio) self.size.width = self.size.height * self.aspectRatio;
+		}
+	},
+
+	stop: function(event, ui){
+		var self = $(this).data("resizable"), o = self.options, cp = self.position,
+				co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
+
+		var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
+
+		if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
+			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+		if (self._helper && !o.animate && (/static/).test(ce.css('position')))
+			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+
+	}
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+	start: function(event, ui) {
+
+		var self = $(this).data("resizable"), o = self.options, cs = self.size;
+
+		self.ghost = self.originalElement.clone();
+		self.ghost
+			.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+			.addClass('ui-resizable-ghost')
+			.addClass(typeof o.ghost == 'string' ? o.ghost : '');
+
+		self.ghost.appendTo(self.helper);
+
+	},
+
+	resize: function(event, ui){
+		var self = $(this).data("resizable"), o = self.options;
+		if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
+	},
+
+	stop: function(event, ui){
+		var self = $(this).data("resizable"), o = self.options;
+		if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
+	}
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+	resize: function(event, ui) {
+		var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
+		o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
+		var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
+
+		if (/^(se|s|e)$/.test(a)) {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+		}
+		else if (/^(ne)$/.test(a)) {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+			self.position.top = op.top - oy;
+		}
+		else if (/^(sw)$/.test(a)) {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+			self.position.left = op.left - ox;
+		}
+		else {
+			self.size.width = os.width + ox;
+			self.size.height = os.height + oy;
+			self.position.top = op.top - oy;
+			self.position.left = op.left - ox;
+		}
+	}
+
+});
+
+var num = function(v) {
+	return parseInt(v, 10) || 0;
+};
+
+var isNumber = function(value) {
+	return !isNaN(parseInt(value, 10));
+};
+
+})(jQuery);
+/*
+ * jQuery UI Dialog 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ *	ui.core.js
+ *	ui.draggable.js
+ *	ui.resizable.js
+ */
+(function($) {
+
+var setDataSwitch = {
+		dragStart: "start.draggable",
+		drag: "drag.draggable",
+		dragStop: "stop.draggable",
+		maxHeight: "maxHeight.resizable",
+		minHeight: "minHeight.resizable",
+		maxWidth: "maxWidth.resizable",
+		minWidth: "minWidth.resizable",
+		resizeStart: "start.resizable",
+		resize: "drag.resizable",
+		resizeStop: "stop.resizable"
+	},
+	
+	uiDialogClasses =
+		'ui-dialog ' +
+		'ui-widget ' +
+		'ui-widget-content ' +
+		'ui-corner-all ';
+
+$.widget("ui.dialog", {
+
+	_init: function() {
+		this.originalTitle = this.element.attr('title');
+
+		var self = this,
+			options = this.options,
+
+			title = options.title || this.originalTitle || '&nbsp;',
+			titleId = $.ui.dialog.getTitleId(this.element),
+
+			uiDialog = (this.uiDialog = $('<div/>'))
+				.appendTo(document.body)
+				.hide()
+				.addClass(uiDialogClasses + options.dialogClass)
+				.css({
+					position: 'absolute',
+					overflow: 'hidden',
+					zIndex: options.zIndex
+				})
+				// setting tabIndex makes the div focusable
+				// setting outline to 0 prevents a border on focus in Mozilla
+				.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
+					(options.closeOnEscape && event.keyCode
+						&& event.keyCode == $.ui.keyCode.ESCAPE && self.close(event));
+				})
+				.attr({
+					role: 'dialog',
+					'aria-labelledby': titleId
+				})
+				.mousedown(function(event) {
+					self.moveToTop(false, event);
+				}),
+
+			uiDialogContent = this.element
+				.show()
+				.removeAttr('title')
+				.addClass(
+					'ui-dialog-content ' +
+					'ui-widget-content')
+				.appendTo(uiDialog),
+
+			uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>'))
+				.addClass(
+					'ui-dialog-titlebar ' +
+					'ui-widget-header ' +
+					'ui-corner-all ' +
+					'ui-helper-clearfix'
+				)
+				.prependTo(uiDialog),
+
+			uiDialogTitlebarClose = $('<a href="#"/>')
+				.addClass(
+					'ui-dialog-titlebar-close ' +
+					'ui-corner-all'
+				)
+				.attr('role', 'button')
+				.hover(
+					function() {
+						uiDialogTitlebarClose.addClass('ui-state-hover');
+					},
+					function() {
+						uiDialogTitlebarClose.removeClass('ui-state-hover');
+					}
+				)
+				.focus(function() {
+					uiDialogTitlebarClose.addClass('ui-state-focus');
+				})
+				.blur(function() {
+					uiDialogTitlebarClose.removeClass('ui-state-focus');
+				})
+				.mousedown(function(ev) {
+					ev.stopPropagation();
+				})
+				.click(function(event) {
+					self.close(event);
+					return false;
+				})
+				.appendTo(uiDialogTitlebar),
+
+			uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>'))
+				.addClass(
+					'ui-icon ' +
+					'ui-icon-closethick'
+				)
+				.text(options.closeText)
+				.appendTo(uiDialogTitlebarClose),
+
+			uiDialogTitle = $('<span/>')
+				.addClass('ui-dialog-title')
+				.attr('id', titleId)
+				.html(title)
+				.prependTo(uiDialogTitlebar);
+
+		uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
+
+		(options.draggable && $.fn.draggable && this._makeDraggable());
+		(options.resizable && $.fn.resizable && this._makeResizable());
+
+		this._createButtons(options.buttons);
+		this._isOpen = false;
+
+		(options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe());
+		(options.autoOpen && this.open());
+		
+	},
+
+	destroy: function() {
+		(this.overlay && this.overlay.destroy());
+		this.uiDialog.hide();
+		this.element
+			.unbind('.dialog')
+			.removeData('dialog')
+			.removeClass('ui-dialog-content ui-widget-content')
+			.hide().appendTo('body');
+		this.uiDialog.remove();
+
+		(this.originalTitle && this.element.attr('title', this.originalTitle));
+	},
+
+	close: function(event) {
+		var self = this;
+		
+		if (false === self._trigger('beforeclose', event)) {
+			return;
+		}
+
+		(self.overlay && self.overlay.destroy());
+		self.uiDialog.unbind('keypress.ui-dialog');
+
+		(self.options.hide
+			? self.uiDialog.hide(self.options.hide, function() {
+				self._trigger('close', event);
+			})
+			: self.uiDialog.hide() && self._trigger('close', event));
+
+		$.ui.dialog.overlay.resize();
+
+		self._isOpen = false;
+		
+		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+		if (self.options.modal) {
+			var maxZ = 0;
+			$('.ui-dialog').each(function() {
+				if (this != self.uiDialog[0]) {
+					maxZ = Math.max(maxZ, $(this).css('z-index'));
+				}
+			});
+			$.ui.dialog.maxZ = maxZ;
+		}
+	},
+
+	isOpen: function() {
+		return this._isOpen;
+	},
+
+	// the force parameter allows us to move modal dialogs to their correct
+	// position on open
+	moveToTop: function(force, event) {
+
+		if ((this.options.modal && !force)
+			|| (!this.options.stack && !this.options.modal)) {
+			return this._trigger('focus', event);
+		}
+		
+		if (this.options.zIndex > $.ui.dialog.maxZ) {
+			$.ui.dialog.maxZ = this.options.zIndex;
+		}
+		(this.overlay && this.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = ++$.ui.dialog.maxZ));
+
+		//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
+		//  http://ui.jquery.com/bugs/ticket/3193
+		var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') };
+		this.uiDialog.css('z-index', ++$.ui.dialog.maxZ);
+		this.element.attr(saveScroll);
+		this._trigger('focus', event);
+	},
+
+	open: function() {
+		if (this._isOpen) { return; }
+
+		var options = this.options,
+			uiDialog = this.uiDialog;
+
+		this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null;
+		(uiDialog.next().length && uiDialog.appendTo('body'));
+		this._size();
+		this._position(options.position);
+		uiDialog.show(options.show);
+		this.moveToTop(true);
+
+		// prevent tabbing out of modal dialogs
+		(options.modal && uiDialog.bind('keypress.ui-dialog', function(event) {
+			if (event.keyCode != $.ui.keyCode.TAB) {
+				return;
+			}
+
+			var tabbables = $(':tabbable', this),
+				first = tabbables.filter(':first')[0],
+				last  = tabbables.filter(':last')[0];
+
+			if (event.target == last && !event.shiftKey) {
+				setTimeout(function() {
+					first.focus();
+				}, 1);
+			} else if (event.target == first && event.shiftKey) {
+				setTimeout(function() {
+					last.focus();
+				}, 1);
+			}
+		}));
+
+		// set focus to the first tabbable element in the content area or the first button
+		// if there are no tabbable elements, set focus on the dialog itself
+		$([])
+			.add(uiDialog.find('.ui-dialog-content :tabbable:first'))
+			.add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first'))
+			.add(uiDialog)
+			.filter(':first')
+			.focus();
+
+		this._trigger('open');
+		this._isOpen = true;
+	},
+
+	_createButtons: function(buttons) {
+		var self = this,
+			hasButtons = false,
+			uiDialogButtonPane = $('<div></div>')
+				.addClass(
+					'ui-dialog-buttonpane ' +
+					'ui-widget-content ' +
+					'ui-helper-clearfix'
+				);
+
+		// if we already have a button pane, remove it
+		this.uiDialog.find('.ui-dialog-buttonpane').remove();
+
+		(typeof buttons == 'object' && buttons !== null &&
+			$.each(buttons, function() { return !(hasButtons = true); }));
+		if (hasButtons) {
+			$.each(buttons, function(name, fn) {
+				$('<button type="button"></button>')
+					.addClass(
+						'ui-state-default ' +
+						'ui-corner-all'
+					)
+					.text(name)
+					.click(function() { fn.apply(self.element[0], arguments); })
+					.hover(
+						function() {
+							$(this).addClass('ui-state-hover');
+						},
+						function() {
+							$(this).removeClass('ui-state-hover');
+						}
+					)
+					.focus(function() {
+						$(this).addClass('ui-state-focus');
+					})
+					.blur(function() {
+						$(this).removeClass('ui-state-focus');
+					})
+					.appendTo(uiDialogButtonPane);
+			});
+			uiDialogButtonPane.appendTo(this.uiDialog);
+		}
+	},
+
+	_makeDraggable: function() {
+		var self = this,
+			options = this.options,
+			heightBeforeDrag;
+
+		this.uiDialog.draggable({
+			cancel: '.ui-dialog-content',
+			handle: '.ui-dialog-titlebar',
+			containment: 'document',
+			start: function() {
+				heightBeforeDrag = options.height;
+				$(this).height($(this).height()).addClass("ui-dialog-dragging");
+				(options.dragStart && options.dragStart.apply(self.element[0], arguments));
+			},
+			drag: function() {
+				(options.drag && options.drag.apply(self.element[0], arguments));
+			},
+			stop: function() {
+				$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
+				(options.dragStop && options.dragStop.apply(self.element[0], arguments));
+				$.ui.dialog.overlay.resize();
+			}
+		});
+	},
+
+	_makeResizable: function(handles) {
+		handles = (handles === undefined ? this.options.resizable : handles);
+		var self = this,
+			options = this.options,
+			resizeHandles = typeof handles == 'string'
+				? handles
+				: 'n,e,s,w,se,sw,ne,nw';
+
+		this.uiDialog.resizable({
+			cancel: '.ui-dialog-content',
+			alsoResize: this.element,
+			maxWidth: options.maxWidth,
+			maxHeight: options.maxHeight,
+			minWidth: options.minWidth,
+			minHeight: options.minHeight,
+			start: function() {
+				$(this).addClass("ui-dialog-resizing");
+				(options.resizeStart && options.resizeStart.apply(self.element[0], arguments));
+			},
+			resize: function() {
+				(options.resize && options.resize.apply(self.element[0], arguments));
+			},
+			handles: resizeHandles,
+			stop: function() {
+				$(this).removeClass("ui-dialog-resizing");
+				options.height = $(this).height();
+				options.width = $(this).width();
+				(options.resizeStop && options.resizeStop.apply(self.element[0], arguments));
+				$.ui.dialog.overlay.resize();
+			}
+		})
+		.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
+	},
+
+	_position: function(pos) {
+		var wnd = $(window), doc = $(document),
+			pTop = doc.scrollTop(), pLeft = doc.scrollLeft(),
+			minTop = pTop;
+
+		if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) {
+			pos = [
+				pos == 'right' || pos == 'left' ? pos : 'center',
+				pos == 'top' || pos == 'bottom' ? pos : 'middle'
+			];
+		}
+		if (pos.constructor != Array) {
+			pos = ['center', 'middle'];
+		}
+		if (pos[0].constructor == Number) {
+			pLeft += pos[0];
+		} else {
+			switch (pos[0]) {
+				case 'left':
+					pLeft += 0;
+					break;
+				case 'right':
+					pLeft += wnd.width() - this.uiDialog.outerWidth();
+					break;
+				default:
+				case 'center':
+					pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2;
+			}
+		}
+		if (pos[1].constructor == Number) {
+			pTop += pos[1];
+		} else {
+			switch (pos[1]) {
+				case 'top':
+					pTop += 0;
+					break;
+				case 'bottom':
+					pTop += wnd.height() - this.uiDialog.outerHeight();
+					break;
+				default:
+				case 'middle':
+					pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2;
+			}
+		}
+
+		// prevent the dialog from being too high (make sure the titlebar
+		// is accessible)
+		pTop = Math.max(pTop, minTop);
+		this.uiDialog.css({top: pTop, left: pLeft});
+	},
+
+	_setData: function(key, value){
+		(setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value));
+		switch (key) {
+			case "buttons":
+				this._createButtons(value);
+				break;
+			case "closeText":
+				this.uiDialogTitlebarCloseText.text(value);
+				break;
+			case "dialogClass":
+				this.uiDialog
+					.removeClass(this.options.dialogClass)
+					.addClass(uiDialogClasses + value);
+				break;
+			case "draggable":
+				(value
+					? this._makeDraggable()
+					: this.uiDialog.draggable('destroy'));
+				break;
+			case "height":
+				this.uiDialog.height(value);
+				break;
+			case "position":
+				this._position(value);
+				break;
+			case "resizable":
+				var uiDialog = this.uiDialog,
+					isResizable = this.uiDialog.is(':data(resizable)');
+
+				// currently resizable, becoming non-resizable
+				(isResizable && !value && uiDialog.resizable('destroy'));
+
+				// currently resizable, changing handles
+				(isResizable && typeof value == 'string' &&
+					uiDialog.resizable('option', 'handles', value));
+
+				// currently non-resizable, becoming resizable
+				(isResizable || this._makeResizable(value));
+				break;
+			case "title":
+				$(".ui-dialog-title", this.uiDialogTitlebar).html(value || '&nbsp;');
+				break;
+			case "width":
+				this.uiDialog.width(value);
+				break;
+		}
+
+		$.widget.prototype._setData.apply(this, arguments);
+	},
+
+	_size: function() {
+		/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+		 * divs will both have width and height set, so we need to reset them
+		 */
+		var options = this.options;
+
+		// reset content sizing
+		this.element.css({
+			height: 0,
+			minHeight: 0,
+			width: 'auto'
+		});
+
+		// reset wrapper sizing
+		// determine the height of all the non-content elements
+		var nonContentHeight = this.uiDialog.css({
+				height: 'auto',
+				width: options.width
+			})
+			.height();
+
+		this.element
+			.css({
+				minHeight: Math.max(options.minHeight - nonContentHeight, 0),
+				height: options.height == 'auto'
+					? 'auto'
+					: Math.max(options.height - nonContentHeight, 0)
+			});
+	}
+});
+
+$.extend($.ui.dialog, {
+	version: "1.7.2",
+	defaults: {
+		autoOpen: true,
+		bgiframe: false,
+		buttons: {},
+		closeOnEscape: true,
+		closeText: 'close',
+		dialogClass: '',
+		draggable: true,
+		hide: null,
+		height: 'auto',
+		maxHeight: false,
+		maxWidth: false,
+		minHeight: 150,
+		minWidth: 150,
+		modal: false,
+		position: 'center',
+		resizable: true,
+		show: null,
+		stack: true,
+		title: '',
+		width: 300,
+		zIndex: 1000
+	},
+
+	getter: 'isOpen',
+
+	uuid: 0,
+	maxZ: 0,
+
+	getTitleId: function($el) {
+		return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid);
+	},
+
+	overlay: function(dialog) {
+		this.$el = $.ui.dialog.overlay.create(dialog);
+	}
+});
+
+$.extend($.ui.dialog.overlay, {
+	instances: [],
+	maxZ: 0,
+	events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
+		function(event) { return event + '.dialog-overlay'; }).join(' '),
+	create: function(dialog) {
+		if (this.instances.length === 0) {
+			// prevent use of anchors and inputs
+			// we use a setTimeout in case the overlay is created from an
+			// event that we're going to be cancelling (see #2804)
+			setTimeout(function() {
+				// handle $(el).dialog().dialog('close') (see #4065)
+				if ($.ui.dialog.overlay.instances.length) {
+					$(document).bind($.ui.dialog.overlay.events, function(event) {
+						var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0;
+						return (dialogZ > $.ui.dialog.overlay.maxZ);
+					});
+				}
+			}, 1);
+
+			// allow closing by pressing the escape key
+			$(document).bind('keydown.dialog-overlay', function(event) {
+				(dialog.options.closeOnEscape && event.keyCode
+						&& event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event));
+			});
+
+			// handle window resize
+			$(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
+		}
+
+		var $el = $('<div></div>').appendTo(document.body)
+			.addClass('ui-widget-overlay').css({
+				width: this.width(),
+				height: this.height()
+			});
+
+		(dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe());
+
+		this.instances.push($el);
+		return $el;
+	},
+
+	destroy: function($el) {
+		this.instances.splice($.inArray(this.instances, $el), 1);
+
+		if (this.instances.length === 0) {
+			$([document, window]).unbind('.dialog-overlay');
+		}
+
+		$el.remove();
+		
+		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+		var maxZ = 0;
+		$.each(this.instances, function() {
+			maxZ = Math.max(maxZ, this.css('z-index'));
+		});
+		this.maxZ = maxZ;
+	},
+
+	height: function() {
+		// handle IE 6
+		if ($.browser.msie && $.browser.version < 7) {
+			var scrollHeight = Math.max(
+				document.documentElement.scrollHeight,
+				document.body.scrollHeight
+			);
+			var offsetHeight = Math.max(
+				document.documentElement.offsetHeight,
+				document.body.offsetHeight
+			);
+
+			if (scrollHeight < offsetHeight) {
+				return $(window).height() + 'px';
+			} else {
+				return scrollHeight + 'px';
+			}
+		// handle "good" browsers
+		} else {
+			return $(document).height() + 'px';
+		}
+	},
+
+	width: function() {
+		// handle IE 6
+		if ($.browser.msie && $.browser.version < 7) {
+			var scrollWidth = Math.max(
+				document.documentElement.scrollWidth,
+				document.body.scrollWidth
+			);
+			var offsetWidth = Math.max(
+				document.documentElement.offsetWidth,
+				document.body.offsetWidth
+			);
+
+			if (scrollWidth < offsetWidth) {
+				return $(window).width() + 'px';
+			} else {
+				return scrollWidth + 'px';
+			}
+		// handle "good" browsers
+		} else {
+			return $(document).width() + 'px';
+		}
+	},
+
+	resize: function() {
+		/* If the dialog is draggable and the user drags it past the
+		 * right edge of the window, the document becomes wider so we
+		 * need to stretch the overlay. If the user then drags the
+		 * dialog back to the left, the document will become narrower,
+		 * so we need to shrink the overlay to the appropriate size.
+		 * This is handled by shrinking the overlay before setting it
+		 * to the full document size.
+		 */
+		var $overlays = $([]);
+		$.each($.ui.dialog.overlay.instances, function() {
+			$overlays = $overlays.add(this);
+		});
+
+		$overlays.css({
+			width: 0,
+			height: 0
+		}).css({
+			width: $.ui.dialog.overlay.width(),
+			height: $.ui.dialog.overlay.height()
+		});
+	}
+});
+
+$.extend($.ui.dialog.overlay.prototype, {
+	destroy: function() {
+		$.ui.dialog.overlay.destroy(this.$el);
+	}
+});
+
+})(jQuery);
+/*
+ * jQuery UI Tabs 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function($) {
+
+$.widget("ui.tabs", {
+
+	_init: function() {
+		if (this.options.deselectable !== undefined) {
+			this.options.collapsible = this.options.deselectable;
+		}
+		this._tabify(true);
+	},
+
+	_setData: function(key, value) {
+		if (key == 'selected') {
+			if (this.options.collapsible && value == this.options.selected) {
+				return;
+			}
+			this.select(value);
+		}
+		else {
+			this.options[key] = value;
+			if (key == 'deselectable') {
+				this.options.collapsible = value;
+			}
+			this._tabify();
+		}
+	},
+
+	_tabId: function(a) {
+		return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') ||
+			this.options.idPrefix + $.data(a);
+	},
+
+	_sanitizeSelector: function(hash) {
+		return hash.replace(/:/g, '\\:'); // we need this because an id may contain a ":"
+	},
+
+	_cookie: function() {
+		var cookie = this.cookie || (this.cookie = this.options.cookie.name || 'ui-tabs-' + $.data(this.list[0]));
+		return $.cookie.apply(null, [cookie].concat($.makeArray(arguments)));
+	},
+
+	_ui: function(tab, panel) {
+		return {
+			tab: tab,
+			panel: panel,
+			index: this.anchors.index(tab)
+		};
+	},
+
+	_cleanup: function() {
+		// restore all former loading tabs labels
+		this.lis.filter('.ui-state-processing').removeClass('ui-state-processing')
+				.find('span:data(label.tabs)')
+				.each(function() {
+					var el = $(this);
+					el.html(el.data('label.tabs')).removeData('label.tabs');
+				});
+	},
+
+	_tabify: function(init) {
+
+		this.list = this.element.children('ul:first');
+		this.lis = $('li:has(a[href])', this.list);
+		this.anchors = this.lis.map(function() { return $('a', this)[0]; });
+		this.panels = $([]);
+
+		var self = this, o = this.options;
+
+		var fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
+		this.anchors.each(function(i, a) {
+			var href = $(a).attr('href');
+
+			// For dynamically created HTML that contains a hash as href IE < 8 expands
+			// such href to the full page url with hash and then misinterprets tab as ajax.
+			// Same consideration applies for an added tab with a fragment identifier
+			// since a[href=#fragment-identifier] does unexpectedly not match.
+			// Thus normalize href attribute...
+			var hrefBase = href.split('#')[0], baseEl;
+			if (hrefBase && (hrefBase === location.toString().split('#')[0] ||
+					(baseEl = $('base')[0]) && hrefBase === baseEl.href)) {
+				href = a.hash;
+				a.href = href;
+			}
+
+			// inline tab
+			if (fragmentId.test(href)) {
+				self.panels = self.panels.add(self._sanitizeSelector(href));
+			}
+
+			// remote tab
+			else if (href != '#') { // prevent loading the page itself if href is just "#"
+				$.data(a, 'href.tabs', href); // required for restore on destroy
+
+				// TODO until #3808 is fixed strip fragment identifier from url
+				// (IE fails to load from such url)
+				$.data(a, 'load.tabs', href.replace(/#.*$/, '')); // mutable data
+
+				var id = self._tabId(a);
+				a.href = '#' + id;
+				var $panel = $('#' + id);
+				if (!$panel.length) {
+					$panel = $(o.panelTemplate).attr('id', id).addClass('ui-tabs-panel ui-widget-content ui-corner-bottom')
+						.insertAfter(self.panels[i - 1] || self.list);
+					$panel.data('destroy.tabs', true);
+				}
+				self.panels = self.panels.add($panel);
+			}
+
+			// invalid tab href
+			else {
+				o.disabled.push(i);
+			}
+		});
+
+		// initialization from scratch
+		if (init) {
+
+			// attach necessary classes for styling
+			this.element.addClass('ui-tabs ui-widget ui-widget-content ui-corner-all');
+			this.list.addClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');
+			this.lis.addClass('ui-state-default ui-corner-top');
+			this.panels.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom');
+
+			// Selected tab
+			// use "selected" option or try to retrieve:
+			// 1. from fragment identifier in url
+			// 2. from cookie
+			// 3. from selected class attribute on <li>
+			if (o.selected === undefined) {
+				if (location.hash) {
+					this.anchors.each(function(i, a) {
+						if (a.hash == location.hash) {
+							o.selected = i;
+							return false; // break
+						}
+					});
+				}
+				if (typeof o.selected != 'number' && o.cookie) {
+					o.selected = parseInt(self._cookie(), 10);
+				}
+				if (typeof o.selected != 'number' && this.lis.filter('.ui-tabs-selected').length) {
+					o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected'));
+				}
+				o.selected = o.selected || 0;
+			}
+			else if (o.selected === null) { // usage of null is deprecated, TODO remove in next release
+				o.selected = -1;
+			}
+
+			// sanity check - default to first tab...
+			o.selected = ((o.selected >= 0 && this.anchors[o.selected]) || o.selected < 0) ? o.selected : 0;
+
+			// Take disabling tabs via class attribute from HTML
+			// into account and update option properly.
+			// A selected tab cannot become disabled.
+			o.disabled = $.unique(o.disabled.concat(
+				$.map(this.lis.filter('.ui-state-disabled'),
+					function(n, i) { return self.lis.index(n); } )
+			)).sort();
+
+			if ($.inArray(o.selected, o.disabled) != -1) {
+				o.disabled.splice($.inArray(o.selected, o.disabled), 1);
+			}
+
+			// highlight selected tab
+			this.panels.addClass('ui-tabs-hide');
+			this.lis.removeClass('ui-tabs-selected ui-state-active');
+			if (o.selected >= 0 && this.anchors.length) { // check for length avoids error when initializing empty list
+				this.panels.eq(o.selected).removeClass('ui-tabs-hide');
+				this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active');
+
+				// seems to be expected behavior that the show callback is fired
+				self.element.queue("tabs", function() {
+					self._trigger('show', null, self._ui(self.anchors[o.selected], self.panels[o.selected]));
+				});
+				
+				this.load(o.selected);
+			}
+
+			// clean up to avoid memory leaks in certain versions of IE 6
+			$(window).bind('unload', function() {
+				self.lis.add(self.anchors).unbind('.tabs');
+				self.lis = self.anchors = self.panels = null;
+			});
+
+		}
+		// update selected after add/remove
+		else {
+			o.selected = this.lis.index(this.lis.filter('.ui-tabs-selected'));
+		}
+
+		// update collapsible
+		this.element[o.collapsible ? 'addClass' : 'removeClass']('ui-tabs-collapsible');
+
+		// set or update cookie after init and add/remove respectively
+		if (o.cookie) {
+			this._cookie(o.selected, o.cookie);
+		}
+
+		// disable tabs
+		for (var i = 0, li; (li = this.lis[i]); i++) {
+			$(li)[$.inArray(i, o.disabled) != -1 &&
+				!$(li).hasClass('ui-tabs-selected') ? 'addClass' : 'removeClass']('ui-state-disabled');
+		}
+
+		// reset cache if switching from cached to not cached
+		if (o.cache === false) {
+			this.anchors.removeData('cache.tabs');
+		}
+
+		// remove all handlers before, tabify may run on existing tabs after add or option change
+		this.lis.add(this.anchors).unbind('.tabs');
+
+		if (o.event != 'mouseover') {
+			var addState = function(state, el) {
+				if (el.is(':not(.ui-state-disabled)')) {
+					el.addClass('ui-state-' + state);
+				}
+			};
+			var removeState = function(state, el) {
+				el.removeClass('ui-state-' + state);
+			};
+			this.lis.bind('mouseover.tabs', function() {
+				addState('hover', $(this));
+			});
+			this.lis.bind('mouseout.tabs', function() {
+				removeState('hover', $(this));
+			});
+			this.anchors.bind('focus.tabs', function() {
+				addState('focus', $(this).closest('li'));
+			});
+			this.anchors.bind('blur.tabs', function() {
+				removeState('focus', $(this).closest('li'));
+			});
+		}
+
+		// set up animations
+		var hideFx, showFx;
+		if (o.fx) {
+			if ($.isArray(o.fx)) {
+				hideFx = o.fx[0];
+				showFx = o.fx[1];
+			}
+			else {
+				hideFx = showFx = o.fx;
+			}
+		}
+
+		// Reset certain styles left over from animation
+		// and prevent IE's ClearType bug...
+		function resetStyle($el, fx) {
+			$el.css({ display: '' });
+			if ($.browser.msie && fx.opacity) {
+				$el[0].style.removeAttribute('filter');
+			}
+		}
+
+		// Show a tab...
+		var showTab = showFx ?
+			function(clicked, $show) {
+				$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');
+				$show.hide().removeClass('ui-tabs-hide') // avoid flicker that way
+					.animate(showFx, showFx.duration || 'normal', function() {
+						resetStyle($show, showFx);
+						self._trigger('show', null, self._ui(clicked, $show[0]));
+					});
+			} :
+			function(clicked, $show) {
+				$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');
+				$show.removeClass('ui-tabs-hide');
+				self._trigger('show', null, self._ui(clicked, $show[0]));
+			};
+
+		// Hide a tab, $show is optional...
+		var hideTab = hideFx ?
+			function(clicked, $hide) {
+				$hide.animate(hideFx, hideFx.duration || 'normal', function() {
+					self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');
+					$hide.addClass('ui-tabs-hide');
+					resetStyle($hide, hideFx);
+					self.element.dequeue("tabs");
+				});
+			} :
+			function(clicked, $hide, $show) {
+				self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');
+				$hide.addClass('ui-tabs-hide');
+				self.element.dequeue("tabs");
+			};
+
+		// attach tab event handler, unbind to avoid duplicates from former tabifying...
+		this.anchors.bind(o.event + '.tabs', function() {
+			var el = this, $li = $(this).closest('li'), $hide = self.panels.filter(':not(.ui-tabs-hide)'),
+					$show = $(self._sanitizeSelector(this.hash));
+
+			// If tab is already selected and not collapsible or tab disabled or
+			// or is already loading or click callback returns false stop here.
+			// Check if click handler returns false last so that it is not executed
+			// for a disabled or loading tab!
+			if (($li.hasClass('ui-tabs-selected') && !o.collapsible) ||
+				$li.hasClass('ui-state-disabled') ||
+				$li.hasClass('ui-state-processing') ||
+				self._trigger('select', null, self._ui(this, $show[0])) === false) {
+				this.blur();
+				return false;
+			}
+
+			o.selected = self.anchors.index(this);
+
+			self.abort();
+
+			// if tab may be closed
+			if (o.collapsible) {
+				if ($li.hasClass('ui-tabs-selected')) {
+					o.selected = -1;
+
+					if (o.cookie) {
+						self._cookie(o.selected, o.cookie);
+					}
+
+					self.element.queue("tabs", function() {
+						hideTab(el, $hide);
+					}).dequeue("tabs");
+					
+					this.blur();
+					return false;
+				}
+				else if (!$hide.length) {
+					if (o.cookie) {
+						self._cookie(o.selected, o.cookie);
+					}
+					
+					self.element.queue("tabs", function() {
+						showTab(el, $show);
+					});
+
+					self.load(self.anchors.index(this)); // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
+					
+					this.blur();
+					return false;
+				}
+			}
+
+			if (o.cookie) {
+				self._cookie(o.selected, o.cookie);
+			}
+
+			// show new tab
+			if ($show.length) {
+				if ($hide.length) {
+					self.element.queue("tabs", function() {
+						hideTab(el, $hide);
+					});
+				}
+				self.element.queue("tabs", function() {
+					showTab(el, $show);
+				});
+				
+				self.load(self.anchors.index(this));
+			}
+			else {
+				throw 'jQuery UI Tabs: Mismatching fragment identifier.';
+			}
+
+			// Prevent IE from keeping other link focussed when using the back button
+			// and remove dotted border from clicked link. This is controlled via CSS
+			// in modern browsers; blur() removes focus from address bar in Firefox
+			// which can become a usability and annoying problem with tabs('rotate').
+			if ($.browser.msie) {
+				this.blur();
+			}
+
+		});
+
+		// disable click in any case
+		this.anchors.bind('click.tabs', function(){return false;});
+
+	},
+
+	destroy: function() {
+		var o = this.options;
+
+		this.abort();
+		
+		this.element.unbind('.tabs')
+			.removeClass('ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible')
+			.removeData('tabs');
+
+		this.list.removeClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');
+
+		this.anchors.each(function() {
+			var href = $.data(this, 'href.tabs');
+			if (href) {
+				this.href = href;
+			}
+			var $this = $(this).unbind('.tabs');
+			$.each(['href', 'load', 'cache'], function(i, prefix) {
+				$this.removeData(prefix + '.tabs');
+			});
+		});
+
+		this.lis.unbind('.tabs').add(this.panels).each(function() {
+			if ($.data(this, 'destroy.tabs')) {
+				$(this).remove();
+			}
+			else {
+				$(this).removeClass([
+					'ui-state-default',
+					'ui-corner-top',
+					'ui-tabs-selected',
+					'ui-state-active',
+					'ui-state-hover',
+					'ui-state-focus',
+					'ui-state-disabled',
+					'ui-tabs-panel',
+					'ui-widget-content',
+					'ui-corner-bottom',
+					'ui-tabs-hide'
+				].join(' '));
+			}
+		});
+
+		if (o.cookie) {
+			this._cookie(null, o.cookie);
+		}
+	},
+
+	add: function(url, label, index) {
+		if (index === undefined) {
+			index = this.anchors.length; // append by default
+		}
+
+		var self = this, o = this.options,
+			$li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label)),
+			id = !url.indexOf('#') ? url.replace('#', '') : this._tabId($('a', $li)[0]);
+
+		$li.addClass('ui-state-default ui-corner-top').data('destroy.tabs', true);
+
+		// try to find an existing element before creating a new one
+		var $panel = $('#' + id);
+		if (!$panel.length) {
+			$panel = $(o.panelTemplate).attr('id', id).data('destroy.tabs', true);
+		}
+		$panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide');
+
+		if (index >= this.lis.length) {
+			$li.appendTo(this.list);
+			$panel.appendTo(this.list[0].parentNode);
+		}
+		else {
+			$li.insertBefore(this.lis[index]);
+			$panel.insertBefore(this.panels[index]);
+		}
+
+		o.disabled = $.map(o.disabled,
+			function(n, i) { return n >= index ? ++n : n; });
+
+		this._tabify();
+
+		if (this.anchors.length == 1) { // after tabify
+			$li.addClass('ui-tabs-selected ui-state-active');
+			$panel.removeClass('ui-tabs-hide');
+			this.element.queue("tabs", function() {
+				self._trigger('show', null, self._ui(self.anchors[0], self.panels[0]));
+			});
+				
+			this.load(0);
+		}
+
+		// callback
+		this._trigger('add', null, this._ui(this.anchors[index], this.panels[index]));
+	},
+
+	remove: function(index) {
+		var o = this.options, $li = this.lis.eq(index).remove(),
+			$panel = this.panels.eq(index).remove();
+
+		// If selected tab was removed focus tab to the right or
+		// in case the last tab was removed the tab to the left.
+		if ($li.hasClass('ui-tabs-selected') && this.anchors.length > 1) {
+			this.select(index + (index + 1 < this.anchors.length ? 1 : -1));
+		}
+
+		o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }),
+			function(n, i) { return n >= index ? --n : n; });
+
+		this._tabify();
+
+		// callback
+		this._trigger('remove', null, this._ui($li.find('a')[0], $panel[0]));
+	},
+
+	enable: function(index) {
+		var o = this.options;
+		if ($.inArray(index, o.disabled) == -1) {
+			return;
+		}
+
+		this.lis.eq(index).removeClass('ui-state-disabled');
+		o.disabled = $.grep(o.disabled, function(n, i) { return n != index; });
+
+		// callback
+		this._trigger('enable', null, this._ui(this.anchors[index], this.panels[index]));
+	},
+
+	disable: function(index) {
+		var self = this, o = this.options;
+		if (index != o.selected) { // cannot disable already selected tab
+			this.lis.eq(index).addClass('ui-state-disabled');
+
+			o.disabled.push(index);
+			o.disabled.sort();
+
+			// callback
+			this._trigger('disable', null, this._ui(this.anchors[index], this.panels[index]));
+		}
+	},
+
+	select: function(index) {
+		if (typeof index == 'string') {
+			index = this.anchors.index(this.anchors.filter('[href$=' + index + ']'));
+		}
+		else if (index === null) { // usage of null is deprecated, TODO remove in next release
+			index = -1;
+		}
+		if (index == -1 && this.options.collapsible) {
+			index = this.options.selected;
+		}
+
+		this.anchors.eq(index).trigger(this.options.event + '.tabs');
+	},
+
+	load: function(index) {
+		var self = this, o = this.options, a = this.anchors.eq(index)[0], url = $.data(a, 'load.tabs');
+
+		this.abort();
+
+		// not remote or from cache
+		if (!url || this.element.queue("tabs").length !== 0 && $.data(a, 'cache.tabs')) {
+			this.element.dequeue("tabs");
+			return;
+		}
+
+		// load remote from here on
+		this.lis.eq(index).addClass('ui-state-processing');
+
+		if (o.spinner) {
+			var span = $('span', a);
+			span.data('label.tabs', span.html()).html(o.spinner);
+		}
+
+		this.xhr = $.ajax($.extend({}, o.ajaxOptions, {
+			url: url,
+			success: function(r, s) {
+				$(self._sanitizeSelector(a.hash)).html(r);
+
+				// take care of tab labels
+				self._cleanup();
+
+				if (o.cache) {
+					$.data(a, 'cache.tabs', true); // if loaded once do not load them again
+				}
+
+				// callbacks
+				self._trigger('load', null, self._ui(self.anchors[index], self.panels[index]));
+				try {
+					o.ajaxOptions.success(r, s);
+				}
+				catch (e) {}
+
+				// last, so that load event is fired before show...
+				self.element.dequeue("tabs");
+			}
+		}));
+	},
+
+	abort: function() {
+		// stop possibly running animations
+		this.element.queue([]);
+		this.panels.stop(false, true);
+
+		// terminate pending requests from other tabs
+		if (this.xhr) {
+			this.xhr.abort();
+			delete this.xhr;
+		}
+
+		// take care of tab labels
+		this._cleanup();
+
+	},
+
+	url: function(index, url) {
+		this.anchors.eq(index).removeData('cache.tabs').data('load.tabs', url);
+	},
+
+	length: function() {
+		return this.anchors.length;
+	}
+
+});
+
+$.extend($.ui.tabs, {
+	version: '1.7.2',
+	getter: 'length',
+	defaults: {
+		ajaxOptions: null,
+		cache: false,
+		cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
+		collapsible: false,
+		disabled: [],
+		event: 'click',
+		fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
+		idPrefix: 'ui-tabs-',
+		panelTemplate: '<div></div>',
+		spinner: '<em>Loading&#8230;</em>',
+		tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>'
+	}
+});
+
+/*
+ * Tabs Extensions
+ */
+
+/*
+ * Rotate
+ */
+$.extend($.ui.tabs.prototype, {
+	rotation: null,
+	rotate: function(ms, continuing) {
+
+		var self = this, o = this.options;
+		
+		var rotate = self._rotate || (self._rotate = function(e) {
+			clearTimeout(self.rotation);
+			self.rotation = setTimeout(function() {
+				var t = o.selected;
+				self.select( ++t < self.anchors.length ? t : 0 );
+			}, ms);
+			
+			if (e) {
+				e.stopPropagation();
+			}
+		});
+		
+		var stop = self._unrotate || (self._unrotate = !continuing ?
+			function(e) {
+				if (e.clientX) { // in case of a true click
+					self.rotate(null);
+				}
+			} :
+			function(e) {
+				t = o.selected;
+				rotate();
+			});
+
+		// start rotation
+		if (ms) {
+			this.element.bind('tabsshow', rotate);
+			this.anchors.bind(o.event + '.tabs', stop);
+			rotate();
+		}
+		// stop rotation
+		else {
+			clearTimeout(self.rotation);
+			this.element.unbind('tabsshow', rotate);
+			this.anchors.unbind(o.event + '.tabs', stop);
+			delete this._rotate;
+			delete this._unrotate;
+		}
+	}
+});
+
+})(jQuery);
+/*
+ * jQuery UI Datepicker 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ *	ui.core.js
+ */
+
+(function($) { // hide the namespace
+
+$.extend($.ui, { datepicker: { version: "1.7.2" } });
+
+var PROP_NAME = 'datepicker';
+
+/* Date picker manager.
+   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+   Settings for (groups of) date pickers are maintained in an instance object,
+   allowing multiple different settings on the same page. */
+
+function Datepicker() {
+	this.debug = false; // Change this to true to start debugging
+	this._curInst = null; // The current instance in use
+	this._keyEvent = false; // If the last event was a key event
+	this._disabledInputs = []; // List of date picker inputs that have been disabled
+	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+	this._inDialog = false; // True if showing within a "dialog", false if not
+	this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
+	this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
+	this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
+	this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
+	this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
+	this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
+	this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
+	this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
+	this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
+	this.regional = []; // Available regional settings, indexed by language code
+	this.regional[''] = { // Default regional settings
+		closeText: 'Done', // Display text for close link
+		prevText: 'Prev', // Display text for previous month link
+		nextText: 'Next', // Display text for next month link
+		currentText: 'Today', // Display text for current month link
+		monthNames: ['January','February','March','April','May','June',
+			'July','August','September','October','November','December'], // Names of months for drop-down and formatting
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
+		dateFormat: 'mm/dd/yy', // See format options on parseDate
+		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+		isRTL: false // True if right-to-left language, false if left-to-right
+	};
+	this._defaults = { // Global defaults for all the date picker instances
+		showOn: 'focus', // 'focus' for popup on focus,
+			// 'button' for trigger button, or 'both' for either
+		showAnim: 'show', // Name of jQuery animation for popup
+		showOptions: {}, // Options for enhanced animations
+		defaultDate: null, // Used when field is blank: actual date,
+			// +/-number for offset from today, null for today
+		appendText: '', // Display text following the input box, e.g. showing the format
+		buttonText: '...', // Text for trigger button
+		buttonImage: '', // URL for trigger button image
+		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+		hideIfNoPrevNext: false, // True to hide next/previous month links
+			// if not applicable, false to just disable them
+		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+		gotoCurrent: false, // True if today link goes back to current selection instead
+		changeMonth: false, // True if month can be selected directly, false if only prev/next
+		changeYear: false, // True if year can be selected directly, false if only prev/next
+		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+		yearRange: '-10:+10', // Range of years to display in drop-down,
+			// either relative to current year (-nn:+nn) or absolute (nnnn:nnnn)
+		showOtherMonths: false, // True to show dates in other months, false to leave blank
+		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+			// takes a Date and returns the number of the week for it
+		shortYearCutoff: '+10', // Short year values < this are in the current century,
+			// > this are in the previous century,
+			// string value starting with '+' for current year + value
+		minDate: null, // The earliest selectable date, or null for no limit
+		maxDate: null, // The latest selectable date, or null for no limit
+		duration: 'normal', // Duration of display/closure
+		beforeShowDay: null, // Function that takes a date and returns an array with
+			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
+			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+		beforeShow: null, // Function that takes an input field and
+			// returns a set of custom settings for the date picker
+		onSelect: null, // Define a callback function when a date is selected
+		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+		onClose: null, // Define a callback function when the datepicker is closed
+		numberOfMonths: 1, // Number of months to show at a time
+		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+		stepMonths: 1, // Number of months to step back/forward
+		stepBigMonths: 12, // Number of months to step back/forward for the big links
+		altField: '', // Selector for an alternate field to store selected dates into
+		altFormat: '', // The date format to use for the alternate field
+		constrainInput: true, // The input is constrained by the current date format
+		showButtonPanel: false // True to show button panel, false to not show it
+	};
+	$.extend(this._defaults, this.regional['']);
+	this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');
+}
+
+$.extend(Datepicker.prototype, {
+	/* Class name added to elements to indicate already configured with a date picker. */
+	markerClassName: 'hasDatepicker',
+
+	/* Debug logging (if enabled). */
+	log: function () {
+		if (this.debug)
+			console.log.apply('', arguments);
+	},
+
+	/* Override the default settings for all instances of the date picker.
+	   @param  settings  object - the new settings to use as defaults (anonymous object)
+	   @return the manager object */
+	setDefaults: function(settings) {
+		extendRemove(this._defaults, settings || {});
+		return this;
+	},
+
+	/* Attach the date picker to a jQuery selection.
+	   @param  target    element - the target input field or division or span
+	   @param  settings  object - the new settings to use for this date picker instance (anonymous) */
+	_attachDatepicker: function(target, settings) {
+		// check for settings on the control itself - in namespace 'date:'
+		var inlineSettings = null;
+		for (var attrName in this._defaults) {
+			var attrValue = target.getAttribute('date:' + attrName);
+			if (attrValue) {
+				inlineSettings = inlineSettings || {};
+				try {
+					inlineSettings[attrName] = eval(attrValue);
+				} catch (err) {
+					inlineSettings[attrName] = attrValue;
+				}
+			}
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		var inline = (nodeName == 'div' || nodeName == 'span');
+		if (!target.id)
+			target.id = 'dp' + (++this.uuid);
+		var inst = this._newInst($(target), inline);
+		inst.settings = $.extend({}, settings || {}, inlineSettings || {});
+		if (nodeName == 'input') {
+			this._connectDatepicker(target, inst);
+		} else if (inline) {
+			this._inlineDatepicker(target, inst);
+		}
+	},
+
+	/* Create a new instance object. */
+	_newInst: function(target, inline) {
+		var id = target[0].id.replace(/([:\[\]\.])/g, '\\\\$1'); // escape jQuery meta chars
+		return {id: id, input: target, // associated target
+			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+			drawMonth: 0, drawYear: 0, // month being drawn
+			inline: inline, // is datepicker inline or not
+			dpDiv: (!inline ? this.dpDiv : // presentation div
+			$('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};
+	},
+
+	/* Attach the date picker to an input field. */
+	_connectDatepicker: function(target, inst) {
+		var input = $(target);
+		inst.append = $([]);
+		inst.trigger = $([]);
+		if (input.hasClass(this.markerClassName))
+			return;
+		var appendText = this._get(inst, 'appendText');
+		var isRTL = this._get(inst, 'isRTL');
+		if (appendText) {
+			inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
+			input[isRTL ? 'before' : 'after'](inst.append);
+		}
+		var showOn = this._get(inst, 'showOn');
+		if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
+			input.focus(this._showDatepicker);
+		if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
+			var buttonText = this._get(inst, 'buttonText');
+			var buttonImage = this._get(inst, 'buttonImage');
+			inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
+				$('<img/>').addClass(this._triggerClass).
+					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+				$('<button type="button"></button>').addClass(this._triggerClass).
+					html(buttonImage == '' ? buttonText : $('<img/>').attr(
+					{ src:buttonImage, alt:buttonText, title:buttonText })));
+			input[isRTL ? 'before' : 'after'](inst.trigger);
+			inst.trigger.click(function() {
+				if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target)
+					$.datepicker._hideDatepicker();
+				else
+					$.datepicker._showDatepicker(target);
+				return false;
+			});
+		}
+		input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).
+			bind("setData.datepicker", function(event, key, value) {
+				inst.settings[key] = value;
+			}).bind("getData.datepicker", function(event, key) {
+				return this._get(inst, key);
+			});
+		$.data(target, PROP_NAME, inst);
+	},
+
+	/* Attach an inline date picker to a div. */
+	_inlineDatepicker: function(target, inst) {
+		var divSpan = $(target);
+		if (divSpan.hasClass(this.markerClassName))
+			return;
+		divSpan.addClass(this.markerClassName).append(inst.dpDiv).
+			bind("setData.datepicker", function(event, key, value){
+				inst.settings[key] = value;
+			}).bind("getData.datepicker", function(event, key){
+				return this._get(inst, key);
+			});
+		$.data(target, PROP_NAME, inst);
+		this._setDate(inst, this._getDefaultDate(inst));
+		this._updateDatepicker(inst);
+		this._updateAlternate(inst);
+	},
+
+	/* Pop-up the date picker in a "dialog" box.
+	   @param  input     element - ignored
+	   @param  dateText  string - the initial date to display (in the current format)
+	   @param  onSelect  function - the function(dateText) to call when a date is selected
+	   @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+	   @param  pos       int[2] - coordinates for the dialog's position within the screen or
+	                     event - with x/y coordinates or
+	                     leave empty for default (screen centre)
+	   @return the manager object */
+	_dialogDatepicker: function(input, dateText, onSelect, settings, pos) {
+		var inst = this._dialogInst; // internal instance
+		if (!inst) {
+			var id = 'dp' + (++this.uuid);
+			this._dialogInput = $('<input type="text" id="' + id +
+				'" size="1" style="position: absolute; top: -100px;"/>');
+			this._dialogInput.keydown(this._doKeyDown);
+			$('body').append(this._dialogInput);
+			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+			inst.settings = {};
+			$.data(this._dialogInput[0], PROP_NAME, inst);
+		}
+		extendRemove(inst.settings, settings || {});
+		this._dialogInput.val(dateText);
+
+		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+		if (!this._pos) {
+			var browserWidth = window.innerWidth || document.documentElement.clientWidth ||	document.body.clientWidth;
+			var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+			var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+			var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+			this._pos = // should use actual width/height below
+				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+		}
+
+		// move input on screen for focus, but hidden behind dialog
+		this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px');
+		inst.settings.onSelect = onSelect;
+		this._inDialog = true;
+		this.dpDiv.addClass(this._dialogClass);
+		this._showDatepicker(this._dialogInput[0]);
+		if ($.blockUI)
+			$.blockUI(this.dpDiv);
+		$.data(this._dialogInput[0], PROP_NAME, inst);
+		return this;
+	},
+
+	/* Detach a datepicker from its control.
+	   @param  target    element - the target input field or division or span */
+	_destroyDatepicker: function(target) {
+		var $target = $(target);
+		var inst = $.data(target, PROP_NAME);
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		$.removeData(target, PROP_NAME);
+		if (nodeName == 'input') {
+			inst.append.remove();
+			inst.trigger.remove();
+			$target.removeClass(this.markerClassName).
+				unbind('focus', this._showDatepicker).
+				unbind('keydown', this._doKeyDown).
+				unbind('keypress', this._doKeyPress);
+		} else if (nodeName == 'div' || nodeName == 'span')
+			$target.removeClass(this.markerClassName).empty();
+	},
+
+	/* Enable the date picker to a jQuery selection.
+	   @param  target    element - the target input field or division or span */
+	_enableDatepicker: function(target) {
+		var $target = $(target);
+		var inst = $.data(target, PROP_NAME);
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		if (nodeName == 'input') {
+			target.disabled = false;
+			inst.trigger.filter('button').
+				each(function() { this.disabled = false; }).end().
+				filter('img').css({opacity: '1.0', cursor: ''});
+		}
+		else if (nodeName == 'div' || nodeName == 'span') {
+			var inline = $target.children('.' + this._inlineClass);
+			inline.children().removeClass('ui-state-disabled');
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value == target ? null : value); }); // delete entry
+	},
+
+	/* Disable the date picker to a jQuery selection.
+	   @param  target    element - the target input field or division or span */
+	_disableDatepicker: function(target) {
+		var $target = $(target);
+		var inst = $.data(target, PROP_NAME);
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		if (nodeName == 'input') {
+			target.disabled = true;
+			inst.trigger.filter('button').
+				each(function() { this.disabled = true; }).end().
+				filter('img').css({opacity: '0.5', cursor: 'default'});
+		}
+		else if (nodeName == 'div' || nodeName == 'span') {
+			var inline = $target.children('.' + this._inlineClass);
+			inline.children().addClass('ui-state-disabled');
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value == target ? null : value); }); // delete entry
+		this._disabledInputs[this._disabledInputs.length] = target;
+	},
+
+	/* Is the first field in a jQuery collection disabled as a datepicker?
+	   @param  target    element - the target input field or division or span
+	   @return boolean - true if disabled, false if enabled */
+	_isDisabledDatepicker: function(target) {
+		if (!target) {
+			return false;
+		}
+		for (var i = 0; i < this._disabledInputs.length; i++) {
+			if (this._disabledInputs[i] == target)
+				return true;
+		}
+		return false;
+	},
+
+	/* Retrieve the instance data for the target control.
+	   @param  target  element - the target input field or division or span
+	   @return  object - the associated instance data
+	   @throws  error if a jQuery problem getting data */
+	_getInst: function(target) {
+		try {
+			return $.data(target, PROP_NAME);
+		}
+		catch (err) {
+			throw 'Missing instance data for this datepicker';
+		}
+	},
+
+	/* Update or retrieve the settings for a date picker attached to an input field or division.
+	   @param  target  element - the target input field or division or span
+	   @param  name    object - the new settings to update or
+	                   string - the name of the setting to change or retrieve,
+	                   when retrieving also 'all' for all instance settings or
+	                   'defaults' for all global defaults
+	   @param  value   any - the new value for the setting
+	                   (omit if above is an object or to retrieve a value) */
+	_optionDatepicker: function(target, name, value) {
+		var inst = this._getInst(target);
+		if (arguments.length == 2 && typeof name == 'string') {
+			return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
+				(inst ? (name == 'all' ? $.extend({}, inst.settings) :
+				this._get(inst, name)) : null));
+		}
+		var settings = name || {};
+		if (typeof name == 'string') {
+			settings = {};
+			settings[name] = value;
+		}
+		if (inst) {
+			if (this._curInst == inst) {
+				this._hideDatepicker(null);
+			}
+			var date = this._getDateDatepicker(target);
+			extendRemove(inst.settings, settings);
+			this._setDateDatepicker(target, date);
+			this._updateDatepicker(inst);
+		}
+	},
+
+	// change method deprecated
+	_changeDatepicker: function(target, name, value) {
+		this._optionDatepicker(target, name, value);
+	},
+
+	/* Redraw the date picker attached to an input field or division.
+	   @param  target  element - the target input field or division or span */
+	_refreshDatepicker: function(target) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._updateDatepicker(inst);
+		}
+	},
+
+	/* Set the dates for a jQuery selection.
+	   @param  target   element - the target input field or division or span
+	   @param  date     Date - the new date
+	   @param  endDate  Date - the new end date for a range (optional) */
+	_setDateDatepicker: function(target, date, endDate) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._setDate(inst, date, endDate);
+			this._updateDatepicker(inst);
+			this._updateAlternate(inst);
+		}
+	},
+
+	/* Get the date(s) for the first entry in a jQuery selection.
+	   @param  target  element - the target input field or division or span
+	   @return Date - the current date or
+	           Date[2] - the current dates for a range */
+	_getDateDatepicker: function(target) {
+		var inst = this._getInst(target);
+		if (inst && !inst.inline)
+			this._setDateFromField(inst);
+		return (inst ? this._getDate(inst) : null);
+	},
+
+	/* Handle keystrokes. */
+	_doKeyDown: function(event) {
+		var inst = $.datepicker._getInst(event.target);
+		var handled = true;
+		var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
+		inst._keyEvent = true;
+		if ($.datepicker._datepickerShowing)
+			switch (event.keyCode) {
+				case 9:  $.datepicker._hideDatepicker(null, '');
+						break; // hide on tab out
+				case 13: var sel = $('td.' + $.datepicker._dayOverClass +
+							', td.' + $.datepicker._currentClass, inst.dpDiv);
+						if (sel[0])
+							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+						else
+							$.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
+						return false; // don't submit the form
+						break; // select the value on enter
+				case 27: $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
+						break; // hide on escape
+				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							-$.datepicker._get(inst, 'stepBigMonths') :
+							-$.datepicker._get(inst, 'stepMonths')), 'M');
+						break; // previous month/year on page up/+ ctrl
+				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							+$.datepicker._get(inst, 'stepBigMonths') :
+							+$.datepicker._get(inst, 'stepMonths')), 'M');
+						break; // next month/year on page down/+ ctrl
+				case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
+						handled = event.ctrlKey || event.metaKey;
+						break; // clear on ctrl or command +end
+				case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
+						handled = event.ctrlKey || event.metaKey;
+						break; // current on ctrl or command +home
+				case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
+						handled = event.ctrlKey || event.metaKey;
+						// -1 day on ctrl or command +left
+						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+									-$.datepicker._get(inst, 'stepBigMonths') :
+									-$.datepicker._get(inst, 'stepMonths')), 'M');
+						// next month/year on alt +left on Mac
+						break;
+				case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
+						handled = event.ctrlKey || event.metaKey;
+						break; // -1 week on ctrl or command +up
+				case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
+						handled = event.ctrlKey || event.metaKey;
+						// +1 day on ctrl or command +right
+						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+									+$.datepicker._get(inst, 'stepBigMonths') :
+									+$.datepicker._get(inst, 'stepMonths')), 'M');
+						// next month/year on alt +right
+						break;
+				case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
+						handled = event.ctrlKey || event.metaKey;
+						break; // +1 week on ctrl or command +down
+				default: handled = false;
+			}
+		else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
+			$.datepicker._showDatepicker(this);
+		else {
+			handled = false;
+		}
+		if (handled) {
+			event.preventDefault();
+			event.stopPropagation();
+		}
+	},
+
+	/* Filter entered characters - based on date format. */
+	_doKeyPress: function(event) {
+		var inst = $.datepicker._getInst(event.target);
+		if ($.datepicker._get(inst, 'constrainInput')) {
+			var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
+			var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
+			return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
+		}
+	},
+
+	/* Pop-up the date picker for a given input field.
+	   @param  input  element - the input field attached to the date picker or
+	                  event - if triggered by focus */
+	_showDatepicker: function(input) {
+		input = input.target || input;
+		if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
+			input = $('input', input.parentNode)[0];
+		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
+			return;
+		var inst = $.datepicker._getInst(input);
+		var beforeShow = $.datepicker._get(inst, 'beforeShow');
+		extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
+		$.datepicker._hideDatepicker(null, '');
+		$.datepicker._lastInput = input;
+		$.datepicker._setDateFromField(inst);
+		if ($.datepicker._inDialog) // hide cursor
+			input.value = '';
+		if (!$.datepicker._pos) { // position below input
+			$.datepicker._pos = $.datepicker._findPos(input);
+			$.datepicker._pos[1] += input.offsetHeight; // add the height
+		}
+		var isFixed = false;
+		$(input).parents().each(function() {
+			isFixed |= $(this).css('position') == 'fixed';
+			return !isFixed;
+		});
+		if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
+			$.datepicker._pos[0] -= document.documentElement.scrollLeft;
+			$.datepicker._pos[1] -= document.documentElement.scrollTop;
+		}
+		var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+		$.datepicker._pos = null;
+		inst.rangeStart = null;
+		// determine sizing offscreen
+		inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
+		$.datepicker._updateDatepicker(inst);
+		// fix width for dynamic number of date pickers
+		// and adjust position before showing
+		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+			'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
+			left: offset.left + 'px', top: offset.top + 'px'});
+		if (!inst.inline) {
+			var showAnim = $.datepicker._get(inst, 'showAnim') || 'show';
+			var duration = $.datepicker._get(inst, 'duration');
+			var postProcess = function() {
+				$.datepicker._datepickerShowing = true;
+				if ($.browser.msie && parseInt($.browser.version,10) < 7) // fix IE < 7 select problems
+					$('iframe.ui-datepicker-cover').css({width: inst.dpDiv.width() + 4,
+						height: inst.dpDiv.height() + 4});
+			};
+			if ($.effects && $.effects[showAnim])
+				inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+			else
+				inst.dpDiv[showAnim](duration, postProcess);
+			if (duration == '')
+				postProcess();
+			if (inst.input[0].type != 'hidden')
+				inst.input[0].focus();
+			$.datepicker._curInst = inst;
+		}
+	},
+
+	/* Generate the date picker content. */
+	_updateDatepicker: function(inst) {
+		var dims = {width: inst.dpDiv.width() + 4,
+			height: inst.dpDiv.height() + 4};
+		var self = this;
+		inst.dpDiv.empty().append(this._generateHTML(inst))
+			.find('iframe.ui-datepicker-cover').
+				css({width: dims.width, height: dims.height})
+			.end()
+			.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
+				.bind('mouseout', function(){
+					$(this).removeClass('ui-state-hover');
+					if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
+					if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover');
+				})
+				.bind('mouseover', function(){
+					if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) {
+						$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
+						$(this).addClass('ui-state-hover');
+						if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover');
+						if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover');
+					}
+				})
+			.end()
+			.find('.' + this._dayOverClass + ' a')
+				.trigger('mouseover')
+			.end();
+		var numMonths = this._getNumberOfMonths(inst);
+		var cols = numMonths[1];
+		var width = 17;
+		if (cols > 1) {
+			inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
+		} else {
+			inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
+		}
+		inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
+			'Class']('ui-datepicker-multi');
+		inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
+			'Class']('ui-datepicker-rtl');
+		if (inst.input && inst.input[0].type != 'hidden' && inst == $.datepicker._curInst)
+			$(inst.input[0]).focus();
+	},
+
+	/* Check positioning to remain on screen. */
+	_checkOffset: function(inst, offset, isFixed) {
+		var dpWidth = inst.dpDiv.outerWidth();
+		var dpHeight = inst.dpDiv.outerHeight();
+		var inputWidth = inst.input ? inst.input.outerWidth() : 0;
+		var inputHeight = inst.input ? inst.input.outerHeight() : 0;
+		var viewWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) + $(document).scrollLeft();
+		var viewHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) + $(document).scrollTop();
+
+		offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
+		offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
+		offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+		// now check if datepicker is showing outside window viewport - move to a better place if so.
+		offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0;
+		offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight*2 - viewHeight) : 0;
+
+		return offset;
+	},
+
+	/* Find an object's position on the screen. */
+	_findPos: function(obj) {
+        while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {
+            obj = obj.nextSibling;
+        }
+        var position = $(obj).offset();
+	    return [position.left, position.top];
+	},
+
+	/* Hide the date picker from view.
+	   @param  input  element - the input field attached to the date picker
+	   @param  duration  string - the duration over which to close the date picker */
+	_hideDatepicker: function(input, duration) {
+		var inst = this._curInst;
+		if (!inst || (input && inst != $.data(input, PROP_NAME)))
+			return;
+		if (inst.stayOpen)
+			this._selectDate('#' + inst.id, this._formatDate(inst,
+				inst.currentDay, inst.currentMonth, inst.currentYear));
+		inst.stayOpen = false;
+		if (this._datepickerShowing) {
+			duration = (duration != null ? duration : this._get(inst, 'duration'));
+			var showAnim = this._get(inst, 'showAnim');
+			var postProcess = function() {
+				$.datepicker._tidyDialog(inst);
+			};
+			if (duration != '' && $.effects && $.effects[showAnim])
+				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'),
+					duration, postProcess);
+			else
+				inst.dpDiv[(duration == '' ? 'hide' : (showAnim == 'slideDown' ? 'slideUp' :
+					(showAnim == 'fadeIn' ? 'fadeOut' : 'hide')))](duration, postProcess);
+			if (duration == '')
+				this._tidyDialog(inst);
+			var onClose = this._get(inst, 'onClose');
+			if (onClose)
+				onClose.apply((inst.input ? inst.input[0] : null),
+					[(inst.input ? inst.input.val() : ''), inst]);  // trigger custom callback
+			this._datepickerShowing = false;
+			this._lastInput = null;
+			if (this._inDialog) {
+				this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
+				if ($.blockUI) {
+					$.unblockUI();
+					$('body').append(this.dpDiv);
+				}
+			}
+			this._inDialog = false;
+		}
+		this._curInst = null;
+	},
+
+	/* Tidy up after a dialog display. */
+	_tidyDialog: function(inst) {
+		inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
+	},
+
+	/* Close date picker if clicked elsewhere. */
+	_checkExternalClick: function(event) {
+		if (!$.datepicker._curInst)
+			return;
+		var $target = $(event.target);
+		if (($target.parents('#' + $.datepicker._mainDivId).length == 0) &&
+				!$target.hasClass($.datepicker.markerClassName) &&
+				!$target.hasClass($.datepicker._triggerClass) &&
+				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
+			$.datepicker._hideDatepicker(null, '');
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustDate: function(id, offset, period) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		if (this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+		this._adjustInstDate(inst, offset +
+			(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
+			period);
+		this._updateDatepicker(inst);
+	},
+
+	/* Action for current link. */
+	_gotoToday: function(id) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
+			inst.selectedDay = inst.currentDay;
+			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+			inst.drawYear = inst.selectedYear = inst.currentYear;
+		}
+		else {
+		var date = new Date();
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		}
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Action for selecting a new month/year. */
+	_selectMonthYear: function(id, select, period) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		inst._selectingMonthYear = false;
+		inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
+		inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
+			parseInt(select.options[select.selectedIndex].value,10);
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Restore input focus after not changing month/year. */
+	_clickMonthYear: function(id) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		if (inst.input && inst._selectingMonthYear && !$.browser.msie)
+			inst.input[0].focus();
+		inst._selectingMonthYear = !inst._selectingMonthYear;
+	},
+
+	/* Action for selecting a day. */
+	_selectDay: function(id, month, year, td) {
+		var target = $(id);
+		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+		var inst = this._getInst(target[0]);
+		inst.selectedDay = inst.currentDay = $('a', td).html();
+		inst.selectedMonth = inst.currentMonth = month;
+		inst.selectedYear = inst.currentYear = year;
+		if (inst.stayOpen) {
+			inst.endDay = inst.endMonth = inst.endYear = null;
+		}
+		this._selectDate(id, this._formatDate(inst,
+			inst.currentDay, inst.currentMonth, inst.currentYear));
+		if (inst.stayOpen) {
+			inst.rangeStart = this._daylightSavingAdjust(
+				new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
+			this._updateDatepicker(inst);
+		}
+	},
+
+	/* Erase the input field and hide the date picker. */
+	_clearDate: function(id) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		inst.stayOpen = false;
+		inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null;
+		this._selectDate(target, '');
+	},
+
+	/* Update the input field with the selected date. */
+	_selectDate: function(id, dateStr) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+		if (inst.input)
+			inst.input.val(dateStr);
+		this._updateAlternate(inst);
+		var onSelect = this._get(inst, 'onSelect');
+		if (onSelect)
+			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+		else if (inst.input)
+			inst.input.trigger('change'); // fire the change event
+		if (inst.inline)
+			this._updateDatepicker(inst);
+		else if (!inst.stayOpen) {
+			this._hideDatepicker(null, this._get(inst, 'duration'));
+			this._lastInput = inst.input[0];
+			if (typeof(inst.input[0]) != 'object')
+				inst.input[0].focus(); // restore focus
+			this._lastInput = null;
+		}
+	},
+
+	/* Update any alternate field to synchronise with the main field. */
+	_updateAlternate: function(inst) {
+		var altField = this._get(inst, 'altField');
+		if (altField) { // update alternate field too
+			var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
+			var date = this._getDate(inst);
+			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+			$(altField).each(function() { $(this).val(dateStr); });
+		}
+	},
+
+	/* Set as beforeShowDay function to prevent selection of weekends.
+	   @param  date  Date - the date to customise
+	   @return [boolean, string] - is this date selectable?, what is its CSS class? */
+	noWeekends: function(date) {
+		var day = date.getDay();
+		return [(day > 0 && day < 6), ''];
+	},
+
+	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+	   @param  date  Date - the date to get the week for
+	   @return  number - the number of the week within the year that contains this date */
+	iso8601Week: function(date) {
+		var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
+		var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan
+		var firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7
+		firstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday
+		if (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary
+			checkDate.setDate(checkDate.getDate() - 3); // Generate for previous year
+			return $.datepicker.iso8601Week(checkDate);
+		} else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year
+			firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7;
+			if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary
+				return 1;
+			}
+		}
+		return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date
+	},
+
+	/* Parse a string value into a date object.
+	   See formatDate below for the possible formats.
+
+	   @param  format    string - the expected format of the date
+	   @param  value     string - the date in the above format
+	   @param  settings  Object - attributes include:
+	                     shortYearCutoff  number - the cutoff year for determining the century (optional)
+	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+	                     dayNames         string[7] - names of the days from Sunday (optional)
+	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+	                     monthNames       string[12] - names of the months (optional)
+	   @return  Date - the extracted date value or null if value is blank */
+	parseDate: function (format, value, settings) {
+		if (format == null || value == null)
+			throw 'Invalid arguments';
+		value = (typeof value == 'object' ? value.toString() : value + '');
+		if (value == '')
+			return null;
+		var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
+		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+		var year = -1;
+		var month = -1;
+		var day = -1;
+		var doy = -1;
+		var literal = false;
+		// Check whether a format character is doubled
+		var lookAhead = function(match) {
+			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+			if (matches)
+				iFormat++;
+			return matches;
+		};
+		// Extract a number from the string value
+		var getNumber = function(match) {
+			lookAhead(match);
+			var origSize = (match == '@' ? 14 : (match == 'y' ? 4 : (match == 'o' ? 3 : 2)));
+			var size = origSize;
+			var num = 0;
+			while (size > 0 && iValue < value.length &&
+					value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') {
+				num = num * 10 + parseInt(value.charAt(iValue++),10);
+				size--;
+			}
+			if (size == origSize)
+				throw 'Missing number at position ' + iValue;
+			return num;
+		};
+		// Extract a name from the string value and convert to an index
+		var getName = function(match, shortNames, longNames) {
+			var names = (lookAhead(match) ? longNames : shortNames);
+			var size = 0;
+			for (var j = 0; j < names.length; j++)
+				size = Math.max(size, names[j].length);
+			var name = '';
+			var iInit = iValue;
+			while (size > 0 && iValue < value.length) {
+				name += value.charAt(iValue++);
+				for (var i = 0; i < names.length; i++)
+					if (name == names[i])
+						return i + 1;
+				size--;
+			}
+			throw 'Unknown name at position ' + iInit;
+		};
+		// Confirm that a literal character matches the string value
+		var checkLiteral = function() {
+			if (value.charAt(iValue) != format.charAt(iFormat))
+				throw 'Unexpected literal at position ' + iValue;
+			iValue++;
+		};
+		var iValue = 0;
+		for (var iFormat = 0; iFormat < format.length; iFormat++) {
+			if (literal)
+				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+					literal = false;
+				else
+					checkLiteral();
+			else
+				switch (format.charAt(iFormat)) {
+					case 'd':
+						day = getNumber('d');
+						break;
+					case 'D':
+						getName('D', dayNamesShort, dayNames);
+						break;
+					case 'o':
+						doy = getNumber('o');
+						break;
+					case 'm':
+						month = getNumber('m');
+						break;
+					case 'M':
+						month = getName('M', monthNamesShort, monthNames);
+						break;
+					case 'y':
+						year = getNumber('y');
+						break;
+					case '@':
+						var date = new Date(getNumber('@'));
+						year = date.getFullYear();
+						month = date.getMonth() + 1;
+						day = date.getDate();
+						break;
+					case "'":
+						if (lookAhead("'"))
+							checkLiteral();
+						else
+							literal = true;
+						break;
+					default:
+						checkLiteral();
+				}
+		}
+		if (year == -1)
+			year = new Date().getFullYear();
+		else if (year < 100)
+			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+				(year <= shortYearCutoff ? 0 : -100);
+		if (doy > -1) {
+			month = 1;
+			day = doy;
+			do {
+				var dim = this._getDaysInMonth(year, month - 1);
+				if (day <= dim)
+					break;
+				month++;
+				day -= dim;
+			} while (true);
+		}
+		var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+		if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
+			throw 'Invalid date'; // E.g. 31/02/*
+		return date;
+	},
+
+	/* Standard date formats. */
+	ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
+	COOKIE: 'D, dd M yy',
+	ISO_8601: 'yy-mm-dd',
+	RFC_822: 'D, d M y',
+	RFC_850: 'DD, dd-M-y',
+	RFC_1036: 'D, d M y',
+	RFC_1123: 'D, d M yy',
+	RFC_2822: 'D, d M yy',
+	RSS: 'D, d M y', // RFC 822
+	TIMESTAMP: '@',
+	W3C: 'yy-mm-dd', // ISO 8601
+
+	/* Format a date object into a string value.
+	   The format can be combinations of the following:
+	   d  - day of month (no leading zero)
+	   dd - day of month (two digit)
+	   o  - day of year (no leading zeros)
+	   oo - day of year (three digit)
+	   D  - day name short
+	   DD - day name long
+	   m  - month of year (no leading zero)
+	   mm - month of year (two digit)
+	   M  - month name short
+	   MM - month name long
+	   y  - year (two digit)
+	   yy - year (four digit)
+	   @ - Unix timestamp (ms since 01/01/1970)
+	   '...' - literal text
+	   '' - single quote
+
+	   @param  format    string - the desired format of the date
+	   @param  date      Date - the date value to format
+	   @param  settings  Object - attributes include:
+	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+	                     dayNames         string[7] - names of the days from Sunday (optional)
+	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+	                     monthNames       string[12] - names of the months (optional)
+	   @return  string - the date in the above format */
+	formatDate: function (format, date, settings) {
+		if (!date)
+			return '';
+		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+		// Check whether a format character is doubled
+		var lookAhead = function(match) {
+			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+			if (matches)
+				iFormat++;
+			return matches;
+		};
+		// Format a number, with leading zero if necessary
+		var formatNumber = function(match, value, len) {
+			var num = '' + value;
+			if (lookAhead(match))
+				while (num.length < len)
+					num = '0' + num;
+			return num;
+		};
+		// Format a name, short or long as requested
+		var formatName = function(match, value, shortNames, longNames) {
+			return (lookAhead(match) ? longNames[value] : shortNames[value]);
+		};
+		var output = '';
+		var literal = false;
+		if (date)
+			for (var iFormat = 0; iFormat < format.length; iFormat++) {
+				if (literal)
+					if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+						literal = false;
+					else
+						output += format.charAt(iFormat);
+				else
+					switch (format.charAt(iFormat)) {
+						case 'd':
+							output += formatNumber('d', date.getDate(), 2);
+							break;
+						case 'D':
+							output += formatName('D', date.getDay(), dayNamesShort, dayNames);
+							break;
+						case 'o':
+							var doy = date.getDate();
+							for (var m = date.getMonth() - 1; m >= 0; m--)
+								doy += this._getDaysInMonth(date.getFullYear(), m);
+							output += formatNumber('o', doy, 3);
+							break;
+						case 'm':
+							output += formatNumber('m', date.getMonth() + 1, 2);
+							break;
+						case 'M':
+							output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
+							break;
+						case 'y':
+							output += (lookAhead('y') ? date.getFullYear() :
+								(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
+							break;
+						case '@':
+							output += date.getTime();
+							break;
+						case "'":
+							if (lookAhead("'"))
+								output += "'";
+							else
+								literal = true;
+							break;
+						default:
+							output += format.charAt(iFormat);
+					}
+			}
+		return output;
+	},
+
+	/* Extract all possible characters from the date format. */
+	_possibleChars: function (format) {
+		var chars = '';
+		var literal = false;
+		for (var iFormat = 0; iFormat < format.length; iFormat++)
+			if (literal)
+				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+					literal = false;
+				else
+					chars += format.charAt(iFormat);
+			else
+				switch (format.charAt(iFormat)) {
+					case 'd': case 'm': case 'y': case '@':
+						chars += '0123456789';
+						break;
+					case 'D': case 'M':
+						return null; // Accept anything
+					case "'":
+						if (lookAhead("'"))
+							chars += "'";
+						else
+							literal = true;
+						break;
+					default:
+						chars += format.charAt(iFormat);
+				}
+		return chars;
+	},
+
+	/* Get a setting value, defaulting if necessary. */
+	_get: function(inst, name) {
+		return inst.settings[name] !== undefined ?
+			inst.settings[name] : this._defaults[name];
+	},
+
+	/* Parse existing date and initialise date picker. */
+	_setDateFromField: function(inst) {
+		var dateFormat = this._get(inst, 'dateFormat');
+		var dates = inst.input ? inst.input.val() : null;
+		inst.endDay = inst.endMonth = inst.endYear = null;
+		var date = defaultDate = this._getDefaultDate(inst);
+		var settings = this._getFormatConfig(inst);
+		try {
+			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+		} catch (event) {
+			this.log(event);
+			date = defaultDate;
+		}
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		inst.currentDay = (dates ? date.getDate() : 0);
+		inst.currentMonth = (dates ? date.getMonth() : 0);
+		inst.currentYear = (dates ? date.getFullYear() : 0);
+		this._adjustInstDate(inst);
+	},
+
+	/* Retrieve the default date shown on opening. */
+	_getDefaultDate: function(inst) {
+		var date = this._determineDate(this._get(inst, 'defaultDate'), new Date());
+		var minDate = this._getMinMaxDate(inst, 'min', true);
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		date = (minDate && date < minDate ? minDate : date);
+		date = (maxDate && date > maxDate ? maxDate : date);
+		return date;
+	},
+
+	/* A date may be specified as an exact value or a relative one. */
+	_determineDate: function(date, defaultDate) {
+		var offsetNumeric = function(offset) {
+			var date = new Date();
+			date.setDate(date.getDate() + offset);
+			return date;
+		};
+		var offsetString = function(offset, getDaysInMonth) {
+			var date = new Date();
+			var year = date.getFullYear();
+			var month = date.getMonth();
+			var day = date.getDate();
+			var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
+			var matches = pattern.exec(offset);
+			while (matches) {
+				switch (matches[2] || 'd') {
+					case 'd' : case 'D' :
+						day += parseInt(matches[1],10); break;
+					case 'w' : case 'W' :
+						day += parseInt(matches[1],10) * 7; break;
+					case 'm' : case 'M' :
+						month += parseInt(matches[1],10);
+						day = Math.min(day, getDaysInMonth(year, month));
+						break;
+					case 'y': case 'Y' :
+						year += parseInt(matches[1],10);
+						day = Math.min(day, getDaysInMonth(year, month));
+						break;
+				}
+				matches = pattern.exec(offset);
+			}
+			return new Date(year, month, day);
+		};
+		date = (date == null ? defaultDate :
+			(typeof date == 'string' ? offsetString(date, this._getDaysInMonth) :
+			(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
+		date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
+		if (date) {
+			date.setHours(0);
+			date.setMinutes(0);
+			date.setSeconds(0);
+			date.setMilliseconds(0);
+		}
+		return this._daylightSavingAdjust(date);
+	},
+
+	/* Handle switch to/from daylight saving.
+	   Hours may be non-zero on daylight saving cut-over:
+	   > 12 when midnight changeover, but then cannot generate
+	   midnight datetime, so jump to 1AM, otherwise reset.
+	   @param  date  (Date) the date to check
+	   @return  (Date) the corrected date */
+	_daylightSavingAdjust: function(date) {
+		if (!date) return null;
+		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+		return date;
+	},
+
+	/* Set the date(s) directly. */
+	_setDate: function(inst, date, endDate) {
+		var clear = !(date);
+		var origMonth = inst.selectedMonth;
+		var origYear = inst.selectedYear;
+		date = this._determineDate(date, new Date());
+		inst.selectedDay = inst.currentDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
+		if (origMonth != inst.selectedMonth || origYear != inst.selectedYear)
+			this._notifyChange(inst);
+		this._adjustInstDate(inst);
+		if (inst.input) {
+			inst.input.val(clear ? '' : this._formatDate(inst));
+		}
+	},
+
+	/* Retrieve the date(s) directly. */
+	_getDate: function(inst) {
+		var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
+			this._daylightSavingAdjust(new Date(
+			inst.currentYear, inst.currentMonth, inst.currentDay)));
+			return startDate;
+	},
+
+	/* Generate the HTML for the current state of the date picker. */
+	_generateHTML: function(inst) {
+		var today = new Date();
+		today = this._daylightSavingAdjust(
+			new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
+		var isRTL = this._get(inst, 'isRTL');
+		var showButtonPanel = this._get(inst, 'showButtonPanel');
+		var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
+		var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
+		var numMonths = this._getNumberOfMonths(inst);
+		var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
+		var stepMonths = this._get(inst, 'stepMonths');
+		var stepBigMonths = this._get(inst, 'stepBigMonths');
+		var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
+		var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+			new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+		var minDate = this._getMinMaxDate(inst, 'min', true);
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		var drawMonth = inst.drawMonth - showCurrentAtPos;
+		var drawYear = inst.drawYear;
+		if (drawMonth < 0) {
+			drawMonth += 12;
+			drawYear--;
+		}
+		if (maxDate) {
+			var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+				maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()));
+			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+				drawMonth--;
+				if (drawMonth < 0) {
+					drawMonth = 11;
+					drawYear--;
+				}
+			}
+		}
+		inst.drawMonth = drawMonth;
+		inst.drawYear = drawYear;
+		var prevText = this._get(inst, 'prevText');
+		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+			this._getFormatConfig(inst)));
+		var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+			'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
+			' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
+			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
+		var nextText = this._get(inst, 'nextText');
+		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+			this._getFormatConfig(inst)));
+		var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+			'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
+			' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
+			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
+		var currentText = this._get(inst, 'currentText');
+		var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
+		currentText = (!navigationAsDateFormat ? currentText :
+			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+		var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
+		var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
+			(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#' + inst.id + '\');"' +
+			'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
+		var firstDay = parseInt(this._get(inst, 'firstDay'),10);
+		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+		var dayNames = this._get(inst, 'dayNames');
+		var dayNamesShort = this._get(inst, 'dayNamesShort');
+		var dayNamesMin = this._get(inst, 'dayNamesMin');
+		var monthNames = this._get(inst, 'monthNames');
+		var monthNamesShort = this._get(inst, 'monthNamesShort');
+		var beforeShowDay = this._get(inst, 'beforeShowDay');
+		var showOtherMonths = this._get(inst, 'showOtherMonths');
+		var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
+		var endDate = inst.endDay ? this._daylightSavingAdjust(
+			new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate;
+		var defaultDate = this._getDefaultDate(inst);
+		var html = '';
+		for (var row = 0; row < numMonths[0]; row++) {
+			var group = '';
+			for (var col = 0; col < numMonths[1]; col++) {
+				var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+				var cornerClass = ' ui-corner-all';
+				var calender = '';
+				if (isMultiMonth) {
+					calender += '<div class="ui-datepicker-group ui-datepicker-group-';
+					switch (col) {
+						case 0: calender += 'first'; cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
+						case numMonths[1]-1: calender += 'last'; cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
+						default: calender += 'middle'; cornerClass = ''; break;
+					}
+					calender += '">';
+				}
+				calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
+					(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
+					(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
+					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+					selectedDate, row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+					'</div><table class="ui-datepicker-calendar"><thead>' +
+					'<tr>';
+				var thead = '';
+				for (var dow = 0; dow < 7; dow++) { // days of the week
+					var day = (dow + firstDay) % 7;
+					thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
+						'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
+				}
+				calender += thead + '</tr></thead><tbody>';
+				var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+				if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
+					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+				var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+				var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate
+				var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+				for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+					calender += '<tr>';
+					var tbody = '';
+					for (var dow = 0; dow < 7; dow++) { // create date picker days
+						var daySettings = (beforeShowDay ?
+							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
+						var otherMonth = (printDate.getMonth() != drawMonth);
+						var unselectable = otherMonth || !daySettings[0] ||
+							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+						tbody += '<td class="' +
+							((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
+							(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
+							((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
+							(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
+							// or defaultDate is current printedDate and defaultDate is selectedDate
+							' ' + this._dayOverClass : '') + // highlight selected day
+							(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') +  // highlight unselectable days
+							(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
+							(printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
+							' ' + this._currentClass : '') + // highlight selected day
+							(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
+							((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
+							(unselectable ? '' : ' onclick="DP_jQuery.datepicker._selectDay(\'#' +
+							inst.id + '\',' + drawMonth + ',' + drawYear + ', this);return false;"') + '>' + // actions
+							(otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : // display for other months
+							(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
+							(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
+							(printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
+							' ui-state-active' : '') + // highlight selected day
+							'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display for this month
+						printDate.setDate(printDate.getDate() + 1);
+						printDate = this._daylightSavingAdjust(printDate);
+					}
+					calender += tbody + '</tr>';
+				}
+				drawMonth++;
+				if (drawMonth > 11) {
+					drawMonth = 0;
+					drawYear++;
+				}
+				calender += '</tbody></table>' + (isMultiMonth ? '</div>' + 
+							((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
+				group += calender;
+			}
+			html += group;
+		}
+		html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
+			'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
+		inst._keyEvent = false;
+		return html;
+	},
+
+	/* Generate the month and year header. */
+	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+			selectedDate, secondary, monthNames, monthNamesShort) {
+		minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate);
+		var changeMonth = this._get(inst, 'changeMonth');
+		var changeYear = this._get(inst, 'changeYear');
+		var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
+		var html = '<div class="ui-datepicker-title">';
+		var monthHtml = '';
+		// month selection
+		if (secondary || !changeMonth)
+			monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span> ';
+		else {
+			var inMinYear = (minDate && minDate.getFullYear() == drawYear);
+			var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
+			monthHtml += '<select class="ui-datepicker-month" ' +
+				'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
+				'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
+			 	'>';
+			for (var month = 0; month < 12; month++) {
+				if ((!inMinYear || month >= minDate.getMonth()) &&
+						(!inMaxYear || month <= maxDate.getMonth()))
+					monthHtml += '<option value="' + month + '"' +
+						(month == drawMonth ? ' selected="selected"' : '') +
+						'>' + monthNamesShort[month] + '</option>';
+			}
+			monthHtml += '</select>';
+		}
+		if (!showMonthAfterYear)
+			html += monthHtml + ((secondary || changeMonth || changeYear) && (!(changeMonth && changeYear)) ? '&#xa0;' : '');
+		// year selection
+		if (secondary || !changeYear)
+			html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
+		else {
+			// determine range of years to display
+			var years = this._get(inst, 'yearRange').split(':');
+			var year = 0;
+			var endYear = 0;
+			if (years.length != 2) {
+				year = drawYear - 10;
+				endYear = drawYear + 10;
+			} else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {
+				year = drawYear + parseInt(years[0], 10);
+				endYear = drawYear + parseInt(years[1], 10);
+			} else {
+				year = parseInt(years[0], 10);
+				endYear = parseInt(years[1], 10);
+			}
+			year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+			endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+			html += '<select class="ui-datepicker-year" ' +
+				'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
+				'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
+				'>';
+			for (; year <= endYear; year++) {
+				html += '<option value="' + year + '"' +
+					(year == drawYear ? ' selected="selected"' : '') +
+					'>' + year + '</option>';
+			}
+			html += '</select>';
+		}
+		if (showMonthAfterYear)
+			html += (secondary || changeMonth || changeYear ? '&#xa0;' : '') + monthHtml;
+		html += '</div>'; // Close datepicker_header
+		return html;
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustInstDate: function(inst, offset, period) {
+		var year = inst.drawYear + (period == 'Y' ? offset : 0);
+		var month = inst.drawMonth + (period == 'M' ? offset : 0);
+		var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
+			(period == 'D' ? offset : 0);
+		var date = this._daylightSavingAdjust(new Date(year, month, day));
+		// ensure it is within the bounds set
+		var minDate = this._getMinMaxDate(inst, 'min', true);
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		date = (minDate && date < minDate ? minDate : date);
+		date = (maxDate && date > maxDate ? maxDate : date);
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		if (period == 'M' || period == 'Y')
+			this._notifyChange(inst);
+	},
+
+	/* Notify change of month/year. */
+	_notifyChange: function(inst) {
+		var onChange = this._get(inst, 'onChangeMonthYear');
+		if (onChange)
+			onChange.apply((inst.input ? inst.input[0] : null),
+				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+	},
+
+	/* Determine the number of months to show. */
+	_getNumberOfMonths: function(inst) {
+		var numMonths = this._get(inst, 'numberOfMonths');
+		return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
+	},
+
+	/* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */
+	_getMinMaxDate: function(inst, minMax, checkRange) {
+		var date = this._determineDate(this._get(inst, minMax + 'Date'), null);
+		return (!checkRange || !inst.rangeStart ? date :
+			(!date || inst.rangeStart > date ? inst.rangeStart : date));
+	},
+
+	/* Find the number of days in a given month. */
+	_getDaysInMonth: function(year, month) {
+		return 32 - new Date(year, month, 32).getDate();
+	},
+
+	/* Find the day of the week of the first of a month. */
+	_getFirstDayOfMonth: function(year, month) {
+		return new Date(year, month, 1).getDay();
+	},
+
+	/* Determines if we should allow a "next/prev" month display change. */
+	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+		var numMonths = this._getNumberOfMonths(inst);
+		var date = this._daylightSavingAdjust(new Date(
+			curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1));
+		if (offset < 0)
+			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+		return this._isInRange(inst, date);
+	},
+
+	/* Is the given date in the accepted range? */
+	_isInRange: function(inst, date) {
+		// during range selection, use minimum of selected date and range start
+		var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(
+			new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay)));
+		newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate);
+		var minDate = newMinDate || this._getMinMaxDate(inst, 'min');
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));
+	},
+
+	/* Provide the configuration settings for formatting/parsing. */
+	_getFormatConfig: function(inst) {
+		var shortYearCutoff = this._get(inst, 'shortYearCutoff');
+		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+		return {shortYearCutoff: shortYearCutoff,
+			dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
+			monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
+	},
+
+	/* Format the given date for display. */
+	_formatDate: function(inst, day, month, year) {
+		if (!day) {
+			inst.currentDay = inst.selectedDay;
+			inst.currentMonth = inst.selectedMonth;
+			inst.currentYear = inst.selectedYear;
+		}
+		var date = (day ? (typeof day == 'object' ? day :
+			this._daylightSavingAdjust(new Date(year, month, day))) :
+			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+		return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
+	}
+});
+
+/* jQuery extend now ignores nulls! */
+function extendRemove(target, props) {
+	$.extend(target, props);
+	for (var name in props)
+		if (props[name] == null || props[name] == undefined)
+			target[name] = props[name];
+	return target;
+};
+
+/* Determine whether an object is an array. */
+function isArray(a) {
+	return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
+		(a.constructor && a.constructor.toString().match(/\Array\(\)/))));
+};
+
+/* Invoke the datepicker functionality.
+   @param  options  string - a command, optionally followed by additional parameters or
+                    Object - settings for attaching new datepicker functionality
+   @return  jQuery object */
+$.fn.datepicker = function(options){
+
+	/* Initialise the date picker. */
+	if (!$.datepicker.initialized) {
+		$(document).mousedown($.datepicker._checkExternalClick).
+			find('body').append($.datepicker.dpDiv);
+		$.datepicker.initialized = true;
+	}
+
+	var otherArgs = Array.prototype.slice.call(arguments, 1);
+	if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate'))
+		return $.datepicker['_' + options + 'Datepicker'].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
+		return $.datepicker['_' + options + 'Datepicker'].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	return this.each(function() {
+		typeof options == 'string' ?
+			$.datepicker['_' + options + 'Datepicker'].
+				apply($.datepicker, [this].concat(otherArgs)) :
+			$.datepicker._attachDatepicker(this, options);
+	});
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.7.2";
+
+// Workaround for #4055
+// Add another global to avoid noConflict issues with inline event handlers
+window.DP_jQuery = $;
+
+})(jQuery);
 /* JavaScript for MediaWIki JS2 */
 
 /**
Index: js/js2.combined.min.js
===================================================================
--- js/js2.combined.min.js	(revision 56989)
+++ js/js2.combined.min.js	(working copy)
@@ -429,7 +429,353 @@
 top+=Math.max(docElem.scrollTop,body.scrollTop),left+=Math.max(docElem.scrollLeft,body.scrollLeft);return{top:top,left:left};};jQuery.offset={initialize:function(){if(this.initialized)return;var body=document.body,container=document.createElement('div'),innerDiv,checkDiv,table,td,rules,prop,bodyMarginTop=body.style.marginTop,html='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';rules={position:'absolute',top:0,left:0,margin:0,border:0,width:'1px',height:'1px',visibility:'hidden'};for(prop in rules)container.style[prop]=rules[prop];container.innerHTML=html;body.insertBefore(container,body.firstChild);innerDiv=container.firstChild,checkDiv=innerDiv.firstChild,td=innerDiv.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(checkDiv.offsetTop!==5);this.doesAddBorderForTableAndCells=(td.offsetTop===5);innerDiv.style.overflow='hidden',innerDiv.style.position='relative';this.subtractsBorderForOverflowNotVisible=(checkDiv.offsetTop===-5);body.style.marginTop='1px';this.doesNotIncludeMarginInBodyOffset=(body.offsetTop===0);body.style.marginTop=bodyMarginTop;body.removeChild(container);this.initialized=true;},bodyOffset:function(body){jQuery.offset.initialized||jQuery.offset.initialize();var top=body.offsetTop,left=body.offsetLeft;if(jQuery.offset.doesNotIncludeMarginInBodyOffset)
 top+=parseInt(jQuery.curCSS(body,'marginTop',true),10)||0,left+=parseInt(jQuery.curCSS(body,'marginLeft',true),10)||0;return{top:top,left:left};}};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}
 return results;},offsetParent:function(){var offsetParent=this[0].offsetParent||document.body;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))
-offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return null;return val!==undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom",lower=name.toLowerCase();jQuery.fn["inner"+name]=function(){return this[0]?jQuery.css(this[0],lower,false,"padding"):null;};jQuery.fn["outer"+name]=function(margin){return this[0]?jQuery.css(this[0],lower,false,margin?"margin":"border"):null;};var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(document.documentElement["client"+name],document.body["scroll"+name],document.documentElement["scroll"+name],document.body["offset"+name],document.documentElement["offset"+name]):size===undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,typeof size==="string"?size:size+"px");};});})();if(!gMsg)var gMsg={};function loadGM(msgSet){for(var i in msgSet){gMsg[i]=msgSet[i];}}
+offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return null;return val!==undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom",lower=name.toLowerCase();jQuery.fn["inner"+name]=function(){return this[0]?jQuery.css(this[0],lower,false,"padding"):null;};jQuery.fn["outer"+name]=function(margin){return this[0]?jQuery.css(this[0],lower,false,margin?"margin":"border"):null;};var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(document.documentElement["client"+name],document.body["scroll"+name],document.documentElement["scroll"+name],document.body["offset"+name],document.documentElement["offset"+name]):size===undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,typeof size==="string"?size:size+"px");};});})();;jQuery.ui||(function($){var _remove=$.fn.remove,isFF2=$.browser.mozilla&&(parseFloat($.browser.version)<1.9);$.ui={version:"1.7.2",plugin:{add:function(module,option,set){var proto=$.ui[module].prototype;for(var i in set){proto.plugins[i]=proto.plugins[i]||[];proto.plugins[i].push([option,set[i]]);}},call:function(instance,name,args){var set=instance.plugins[name];if(!set||!instance.element[0].parentNode){return;}
+for(var i=0;i<set.length;i++){if(instance.options[set[i][0]]){set[i][1].apply(instance.element,args);}}}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b);},hasScroll:function(el,a){if($(el).css('overflow')=='hidden'){return false;}
+var scroll=(a&&a=='left')?'scrollLeft':'scrollTop',has=false;if(el[scroll]>0){return true;}
+el[scroll]=1;has=(el[scroll]>0);el[scroll]=0;return has;},isOverAxis:function(x,reference,size){return(x>reference)&&(x<(reference+size));},isOver:function(y,x,top,left,height,width){return $.ui.isOverAxis(y,top,height)&&$.ui.isOverAxis(x,left,width);},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(isFF2){var attr=$.attr,removeAttr=$.fn.removeAttr,ariaNS="http://www.w3.org/2005/07/aaa",ariaState=/^aria-/,ariaRole=/^wairole:/;$.attr=function(elem,name,value){var set=value!==undefined;return(name=='role'?(set?attr.call(this,elem,name,"wairole:"+value):(attr.apply(this,arguments)||"").replace(ariaRole,"")):(ariaState.test(name)?(set?elem.setAttributeNS(ariaNS,name.replace(ariaState,"aaa:"),value):attr.call(this,elem,name.replace(ariaState,"aaa:"))):attr.apply(this,arguments)));};$.fn.removeAttr=function(name){return(ariaState.test(name)?this.each(function(){this.removeAttributeNS(ariaNS,name.replace(ariaState,""));}):removeAttr.call(this,name));};}
+$.fn.extend({remove:function(){$("*",this).add(this).each(function(){$(this).triggerHandler("remove");});return _remove.apply(this,arguments);},enableSelection:function(){return this.attr('unselectable','off').css('MozUserSelect','').unbind('selectstart.ui');},disableSelection:function(){return this.attr('unselectable','on').css('MozUserSelect','none').bind('selectstart.ui',function(){return false;});},scrollParent:function(){var scrollParent;if(($.browser.msie&&(/(static|relative)/).test(this.css('position')))||(/absolute/).test(this.css('position'))){scrollParent=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test($.curCSS(this,'position',1))&&(/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));}).eq(0);}else{scrollParent=this.parents().filter(function(){return(/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));}).eq(0);}
+return(/fixed/).test(this.css('position'))||!scrollParent.length?$(document):scrollParent;}});$.extend($.expr[':'],{data:function(elem,i,match){return!!$.data(elem,match[3]);},focusable:function(element){var nodeName=element.nodeName.toLowerCase(),tabIndex=$.attr(element,'tabindex');return(/input|select|textarea|button|object/.test(nodeName)?!element.disabled:'a'==nodeName||'area'==nodeName?element.href||!isNaN(tabIndex):!isNaN(tabIndex))&&!$(element)['area'==nodeName?'parents':'closest'](':hidden').length;},tabbable:function(element){var tabIndex=$.attr(element,'tabindex');return(isNaN(tabIndex)||tabIndex>=0)&&$(element).is(':focusable');}});function getter(namespace,plugin,method,args){function getMethods(type){var methods=$[namespace][plugin][type]||[];return(typeof methods=='string'?methods.split(/,?\s+/):methods);}
+var methods=getMethods('getter');if(args.length==1&&typeof args[0]=='string'){methods=methods.concat(getMethods('getterSetter'));}
+return($.inArray(method,methods)!=-1);}
+$.widget=function(name,prototype){var namespace=name.split(".")[0];name=name.split(".")[1];$.fn[name]=function(options){var isMethodCall=(typeof options=='string'),args=Array.prototype.slice.call(arguments,1);if(isMethodCall&&options.substring(0,1)=='_'){return this;}
+if(isMethodCall&&getter(namespace,name,options,args)){var instance=$.data(this[0],name);return(instance?instance[options].apply(instance,args):undefined);}
+return this.each(function(){var instance=$.data(this,name);(!instance&&!isMethodCall&&$.data(this,name,new $[namespace][name](this,options))._init());(instance&&isMethodCall&&$.isFunction(instance[options])&&instance[options].apply(instance,args));});};$[namespace]=$[namespace]||{};$[namespace][name]=function(element,options){var self=this;this.namespace=namespace;this.widgetName=name;this.widgetEventPrefix=$[namespace][name].eventPrefix||name;this.widgetBaseClass=namespace+'-'+name;this.options=$.extend({},$.widget.defaults,$[namespace][name].defaults,$.metadata&&$.metadata.get(element)[name],options);this.element=$(element).bind('setData.'+name,function(event,key,value){if(event.target==element){return self._setData(key,value);}}).bind('getData.'+name,function(event,key){if(event.target==element){return self._getData(key);}}).bind('remove',function(){return self.destroy();});};$[namespace][name].prototype=$.extend({},$.widget.prototype,prototype);$[namespace][name].getterSetter='option';};$.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+'-disabled'+' '+this.namespace+'-state-disabled').removeAttr('aria-disabled');},option:function(key,value){var options=key,self=this;if(typeof key=="string"){if(value===undefined){return this._getData(key);}
+options={};options[key]=value;}
+$.each(options,function(key,value){self._setData(key,value);});},_getData:function(key){return this.options[key];},_setData:function(key,value){this.options[key]=value;if(key=='disabled'){this.element
+[value?'addClass':'removeClass'](this.widgetBaseClass+'-disabled'+' '+
+this.namespace+'-state-disabled').attr("aria-disabled",value);}},enable:function(){this._setData('disabled',false);},disable:function(){this._setData('disabled',true);},_trigger:function(type,event,data){var callback=this.options[type],eventName=(type==this.widgetEventPrefix?type:this.widgetEventPrefix+type);event=$.Event(event);event.type=eventName;if(event.originalEvent){for(var i=$.event.props.length,prop;i;){prop=$.event.props[--i];event[prop]=event.originalEvent[prop];}}
+this.element.trigger(event,data);return!($.isFunction(callback)&&callback.call(this.element[0],event,data)===false||event.isDefaultPrevented());}};$.widget.defaults={disabled:false};$.ui.mouse={_mouseInit:function(){var self=this;this.element.bind('mousedown.'+this.widgetName,function(event){return self._mouseDown(event);}).bind('click.'+this.widgetName,function(event){if(self._preventClickEvent){self._preventClickEvent=false;event.stopImmediatePropagation();return false;}});if($.browser.msie){this._mouseUnselectable=this.element.attr('unselectable');this.element.attr('unselectable','on');}
+this.started=false;},_mouseDestroy:function(){this.element.unbind('.'+this.widgetName);($.browser.msie&&this.element.attr('unselectable',this._mouseUnselectable));},_mouseDown:function(event){event.originalEvent=event.originalEvent||{};if(event.originalEvent.mouseHandled){return;}
+(this._mouseStarted&&this._mouseUp(event));this._mouseDownEvent=event;var self=this,btnIsLeft=(event.which==1),elIsCancel=(typeof this.options.cancel=="string"?$(event.target).parents().add(event.target).filter(this.options.cancel).length:false);if(!btnIsLeft||elIsCancel||!this._mouseCapture(event)){return true;}
+this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){self.mouseDelayMet=true;},this.options.delay);}
+if(this._mouseDistanceMet(event)&&this._mouseDelayMet(event)){this._mouseStarted=(this._mouseStart(event)!==false);if(!this._mouseStarted){event.preventDefault();return true;}}
+this._mouseMoveDelegate=function(event){return self._mouseMove(event);};this._mouseUpDelegate=function(event){return self._mouseUp(event);};$(document).bind('mousemove.'+this.widgetName,this._mouseMoveDelegate).bind('mouseup.'+this.widgetName,this._mouseUpDelegate);($.browser.safari||event.preventDefault());event.originalEvent.mouseHandled=true;return true;},_mouseMove:function(event){if($.browser.msie&&!event.button){return this._mouseUp(event);}
+if(this._mouseStarted){this._mouseDrag(event);return event.preventDefault();}
+if(this._mouseDistanceMet(event)&&this._mouseDelayMet(event)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,event)!==false);(this._mouseStarted?this._mouseDrag(event):this._mouseUp(event));}
+return!this._mouseStarted;},_mouseUp:function(event){$(document).unbind('mousemove.'+this.widgetName,this._mouseMoveDelegate).unbind('mouseup.'+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(event.target==this._mouseDownEvent.target);this._mouseStop(event);}
+return false;},_mouseDistanceMet:function(event){return(Math.max(Math.abs(this._mouseDownEvent.pageX-event.pageX),Math.abs(this._mouseDownEvent.pageY-event.pageY))>=this.options.distance);},_mouseDelayMet:function(event){return this.mouseDelayMet;},_mouseStart:function(event){},_mouseDrag:function(event){},_mouseStop:function(event){},_mouseCapture:function(event){return true;}};$.ui.mouse.defaults={cancel:null,distance:1,delay:0};})(jQuery);(function($){$.widget("ui.draggable",$.extend({},$.ui.mouse,{_init:function(){if(this.options.helper=='original'&&!(/^(?:r|a|f)/).test(this.element.css("position")))
+this.element[0].style.position='relative';(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit();},destroy:function(){if(!this.element.data('draggable'))return;this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable"
++" ui-draggable-dragging"
++" ui-draggable-disabled");this._mouseDestroy();},_mouseCapture:function(event){var o=this.options;if(this.helper||o.disabled||$(event.target).is('.ui-resizable-handle'))
+return false;this.handle=this._getHandle(event);if(!this.handle)
+return false;return true;},_mouseStart:function(event){var o=this.options;this.helper=this._createHelper(event);this._cacheHelperProportions();if($.ui.ddmanager)
+$.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};$.extend(this.offset,{click:{left:event.pageX-this.offset.left,top:event.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(event);this.originalPageX=event.pageX;this.originalPageY=event.pageY;if(o.cursorAt)
+this._adjustOffsetFromHelper(o.cursorAt);if(o.containment)
+this._setContainment();this._trigger("start",event);this._cacheHelperProportions();if($.ui.ddmanager&&!o.dropBehaviour)
+$.ui.ddmanager.prepareOffsets(this,event);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(event,true);return true;},_mouseDrag:function(event,noPropagation){this.position=this._generatePosition(event);this.positionAbs=this._convertPositionTo("absolute");if(!noPropagation){var ui=this._uiHash();this._trigger('drag',event,ui);this.position=ui.position;}
+if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+'px';if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+'px';if($.ui.ddmanager)$.ui.ddmanager.drag(this,event);return false;},_mouseStop:function(event){var dropped=false;if($.ui.ddmanager&&!this.options.dropBehaviour)
+dropped=$.ui.ddmanager.drop(this,event);if(this.dropped){dropped=this.dropped;this.dropped=false;}
+if((this.options.revert=="invalid"&&!dropped)||(this.options.revert=="valid"&&dropped)||this.options.revert===true||($.isFunction(this.options.revert)&&this.options.revert.call(this.element,dropped))){var self=this;$(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){self._trigger("stop",event);self._clear();});}else{this._trigger("stop",event);this._clear();}
+return false;},_getHandle:function(event){var handle=!this.options.handle||!$(this.options.handle,this.element).length?true:false;$(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==event.target)handle=true;});return handle;},_createHelper:function(event){var o=this.options;var helper=$.isFunction(o.helper)?$(o.helper.apply(this.element[0],[event])):(o.helper=='clone'?this.element.clone():this.element);if(!helper.parents('body').length)
+helper.appendTo((o.appendTo=='parent'?this.element[0].parentNode:o.appendTo));if(helper[0]!=this.element[0]&&!(/(fixed|absolute)/).test(helper.css("position")))
+helper.css("position","absolute");return helper;},_adjustOffsetFromHelper:function(obj){if(obj.left!=undefined)this.offset.click.left=obj.left+this.margins.left;if(obj.right!=undefined)this.offset.click.left=this.helperProportions.width-obj.right+this.margins.left;if(obj.top!=undefined)this.offset.click.top=obj.top+this.margins.top;if(obj.bottom!=undefined)this.offset.click.top=this.helperProportions.height-obj.bottom+this.margins.top;},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var po=this.offsetParent.offset();if(this.cssPosition=='absolute'&&this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0])){po.left+=this.scrollParent.scrollLeft();po.top+=this.scrollParent.scrollTop();}
+if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=='html'&&$.browser.msie))
+po={top:0,left:0};return{top:po.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:po.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)};},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var p=this.element.position();return{top:p.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:p.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()};}else{return{top:0,left:0};}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)};},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()};},_setContainment:function(){var o=this.options;if(o.containment=='parent')o.containment=this.helper[0].parentNode;if(o.containment=='document'||o.containment=='window')this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,$(o.containment=='document'?document:window).width()-this.helperProportions.width-this.margins.left,($(o.containment=='document'?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!(/^(document|window|parent)$/).test(o.containment)&&o.containment.constructor!=Array){var ce=$(o.containment)[0];if(!ce)return;var co=$(o.containment).offset();var over=($(ce).css("overflow")!='hidden');this.containment=[co.left+(parseInt($(ce).css("borderLeftWidth"),10)||0)+(parseInt($(ce).css("paddingLeft"),10)||0)-this.margins.left,co.top+(parseInt($(ce).css("borderTopWidth"),10)||0)+(parseInt($(ce).css("paddingTop"),10)||0)-this.margins.top,co.left+(over?Math.max(ce.scrollWidth,ce.offsetWidth):ce.offsetWidth)-(parseInt($(ce).css("borderLeftWidth"),10)||0)-(parseInt($(ce).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,co.top+(over?Math.max(ce.scrollHeight,ce.offsetHeight):ce.offsetHeight)-(parseInt($(ce).css("borderTopWidth"),10)||0)-(parseInt($(ce).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top];}else if(o.containment.constructor==Array){this.containment=o.containment;}},_convertPositionTo:function(d,pos){if(!pos)pos=this.position;var mod=d=="absolute"?1:-1;var o=this.options,scroll=this.cssPosition=='absolute'&&!(this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,scrollIsRootNode=(/(html|body)/i).test(scroll[0].tagName);return{top:(pos.top
++this.offset.relative.top*mod
++this.offset.parent.top*mod
+-($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollTop():(scrollIsRootNode?0:scroll.scrollTop()))*mod)),left:(pos.left
++this.offset.relative.left*mod
++this.offset.parent.left*mod
+-($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollLeft():scrollIsRootNode?0:scroll.scrollLeft())*mod))};},_generatePosition:function(event){var o=this.options,scroll=this.cssPosition=='absolute'&&!(this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,scrollIsRootNode=(/(html|body)/i).test(scroll[0].tagName);if(this.cssPosition=='relative'&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset();}
+var pageX=event.pageX;var pageY=event.pageY;if(this.originalPosition){if(this.containment){if(event.pageX-this.offset.click.left<this.containment[0])pageX=this.containment[0]+this.offset.click.left;if(event.pageY-this.offset.click.top<this.containment[1])pageY=this.containment[1]+this.offset.click.top;if(event.pageX-this.offset.click.left>this.containment[2])pageX=this.containment[2]+this.offset.click.left;if(event.pageY-this.offset.click.top>this.containment[3])pageY=this.containment[3]+this.offset.click.top;}
+if(o.grid){var top=this.originalPageY+Math.round((pageY-this.originalPageY)/o.grid[1])*o.grid[1];pageY=this.containment?(!(top-this.offset.click.top<this.containment[1]||top-this.offset.click.top>this.containment[3])?top:(!(top-this.offset.click.top<this.containment[1])?top-o.grid[1]:top+o.grid[1])):top;var left=this.originalPageX+Math.round((pageX-this.originalPageX)/o.grid[0])*o.grid[0];pageX=this.containment?(!(left-this.offset.click.left<this.containment[0]||left-this.offset.click.left>this.containment[2])?left:(!(left-this.offset.click.left<this.containment[0])?left-o.grid[0]:left+o.grid[0])):left;}}
+return{top:(pageY
+-this.offset.click.top
+-this.offset.relative.top
+-this.offset.parent.top
++($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollTop():(scrollIsRootNode?0:scroll.scrollTop())))),left:(pageX
+-this.offset.click.left
+-this.offset.relative.left
+-this.offset.parent.left
++($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollLeft():scrollIsRootNode?0:scroll.scrollLeft())))};},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval)this.helper.remove();this.helper=null;this.cancelHelperRemoval=false;},_trigger:function(type,event,ui){ui=ui||this._uiHash();$.ui.plugin.call(this,type,[event,ui]);if(type=="drag")this.positionAbs=this._convertPositionTo("absolute");return $.widget.prototype._trigger.call(this,type,event,ui);},plugins:{},_uiHash:function(event){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs};}}));$.extend($.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});$.ui.plugin.add("draggable","connectToSortable",{start:function(event,ui){var inst=$(this).data("draggable"),o=inst.options,uiSortable=$.extend({},ui,{item:inst.element});inst.sortables=[];$(o.connectToSortable).each(function(){var sortable=$.data(this,'sortable');if(sortable&&!sortable.options.disabled){inst.sortables.push({instance:sortable,shouldRevert:sortable.options.revert});sortable._refreshItems();sortable._trigger("activate",event,uiSortable);}});},stop:function(event,ui){var inst=$(this).data("draggable"),uiSortable=$.extend({},ui,{item:inst.element});$.each(inst.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;inst.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(event);this.instance.options.helper=this.instance.options._helper;if(inst.options.helper=='original')
+this.instance.currentItem.css({top:'auto',left:'auto'});}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",event,uiSortable);}});},drag:function(event,ui){var inst=$(this).data("draggable"),self=this;var checkPos=function(o){var dyClick=this.offset.click.top,dxClick=this.offset.click.left;var helperTop=this.positionAbs.top,helperLeft=this.positionAbs.left;var itemHeight=o.height,itemWidth=o.width;var itemTop=o.top,itemLeft=o.left;return $.ui.isOver(helperTop+dyClick,helperLeft+dxClick,itemTop,itemLeft,itemHeight,itemWidth);};$.each(inst.sortables,function(i){this.instance.positionAbs=inst.positionAbs;this.instance.helperProportions=inst.helperProportions;this.instance.offset.click=inst.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=$(self).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return ui.helper[0];};event.target=this.instance.currentItem[0];this.instance._mouseCapture(event,true);this.instance._mouseStart(event,true,true);this.instance.offset.click.top=inst.offset.click.top;this.instance.offset.click.left=inst.offset.click.left;this.instance.offset.parent.left-=inst.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=inst.offset.parent.top-this.instance.offset.parent.top;inst._trigger("toSortable",event);inst.dropped=this.instance.element;inst.currentItem=inst.element;this.instance.fromOutside=inst;}
+if(this.instance.currentItem)this.instance._mouseDrag(event);}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger('out',event,this.instance._uiHash(this.instance));this.instance._mouseStop(event,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder)this.instance.placeholder.remove();inst._trigger("fromSortable",event);inst.dropped=false;}};});}});$.ui.plugin.add("draggable","cursor",{start:function(event,ui){var t=$('body'),o=$(this).data('draggable').options;if(t.css("cursor"))o._cursor=t.css("cursor");t.css("cursor",o.cursor);},stop:function(event,ui){var o=$(this).data('draggable').options;if(o._cursor)$('body').css("cursor",o._cursor);}});$.ui.plugin.add("draggable","iframeFix",{start:function(event,ui){var o=$(this).data('draggable').options;$(o.iframeFix===true?"iframe":o.iframeFix).each(function(){$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css($(this).offset()).appendTo("body");});},stop:function(event,ui){$("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this);});}});$.ui.plugin.add("draggable","opacity",{start:function(event,ui){var t=$(ui.helper),o=$(this).data('draggable').options;if(t.css("opacity"))o._opacity=t.css("opacity");t.css('opacity',o.opacity);},stop:function(event,ui){var o=$(this).data('draggable').options;if(o._opacity)$(ui.helper).css('opacity',o._opacity);}});$.ui.plugin.add("draggable","scroll",{start:function(event,ui){var i=$(this).data("draggable");if(i.scrollParent[0]!=document&&i.scrollParent[0].tagName!='HTML')i.overflowOffset=i.scrollParent.offset();},drag:function(event,ui){var i=$(this).data("draggable"),o=i.options,scrolled=false;if(i.scrollParent[0]!=document&&i.scrollParent[0].tagName!='HTML'){if(!o.axis||o.axis!='x'){if((i.overflowOffset.top+i.scrollParent[0].offsetHeight)-event.pageY<o.scrollSensitivity)
+i.scrollParent[0].scrollTop=scrolled=i.scrollParent[0].scrollTop+o.scrollSpeed;else if(event.pageY-i.overflowOffset.top<o.scrollSensitivity)
+i.scrollParent[0].scrollTop=scrolled=i.scrollParent[0].scrollTop-o.scrollSpeed;}
+if(!o.axis||o.axis!='y'){if((i.overflowOffset.left+i.scrollParent[0].offsetWidth)-event.pageX<o.scrollSensitivity)
+i.scrollParent[0].scrollLeft=scrolled=i.scrollParent[0].scrollLeft+o.scrollSpeed;else if(event.pageX-i.overflowOffset.left<o.scrollSensitivity)
+i.scrollParent[0].scrollLeft=scrolled=i.scrollParent[0].scrollLeft-o.scrollSpeed;}}else{if(!o.axis||o.axis!='x'){if(event.pageY-$(document).scrollTop()<o.scrollSensitivity)
+scrolled=$(document).scrollTop($(document).scrollTop()-o.scrollSpeed);else if($(window).height()-(event.pageY-$(document).scrollTop())<o.scrollSensitivity)
+scrolled=$(document).scrollTop($(document).scrollTop()+o.scrollSpeed);}
+if(!o.axis||o.axis!='y'){if(event.pageX-$(document).scrollLeft()<o.scrollSensitivity)
+scrolled=$(document).scrollLeft($(document).scrollLeft()-o.scrollSpeed);else if($(window).width()-(event.pageX-$(document).scrollLeft())<o.scrollSensitivity)
+scrolled=$(document).scrollLeft($(document).scrollLeft()+o.scrollSpeed);}}
+if(scrolled!==false&&$.ui.ddmanager&&!o.dropBehaviour)
+$.ui.ddmanager.prepareOffsets(i,event);}});$.ui.plugin.add("draggable","snap",{start:function(event,ui){var i=$(this).data("draggable"),o=i.options;i.snapElements=[];$(o.snap.constructor!=String?(o.snap.items||':data(draggable)'):o.snap).each(function(){var $t=$(this);var $o=$t.offset();if(this!=i.element[0])i.snapElements.push({item:this,width:$t.outerWidth(),height:$t.outerHeight(),top:$o.top,left:$o.left});});},drag:function(event,ui){var inst=$(this).data("draggable"),o=inst.options;var d=o.snapTolerance;var x1=ui.offset.left,x2=x1+inst.helperProportions.width,y1=ui.offset.top,y2=y1+inst.helperProportions.height;for(var i=inst.snapElements.length-1;i>=0;i--){var l=inst.snapElements[i].left,r=l+inst.snapElements[i].width,t=inst.snapElements[i].top,b=t+inst.snapElements[i].height;if(!((l-d<x1&&x1<r+d&&t-d<y1&&y1<b+d)||(l-d<x1&&x1<r+d&&t-d<y2&&y2<b+d)||(l-d<x2&&x2<r+d&&t-d<y1&&y1<b+d)||(l-d<x2&&x2<r+d&&t-d<y2&&y2<b+d))){if(inst.snapElements[i].snapping)(inst.options.snap.release&&inst.options.snap.release.call(inst.element,event,$.extend(inst._uiHash(),{snapItem:inst.snapElements[i].item})));inst.snapElements[i].snapping=false;continue;}
+if(o.snapMode!='inner'){var ts=Math.abs(t-y2)<=d;var bs=Math.abs(b-y1)<=d;var ls=Math.abs(l-x2)<=d;var rs=Math.abs(r-x1)<=d;if(ts)ui.position.top=inst._convertPositionTo("relative",{top:t-inst.helperProportions.height,left:0}).top-inst.margins.top;if(bs)ui.position.top=inst._convertPositionTo("relative",{top:b,left:0}).top-inst.margins.top;if(ls)ui.position.left=inst._convertPositionTo("relative",{top:0,left:l-inst.helperProportions.width}).left-inst.margins.left;if(rs)ui.position.left=inst._convertPositionTo("relative",{top:0,left:r}).left-inst.margins.left;}
+var first=(ts||bs||ls||rs);if(o.snapMode!='outer'){var ts=Math.abs(t-y1)<=d;var bs=Math.abs(b-y2)<=d;var ls=Math.abs(l-x1)<=d;var rs=Math.abs(r-x2)<=d;if(ts)ui.position.top=inst._convertPositionTo("relative",{top:t,left:0}).top-inst.margins.top;if(bs)ui.position.top=inst._convertPositionTo("relative",{top:b-inst.helperProportions.height,left:0}).top-inst.margins.top;if(ls)ui.position.left=inst._convertPositionTo("relative",{top:0,left:l}).left-inst.margins.left;if(rs)ui.position.left=inst._convertPositionTo("relative",{top:0,left:r-inst.helperProportions.width}).left-inst.margins.left;}
+if(!inst.snapElements[i].snapping&&(ts||bs||ls||rs||first))
+(inst.options.snap.snap&&inst.options.snap.snap.call(inst.element,event,$.extend(inst._uiHash(),{snapItem:inst.snapElements[i].item})));inst.snapElements[i].snapping=(ts||bs||ls||rs||first);};}});$.ui.plugin.add("draggable","stack",{start:function(event,ui){var o=$(this).data("draggable").options;var group=$.makeArray($(o.stack.group)).sort(function(a,b){return(parseInt($(a).css("zIndex"),10)||o.stack.min)-(parseInt($(b).css("zIndex"),10)||o.stack.min);});$(group).each(function(i){this.style.zIndex=o.stack.min+i;});this[0].style.zIndex=o.stack.min+group.length;}});$.ui.plugin.add("draggable","zIndex",{start:function(event,ui){var t=$(ui.helper),o=$(this).data("draggable").options;if(t.css("zIndex"))o._zIndex=t.css("zIndex");t.css('zIndex',o.zIndex);},stop:function(event,ui){var o=$(this).data("draggable").options;if(o._zIndex)$(ui.helper).css('zIndex',o._zIndex);}});})(jQuery);(function($){$.widget("ui.resizable",$.extend({},$.ui.mouse,{_init:function(){var self=this,o=this.options;this.element.addClass("ui-resizable");$.extend(this,{_aspectRatio:!!(o.aspectRatio),aspectRatio:o.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:o.helper||o.ghost||o.animate?o.helper||'ui-resizable-helper':null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css('position'))&&$.browser.opera)
+this.element.css({position:'relative',top:'auto',left:'auto'});this.element.wrap($('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css('position'),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css('top'),left:this.element.css('left')}));this.element=this.element.parent().data("resizable",this.element.data('resizable'));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css('resize');this.originalElement.css('resize','none');this._proportionallyResizeElements.push(this.originalElement.css({position:'static',zoom:1,display:'block'}));this.originalElement.css({margin:this.originalElement.css('margin')});this._proportionallyResize();}
+this.handles=o.handles||(!$('.ui-resizable-handle',this.element).length?"e,s,se":{n:'.ui-resizable-n',e:'.ui-resizable-e',s:'.ui-resizable-s',w:'.ui-resizable-w',se:'.ui-resizable-se',sw:'.ui-resizable-sw',ne:'.ui-resizable-ne',nw:'.ui-resizable-nw'});if(this.handles.constructor==String){if(this.handles=='all')this.handles='n,e,s,w,se,sw,ne,nw';var n=this.handles.split(",");this.handles={};for(var i=0;i<n.length;i++){var handle=$.trim(n[i]),hname='ui-resizable-'+handle;var axis=$('<div class="ui-resizable-handle '+hname+'"></div>');if(/sw|se|ne|nw/.test(handle))axis.css({zIndex:++o.zIndex});if('se'==handle){axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');};this.handles[handle]='.ui-resizable-'+handle;this.element.append(axis);}}
+this._renderAxis=function(target){target=target||this.element;for(var i in this.handles){if(this.handles[i].constructor==String)
+this.handles[i]=$(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var axis=$(this.handles[i],this.element),padWrapper=0;padWrapper=/sw|ne|nw|se|n|s/.test(i)?axis.outerHeight():axis.outerWidth();var padPos=['padding',/ne|nw|n/.test(i)?'Top':/se|sw|s/.test(i)?'Bottom':/^e$/.test(i)?'Right':'Left'].join("");target.css(padPos,padWrapper);this._proportionallyResize();}
+if(!$(this.handles[i]).length)
+continue;}};this._renderAxis(this.element);this._handles=$('.ui-resizable-handle',this.element).disableSelection();this._handles.mouseover(function(){if(!self.resizing){if(this.className)
+var axis=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);self.axis=axis&&axis[1]?axis[1]:'se';}});if(o.autoHide){this._handles.hide();$(this.element).addClass("ui-resizable-autohide").hover(function(){$(this).removeClass("ui-resizable-autohide");self._handles.show();},function(){if(!self.resizing){$(this).addClass("ui-resizable-autohide");self._handles.hide();}});}
+this._mouseInit();},destroy:function(){this._mouseDestroy();var _destroy=function(exp){$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();};if(this.elementIsWrapper){_destroy(this.element);var wrapper=this.element;wrapper.parent().append(this.originalElement.css({position:wrapper.css('position'),width:wrapper.outerWidth(),height:wrapper.outerHeight(),top:wrapper.css('top'),left:wrapper.css('left')})).end().remove();}
+this.originalElement.css('resize',this.originalResizeStyle);_destroy(this.originalElement);},_mouseCapture:function(event){var handle=false;for(var i in this.handles){if($(this.handles[i])[0]==event.target)handle=true;}
+return this.options.disabled||!!handle;},_mouseStart:function(event){var o=this.options,iniPos=this.element.position(),el=this.element;this.resizing=true;this.documentScroll={top:$(document).scrollTop(),left:$(document).scrollLeft()};if(el.is('.ui-draggable')||(/absolute/).test(el.css('position'))){el.css({position:'absolute',top:iniPos.top,left:iniPos.left});}
+if($.browser.opera&&(/relative/).test(el.css('position')))
+el.css({position:'relative',top:'auto',left:'auto'});this._renderProxy();var curleft=num(this.helper.css('left')),curtop=num(this.helper.css('top'));if(o.containment){curleft+=$(o.containment).scrollLeft()||0;curtop+=$(o.containment).scrollTop()||0;}
+this.offset=this.helper.offset();this.position={left:curleft,top:curtop};this.size=this._helper?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalSize=this._helper?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalPosition={left:curleft,top:curtop};this.sizeDiff={width:el.outerWidth()-el.width(),height:el.outerHeight()-el.height()};this.originalMousePosition={left:event.pageX,top:event.pageY};this.aspectRatio=(typeof o.aspectRatio=='number')?o.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var cursor=$('.ui-resizable-'+this.axis).css('cursor');$('body').css('cursor',cursor=='auto'?this.axis+'-resize':cursor);el.addClass("ui-resizable-resizing");this._propagate("start",event);return true;},_mouseDrag:function(event){var el=this.helper,o=this.options,props={},self=this,smp=this.originalMousePosition,a=this.axis;var dx=(event.pageX-smp.left)||0,dy=(event.pageY-smp.top)||0;var trigger=this._change[a];if(!trigger)return false;var data=trigger.apply(this,[event,dx,dy]),ie6=$.browser.msie&&$.browser.version<7,csdif=this.sizeDiff;if(this._aspectRatio||event.shiftKey)
+data=this._updateRatio(data,event);data=this._respectSize(data,event);this._propagate("resize",event);el.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length)
+this._proportionallyResize();this._updateCache(data);this._trigger('resize',event,this.ui());return false;},_mouseStop:function(event){this.resizing=false;var o=this.options,self=this;if(this._helper){var pr=this._proportionallyResizeElements,ista=pr.length&&(/textarea/i).test(pr[0].nodeName),soffseth=ista&&$.ui.hasScroll(pr[0],'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var s={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;if(!o.animate)
+this.element.css($.extend(s,{top:top,left:left}));self.helper.height(self.size.height);self.helper.width(self.size.width);if(this._helper&&!o.animate)this._proportionallyResize();}
+$('body').css('cursor','auto');this.element.removeClass("ui-resizable-resizing");this._propagate("stop",event);if(this._helper)this.helper.remove();return false;},_updateCache:function(data){var o=this.options;this.offset=this.helper.offset();if(isNumber(data.left))this.position.left=data.left;if(isNumber(data.top))this.position.top=data.top;if(isNumber(data.height))this.size.height=data.height;if(isNumber(data.width))this.size.width=data.width;},_updateRatio:function(data,event){var o=this.options,cpos=this.position,csize=this.size,a=this.axis;if(data.height)data.width=(csize.height*this.aspectRatio);else if(data.width)data.height=(csize.width/this.aspectRatio);if(a=='sw'){data.left=cpos.left+(csize.width-data.width);data.top=null;}
+if(a=='nw'){data.top=cpos.top+(csize.height-data.height);data.left=cpos.left+(csize.width-data.width);}
+return data;},_respectSize:function(data,event){var el=this.helper,o=this.options,pRatio=this._aspectRatio||event.shiftKey,a=this.axis,ismaxw=isNumber(data.width)&&o.maxWidth&&(o.maxWidth<data.width),ismaxh=isNumber(data.height)&&o.maxHeight&&(o.maxHeight<data.height),isminw=isNumber(data.width)&&o.minWidth&&(o.minWidth>data.width),isminh=isNumber(data.height)&&o.minHeight&&(o.minHeight>data.height);if(isminw)data.width=o.minWidth;if(isminh)data.height=o.minHeight;if(ismaxw)data.width=o.maxWidth;if(ismaxh)data.height=o.maxHeight;var dw=this.originalPosition.left+this.originalSize.width,dh=this.position.top+this.size.height;var cw=/sw|nw|w/.test(a),ch=/nw|ne|n/.test(a);if(isminw&&cw)data.left=dw-o.minWidth;if(ismaxw&&cw)data.left=dw-o.maxWidth;if(isminh&&ch)data.top=dh-o.minHeight;if(ismaxh&&ch)data.top=dh-o.maxHeight;var isNotwh=!data.width&&!data.height;if(isNotwh&&!data.left&&data.top)data.top=null;else if(isNotwh&&!data.top&&data.left)data.left=null;return data;},_proportionallyResize:function(){var o=this.options;if(!this._proportionallyResizeElements.length)return;var element=this.helper||this.element;for(var i=0;i<this._proportionallyResizeElements.length;i++){var prel=this._proportionallyResizeElements[i];if(!this.borderDif){var b=[prel.css('borderTopWidth'),prel.css('borderRightWidth'),prel.css('borderBottomWidth'),prel.css('borderLeftWidth')],p=[prel.css('paddingTop'),prel.css('paddingRight'),prel.css('paddingBottom'),prel.css('paddingLeft')];this.borderDif=$.map(b,function(v,i){var border=parseInt(v,10)||0,padding=parseInt(p[i],10)||0;return border+padding;});}
+if($.browser.msie&&!(!($(element).is(':hidden')||$(element).parents(':hidden').length)))
+continue;prel.css({height:(element.height()-this.borderDif[0]-this.borderDif[2])||0,width:(element.width()-this.borderDif[1]-this.borderDif[3])||0});};},_renderProxy:function(){var el=this.element,o=this.options;this.elementOffset=el.offset();if(this._helper){this.helper=this.helper||$('<div style="overflow:hidden;"></div>');var ie6=$.browser.msie&&$.browser.version<7,ie6offset=(ie6?1:0),pxyoffset=(ie6?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+pxyoffset,height:this.element.outerHeight()+pxyoffset,position:'absolute',left:this.elementOffset.left-ie6offset+'px',top:this.elementOffset.top-ie6offset+'px',zIndex:++o.zIndex});this.helper.appendTo("body").disableSelection();}else{this.helper=this.element;}},_change:{e:function(event,dx,dy){return{width:this.originalSize.width+dx};},w:function(event,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{left:sp.left+dx,width:cs.width-dx};},n:function(event,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{top:sp.top+dy,height:cs.height-dy};},s:function(event,dx,dy){return{height:this.originalSize.height+dy};},se:function(event,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[event,dx,dy]));},sw:function(event,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[event,dx,dy]));},ne:function(event,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[event,dx,dy]));},nw:function(event,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[event,dx,dy]));}},_propagate:function(n,event){$.ui.plugin.call(this,n,[event,this.ui()]);(n!="resize"&&this._trigger(n,event,this.ui()));},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition};}}));$.extend($.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});$.ui.plugin.add("resizable","alsoResize",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options;_store=function(exp){$(exp).each(function(){$(this).data("resizable-alsoresize",{width:parseInt($(this).width(),10),height:parseInt($(this).height(),10),left:parseInt($(this).css('left'),10),top:parseInt($(this).css('top'),10)});});};if(typeof(o.alsoResize)=='object'&&!o.alsoResize.parentNode){if(o.alsoResize.length){o.alsoResize=o.alsoResize[0];_store(o.alsoResize);}
+else{$.each(o.alsoResize,function(exp,c){_store(exp);});}}else{_store(o.alsoResize);}},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,os=self.originalSize,op=self.originalPosition;var delta={height:(self.size.height-os.height)||0,width:(self.size.width-os.width)||0,top:(self.position.top-op.top)||0,left:(self.position.left-op.left)||0},_alsoResize=function(exp,c){$(exp).each(function(){var el=$(this),start=$(this).data("resizable-alsoresize"),style={},css=c&&c.length?c:['width','height','top','left'];$.each(css||['width','height','top','left'],function(i,prop){var sum=(start[prop]||0)+(delta[prop]||0);if(sum&&sum>=0)
+style[prop]=sum||null;});if(/relative/.test(el.css('position'))&&$.browser.opera){self._revertToRelativePosition=true;el.css({position:'absolute',top:'auto',left:'auto'});}
+el.css(style);});};if(typeof(o.alsoResize)=='object'&&!o.alsoResize.nodeType){$.each(o.alsoResize,function(exp,c){_alsoResize(exp,c);});}else{_alsoResize(o.alsoResize);}},stop:function(event,ui){var self=$(this).data("resizable");if(self._revertToRelativePosition&&$.browser.opera){self._revertToRelativePosition=false;el.css({position:'relative'});}
+$(this).removeData("resizable-alsoresize-start");}});$.ui.plugin.add("resizable","animate",{stop:function(event,ui){var self=$(this).data("resizable"),o=self.options;var pr=self._proportionallyResizeElements,ista=pr.length&&(/textarea/i).test(pr[0].nodeName),soffseth=ista&&$.ui.hasScroll(pr[0],'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var style={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;self.element.animate($.extend(style,top&&left?{top:top,left:left}:{}),{duration:o.animateDuration,easing:o.animateEasing,step:function(){var data={width:parseInt(self.element.css('width'),10),height:parseInt(self.element.css('height'),10),top:parseInt(self.element.css('top'),10),left:parseInt(self.element.css('left'),10)};if(pr&&pr.length)$(pr[0]).css({width:data.width,height:data.height});self._updateCache(data);self._propagate("resize",event);}});}});$.ui.plugin.add("resizable","containment",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options,el=self.element;var oc=o.containment,ce=(oc instanceof $)?oc.get(0):(/parent/.test(oc))?el.parent().get(0):oc;if(!ce)return;self.containerElement=$(ce);if(/document/.test(oc)||oc==document){self.containerOffset={left:0,top:0};self.containerPosition={left:0,top:0};self.parentData={element:$(document),left:0,top:0,width:$(document).width(),height:$(document).height()||document.body.parentNode.scrollHeight};}
+else{var element=$(ce),p=[];$(["Top","Right","Left","Bottom"]).each(function(i,name){p[i]=num(element.css("padding"+name));});self.containerOffset=element.offset();self.containerPosition=element.position();self.containerSize={height:(element.innerHeight()-p[3]),width:(element.innerWidth()-p[1])};var co=self.containerOffset,ch=self.containerSize.height,cw=self.containerSize.width,width=($.ui.hasScroll(ce,"left")?ce.scrollWidth:cw),height=($.ui.hasScroll(ce)?ce.scrollHeight:ch);self.parentData={element:ce,left:co.left,top:co.top,width:width,height:height};}},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,ps=self.containerSize,co=self.containerOffset,cs=self.size,cp=self.position,pRatio=self._aspectRatio||event.shiftKey,cop={top:0,left:0},ce=self.containerElement;if(ce[0]!=document&&(/static/).test(ce.css('position')))cop=co;if(cp.left<(self._helper?co.left:0)){self.size.width=self.size.width+(self._helper?(self.position.left-co.left):(self.position.left-cop.left));if(pRatio)self.size.height=self.size.width/o.aspectRatio;self.position.left=o.helper?co.left:0;}
+if(cp.top<(self._helper?co.top:0)){self.size.height=self.size.height+(self._helper?(self.position.top-co.top):self.position.top);if(pRatio)self.size.width=self.size.height*o.aspectRatio;self.position.top=self._helper?co.top:0;}
+self.offset.left=self.parentData.left+self.position.left;self.offset.top=self.parentData.top+self.position.top;var woset=Math.abs((self._helper?self.offset.left-cop.left:(self.offset.left-cop.left))+self.sizeDiff.width),hoset=Math.abs((self._helper?self.offset.top-cop.top:(self.offset.top-co.top))+self.sizeDiff.height);var isParent=self.containerElement.get(0)==self.element.parent().get(0),isOffsetRelative=/relative|absolute/.test(self.containerElement.css('position'));if(isParent&&isOffsetRelative)woset-=self.parentData.left;if(woset+self.size.width>=self.parentData.width){self.size.width=self.parentData.width-woset;if(pRatio)self.size.height=self.size.width/self.aspectRatio;}
+if(hoset+self.size.height>=self.parentData.height){self.size.height=self.parentData.height-hoset;if(pRatio)self.size.width=self.size.height*self.aspectRatio;}},stop:function(event,ui){var self=$(this).data("resizable"),o=self.options,cp=self.position,co=self.containerOffset,cop=self.containerPosition,ce=self.containerElement;var helper=$(self.helper),ho=helper.offset(),w=helper.outerWidth()-self.sizeDiff.width,h=helper.outerHeight()-self.sizeDiff.height;if(self._helper&&!o.animate&&(/relative/).test(ce.css('position')))
+$(this).css({left:ho.left-cop.left-co.left,width:w,height:h});if(self._helper&&!o.animate&&(/static/).test(ce.css('position')))
+$(this).css({left:ho.left-cop.left-co.left,width:w,height:h});}});$.ui.plugin.add("resizable","ghost",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options,cs=self.size;self.ghost=self.originalElement.clone();self.ghost.css({opacity:.25,display:'block',position:'relative',height:cs.height,width:cs.width,margin:0,left:0,top:0}).addClass('ui-resizable-ghost').addClass(typeof o.ghost=='string'?o.ghost:'');self.ghost.appendTo(self.helper);},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options;if(self.ghost)self.ghost.css({position:'relative',height:self.size.height,width:self.size.width});},stop:function(event,ui){var self=$(this).data("resizable"),o=self.options;if(self.ghost&&self.helper)self.helper.get(0).removeChild(self.ghost.get(0));}});$.ui.plugin.add("resizable","grid",{resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,cs=self.size,os=self.originalSize,op=self.originalPosition,a=self.axis,ratio=o._aspectRatio||event.shiftKey;o.grid=typeof o.grid=="number"?[o.grid,o.grid]:o.grid;var ox=Math.round((cs.width-os.width)/(o.grid[0]||1))*(o.grid[0]||1),oy=Math.round((cs.height-os.height)/(o.grid[1]||1))*(o.grid[1]||1);if(/^(se|s|e)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;}
+else if(/^(ne)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;}
+else if(/^(sw)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.left=op.left-ox;}
+else{self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;self.position.left=op.left-ox;}}});var num=function(v){return parseInt(v,10)||0;};var isNumber=function(value){return!isNaN(parseInt(value,10));};})(jQuery);(function($){var setDataSwitch={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},uiDialogClasses='ui-dialog '+'ui-widget '+'ui-widget-content '+'ui-corner-all ';$.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr('title');var self=this,options=this.options,title=options.title||this.originalTitle||'&nbsp;',titleId=$.ui.dialog.getTitleId(this.element),uiDialog=(this.uiDialog=$('<div/>')).appendTo(document.body).hide().addClass(uiDialogClasses+options.dialogClass).css({position:'absolute',overflow:'hidden',zIndex:options.zIndex}).attr('tabIndex',-1).css('outline',0).keydown(function(event){(options.closeOnEscape&&event.keyCode&&event.keyCode==$.ui.keyCode.ESCAPE&&self.close(event));}).attr({role:'dialog','aria-labelledby':titleId}).mousedown(function(event){self.moveToTop(false,event);}),uiDialogContent=this.element.show().removeAttr('title').addClass('ui-dialog-content '+'ui-widget-content').appendTo(uiDialog),uiDialogTitlebar=(this.uiDialogTitlebar=$('<div></div>')).addClass('ui-dialog-titlebar '+'ui-widget-header '+'ui-corner-all '+'ui-helper-clearfix').prependTo(uiDialog),uiDialogTitlebarClose=$('<a href="#"/>').addClass('ui-dialog-titlebar-close '+'ui-corner-all').attr('role','button').hover(function(){uiDialogTitlebarClose.addClass('ui-state-hover');},function(){uiDialogTitlebarClose.removeClass('ui-state-hover');}).focus(function(){uiDialogTitlebarClose.addClass('ui-state-focus');}).blur(function(){uiDialogTitlebarClose.removeClass('ui-state-focus');}).mousedown(function(ev){ev.stopPropagation();}).click(function(event){self.close(event);return false;}).appendTo(uiDialogTitlebar),uiDialogTitlebarCloseText=(this.uiDialogTitlebarCloseText=$('<span/>')).addClass('ui-icon '+'ui-icon-closethick').text(options.closeText).appendTo(uiDialogTitlebarClose),uiDialogTitle=$('<span/>').addClass('ui-dialog-title').attr('id',titleId).html(title).prependTo(uiDialogTitlebar);uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();(options.draggable&&$.fn.draggable&&this._makeDraggable());(options.resizable&&$.fn.resizable&&this._makeResizable());this._createButtons(options.buttons);this._isOpen=false;(options.bgiframe&&$.fn.bgiframe&&uiDialog.bgiframe());(options.autoOpen&&this.open());},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind('.dialog').removeData('dialog').removeClass('ui-dialog-content ui-widget-content').hide().appendTo('body');this.uiDialog.remove();(this.originalTitle&&this.element.attr('title',this.originalTitle));},close:function(event){var self=this;if(false===self._trigger('beforeclose',event)){return;}
+(self.overlay&&self.overlay.destroy());self.uiDialog.unbind('keypress.ui-dialog');(self.options.hide?self.uiDialog.hide(self.options.hide,function(){self._trigger('close',event);}):self.uiDialog.hide()&&self._trigger('close',event));$.ui.dialog.overlay.resize();self._isOpen=false;if(self.options.modal){var maxZ=0;$('.ui-dialog').each(function(){if(this!=self.uiDialog[0]){maxZ=Math.max(maxZ,$(this).css('z-index'));}});$.ui.dialog.maxZ=maxZ;}},isOpen:function(){return this._isOpen;},moveToTop:function(force,event){if((this.options.modal&&!force)||(!this.options.stack&&!this.options.modal)){return this._trigger('focus',event);}
+if(this.options.zIndex>$.ui.dialog.maxZ){$.ui.dialog.maxZ=this.options.zIndex;}
+(this.overlay&&this.overlay.$el.css('z-index',$.ui.dialog.overlay.maxZ=++$.ui.dialog.maxZ));var saveScroll={scrollTop:this.element.attr('scrollTop'),scrollLeft:this.element.attr('scrollLeft')};this.uiDialog.css('z-index',++$.ui.dialog.maxZ);this.element.attr(saveScroll);this._trigger('focus',event);},open:function(){if(this._isOpen){return;}
+var options=this.options,uiDialog=this.uiDialog;this.overlay=options.modal?new $.ui.dialog.overlay(this):null;(uiDialog.next().length&&uiDialog.appendTo('body'));this._size();this._position(options.position);uiDialog.show(options.show);this.moveToTop(true);(options.modal&&uiDialog.bind('keypress.ui-dialog',function(event){if(event.keyCode!=$.ui.keyCode.TAB){return;}
+var tabbables=$(':tabbable',this),first=tabbables.filter(':first')[0],last=tabbables.filter(':last')[0];if(event.target==last&&!event.shiftKey){setTimeout(function(){first.focus();},1);}else if(event.target==first&&event.shiftKey){setTimeout(function(){last.focus();},1);}}));$([]).add(uiDialog.find('.ui-dialog-content :tabbable:first')).add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')).add(uiDialog).filter(':first').focus();this._trigger('open');this._isOpen=true;},_createButtons:function(buttons){var self=this,hasButtons=false,uiDialogButtonPane=$('<div></div>').addClass('ui-dialog-buttonpane '+'ui-widget-content '+'ui-helper-clearfix');this.uiDialog.find('.ui-dialog-buttonpane').remove();(typeof buttons=='object'&&buttons!==null&&$.each(buttons,function(){return!(hasButtons=true);}));if(hasButtons){$.each(buttons,function(name,fn){$('<button type="button"></button>').addClass('ui-state-default '+'ui-corner-all').text(name).click(function(){fn.apply(self.element[0],arguments);}).hover(function(){$(this).addClass('ui-state-hover');},function(){$(this).removeClass('ui-state-hover');}).focus(function(){$(this).addClass('ui-state-focus');}).blur(function(){$(this).removeClass('ui-state-focus');}).appendTo(uiDialogButtonPane);});uiDialogButtonPane.appendTo(this.uiDialog);}},_makeDraggable:function(){var self=this,options=this.options,heightBeforeDrag;this.uiDialog.draggable({cancel:'.ui-dialog-content',handle:'.ui-dialog-titlebar',containment:'document',start:function(){heightBeforeDrag=options.height;$(this).height($(this).height()).addClass("ui-dialog-dragging");(options.dragStart&&options.dragStart.apply(self.element[0],arguments));},drag:function(){(options.drag&&options.drag.apply(self.element[0],arguments));},stop:function(){$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);(options.dragStop&&options.dragStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}});},_makeResizable:function(handles){handles=(handles===undefined?this.options.resizable:handles);var self=this,options=this.options,resizeHandles=typeof handles=='string'?handles:'n,e,s,w,se,sw,ne,nw';this.uiDialog.resizable({cancel:'.ui-dialog-content',alsoResize:this.element,maxWidth:options.maxWidth,maxHeight:options.maxHeight,minWidth:options.minWidth,minHeight:options.minHeight,start:function(){$(this).addClass("ui-dialog-resizing");(options.resizeStart&&options.resizeStart.apply(self.element[0],arguments));},resize:function(){(options.resize&&options.resize.apply(self.element[0],arguments));},handles:resizeHandles,stop:function(){$(this).removeClass("ui-dialog-resizing");options.height=$(this).height();options.width=$(this).width();(options.resizeStop&&options.resizeStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}}).find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');},_position:function(pos){var wnd=$(window),doc=$(document),pTop=doc.scrollTop(),pLeft=doc.scrollLeft(),minTop=pTop;if($.inArray(pos,['center','top','right','bottom','left'])>=0){pos=[pos=='right'||pos=='left'?pos:'center',pos=='top'||pos=='bottom'?pos:'middle'];}
+if(pos.constructor!=Array){pos=['center','middle'];}
+if(pos[0].constructor==Number){pLeft+=pos[0];}else{switch(pos[0]){case'left':pLeft+=0;break;case'right':pLeft+=wnd.width()-this.uiDialog.outerWidth();break;default:case'center':pLeft+=(wnd.width()-this.uiDialog.outerWidth())/2;}}
+if(pos[1].constructor==Number){pTop+=pos[1];}else{switch(pos[1]){case'top':pTop+=0;break;case'bottom':pTop+=wnd.height()-this.uiDialog.outerHeight();break;default:case'middle':pTop+=(wnd.height()-this.uiDialog.outerHeight())/2;}}
+pTop=Math.max(pTop,minTop);this.uiDialog.css({top:pTop,left:pLeft});},_setData:function(key,value){(setDataSwitch[key]&&this.uiDialog.data(setDataSwitch[key],value));switch(key){case"buttons":this._createButtons(value);break;case"closeText":this.uiDialogTitlebarCloseText.text(value);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(uiDialogClasses+value);break;case"draggable":(value?this._makeDraggable():this.uiDialog.draggable('destroy'));break;case"height":this.uiDialog.height(value);break;case"position":this._position(value);break;case"resizable":var uiDialog=this.uiDialog,isResizable=this.uiDialog.is(':data(resizable)');(isResizable&&!value&&uiDialog.resizable('destroy'));(isResizable&&typeof value=='string'&&uiDialog.resizable('option','handles',value));(isResizable||this._makeResizable(value));break;case"title":$(".ui-dialog-title",this.uiDialogTitlebar).html(value||'&nbsp;');break;case"width":this.uiDialog.width(value);break;}
+$.widget.prototype._setData.apply(this,arguments);},_size:function(){var options=this.options;this.element.css({height:0,minHeight:0,width:'auto'});var nonContentHeight=this.uiDialog.css({height:'auto',width:options.width}).height();this.element.css({minHeight:Math.max(options.minHeight-nonContentHeight,0),height:options.height=='auto'?'auto':Math.max(options.height-nonContentHeight,0)});}});$.extend($.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:'close',dialogClass:'',draggable:true,hide:null,height:'auto',maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:'center',resizable:true,show:null,stack:true,title:'',width:300,zIndex:1000},getter:'isOpen',uuid:0,maxZ:0,getTitleId:function($el){return'ui-dialog-title-'+($el.attr('id')||++this.uuid);},overlay:function(dialog){this.$el=$.ui.dialog.overlay.create(dialog);}});$.extend($.ui.dialog.overlay,{instances:[],maxZ:0,events:$.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),function(event){return event+'.dialog-overlay';}).join(' '),create:function(dialog){if(this.instances.length===0){setTimeout(function(){if($.ui.dialog.overlay.instances.length){$(document).bind($.ui.dialog.overlay.events,function(event){var dialogZ=$(event.target).parents('.ui-dialog').css('zIndex')||0;return(dialogZ>$.ui.dialog.overlay.maxZ);});}},1);$(document).bind('keydown.dialog-overlay',function(event){(dialog.options.closeOnEscape&&event.keyCode&&event.keyCode==$.ui.keyCode.ESCAPE&&dialog.close(event));});$(window).bind('resize.dialog-overlay',$.ui.dialog.overlay.resize);}
+var $el=$('<div></div>').appendTo(document.body).addClass('ui-widget-overlay').css({width:this.width(),height:this.height()});(dialog.options.bgiframe&&$.fn.bgiframe&&$el.bgiframe());this.instances.push($el);return $el;},destroy:function($el){this.instances.splice($.inArray(this.instances,$el),1);if(this.instances.length===0){$([document,window]).unbind('.dialog-overlay');}
+$el.remove();var maxZ=0;$.each(this.instances,function(){maxZ=Math.max(maxZ,this.css('z-index'));});this.maxZ=maxZ;},height:function(){if($.browser.msie&&$.browser.version<7){var scrollHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var offsetHeight=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(scrollHeight<offsetHeight){return $(window).height()+'px';}else{return scrollHeight+'px';}}else{return $(document).height()+'px';}},width:function(){if($.browser.msie&&$.browser.version<7){var scrollWidth=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var offsetWidth=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(scrollWidth<offsetWidth){return $(window).width()+'px';}else{return scrollWidth+'px';}}else{return $(document).width()+'px';}},resize:function(){var $overlays=$([]);$.each($.ui.dialog.overlay.instances,function(){$overlays=$overlays.add(this);});$overlays.css({width:0,height:0}).css({width:$.ui.dialog.overlay.width(),height:$.ui.dialog.overlay.height()});}});$.extend($.ui.dialog.overlay.prototype,{destroy:function(){$.ui.dialog.overlay.destroy(this.$el);}});})(jQuery);(function($){$.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable;}
+this._tabify(true);},_setData:function(key,value){if(key=='selected'){if(this.options.collapsible&&value==this.options.selected){return;}
+this.select(value);}
+else{this.options[key]=value;if(key=='deselectable'){this.options.collapsible=value;}
+this._tabify();}},_tabId:function(a){return a.title&&a.title.replace(/\s/g,'_').replace(/[^A-Za-z0-9\-_:\.]/g,'')||this.options.idPrefix+$.data(a);},_sanitizeSelector:function(hash){return hash.replace(/:/g,'\\:');},_cookie:function(){var cookie=this.cookie||(this.cookie=this.options.cookie.name||'ui-tabs-'+$.data(this.list[0]));return $.cookie.apply(null,[cookie].concat($.makeArray(arguments)));},_ui:function(tab,panel){return{tab:tab,panel:panel,index:this.anchors.index(tab)};},_cleanup:function(){this.lis.filter('.ui-state-processing').removeClass('ui-state-processing').find('span:data(label.tabs)').each(function(){var el=$(this);el.html(el.data('label.tabs')).removeData('label.tabs');});},_tabify:function(init){this.list=this.element.children('ul:first');this.lis=$('li:has(a[href])',this.list);this.anchors=this.lis.map(function(){return $('a',this)[0];});this.panels=$([]);var self=this,o=this.options;var fragmentId=/^#.+/;this.anchors.each(function(i,a){var href=$(a).attr('href');var hrefBase=href.split('#')[0],baseEl;if(hrefBase&&(hrefBase===location.toString().split('#')[0]||(baseEl=$('base')[0])&&hrefBase===baseEl.href)){href=a.hash;a.href=href;}
+if(fragmentId.test(href)){self.panels=self.panels.add(self._sanitizeSelector(href));}
+else if(href!='#'){$.data(a,'href.tabs',href);$.data(a,'load.tabs',href.replace(/#.*$/,''));var id=self._tabId(a);a.href='#'+id;var $panel=$('#'+id);if(!$panel.length){$panel=$(o.panelTemplate).attr('id',id).addClass('ui-tabs-panel ui-widget-content ui-corner-bottom').insertAfter(self.panels[i-1]||self.list);$panel.data('destroy.tabs',true);}
+self.panels=self.panels.add($panel);}
+else{o.disabled.push(i);}});if(init){this.element.addClass('ui-tabs ui-widget ui-widget-content ui-corner-all');this.list.addClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');this.lis.addClass('ui-state-default ui-corner-top');this.panels.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom');if(o.selected===undefined){if(location.hash){this.anchors.each(function(i,a){if(a.hash==location.hash){o.selected=i;return false;}});}
+if(typeof o.selected!='number'&&o.cookie){o.selected=parseInt(self._cookie(),10);}
+if(typeof o.selected!='number'&&this.lis.filter('.ui-tabs-selected').length){o.selected=this.lis.index(this.lis.filter('.ui-tabs-selected'));}
+o.selected=o.selected||0;}
+else if(o.selected===null){o.selected=-1;}
+o.selected=((o.selected>=0&&this.anchors[o.selected])||o.selected<0)?o.selected:0;o.disabled=$.unique(o.disabled.concat($.map(this.lis.filter('.ui-state-disabled'),function(n,i){return self.lis.index(n);}))).sort();if($.inArray(o.selected,o.disabled)!=-1){o.disabled.splice($.inArray(o.selected,o.disabled),1);}
+this.panels.addClass('ui-tabs-hide');this.lis.removeClass('ui-tabs-selected ui-state-active');if(o.selected>=0&&this.anchors.length){this.panels.eq(o.selected).removeClass('ui-tabs-hide');this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active');self.element.queue("tabs",function(){self._trigger('show',null,self._ui(self.anchors[o.selected],self.panels[o.selected]));});this.load(o.selected);}
+$(window).bind('unload',function(){self.lis.add(self.anchors).unbind('.tabs');self.lis=self.anchors=self.panels=null;});}
+else{o.selected=this.lis.index(this.lis.filter('.ui-tabs-selected'));}
+this.element[o.collapsible?'addClass':'removeClass']('ui-tabs-collapsible');if(o.cookie){this._cookie(o.selected,o.cookie);}
+for(var i=0,li;(li=this.lis[i]);i++){$(li)[$.inArray(i,o.disabled)!=-1&&!$(li).hasClass('ui-tabs-selected')?'addClass':'removeClass']('ui-state-disabled');}
+if(o.cache===false){this.anchors.removeData('cache.tabs');}
+this.lis.add(this.anchors).unbind('.tabs');if(o.event!='mouseover'){var addState=function(state,el){if(el.is(':not(.ui-state-disabled)')){el.addClass('ui-state-'+state);}};var removeState=function(state,el){el.removeClass('ui-state-'+state);};this.lis.bind('mouseover.tabs',function(){addState('hover',$(this));});this.lis.bind('mouseout.tabs',function(){removeState('hover',$(this));});this.anchors.bind('focus.tabs',function(){addState('focus',$(this).closest('li'));});this.anchors.bind('blur.tabs',function(){removeState('focus',$(this).closest('li'));});}
+var hideFx,showFx;if(o.fx){if($.isArray(o.fx)){hideFx=o.fx[0];showFx=o.fx[1];}
+else{hideFx=showFx=o.fx;}}
+function resetStyle($el,fx){$el.css({display:''});if($.browser.msie&&fx.opacity){$el[0].style.removeAttribute('filter');}}
+var showTab=showFx?function(clicked,$show){$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');$show.hide().removeClass('ui-tabs-hide').animate(showFx,showFx.duration||'normal',function(){resetStyle($show,showFx);self._trigger('show',null,self._ui(clicked,$show[0]));});}:function(clicked,$show){$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');$show.removeClass('ui-tabs-hide');self._trigger('show',null,self._ui(clicked,$show[0]));};var hideTab=hideFx?function(clicked,$hide){$hide.animate(hideFx,hideFx.duration||'normal',function(){self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');$hide.addClass('ui-tabs-hide');resetStyle($hide,hideFx);self.element.dequeue("tabs");});}:function(clicked,$hide,$show){self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');$hide.addClass('ui-tabs-hide');self.element.dequeue("tabs");};this.anchors.bind(o.event+'.tabs',function(){var el=this,$li=$(this).closest('li'),$hide=self.panels.filter(':not(.ui-tabs-hide)'),$show=$(self._sanitizeSelector(this.hash));if(($li.hasClass('ui-tabs-selected')&&!o.collapsible)||$li.hasClass('ui-state-disabled')||$li.hasClass('ui-state-processing')||self._trigger('select',null,self._ui(this,$show[0]))===false){this.blur();return false;}
+o.selected=self.anchors.index(this);self.abort();if(o.collapsible){if($li.hasClass('ui-tabs-selected')){o.selected=-1;if(o.cookie){self._cookie(o.selected,o.cookie);}
+self.element.queue("tabs",function(){hideTab(el,$hide);}).dequeue("tabs");this.blur();return false;}
+else if(!$hide.length){if(o.cookie){self._cookie(o.selected,o.cookie);}
+self.element.queue("tabs",function(){showTab(el,$show);});self.load(self.anchors.index(this));this.blur();return false;}}
+if(o.cookie){self._cookie(o.selected,o.cookie);}
+if($show.length){if($hide.length){self.element.queue("tabs",function(){hideTab(el,$hide);});}
+self.element.queue("tabs",function(){showTab(el,$show);});self.load(self.anchors.index(this));}
+else{throw'jQuery UI Tabs: Mismatching fragment identifier.';}
+if($.browser.msie){this.blur();}});this.anchors.bind('click.tabs',function(){return false;});},destroy:function(){var o=this.options;this.abort();this.element.unbind('.tabs').removeClass('ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible').removeData('tabs');this.list.removeClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');this.anchors.each(function(){var href=$.data(this,'href.tabs');if(href){this.href=href;}
+var $this=$(this).unbind('.tabs');$.each(['href','load','cache'],function(i,prefix){$this.removeData(prefix+'.tabs');});});this.lis.unbind('.tabs').add(this.panels).each(function(){if($.data(this,'destroy.tabs')){$(this).remove();}
+else{$(this).removeClass(['ui-state-default','ui-corner-top','ui-tabs-selected','ui-state-active','ui-state-hover','ui-state-focus','ui-state-disabled','ui-tabs-panel','ui-widget-content','ui-corner-bottom','ui-tabs-hide'].join(' '));}});if(o.cookie){this._cookie(null,o.cookie);}},add:function(url,label,index){if(index===undefined){index=this.anchors.length;}
+var self=this,o=this.options,$li=$(o.tabTemplate.replace(/#\{href\}/g,url).replace(/#\{label\}/g,label)),id=!url.indexOf('#')?url.replace('#',''):this._tabId($('a',$li)[0]);$li.addClass('ui-state-default ui-corner-top').data('destroy.tabs',true);var $panel=$('#'+id);if(!$panel.length){$panel=$(o.panelTemplate).attr('id',id).data('destroy.tabs',true);}
+$panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide');if(index>=this.lis.length){$li.appendTo(this.list);$panel.appendTo(this.list[0].parentNode);}
+else{$li.insertBefore(this.lis[index]);$panel.insertBefore(this.panels[index]);}
+o.disabled=$.map(o.disabled,function(n,i){return n>=index?++n:n;});this._tabify();if(this.anchors.length==1){$li.addClass('ui-tabs-selected ui-state-active');$panel.removeClass('ui-tabs-hide');this.element.queue("tabs",function(){self._trigger('show',null,self._ui(self.anchors[0],self.panels[0]));});this.load(0);}
+this._trigger('add',null,this._ui(this.anchors[index],this.panels[index]));},remove:function(index){var o=this.options,$li=this.lis.eq(index).remove(),$panel=this.panels.eq(index).remove();if($li.hasClass('ui-tabs-selected')&&this.anchors.length>1){this.select(index+(index+1<this.anchors.length?1:-1));}
+o.disabled=$.map($.grep(o.disabled,function(n,i){return n!=index;}),function(n,i){return n>=index?--n:n;});this._tabify();this._trigger('remove',null,this._ui($li.find('a')[0],$panel[0]));},enable:function(index){var o=this.options;if($.inArray(index,o.disabled)==-1){return;}
+this.lis.eq(index).removeClass('ui-state-disabled');o.disabled=$.grep(o.disabled,function(n,i){return n!=index;});this._trigger('enable',null,this._ui(this.anchors[index],this.panels[index]));},disable:function(index){var self=this,o=this.options;if(index!=o.selected){this.lis.eq(index).addClass('ui-state-disabled');o.disabled.push(index);o.disabled.sort();this._trigger('disable',null,this._ui(this.anchors[index],this.panels[index]));}},select:function(index){if(typeof index=='string'){index=this.anchors.index(this.anchors.filter('[href$='+index+']'));}
+else if(index===null){index=-1;}
+if(index==-1&&this.options.collapsible){index=this.options.selected;}
+this.anchors.eq(index).trigger(this.options.event+'.tabs');},load:function(index){var self=this,o=this.options,a=this.anchors.eq(index)[0],url=$.data(a,'load.tabs');this.abort();if(!url||this.element.queue("tabs").length!==0&&$.data(a,'cache.tabs')){this.element.dequeue("tabs");return;}
+this.lis.eq(index).addClass('ui-state-processing');if(o.spinner){var span=$('span',a);span.data('label.tabs',span.html()).html(o.spinner);}
+this.xhr=$.ajax($.extend({},o.ajaxOptions,{url:url,success:function(r,s){$(self._sanitizeSelector(a.hash)).html(r);self._cleanup();if(o.cache){$.data(a,'cache.tabs',true);}
+self._trigger('load',null,self._ui(self.anchors[index],self.panels[index]));try{o.ajaxOptions.success(r,s);}
+catch(e){}
+self.element.dequeue("tabs");}}));},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr;}
+this._cleanup();},url:function(index,url){this.anchors.eq(index).removeData('cache.tabs').data('load.tabs',url);},length:function(){return this.anchors.length;}});$.extend($.ui.tabs,{version:'1.7.2',getter:'length',defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:'click',fx:null,idPrefix:'ui-tabs-',panelTemplate:'<div></div>',spinner:'<em>Loading&#8230;</em>',tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});$.extend($.ui.tabs.prototype,{rotation:null,rotate:function(ms,continuing){var self=this,o=this.options;var rotate=self._rotate||(self._rotate=function(e){clearTimeout(self.rotation);self.rotation=setTimeout(function(){var t=o.selected;self.select(++t<self.anchors.length?t:0);},ms);if(e){e.stopPropagation();}});var stop=self._unrotate||(self._unrotate=!continuing?function(e){if(e.clientX){self.rotate(null);}}:function(e){t=o.selected;rotate();});if(ms){this.element.bind('tabsshow',rotate);this.anchors.bind(o.event+'.tabs',stop);rotate();}
+else{clearTimeout(self.rotation);this.element.unbind('tabsshow',rotate);this.anchors.unbind(o.event+'.tabs',stop);delete this._rotate;delete this._unrotate;}}});})(jQuery);(function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME='datepicker';function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId='ui-datepicker-div';this._inlineClass='ui-datepicker-inline';this._appendClass='ui-datepicker-append';this._triggerClass='ui-datepicker-trigger';this._dialogClass='ui-datepicker-dialog';this._disableClass='ui-datepicker-disabled';this._unselectableClass='ui-datepicker-unselectable';this._currentClass='ui-datepicker-current-day';this._dayOverClass='ui-datepicker-days-cell-over';this.regional=[];this.regional['']={closeText:'Done',prevText:'Prev',nextText:'Next',currentText:'Today',monthNames:['January','February','March','April','May','June','July','August','September','October','November','December'],monthNamesShort:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],dayNames:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],dayNamesShort:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],dayNamesMin:['Su','Mo','Tu','We','Th','Fr','Sa'],dateFormat:'mm/dd/yy',firstDay:0,isRTL:false};this._defaults={showOn:'focus',showAnim:'show',showOptions:{},defaultDate:null,appendText:'',buttonText:'...',buttonImage:'',buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:'-10:+10',showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:'+10',minDate:null,maxDate:null,duration:'normal',beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:'',altFormat:'',constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional['']);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');}
+$.extend(Datepicker.prototype,{markerClassName:'hasDatepicker',log:function(){if(this.debug)
+console.log.apply('',arguments);},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this;},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute('date:'+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue);}catch(err){inlineSettings[attrName]=attrValue;}}}
+var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=='div'||nodeName=='span');if(!target.id)
+target.id='dp'+(++this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=='input'){this._connectDatepicker(target,inst);}else if(inline){this._inlineDatepicker(target,inst);}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,'\\\\$1');return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName))
+return;var appendText=this._get(inst,'appendText');var isRTL=this._get(inst,'isRTL');if(appendText){inst.append=$('<span class="'+this._appendClass+'">'+appendText+'</span>');input[isRTL?'before':'after'](inst.append);}
+var showOn=this._get(inst,'showOn');if(showOn=='focus'||showOn=='both')
+input.focus(this._showDatepicker);if(showOn=='button'||showOn=='both'){var buttonText=this._get(inst,'buttonText');var buttonImage=this._get(inst,'buttonImage');inst.trigger=$(this._get(inst,'buttonImageOnly')?$('<img/>').addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==''?buttonText:$('<img/>').attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?'before':'after'](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target)
+$.datepicker._hideDatepicker();else
+$.datepicker._showDatepicker(target);return false;});}
+input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value;}).bind("getData.datepicker",function(event,key){return this._get(inst,key);});$.data(target,PROP_NAME,inst);},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName))
+return;divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value;}).bind("getData.datepicker",function(event,key){return this._get(inst,key);});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst);},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id='dp'+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$('body').append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst);}
+extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY];}
+this._dialogInput.css('left',this._pos[0]+'px').css('top',this._pos[1]+'px');inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI)
+$.blockUI(this.dpDiv);$.data(this._dialogInput[0],PROP_NAME,inst);return this;},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return;}
+var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=='input'){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind('focus',this._showDatepicker).unbind('keydown',this._doKeyDown).unbind('keypress',this._doKeyPress);}else if(nodeName=='div'||nodeName=='span')
+$target.removeClass(this.markerClassName).empty();},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return;}
+var nodeName=target.nodeName.toLowerCase();if(nodeName=='input'){target.disabled=false;inst.trigger.filter('button').each(function(){this.disabled=false;}).end().filter('img').css({opacity:'1.0',cursor:''});}
+else if(nodeName=='div'||nodeName=='span'){var inline=$target.children('.'+this._inlineClass);inline.children().removeClass('ui-state-disabled');}
+this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value);});},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return;}
+var nodeName=target.nodeName.toLowerCase();if(nodeName=='input'){target.disabled=true;inst.trigger.filter('button').each(function(){this.disabled=true;}).end().filter('img').css({opacity:'0.5',cursor:'default'});}
+else if(nodeName=='div'||nodeName=='span'){var inline=$target.children('.'+this._inlineClass);inline.children().addClass('ui-state-disabled');}
+this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value);});this._disabledInputs[this._disabledInputs.length]=target;},_isDisabledDatepicker:function(target){if(!target){return false;}
+for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target)
+return true;}
+return false;},_getInst:function(target){try{return $.data(target,PROP_NAME);}
+catch(err){throw'Missing instance data for this datepicker';}},_optionDatepicker:function(target,name,value){var inst=this._getInst(target);if(arguments.length==2&&typeof name=='string'){return(name=='defaults'?$.extend({},$.datepicker._defaults):(inst?(name=='all'?$.extend({},inst.settings):this._get(inst,name)):null));}
+var settings=name||{};if(typeof name=='string'){settings={};settings[name]=value;}
+if(inst){if(this._curInst==inst){this._hideDatepicker(null);}
+var date=this._getDateDatepicker(target);extendRemove(inst.settings,settings);this._setDateDatepicker(target,date);this._updateDatepicker(inst);}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value);},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst);}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst);}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline)
+this._setDateFromField(inst);return(inst?this._getDate(inst):null);},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is('.ui-datepicker-rtl');inst._keyEvent=true;if($.datepicker._datepickerShowing)
+switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,'');break;case 13:var sel=$('td.'+$.datepicker._dayOverClass+', td.'+$.datepicker._currentClass,inst.dpDiv);if(sel[0])
+$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0]);else
+$.datepicker._hideDatepicker(null,$.datepicker._get(inst,'duration'));return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,'duration'));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,'stepBigMonths'):-$.datepicker._get(inst,'stepMonths')),'M');break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,'stepBigMonths'):+$.datepicker._get(inst,'stepMonths')),'M');break;case 35:if(event.ctrlKey||event.metaKey)$.datepicker._clearDate(event.target);handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey)$.datepicker._gotoToday(event.target);handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,(isRTL?+1:-1),'D');handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey)$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,'stepBigMonths'):-$.datepicker._get(inst,'stepMonths')),'M');break;case 38:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,-7,'D');handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,(isRTL?-1:+1),'D');handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey)$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,'stepBigMonths'):+$.datepicker._get(inst,'stepMonths')),'M');break;case 40:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,+7,'D');handled=event.ctrlKey||event.metaKey;break;default:handled=false;}
+else if(event.keyCode==36&&event.ctrlKey)
+$.datepicker._showDatepicker(this);else{handled=false;}
+if(handled){event.preventDefault();event.stopPropagation();}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,'constrainInput')){var chars=$.datepicker._possibleChars($.datepicker._get(inst,'dateFormat'));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<' '||!chars||chars.indexOf(chr)>-1);}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!='input')
+input=$('input',input.parentNode)[0];if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input)
+return;var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,'beforeShow');extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,'');$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog)
+input.value='';if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight;}
+var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css('position')=='fixed';return!isFixed;});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop;}
+var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:'absolute',display:'block',top:'-1000px'});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?'static':(isFixed?'fixed':'absolute')),display:'none',left:offset.left+'px',top:offset.top+'px'});if(!inst.inline){var showAnim=$.datepicker._get(inst,'showAnim')||'show';var duration=$.datepicker._get(inst,'duration');var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7)
+$('iframe.ui-datepicker-cover').css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4});};if($.effects&&$.effects[showAnim])
+inst.dpDiv.show(showAnim,$.datepicker._get(inst,'showOptions'),duration,postProcess);else
+inst.dpDiv[showAnim](duration,postProcess);if(duration=='')
+postProcess();if(inst.input[0].type!='hidden')
+inst.input[0].focus();$.datepicker._curInst=inst;}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find('iframe.ui-datepicker-cover').css({width:dims.width,height:dims.height}).end().find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a').bind('mouseout',function(){$(this).removeClass('ui-state-hover');if(this.className.indexOf('ui-datepicker-prev')!=-1)$(this).removeClass('ui-datepicker-prev-hover');if(this.className.indexOf('ui-datepicker-next')!=-1)$(this).removeClass('ui-datepicker-next-hover');}).bind('mouseover',function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');$(this).addClass('ui-state-hover');if(this.className.indexOf('ui-datepicker-prev')!=-1)$(this).addClass('ui-datepicker-prev-hover');if(this.className.indexOf('ui-datepicker-next')!=-1)$(this).addClass('ui-datepicker-next-hover');}}).end().find('.'+this._dayOverClass+' a').trigger('mouseover').end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass('ui-datepicker-multi-'+cols).css('width',(width*cols)+'em');}else{inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');}
+inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?'add':'remove')+'Class']('ui-datepicker-multi');inst.dpDiv[(this._get(inst,'isRTL')?'add':'remove')+'Class']('ui-datepicker-rtl');if(inst.input&&inst.input[0].type!='hidden'&&inst==$.datepicker._curInst)
+$(inst.input[0]).focus();},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,'isRTL')?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset;},_findPos:function(obj){while(obj&&(obj.type=='hidden'||obj.nodeType!=1)){obj=obj.nextSibling;}
+var position=$(obj).offset();return[position.left,position.top];},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME)))
+return;if(inst.stayOpen)
+this._selectDate('#'+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,'duration'));var showAnim=this._get(inst,'showAnim');var postProcess=function(){$.datepicker._tidyDialog(inst);};if(duration!=''&&$.effects&&$.effects[showAnim])
+inst.dpDiv.hide(showAnim,$.datepicker._get(inst,'showOptions'),duration,postProcess);else
+inst.dpDiv[(duration==''?'hide':(showAnim=='slideDown'?'slideUp':(showAnim=='fadeIn'?'fadeOut':'hide')))](duration,postProcess);if(duration=='')
+this._tidyDialog(inst);var onClose=this._get(inst,'onClose');if(onClose)
+onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():''),inst]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:'absolute',left:'0',top:'-100px'});if($.blockUI){$.unblockUI();$('body').append(this.dpDiv);}}
+this._inDialog=false;}
+this._curInst=null;},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');},_checkExternalClick:function(event){if(!$.datepicker._curInst)
+return;var $target=$(event.target);if(($target.parents('#'+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI))
+$.datepicker._hideDatepicker(null,'');},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return;}
+this._adjustInstDate(inst,offset+
+(period=='M'?this._get(inst,'showCurrentAtPos'):0),period);this._updateDatepicker(inst);},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,'gotoCurrent')&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear;}
+else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();}
+this._notifyChange(inst);this._adjustDate(target);},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst['selected'+(period=='M'?'Month':'Year')]=inst['draw'+(period=='M'?'Month':'Year')]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target);},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie)
+inst.input[0].focus();inst._selectingMonthYear=!inst._selectingMonthYear;},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return;}
+var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$('a',td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null;}
+this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst);}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,'');},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input)
+inst.input.val(dateStr);this._updateAlternate(inst);var onSelect=this._get(inst,'onSelect');if(onSelect)
+onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]);else if(inst.input)
+inst.input.trigger('change');if(inst.inline)
+this._updateDatepicker(inst);else if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,'duration'));this._lastInput=inst.input[0];if(typeof(inst.input[0])!='object')
+inst.input[0].focus();this._lastInput=null;}},_updateAlternate:function(inst){var altField=this._get(inst,'altField');if(altField){var altFormat=this._get(inst,'altFormat')||this._get(inst,'dateFormat');var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr);});}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),''];},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate);}else if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1;}}
+return Math.floor(((checkDate-firstMon)/86400000)/7)+1;},parseDate:function(format,value,settings){if(format==null||value==null)
+throw'Invalid arguments';value=(typeof value=='object'?value.toString():value+'');if(value=='')
+return null;var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches)
+iFormat++;return matches;};var getNumber=function(match){lookAhead(match);var origSize=(match=='@'?14:(match=='y'?4:(match=='o'?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>='0'&&value.charAt(iValue)<='9'){num=num*10+parseInt(value.charAt(iValue++),10);size--;}
+if(size==origSize)
+throw'Missing number at position '+iValue;return num;};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++)
+size=Math.max(size,names[j].length);var name='';var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++)
+if(name==names[i])
+return i+1;size--;}
+throw'Unknown name at position '+iInit;};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat))
+throw'Unexpected literal at position '+iValue;iValue++;};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal)
+if(format.charAt(iFormat)=="'"&&!lookAhead("'"))
+literal=false;else
+checkLiteral();else
+switch(format.charAt(iFormat)){case'd':day=getNumber('d');break;case'D':getName('D',dayNamesShort,dayNames);break;case'o':doy=getNumber('o');break;case'm':month=getNumber('m');break;case'M':month=getName('M',monthNamesShort,monthNames);break;case'y':year=getNumber('y');break;case'@':var date=new Date(getNumber('@'));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'"))
+checkLiteral();else
+literal=true;break;default:checkLiteral();}}
+if(year==-1)
+year=new Date().getFullYear();else if(year<100)
+year+=new Date().getFullYear()-new Date().getFullYear()%100+
+(year<=shortYearCutoff?0:-100);if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim)
+break;month++;day-=dim;}while(true);}
+var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day)
+throw'Invalid date';return date;},ATOM:'yy-mm-dd',COOKIE:'D, dd M yy',ISO_8601:'yy-mm-dd',RFC_822:'D, d M y',RFC_850:'DD, dd-M-y',RFC_1036:'D, d M y',RFC_1123:'D, d M yy',RFC_2822:'D, d M yy',RSS:'D, d M y',TIMESTAMP:'@',W3C:'yy-mm-dd',formatDate:function(format,date,settings){if(!date)
+return'';var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches)
+iFormat++;return matches;};var formatNumber=function(match,value,len){var num=''+value;if(lookAhead(match))
+while(num.length<len)
+num='0'+num;return num;};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value]);};var output='';var literal=false;if(date)
+for(var iFormat=0;iFormat<format.length;iFormat++){if(literal)
+if(format.charAt(iFormat)=="'"&&!lookAhead("'"))
+literal=false;else
+output+=format.charAt(iFormat);else
+switch(format.charAt(iFormat)){case'd':output+=formatNumber('d',date.getDate(),2);break;case'D':output+=formatName('D',date.getDay(),dayNamesShort,dayNames);break;case'o':var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--)
+doy+=this._getDaysInMonth(date.getFullYear(),m);output+=formatNumber('o',doy,3);break;case'm':output+=formatNumber('m',date.getMonth()+1,2);break;case'M':output+=formatName('M',date.getMonth(),monthNamesShort,monthNames);break;case'y':output+=(lookAhead('y')?date.getFullYear():(date.getYear()%100<10?'0':'')+date.getYear()%100);break;case'@':output+=date.getTime();break;case"'":if(lookAhead("'"))
+output+="'";else
+literal=true;break;default:output+=format.charAt(iFormat);}}
+return output;},_possibleChars:function(format){var chars='';var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++)
+if(literal)
+if(format.charAt(iFormat)=="'"&&!lookAhead("'"))
+literal=false;else
+chars+=format.charAt(iFormat);else
+switch(format.charAt(iFormat)){case'd':case'm':case'y':case'@':chars+='0123456789';break;case'D':case'M':return null;case"'":if(lookAhead("'"))
+chars+="'";else
+literal=true;break;default:chars+=format.charAt(iFormat);}
+return chars;},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name];},_setDateFromField:function(inst){var dateFormat=this._get(inst,'dateFormat');var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate;}catch(event){this.log(event);date=defaultDate;}
+inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst);},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,'defaultDate'),new Date());var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date;},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date;};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||'d'){case'd':case'D':day+=parseInt(matches[1],10);break;case'w':case'W':day+=parseInt(matches[1],10)*7;break;case'm':case'M':month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case'y':case'Y':year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;}
+matches=pattern.exec(offset);}
+return new Date(year,month,day);};date=(date==null?defaultDate:(typeof date=='string'?offsetString(date,this._getDaysInMonth):(typeof date=='number'?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=='Invalid Date'?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0);}
+return this._daylightSavingAdjust(date);},_daylightSavingAdjust:function(date){if(!date)return null;date.setHours(date.getHours()>12?date.getHours()+2:0);return date;},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear)
+this._notifyChange(inst);this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?'':this._formatDate(inst));}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=='')?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate;},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,'isRTL');var showButtonPanel=this._get(inst,'showButtonPanel');var hideIfNoPrevNext=this._get(inst,'hideIfNoPrevNext');var navigationAsDateFormat=this._get(inst,'navigationAsDateFormat');var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,'showCurrentAtPos');var stepMonths=this._get(inst,'stepMonths');var stepBigMonths=this._get(inst,'stepBigMonths');var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--;}
+if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--;}}}
+inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,'prevText');prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+'\', -'+stepMonths+', \'M\');"'+' title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'e':'w')+'">'+prevText+'</span></a>':(hideIfNoPrevNext?'':'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'e':'w')+'">'+prevText+'</span></a>'));var nextText=this._get(inst,'nextText');nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+'\', +'+stepMonths+', \'M\');"'+' title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'w':'e')+'">'+nextText+'</span></a>':(hideIfNoPrevNext?'':'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'w':'e')+'">'+nextText+'</span></a>'));var currentText=this._get(inst,'currentText');var gotoDate=(this._get(inst,'gotoCurrent')&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,'closeText')+'</button>':'');var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:'')+
+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+'\');"'+'>'+currentText+'</button>':'')+(isRTL?'':controls)+'</div>':'';var firstDay=parseInt(this._get(inst,'firstDay'),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,'dayNames');var dayNamesShort=this._get(inst,'dayNamesShort');var dayNamesMin=this._get(inst,'dayNamesMin');var monthNames=this._get(inst,'monthNames');var monthNamesShort=this._get(inst,'monthNamesShort');var beforeShowDay=this._get(inst,'beforeShowDay');var showOtherMonths=this._get(inst,'showOtherMonths');var calculateWeek=this._get(inst,'calculateWeek')||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html='';for(var row=0;row<numMonths[0];row++){var group='';for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=' ui-corner-all';var calender='';if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+='first';cornerClass=' ui-corner-'+(isRTL?'right':'left');break;case numMonths[1]-1:calender+='last';cornerClass=' ui-corner-'+(isRTL?'left':'right');break;default:calender+='middle';cornerClass='';break;}
+calender+='">';}
+calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+
+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):'')+
+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):'')+
+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead>'+'<tr>';var thead='';for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+='<th'+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':'')+'>'+'<span title="'+dayNames[day]+'">'+dayNamesMin[day]+'</span></th>';}
+calender+=thead+'</tr></thead><tbody>';var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth)
+inst.selectedDay=Math.min(inst.selectedDay,daysInMonth);var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+='<tr>';var tbody='';for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,'']);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+
+((dow+firstDay+6)%7>=5?' ui-datepicker-week-end':'')+
+(otherMonth?' ui-datepicker-other-month':'')+
+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?' '+this._dayOverClass:'')+
+(unselectable?' '+this._unselectableClass+' ui-state-disabled':'')+
+(otherMonth&&!showOtherMonths?'':' '+daySettings[1]+
+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?' '+this._currentClass:'')+
+(printDate.getTime()==today.getTime()?' ui-datepicker-today':''))+'"'+
+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':'')+
+(unselectable?'':' onclick="DP_jQuery.datepicker._selectDay(\'#'+
+inst.id+'\','+drawMonth+','+drawYear+', this);return false;"')+'>'+
+(otherMonth?(showOtherMonths?printDate.getDate():'&#xa0;'):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+'</span>':'<a class="ui-state-default'+
+(printDate.getTime()==today.getTime()?' ui-state-highlight':'')+
+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?' ui-state-active':'')+'" href="#">'+printDate.getDate()+'</a>'))+'</td>';printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate);}
+calender+=tbody+'</tr>';}
+drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++;}
+calender+='</tbody></table>'+(isMultiMonth?'</div>'+
+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':''):'');group+=calender;}
+html+=group;}
+html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':'');inst._keyEvent=false;return html;},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,'changeMonth');var changeYear=this._get(inst,'changeYear');var showMonthAfterYear=this._get(inst,'showMonthAfterYear');var html='<div class="ui-datepicker-title">';var monthHtml='';if(secondary||!changeMonth)
+monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+'</span> ';else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" '+'onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+'\', this, \'M\');" '+'onclick="DP_jQuery.datepicker._clickMonthYear(\'#'+inst.id+'\');"'+'>';for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth()))
+monthHtml+='<option value="'+month+'"'+
+(month==drawMonth?' selected="selected"':'')+'>'+monthNamesShort[month]+'</option>';}
+monthHtml+='</select>';}
+if(!showMonthAfterYear)
+html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?'&#xa0;':'');if(secondary||!changeYear)
+html+='<span class="ui-datepicker-year">'+drawYear+'</span>';else{var years=this._get(inst,'yearRange').split(':');var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10;}else if(years[0].charAt(0)=='+'||years[0].charAt(0)=='-'){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10);}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10);}
+year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" '+'onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+'\', this, \'Y\');" '+'onclick="DP_jQuery.datepicker._clickMonthYear(\'#'+inst.id+'\');"'+'>';for(;year<=endYear;year++){html+='<option value="'+year+'"'+
+(year==drawYear?' selected="selected"':'')+'>'+year+'</option>';}
+html+='</select>';}
+if(showMonthAfterYear)
+html+=(secondary||changeMonth||changeYear?'&#xa0;':'')+monthHtml;html+='</div>';return html;},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=='Y'?offset:0);var month=inst.drawMonth+(period=='M'?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+
+(period=='D'?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=='M'||period=='Y')
+this._notifyChange(inst);},_notifyChange:function(inst){var onChange=this._get(inst,'onChangeMonthYear');if(onChange)
+onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst]);},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,'numberOfMonths');return(numMonths==null?[1,1]:(typeof numMonths=='number'?[1,numMonths]:numMonths));},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+'Date'),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date));},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate();},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay();},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0)
+date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()));return this._isInRange(inst,date);},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,'min');var maxDate=this._getMinMaxDate(inst,'max');return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate));},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,'shortYearCutoff');shortYearCutoff=(typeof shortYearCutoff!='string'?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,'dayNamesShort'),dayNames:this._get(inst,'dayNames'),monthNamesShort:this._get(inst,'monthNamesShort'),monthNames:this._get(inst,'monthNames')};},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear;}
+var date=(day?(typeof day=='object'?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,'dateFormat'),date,this._getFormatConfig(inst));}});function extendRemove(target,props){$.extend(target,props);for(var name in props)
+if(props[name]==null||props[name]==undefined)
+target[name]=props[name];return target;};function isArray(a){return(a&&(($.browser.safari&&typeof a=='object'&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))));};$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find('body').append($.datepicker.dpDiv);$.datepicker.initialized=true;}
+var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=='string'&&(options=='isDisabled'||options=='getDate'))
+return $.datepicker['_'+options+'Datepicker'].apply($.datepicker,[this[0]].concat(otherArgs));if(options=='option'&&arguments.length==2&&typeof arguments[1]=='string')
+return $.datepicker['_'+options+'Datepicker'].apply($.datepicker,[this[0]].concat(otherArgs));return this.each(function(){typeof options=='string'?$.datepicker['_'+options+'Datepicker'].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options);});};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$;})(jQuery);if(!gMsg)var gMsg={};function loadGM(msgSet){for(var i in msgSet){gMsg[i]=msgSet[i];}}
 function gM(key,args){var ms='';if(key in gMsg){ms=gMsg[key];if(typeof args=='object'||typeof args=='array'){for(var v in args){var rep='\$'+(parseInt(v)+1);ms=ms.replace(rep,args[v]);}}else if(typeof args=='string'||typeof args=='number'){ms=ms.replace(/\$1/,args);}
 return ms;}else{return'['+key+']';}}
 $j=jQuery.noConflict();function js2AddOnloadHook(func){$j(document).ready(func);}
\ No newline at end of file
Index: js/plugins.combined.js
===================================================================
--- js/plugins.combined.js	(revision 56989)
+++ js/plugins.combined.js	(working copy)
@@ -76,8 +76,62 @@
 
 })(jQuery);
 
-/*
+/**
+ * Plugin that automatically truncates the plain text contents of an element and adds an ellipsis 
+ */
+( function( $ ) {
 
+$.fn.autoEllipse = function( options ) {
+	$(this).each( function() {
+		options = $.extend( {
+			'position': 'center',
+			'tooltip': false
+		}, options );
+		var text = $(this).text();
+		var $text = $( '<span />' ).text( text ).css( 'whiteSpace', 'nowrap' );
+		$(this).empty().append( $text );
+		if ( $text.outerWidth() > $(this).innerWidth() ) {
+			switch ( options.position ) {
+				case 'right':
+					var l = text.length;
+					while ( $text.outerWidth() > $(this).innerWidth() && l > 0 ) {
+						$text.text( text.substr( 0, l ) + '...' );
+						l--;
+					}
+					break;
+				case 'center':
+					var i = [Math.round( text.length / 2 ), Math.round( text.length / 2 )];
+					var side = 1; // Begin with making the end shorter
+					while ( $text.outerWidth() > ( $(this).innerWidth() ) && i[0] > 0 ) {
+						$text.text( text.substr( 0, i[0] ) + '...' + text.substr( i[1] ) );
+						// Alternate between trimming the end and begining
+						if ( side == 0 ) {
+							// Make the begining shorter
+							i[0]--;
+							side = 1;
+						} else {
+							// Make the end shorter
+							i[1]++;
+							side = 0;
+						}
+					}
+					break;
+				case 'left':
+					var r = 0;
+					while ( $text.outerWidth() > $(this).innerWidth() && r < text.length ) {
+						$text.text( '...' + text.substr( r ) );
+						r++;
+					}
+					break;
+			}
+			if ( options.tooltip )
+				$text.attr( 'title', text );
+		}
+	} );
+};
+
+} )( jQuery );/*
+
 jQuery Browser Plugin
 	* Version 2.3
 	* 2008-09-17 19:27:05
@@ -255,7 +309,508 @@
     }
 };
 
+(function( $ ) {
 /**
+ * Function that escapes spaces in event names. This is needed because
+ * "_delayedBind-foo bar-1000" refers to two events
+ */
+function encodeEvent( event ) {
+	return event.replace( /-/g, '--' ).replace( / /g, '-' );
+}
+
+$.fn.extend( {
+	/**
+	 * Bind a callback to an event in a delayed fashion.
+	 * In detail, this means that the callback will be called a certain
+	 * time after the event fires, but the timer is reset every time
+	 * the event fires.
+	 * @param timeout Number of milliseconds to wait
+	 * @param event Name of the event (string)
+	 * @param data Data to pass to the event handler (optional)
+	 * @param callback Function to call
+	 */
+	delayedBind: function( timeout, event, data, callback ) {
+		var encEvent = encodeEvent( event );
+		return this.each( function() {
+			var that = this;
+			// Bind the top half
+			// Do this only once for every (event, timeout) pair
+			if (  !( $(this).data( '_delayedBindBound-' + encEvent + '-' + timeout ) ) ) {
+				$(this).data( '_delayedBindBound-' + encEvent + '-' + timeout, true );
+				$(this).bind( event, function() {
+					var timerID = $(this).data( '_delayedBindTimerID-' + encEvent + '-' + timeout );
+					// Cancel the running timer
+					if ( typeof timerID != 'undefined' )
+						clearTimeout( timerID );
+					timerID = setTimeout( function() {
+						$(that).trigger( '_delayedBind-' + encEvent + '-' + timeout );
+					}, timeout );
+					$(this).data( '_delayedBindTimerID-' + encEvent + '-' + timeout, timerID );
+				} );
+			}
+			
+			// Bottom half
+			$(this).bind( '_delayedBind-' + encEvent + '-' + timeout, data, callback );
+		} );
+	},
+	
+	/**
+	 * Cancel the timers for delayed events on the selected elements.
+	 */
+	delayedBindCancel: function( timeout, event ) {
+		var encEvent = encodeEvent( event );
+		return this.each( function() {
+			var timerID = $(this).data( '_delayedBindTimerID-' + encEvent + '-' + timeout );
+			if ( typeof timerID != 'undefined' )
+				clearTimeout( timerID );
+		} );
+	},
+	
+	/**
+	 * Unbind an event bound with delayedBind()
+	 */
+	delayedBindUnbind: function( timeout, event, callback ) {
+		var encEvent = encodeEvent( event );
+		return this.each( function() {
+			$(this).unbind( '_delayedBind-' + encEvent + '-' + timeout, callback );
+		} );
+	}
+} );
+} )( jQuery );
+/**
+ * Plugin that fills a <select> with namespaces
+ */
+
+(function ($) {
+$.fn.namespaceSelector = function( defaultNS ) {
+	if ( typeof defaultNS == 'undefined' )
+		defaultNS = 0;
+	return this.each( function() {
+		for ( var id in wgFormattedNamespaces ) {
+			var opt = $( '<option />' )
+				.attr( 'value', id )
+				.text( wgFormattedNamespaces[id] );
+			if ( id == defaultNS )
+				opt.attr( 'selected', 'selected' );
+			opt.appendTo( $(this) );
+		}
+	});
+};})(jQuery);
+
+/**
+ * This plugin provides a generic way to add suggestions to a text box.
+ * 
+ * Usage:
+ * 
+ * Set options:
+ *		$('#textbox').suggestions( { option1: value1, option2: value2 } );
+ *		$('#textbox').suggestions( option, value );
+ * Get option:
+ *		value = $('#textbox').suggestions( option );
+ * Initialize:
+ *		$('#textbox').suggestions();
+ * 
+ * Options:
+ * 
+ * fetch(query): Callback that should fetch suggestions and set the suggestions property. Executed in the context of the
+ * 		textbox
+ * 		Type: Function
+ * cancel: Callback function to call when any pending asynchronous suggestions fetches should be canceled.
+ * 		Executed in the context of the textbox
+ *		Type: Function
+ * special: Set of callbacks for rendering and selecting
+ *		Type: Object of Functions 'render' and 'select'
+ * result: Set of callbacks for rendering and selecting
+ *		Type: Object of Functions 'render' and 'select'
+ * $region: jQuery selection of element to place the suggestions below and match width of
+ * 		Type: jQuery Object, Default: $(this)
+ * suggestions: Suggestions to display
+ * 		Type: Array of strings
+ * maxRows: Maximum number of suggestions to display at one time
+ * 		Type: Number, Range: 1 - 100, Default: 7
+ * delay: Number of ms to wait for the user to stop typing
+ * 		Type: Number, Range: 0 - 1200, Default: 120
+ */
+( function( $ ) {
+
+$.suggestions = {
+	/**
+	 * Cancel any delayed updateSuggestions() call and inform the user so
+	 * they can cancel their result fetching if they use AJAX or something 
+	 */
+	cancel: function( context ) {
+		if ( context.data.timerID != null ) {
+			clearTimeout( context.data.timerID );
+		}
+		if ( typeof context.config.cancel == 'function' ) {
+			context.config.cancel.call( context.data.$textbox );
+		}
+	},
+	/**
+	 * Restore the text the user originally typed in the textbox, before it was overwritten by highlight(). This
+	 * restores the value the currently displayed suggestions are based on, rather than the value just before
+	 * highlight() overwrote it; the former is arguably slightly more sensible.
+	 */
+	restore: function( context ) {
+		context.data.$textbox.val( context.data.prevText );
+	},
+	/**
+	 * Ask the user-specified callback for new suggestions. Any previous delayed call to this function still pending
+	 * will be canceled.  If the value in the textbox hasn't changed since the last time suggestions were fetched, this
+	 * function does nothing.
+	 * @param {Boolean} delayed Whether or not to delay this by the currently configured amount of time
+	 */
+	update: function( context, delayed ) {
+		// Only fetch if the value in the textbox changed
+		function maybeFetch() {
+			if ( context.data.$textbox.val() !== context.data.prevText ) {
+				context.data.prevText = context.data.$textbox.val();
+				if ( typeof context.config.fetch == 'function' ) {
+					context.config.fetch.call( context.data.$textbox, context.data.$textbox.val() );
+				}
+			}
+		}
+		// Cancel previous call
+		if ( context.data.timerID != null ) {
+			clearTimeout( context.data.timerID );
+		}
+		if ( delayed ) {
+			// Start a new asynchronous call
+			context.data.timerID = setTimeout( maybeFetch, context.config.delay );
+		} else {
+			maybeFetch();
+		}
+		$.suggestions.special( context );
+	},
+	special: function( context ) {
+		// Allow custom rendering - but otherwise don't do any rendering
+		if ( typeof context.config.special.render == 'function' ) {
+			// Wait for the browser to update the value
+			setTimeout( function() {
+				// Render special
+				$special = context.data.$container.find( '.suggestions-special' );
+				context.config.special.render.call( $special, context.data.$textbox.val() );
+			}, 1 );
+		}
+	},
+	/**
+	 * Sets the value of a property, and updates the widget accordingly
+	 * @param {String} property Name of property
+	 * @param {Mixed} value Value to set property with
+	 */
+	configure: function( context, property, value ) {
+		// Validate ccontextration using fallback values
+		switch( property ) {
+			case 'fetch':
+			case 'cancel':
+			case 'special':
+			case 'result':
+			case '$region':
+				context.config[property] = value;
+				break;
+			case 'suggestions':
+				context.config[property] = value;
+				// Update suggestions
+				if ( typeof context.data !== 'undefined'  ) {
+					if ( context.config.suggestions.length == 0 ) {
+						// Hide the dive when no suggestion exist
+						context.data.$container.hide();
+					} else {
+						// Rebuild the suggestions list
+						context.data.$container.show();
+						// Update the size and position of the list
+						context.data.$container.css( {
+							'top': context.config.$region.offset().top + context.config.$region.outerHeight(),
+							'bottom': 'auto',
+							'width': context.config.$region.outerWidth(),
+							'height': 'auto',
+							'left': context.config.$region.offset().left,
+							'right': 'auto'
+						} );
+						var $results = context.data.$container.children( '.suggestions-results' );
+						$results.empty();
+						for ( var i = 0; i < context.config.suggestions.length; i++ ) {
+							$result = $( '<div />' )
+								.addClass( 'suggestions-result' )
+								.attr( 'rel', i )
+								.data( 'text', context.config.suggestions[i] )
+								.appendTo( $results );
+							// Allow custom rendering
+							if ( typeof context.config.result.render == 'function' ) {
+								context.config.result.render.call( $result, context.config.suggestions[i] );
+							} else {
+								$result.text( context.config.suggestions[i] ).autoEllipse();
+							}
+						}
+					}
+				}
+				break;
+			case 'maxRows':
+				context.config[property] = Math.max( 1, Math.min( 100, value ) );
+				break;
+			case 'delay':
+				context.config[property] = Math.max( 0, Math.min( 12000, value ) );
+				break;
+			case 'submitOnClick':
+				context.config[property] = value ? true : false;
+				break;
+		}
+	},
+	/**
+	 * Highlight a result in the results table
+	 * @param result <tr> to highlight: jQuery object, or 'prev' or 'next'
+	 * @param updateTextbox If true, put the suggestion in the textbox
+	 */
+	highlight: function( context, result, updateTextbox ) {
+		var selected = context.data.$container.find( '.suggestions-result-current' )
+		if ( !result.get || selected.get( 0 ) != result.get( 0 ) ) {
+			if ( result == 'prev' ) {
+				result = selected.prev();
+			} else if ( result == 'next' ) {
+				if ( selected.size() == 0 )
+					// No item selected, go to the first one
+					result = context.data.$container.find( '.suggestions-results div:first' );
+				else {
+					result = selected.next();
+					if ( result.size() == 0 )
+						// We were at the last item, stay there
+						result = selected;
+				}
+			}
+			selected.removeClass( 'suggestions-result-current' );
+			result.addClass( 'suggestions-result-current' );
+		}
+		if ( updateTextbox ) {
+			if ( result.size() == 0 ) {
+				$.suggestions.restore( context );
+			} else {
+				context.data.$textbox.val( result.data( 'text' ) );
+				
+				// .val() doesn't call any event handlers, so
+				// let the world know what happened
+				context.data.$textbox.change();
+			}
+		}
+		$.suggestions.special( context );
+	},
+	/**
+	 * Respond to keypress event
+	 * @param {Integer} key Code of key pressed
+	 */
+	keypress: function( e, context, key ) {
+		var wasVisible = context.data.$container.is( ':visible' );
+		var preventDefault = false;
+		switch ( key ) {
+			// Arrow down
+			case 40:
+				if ( wasVisible ) {
+					$.suggestions.highlight( context, 'next', true );
+				} else {
+					$.suggestions.update( context, false );
+				}
+				context.data.$textbox.trigger( 'change' );
+				preventDefault = true;
+				break;
+			// Arrow up
+			case 38:
+				if ( wasVisible ) {
+					$.suggestions.highlight( context, 'prev', true );
+				}
+				context.data.$textbox.trigger( 'change' );
+				preventDefault = wasVisible;
+				break;
+			// Escape
+			case 27:
+				context.data.$container.hide();
+				$.suggestions.restore( context );
+				$.suggestions.cancel( context );
+				context.data.$textbox.trigger( 'change' );
+				preventDefault = wasVisible;
+				break;
+			// Enter
+			case 13:
+				context.data.$container.hide();
+				preventDefault = wasVisible;
+				break;
+			default:
+				$.suggestions.update( context, true );
+				break;
+		}
+		if ( preventDefault ) {
+			e.preventDefault();
+			e.stopImmediatePropagation();
+		}
+	}
+};
+$.fn.suggestions = function() {
+	
+	// Multi-context fields
+	var returnValue = null;
+	var args = arguments;
+	
+	$(this).each( function() {
+
+		/* Construction / Loading */
+		
+		var context = $(this).data( 'suggestions-context' );
+		if ( typeof context == 'undefined' ) {
+			context = {
+				config: {
+				    'fetch' : function() {},
+					'cancel': function() {},
+					'special': {},
+					'result': {},
+					'$region': $(this),
+					'suggestions': [],
+					'maxRows': 7,
+					'delay': 1200,
+					'submitOnClick': false
+				}
+			};
+		}
+		
+		/* API */
+		
+		// Handle various calling styles
+		if ( args.length > 0 ) {
+			if ( typeof args[0] == 'object' ) {
+				// Apply set of properties
+				for ( key in args[0] ) {
+					$.suggestions.configure( context, key, args[0][key] );
+				}
+			} else if ( typeof args[0] == 'string' ) {
+				if ( args.length > 1 ) {
+					// Set property values
+					$.suggestions.configure( context, args[0], args[1] );
+				} else if ( returnValue == null ) {
+					// Get property values, but don't give access to internal data - returns only the first
+					returnValue = ( args[0] in context.config ? undefined : context.config[args[0]] );
+				}
+			}
+		}
+		
+		/* Initialization */
+		
+		if ( typeof context.data == 'undefined' ) {
+			context.data = {
+				// ID of running timer
+				'timerID': null,
+				// Text in textbox when suggestions were last fetched
+				'prevText': null,
+				// Number of results visible without scrolling
+				'visibleResults': 0,
+				// Suggestion the last mousedown event occured on
+				'mouseDownOn': $( [] ),
+				'$textbox': $(this)
+			};
+			context.data.$container = $( '<div />' )
+				.css( {
+					'top': Math.round( context.data.$textbox.offset().top + context.data.$textbox.outerHeight() ),
+					'left': Math.round( context.data.$textbox.offset().left ),
+					'width': context.data.$textbox.outerWidth(),
+					'display': 'none'
+				} )
+				.mouseover( function( e ) {
+					$.suggestions.highlight( context, $( e.target ).closest( '.suggestions-results div' ), false );
+				} )
+				.addClass( 'suggestions' )
+				.append(
+					$( '<div />' ).addClass( 'suggestions-results' )
+						// Can't use click() because the container div is hidden when the textbox loses focus. Instead,
+						// listen for a mousedown followed by a mouseup on the same div
+						.mousedown( function( e ) {
+							context.data.mouseDownOn = $( e.target ).closest( '.suggestions-results div' );
+						} )
+						.mouseup( function( e ) {
+							var $result = $( e.target ).closest( '.suggestions-results div' );
+							var $other = context.data.mouseDownOn;
+							context.data.mouseDownOn = $( [] );
+							if ( $result.get( 0 ) != $other.get( 0 ) ) {
+								return;
+							}
+							$.suggestions.highlight( context, $result, true );
+							context.data.$container.hide();
+							if ( typeof context.config.result.select == 'function' ) {
+								context.config.result.select.call( $result, context.data.$textbox );
+							}
+							context.data.$textbox.focus();
+						} )
+				)
+				.append(
+					$( '<div />' ).addClass( 'suggestions-special' )
+						// Can't use click() because the container div is hidden when the textbox loses focus. Instead,
+						// listen for a mousedown followed by a mouseup on the same div
+						.mousedown( function( e ) {
+							context.data.mouseDownOn = $( e.target ).closest( '.suggestions-special' );
+						} )
+						.mouseup( function( e ) {
+							var $special = $( e.target ).closest( '.suggestions-special' );
+							var $other = context.data.mouseDownOn;
+							context.data.mouseDownOn = $( [] );
+							if ( $special.get( 0 ) != $other.get( 0 ) ) {
+								return;
+							}
+							context.data.$container.hide();
+							if ( typeof context.config.special.select == 'function' ) {
+								context.config.special.select.call( $special, context.data.$textbox );
+							}
+							context.data.$textbox.focus();
+						} )
+				)
+				.appendTo( $( 'body' ) );
+			$(this)
+				// Stop browser autocomplete from interfering
+				.attr( 'autocomplete', 'off')
+				.keydown( function( e ) {
+					// Store key pressed to handle later
+					context.data.keypressed = ( e.keyCode == undefined ) ? e.which : e.keyCode;
+					context.data.keypressedCount = 0;
+					
+					switch ( context.data.keypressed ) {
+						// This preventDefault logic is duplicated from
+						// $.suggestions.keypress(), which sucks
+						case 40:
+							e.preventDefault();
+							e.stopImmediatePropagation();
+							break;
+						case 38:
+						case 27:
+						case 13:
+							if ( context.data.$container.is( ':visible' ) ) {
+								e.preventDefault();
+								e.stopImmediatePropagation();
+							}
+					}
+				} )
+				.keypress( function( e ) {
+					context.data.keypressedCount++;
+					$.suggestions.keypress( e, context, context.data.keypressed );
+				} )
+				.keyup( function( e ) {
+					// Some browsers won't throw keypress() for arrow keys. If we got a keydown and a keyup without a
+					// keypress in between, solve it
+					if ( context.data.keypressedCount == 0 ) {
+						$.suggestions.keypress( e, context, context.data.keypressed );
+					}
+				} )
+				.blur( function() {
+					// When losing focus because of a mousedown
+					// on a suggestion, don't hide the suggestions 
+					if ( context.data.mouseDownOn.size() > 0 ) {
+						return;
+					}
+					context.data.$container.hide();
+					$.suggestions.cancel( context );
+				} );
+		}
+		// Store the context for next time
+		$(this).data( 'suggestions-context', context );
+	} );
+	return returnValue !== null ? returnValue : $(this);
+};
+
+} )( jQuery );
+/**
  * These plugins provide extra functionality for interaction with textareas.
  */
 ( function( $ ) { $.fn.extend( {
@@ -309,11 +864,6 @@
 		// Do nothing
 	} else if ( document.selection && document.selection.createRange ) {
 		// IE/Opera
-		if ( document.documentElement && document.documentElement.scrollTop ) {
-			var winScroll = document.documentElement.scrollTop;
-		} else if ( document.body ) {
-			var winScroll = document.body.scrollTop;
-		}
 		$(this).focus();
 		var range = document.selection.createRange();
 		if ( ownline && range.moveStart ) {
@@ -341,14 +891,8 @@
 			range.moveEnd( 'character', - post.length );
 		}
 		range.select();
-		if ( document.documentElement && document.documentElement.scrollTop ) {
-			document.documentElement.scrollTop = winScroll
-		} else if ( document.body ) {
-			document.body.scrollTop = winScroll;
-		}
 	} else if ( e.selectionStart || e.selectionStart == '0' ) {
 		// Mozilla
-		var textScroll = e.scrollTop;
 		$(this).focus();
 		var startPos = e.selectionStart;
 		var endPos = e.selectionEnd;
@@ -369,8 +913,9 @@
 			e.selectionStart = startPos + pre.length + selText.length + post.length;
 			e.selectionEnd = e.selectionStart;
 		}
-		e.scrollTop = textScroll;
 	}
+	// Scroll the textarea to the inserted text
+	$(this).scrollToCaretPosition();
 	$(this).trigger( 'encapsulateSelection', [ pre, peri, post, ownline, replace ] );
 },
 /**
@@ -462,18 +1007,38 @@
 	}
 	return getCaret( this.get( 0 ) );
 },
+setSelection: function( start, end ) {
+	if ( typeof end == 'undefined' )
+		end = start;
+	return this.each( function() {
+		if ( this.selectionStart || this.selectionStart == '0' ) {
+			this.selectionStart = start;
+			this.selectionEnd = end;
+		} else if ( document.body.createTextRange ) {
+			var selection = document.body.createTextRange;
+			selection.setToElementText( this );
+			var length = selection.text.length;
+			selection.moveStart( 'character', start );
+			selection.moveEnd( 'character', -length + end );
+			selection.select();
+		}
+	});
+},
 /**
  * Ported from Wikia's LinkSuggest extension
  * https://svn.wikia-code.com/wikia/trunk/extensions/wikia/LinkSuggest
  * 
- * Scroll a textarea to a certain offset
+ * Scroll a textarea to the current cursor position. You can set the cursor
+ * position with setSelection()
  * @param pos Byte offset
  */
-scrollToCaretPosition: function( pos ) {
+scrollToCaretPosition: function() {
 	function getLineLength( e ) {
 		return Math.floor( e.scrollWidth / ( $.os.name == 'linux' ? 7 : 8 ) );
 	}
 	function getCaretScrollPosition( e ) {
+		// FIXME: This functions sucks and is off by a few lines most
+		// of the time. It should be replaced by something decent.
 		var text = e.value.replace( /\r/g, "" );
 		var caret = $( e ).getCaretPosition();
 		var lineLength = getLineLength( e );
@@ -518,33 +1083,26 @@
 		$(this).focus();
 		if ( this.selectionStart || this.selectionStart == '0' ) {
 			// Mozilla
-			this.selectionStart = pos;
-			this.selectionEnd = pos;
 			$(this).scrollTop( getCaretScrollPosition( this ) );
 		} else if ( document.selection && document.selection.createRange ) {
 			// IE / Opera
 			/*
-			 * IE automatically scrolls the section to the bottom of the page,
-			 * except if it's already in view and the cursor position hasn't
-			 * changed, in which case it does nothing. In that case we'll force
-			 * it to act by moving one character back and forth.
+			 * IE automatically scrolls the selected text to the
+			 * bottom of the textarea at setSelection() time, except
+			 * if it was already in view and the cursor position
+			 * wasn't changed, in which case it does nothing. To
+			 * cover that case, we'll force it to act by moving one
+			 * character back and forth.
 			 */
 			var range = document.selection.createRange();
-			var oldPos = $(this).getCaretPosition();
-			var goBack = false;
-			if ( oldPos == pos ) {
-				pos++;
-				goBack = true;
-			}
+			var pos = $(this).getCaretPosition();
 			range.moveToElementText( this );
 			range.collapse();
-			range.move( 'character', pos );
+			range.move( 'character', pos + 1);
 			range.select();
 			this.scrollTop += range.offsetTop;
-			if ( goBack ) {
-				range.move( 'character', -1 );
-				range.select();
-			}
+			range.move( 'character', -1 );
+			range.select();
 		}
 		$(this).trigger( 'scrollToPosition' );
 	} );
@@ -679,7 +1237,7 @@
 	}
 	//Each browser seems to do this differently, so let's keep our editor
 	//consistent by always starting at the begining
-	context.$textarea.scrollToCaretPosition( 0 );
+	context.$textarea.setSelection( 0 ).scrollToCaretPosition();
 }
 
 // If there was a configuration passed, it's assumed to be for the addModule
@@ -703,6 +1261,141 @@
 return $(this).data( 'wikiEditor-context', context );
 
 };})(jQuery);/**
+ * Extend the RegExp object with an escaping function
+ * From http://simonwillison.net/2006/Jan/20/escape/
+ */
+RegExp.escape = function( s ) { return s.replace(/([.*+?^${}()|\/\\[\]])/g, '\\$1'); };
+
+/**
+ * Dialog Module for wikiEditor
+ */
+( function( $ ) { $.wikiEditor.modules.dialogs = {
+
+/**
+ * API accessible functions
+ */
+api: {
+	addDialog: function( context, data ) {
+		$.wikiEditor.modules.dialogs.fn.create( context, { 'modules': data } )
+	},
+	openDialog: function( context, data ) {
+		if ( data.dialog in $.wikiEditor.modules.dialogs.modules ) {
+			$( '#' + $.wikiEditor.modules.dialogs.modules[data.dialog].id ).dialog( 'open' );
+		}
+	},
+	closeDialog: function( context, data ) {
+		if ( data.dialog in $.wikiEditor.modules.dialogs.modules ) {
+			$( '#' + $.wikiEditor.modules.dialogs.modules[data.dialog].id ).dialog( 'close' );
+		}
+	}
+},
+/**
+ * Internally used functions
+ */
+fn: {
+	/**
+	 * Creates a dialog module within a wikiEditor
+	 * 
+	 * @param {Object} context Context object of editor to create module in
+	 * @param {Object} config Configuration object to create module from
+	 */
+	create: function( context, config ) {
+		// Add modules
+		for ( module in config ) {
+			$.wikiEditor.modules.dialogs.modules[module] = config[module];
+		}
+		// Build out modules immediately
+		for ( module in $.wikiEditor.modules.dialogs.modules ) {
+			var module = $.wikiEditor.modules.dialogs.modules[module];
+			// Only create the dialog if it doesn't exist yet
+			if ( $( '#' + module.id ).size() == 0 ) {
+				var configuration = module.dialog;
+				// Add some stuff to configuration
+				configuration.bgiframe = true;
+				configuration.autoOpen = false;
+				configuration.modal = true;
+				configuration.title = $.wikiEditor.autoMsg( module, 'title' );
+				// Transform messages in keys
+				// Stupid JS won't let us do stuff like
+				// foo = { gM ('bar'): baz }
+				configuration.newButtons = {};
+				for ( msg in configuration.buttons )
+					configuration.newButtons[gM( msg )] = configuration.buttons[msg];
+				configuration.buttons = configuration.newButtons;
+				// Create the dialog <div>
+				$( '<div /> ' )
+					.attr( 'id', module.id )
+					.html( module.html )
+					.data( 'context', context )
+					.appendTo( $( 'body' ) )
+					.each( module.init )
+					.dialog( configuration )
+					.bind( 'dialogopen', $.wikiEditor.modules.dialogs.fn.resize )
+					.find( '.ui-tabs' ).bind( 'tabsshow', function() {
+						$(this).closest( '.ui-dialog-content' ).each(
+							$.wikiEditor.modules.dialogs.fn.resize );
+					});
+				
+				// Add tabindexes to dialog form elements
+				// Find the highest tabindex in use
+				var maxTI = 0;
+				$j( '[tabindex]' ).each( function() {
+					var ti = parseInt( $j(this).attr( 'tabindex' ) );
+					if ( ti > maxTI )
+						maxTI = ti;
+				});
+				
+				var tabIndex = maxTI + 1;
+				$j( '.ui-dialog input, .ui-dialog button' )
+					.not( '[tabindex]' )
+					.each( function() {
+						$j(this).attr( 'tabindex', tabIndex++ );
+					});
+			}
+		}
+	},
+	
+	/**
+	 * Resize a dialog so its contents fit
+	 *
+	 * Usage: dialog.each( resize ); or dialog.bind( 'blah', resize );
+	 */
+	resize: function() {
+		var wrapper = $(this).closest( '.ui-dialog' );
+		// Make sure elements don't wrapped so we get an accurate idea
+		// of whether they really fit. Also temporarily show hidden
+		// elements.
+		
+		// Work around jQuery bug where <div style="display:inline;" />
+		// inside a dialog is both :visible and :hidden 
+		var oldHidden = $(this).find( '*' ).not( ':visible' );
+		
+		// Save the style attributes of the hidden elements to restore
+		// them later. Calling hide() after show() messes up for
+		// elements hidden with a class
+		oldHidden.each( function() {
+			$(this).data( 'oldstyle', $(this).attr( 'style' ) );
+		});
+		oldHidden.show();
+		var oldWS = $(this).css( 'white-space' );
+		$(this).css( 'white-space', 'nowrap' );
+		
+		if ( wrapper.width() <= $(this).get(0).scrollWidth ) {
+			$(this).width( $(this).get(0).scrollWidth );
+			wrapper.width( wrapper.get(0).scrollWidth );
+			$(this).dialog( { 'width': wrapper.width() } );
+		}
+		
+		$(this).css( 'white-space', oldWS );
+		oldHidden.each( function() {
+			$(this).attr( 'style', $(this).data( 'oldstyle' ) );
+		});
+	}
+},
+'modules': {}
+
+}; } ) ( jQuery );
+/**
  * Toolbar module for wikiEditor
  */
 ( function( $ ) { $.wikiEditor.modules.toolbar = {
@@ -1313,7 +2006,7 @@
 		$.wikiEditor.modules.toc.fn.build( context );
 		$.wikiEditor.modules.toc.fn.update( context );
 		context.$textarea
-			.bind( 'keyup encapsulateSelection',
+			.delayedBind( 1000, 'keyup encapsulateSelection',
 				function( event ) {
 					var context = $(this).data( 'wikiEditor-context' );
 					$(this).eachAsync( {
@@ -1325,7 +2018,7 @@
 					} );
 				}
 			)
-			.bind( 'mouseup scrollToPosition focus',
+			.bind( 'mouseup scrollToPosition focus keyup encapsulateSelection',
 				function( event ) {
 					var context = $(this).data( 'wikiEditor-context' );
 					$(this).eachAsync( {
@@ -1414,7 +2107,9 @@
 							.data( 'textbox', context.$textarea )
 							.data( 'position', structure[i].position )
 							.click( function( event ) {
-								$(this).data( 'textbox' ).scrollToCaretPosition( $(this).data( 'position' ) );
+								$(this).data( 'textbox' )
+									.setSelection( $(this).data( 'position' ) )
+									.scrollToCaretPosition();
 								event.preventDefault();
 							} )
 							.text( structure[i].text )
@@ -1478,7 +2173,7 @@
 			if ( outline[i].level > lastLevel ) {
 				nLevel++;
 			}
-			else if ( outline[i].level < nLevel ) {
+			else if ( outline[i].level < lastLevel ) {
 				nLevel -= Math.max( 1, lastLevel - outline[i].level );
 			}
 			if ( nLevel <= 0 ) {
@@ -1493,6 +2188,7 @@
 		if ( $( 'input[name=wpSection]' ).val() == '' )
 			structure.unshift( { 'text': wgPageName.replace(/_/g, ' '), 'level': 1, 'index': 0, 'position': 0 } );
 		context.modules.$toc.html( buildList( structure ) );
+		context.modules.$toc.find( 'ul a' ).autoEllipse( { 'position': 'right', 'tooltip': true } );
 		// Cache the outline for later use
 		context.data.outline = outline;
 	}
Index: js/plugins.combined.min.js
===================================================================
--- js/plugins.combined.min.js	(revision 56989)
+++ js/plugins.combined.min.js	(working copy)
@@ -11,45 +11,80 @@
 {var i=0,l=array.length,loop=opts.loop||function(){};$.whileAsync($.extend(opts,{test:function(){return i<l;},loop:function()
 {var val=array[i];return loop.call(val,i++,val);}}));}
 $.fn.eachAsync=function(opts)
-{$.eachAsync(this,opts);return this;}})(jQuery);(function($){$.browserTest=function(a,z){var u='unknown',x='X',m=function(r,h){for(var i=0;i<h.length;i=i+1){r=r.replace(h[i][0],h[i][1]);}
+{$.eachAsync(this,opts);return this;}})(jQuery);(function($){$.fn.autoEllipse=function(options){$(this).each(function(){options=$.extend({'position':'center','tooltip':false},options);var text=$(this).text();var $text=$('<span />').text(text).css('whiteSpace','nowrap');$(this).empty().append($text);if($text.outerWidth()>$(this).innerWidth()){switch(options.position){case'right':var l=text.length;while($text.outerWidth()>$(this).innerWidth()&&l>0){$text.text(text.substr(0,l)+'...');l--;}
+break;case'center':var i=[Math.round(text.length/2),Math.round(text.length/2)];var side=1;while($text.outerWidth()>($(this).innerWidth())&&i[0]>0){$text.text(text.substr(0,i[0])+'...'+text.substr(i[1]));if(side==0){i[0]--;side=1;}else{i[1]++;side=0;}}
+break;case'left':var r=0;while($text.outerWidth()>$(this).innerWidth()&&r<text.length){$text.text('...'+text.substr(r));r++;}
+break;}
+if(options.tooltip)
+$text.attr('title',text);}});};})(jQuery);(function($){$.browserTest=function(a,z){var u='unknown',x='X',m=function(r,h){for(var i=0;i<h.length;i=i+1){r=r.replace(h[i][0],h[i][1]);}
 return r;},c=function(i,a,b,c){var r={name:m((a.exec(i)||[u,u])[1],b)};r[r.name]=true;r.version=(c.exec(i)||[x,x,x,x])[3];if(r.name.match(/safari/)&&r.version>400){r.version='2.0';}
 if(r.name==='presto'){r.version=($.browser.version>9.27)?'futhark':'linear_b';}
 r.versionNumber=parseFloat(r.version,10)||0;r.versionX=(r.version!==x)?(r.version+'').substr(0,1):x;r.className=r.name+r.versionX;return r;};a=(a.match(/Opera|Navigator|Minefield|KHTML|Chrome/)?m(a,[[/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/,''],['Chrome Safari','Chrome'],['KHTML','Konqueror'],['Minefield','Firefox'],['Navigator','Netscape']]):a).toLowerCase();$.browser=$.extend((!z)?$.browser:{},c(a,/(camino|chrome|firefox|netscape|konqueror|lynx|msie|opera|safari)/,[],/(camino|chrome|firefox|netscape|netscape6|opera|version|konqueror|lynx|msie|safari)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/));$.layout=c(a,/(gecko|konqueror|msie|opera|webkit)/,[['konqueror','khtml'],['msie','trident'],['opera','presto']],/(applewebkit|rv|konqueror|msie)(\:|\/|\s)([a-z0-9\.]*?)(\;|\)|\s)/);$.os={name:(/(win|mac|linux|sunos|solaris|iphone)/.exec(navigator.platform.toLowerCase())||[u])[0].replace('sunos','solaris')};if(!z){$('html').addClass([$.os.name,$.browser.name,$.browser.className,$.layout.name,$.layout.className].join(' '));}};$.browserTest(navigator.userAgent);})(jQuery);jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}
 var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}
 expires='; expires='+date.toUTCString();}
 var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}
-return cookieValue;}};(function($){$.fn.extend({getSelection:function(){var e=this.jquery?this[0]:this;var retval='';if(e.style.display=='none'){}else if(document.selection&&document.selection.createRange){var range=document.selection.createRange();retval=range.text;}else if(e.selectionStart||e.selectionStart=='0'){retval=e.value.substring(e.selectionStart,e.selectionEnd);}
+return cookieValue;}};(function($){function encodeEvent(event){return event.replace(/-/g,'--').replace(/ /g,'-');}
+$.fn.extend({delayedBind:function(timeout,event,data,callback){var encEvent=encodeEvent(event);return this.each(function(){var that=this;if(!($(this).data('_delayedBindBound-'+encEvent+'-'+timeout))){$(this).data('_delayedBindBound-'+encEvent+'-'+timeout,true);$(this).bind(event,function(){var timerID=$(this).data('_delayedBindTimerID-'+encEvent+'-'+timeout);if(typeof timerID!='undefined')
+clearTimeout(timerID);timerID=setTimeout(function(){$(that).trigger('_delayedBind-'+encEvent+'-'+timeout);},timeout);$(this).data('_delayedBindTimerID-'+encEvent+'-'+timeout,timerID);});}
+$(this).bind('_delayedBind-'+encEvent+'-'+timeout,data,callback);});},delayedBindCancel:function(timeout,event){var encEvent=encodeEvent(event);return this.each(function(){var timerID=$(this).data('_delayedBindTimerID-'+encEvent+'-'+timeout);if(typeof timerID!='undefined')
+clearTimeout(timerID);});},delayedBindUnbind:function(timeout,event,callback){var encEvent=encodeEvent(event);return this.each(function(){$(this).unbind('_delayedBind-'+encEvent+'-'+timeout,callback);});}});})(jQuery);(function($){$.fn.namespaceSelector=function(defaultNS){if(typeof defaultNS=='undefined')
+defaultNS=0;return this.each(function(){for(var id in wgFormattedNamespaces){var opt=$('<option />').attr('value',id).text(wgFormattedNamespaces[id]);if(id==defaultNS)
+opt.attr('selected','selected');opt.appendTo($(this));}});};})(jQuery);(function($){$.suggestions={cancel:function(context){if(context.data.timerID!=null){clearTimeout(context.data.timerID);}
+if(typeof context.config.cancel=='function'){context.config.cancel.call(context.data.$textbox);}},restore:function(context){context.data.$textbox.val(context.data.prevText);},update:function(context,delayed){function maybeFetch(){if(context.data.$textbox.val()!==context.data.prevText){context.data.prevText=context.data.$textbox.val();if(typeof context.config.fetch=='function'){context.config.fetch.call(context.data.$textbox,context.data.$textbox.val());}}}
+if(context.data.timerID!=null){clearTimeout(context.data.timerID);}
+if(delayed){context.data.timerID=setTimeout(maybeFetch,context.config.delay);}else{maybeFetch();}
+$.suggestions.special(context);},special:function(context){if(typeof context.config.special.render=='function'){setTimeout(function(){$special=context.data.$container.find('.suggestions-special');context.config.special.render.call($special,context.data.$textbox.val());},1);}},configure:function(context,property,value){switch(property){case'fetch':case'cancel':case'special':case'result':case'$region':context.config[property]=value;break;case'suggestions':context.config[property]=value;if(typeof context.data!=='undefined'){if(context.config.suggestions.length==0){context.data.$container.hide();}else{context.data.$container.show();context.data.$container.css({'top':context.config.$region.offset().top+context.config.$region.outerHeight(),'bottom':'auto','width':context.config.$region.outerWidth(),'height':'auto','left':context.config.$region.offset().left,'right':'auto'});var $results=context.data.$container.children('.suggestions-results');$results.empty();for(var i=0;i<context.config.suggestions.length;i++){$result=$('<div />').addClass('suggestions-result').attr('rel',i).data('text',context.config.suggestions[i]).appendTo($results);if(typeof context.config.result.render=='function'){context.config.result.render.call($result,context.config.suggestions[i]);}else{$result.text(context.config.suggestions[i]).autoEllipse();}}}}
+break;case'maxRows':context.config[property]=Math.max(1,Math.min(100,value));break;case'delay':context.config[property]=Math.max(0,Math.min(12000,value));break;case'submitOnClick':context.config[property]=value?true:false;break;}},highlight:function(context,result,updateTextbox){var selected=context.data.$container.find('.suggestions-result-current')
+if(!result.get||selected.get(0)!=result.get(0)){if(result=='prev'){result=selected.prev();}else if(result=='next'){if(selected.size()==0)
+result=context.data.$container.find('.suggestions-results div:first');else{result=selected.next();if(result.size()==0)
+result=selected;}}
+selected.removeClass('suggestions-result-current');result.addClass('suggestions-result-current');}
+if(updateTextbox){if(result.size()==0){$.suggestions.restore(context);}else{context.data.$textbox.val(result.data('text'));context.data.$textbox.change();}}
+$.suggestions.special(context);},keypress:function(e,context,key){var wasVisible=context.data.$container.is(':visible');var preventDefault=false;switch(key){case 40:if(wasVisible){$.suggestions.highlight(context,'next',true);}else{$.suggestions.update(context,false);}
+context.data.$textbox.trigger('change');preventDefault=true;break;case 38:if(wasVisible){$.suggestions.highlight(context,'prev',true);}
+context.data.$textbox.trigger('change');preventDefault=wasVisible;break;case 27:context.data.$container.hide();$.suggestions.restore(context);$.suggestions.cancel(context);context.data.$textbox.trigger('change');preventDefault=wasVisible;break;case 13:context.data.$container.hide();preventDefault=wasVisible;break;default:$.suggestions.update(context,true);break;}
+if(preventDefault){e.preventDefault();e.stopImmediatePropagation();}}};$.fn.suggestions=function(){var returnValue=null;var args=arguments;$(this).each(function(){var context=$(this).data('suggestions-context');if(typeof context=='undefined'){context={config:{'fetch':function(){},'cancel':function(){},'special':{},'result':{},'$region':$(this),'suggestions':[],'maxRows':7,'delay':1200,'submitOnClick':false}};}
+if(args.length>0){if(typeof args[0]=='object'){for(key in args[0]){$.suggestions.configure(context,key,args[0][key]);}}else if(typeof args[0]=='string'){if(args.length>1){$.suggestions.configure(context,args[0],args[1]);}else if(returnValue==null){returnValue=(args[0]in context.config?undefined:context.config[args[0]]);}}}
+if(typeof context.data=='undefined'){context.data={'timerID':null,'prevText':null,'visibleResults':0,'mouseDownOn':$([]),'$textbox':$(this)};context.data.$container=$('<div />').css({'top':Math.round(context.data.$textbox.offset().top+context.data.$textbox.outerHeight()),'left':Math.round(context.data.$textbox.offset().left),'width':context.data.$textbox.outerWidth(),'display':'none'}).mouseover(function(e){$.suggestions.highlight(context,$(e.target).closest('.suggestions-results div'),false);}).addClass('suggestions').append($('<div />').addClass('suggestions-results').mousedown(function(e){context.data.mouseDownOn=$(e.target).closest('.suggestions-results div');}).mouseup(function(e){var $result=$(e.target).closest('.suggestions-results div');var $other=context.data.mouseDownOn;context.data.mouseDownOn=$([]);if($result.get(0)!=$other.get(0)){return;}
+$.suggestions.highlight(context,$result,true);context.data.$container.hide();if(typeof context.config.result.select=='function'){context.config.result.select.call($result,context.data.$textbox);}
+context.data.$textbox.focus();})).append($('<div />').addClass('suggestions-special').mousedown(function(e){context.data.mouseDownOn=$(e.target).closest('.suggestions-special');}).mouseup(function(e){var $special=$(e.target).closest('.suggestions-special');var $other=context.data.mouseDownOn;context.data.mouseDownOn=$([]);if($special.get(0)!=$other.get(0)){return;}
+context.data.$container.hide();if(typeof context.config.special.select=='function'){context.config.special.select.call($special,context.data.$textbox);}
+context.data.$textbox.focus();})).appendTo($('body'));$(this).attr('autocomplete','off').keydown(function(e){context.data.keypressed=(e.keyCode==undefined)?e.which:e.keyCode;context.data.keypressedCount=0;switch(context.data.keypressed){case 40:e.preventDefault();e.stopImmediatePropagation();break;case 38:case 27:case 13:if(context.data.$container.is(':visible')){e.preventDefault();e.stopImmediatePropagation();}}}).keypress(function(e){context.data.keypressedCount++;$.suggestions.keypress(e,context,context.data.keypressed);}).keyup(function(e){if(context.data.keypressedCount==0){$.suggestions.keypress(e,context,context.data.keypressed);}}).blur(function(){if(context.data.mouseDownOn.size()>0){return;}
+context.data.$container.hide();$.suggestions.cancel(context);});}
+$(this).data('suggestions-context',context);});return returnValue!==null?returnValue:$(this);};})(jQuery);(function($){$.fn.extend({getSelection:function(){var e=this.jquery?this[0]:this;var retval='';if(e.style.display=='none'){}else if(document.selection&&document.selection.createRange){var range=document.selection.createRange();retval=range.text;}else if(e.selectionStart||e.selectionStart=='0'){retval=e.value.substring(e.selectionStart,e.selectionEnd);}
 return retval;},encapsulateSelection:function(pre,peri,post,ownline,replace){function checkSelectedText(){if(!selText){selText=peri;isSample=true;}else if(replace){selText=peri;}else if(selText.charAt(selText.length-1)==' '){selText=selText.substring(0,selText.length-1);post+=' '}}
-var e=this.jquery?this[0]:this;var selText=$(this).getSelection();var isSample=false;if(e.style.display=='none'){}else if(document.selection&&document.selection.createRange){if(document.documentElement&&document.documentElement.scrollTop){var winScroll=document.documentElement.scrollTop;}else if(document.body){var winScroll=document.body.scrollTop;}
-$(this).focus();var range=document.selection.createRange();if(ownline&&range.moveStart){var range2=document.selection.createRange();range2.collapse();range2.moveStart('character',-1);if(range2.text!="\r"&&range2.text!="\n"&&range3.text!=""){pre="\n"+pre;}
+var e=this.jquery?this[0]:this;var selText=$(this).getSelection();var isSample=false;if(e.style.display=='none'){}else if(document.selection&&document.selection.createRange){$(this).focus();var range=document.selection.createRange();if(ownline&&range.moveStart){var range2=document.selection.createRange();range2.collapse();range2.moveStart('character',-1);if(range2.text!="\r"&&range2.text!="\n"&&range3.text!=""){pre="\n"+pre;}
 var range3=document.selection.createRange();range3.collapse(false);range3.moveEnd('character',1);if(range3.text!="\r"&&range3.text!="\n"&&range3.text!=""){post+="\n";}}
 checkSelectedText();range.text=pre+selText+post;if(isSample&&range.moveStart){if(window.opera){post=post.replace(/\n/g,'');}
 range.moveStart('character',-post.length-selText.length);range.moveEnd('character',-post.length);}
-range.select();if(document.documentElement&&document.documentElement.scrollTop){document.documentElement.scrollTop=winScroll}else if(document.body){document.body.scrollTop=winScroll;}}else if(e.selectionStart||e.selectionStart=='0'){var textScroll=e.scrollTop;$(this).focus();var startPos=e.selectionStart;var endPos=e.selectionEnd;checkSelectedText();if(ownline){if(startPos!=0&&e.value.charAt(startPos-1)!="\n"){pre="\n"+pre;}
+range.select();}else if(e.selectionStart||e.selectionStart=='0'){$(this).focus();var startPos=e.selectionStart;var endPos=e.selectionEnd;checkSelectedText();if(ownline){if(startPos!=0&&e.value.charAt(startPos-1)!="\n"){pre="\n"+pre;}
 if(e.value.charAt(endPos)!="\n"){post+="\n";}}
-e.value=e.value.substring(0,startPos)+pre+selText+post+e.value.substring(endPos,e.value.length);if(isSample){e.selectionStart=startPos+pre.length;e.selectionEnd=startPos+pre.length+selText.length;}else{e.selectionStart=startPos+pre.length+selText.length+post.length;e.selectionEnd=e.selectionStart;}
-e.scrollTop=textScroll;}
-$(this).trigger('encapsulateSelection',[pre,peri,post,ownline,replace]);},getCaretPosition:function(){function getCaret(e){var caretPos=0;if($.browser.msie){var postFinished=false;var periFinished=false;var postFinished=false;var preText,rawPreText,periText;var rawPeriText,postText,rawPostText;var periRange=document.selection.createRange().duplicate();var preRange=document.body.createTextRange();preRange.moveToElementText(e);preRange.setEndPoint("EndToStart",periRange);var postRange=document.body.createTextRange();postRange.moveToElementText(e);postRange.setEndPoint("StartToEnd",periRange);preText=rawPreText=preRange.text;periText=rawPeriText=periRange.text;postText=rawPostText=postRange.text;do{if(!postFinished){if(preRange.compareEndPoints("StartToEnd",preRange)==0){postFinished=true;}else{preRange.moveEnd("character",-1)
+e.value=e.value.substring(0,startPos)+pre+selText+post+e.value.substring(endPos,e.value.length);if(isSample){e.selectionStart=startPos+pre.length;e.selectionEnd=startPos+pre.length+selText.length;}else{e.selectionStart=startPos+pre.length+selText.length+post.length;e.selectionEnd=e.selectionStart;}}
+$(this).scrollToCaretPosition();$(this).trigger('encapsulateSelection',[pre,peri,post,ownline,replace]);},getCaretPosition:function(){function getCaret(e){var caretPos=0;if($.browser.msie){var postFinished=false;var periFinished=false;var postFinished=false;var preText,rawPreText,periText;var rawPeriText,postText,rawPostText;var periRange=document.selection.createRange().duplicate();var preRange=document.body.createTextRange();preRange.moveToElementText(e);preRange.setEndPoint("EndToStart",periRange);var postRange=document.body.createTextRange();postRange.moveToElementText(e);postRange.setEndPoint("StartToEnd",periRange);preText=rawPreText=preRange.text;periText=rawPeriText=periRange.text;postText=rawPostText=postRange.text;do{if(!postFinished){if(preRange.compareEndPoints("StartToEnd",preRange)==0){postFinished=true;}else{preRange.moveEnd("character",-1)
 if(preRange.text==preText){rawPreText+="\r\n";}else{postFinished=true;}}}
 if(!periFinished){if(periRange.compareEndPoints("StartToEnd",periRange)==0){periFinished=true;}else{periRange.moveEnd("character",-1)
 if(periRange.text==periText){rawPeriText+="\r\n";}else{periFinished=true;}}}
 if(!postFinished){if(postRange.compareEndPoints("StartToEnd",postRange)==0){postFinished=true;}else{postRange.moveEnd("character",-1)
 if(postRange.text==postText){rawPostText+="\r\n";}else{postFinished=true;}}}}while((!postFinished||!periFinished||!postFinished));caretPos=rawPreText.replace(/\r\n/g,"\n").length;}else if(e.selectionStart||e.selectionStart=='0'){caretPos=e.selectionStart;}
 return caretPos;}
-return getCaret(this.get(0));},scrollToCaretPosition:function(pos){function getLineLength(e){return Math.floor(e.scrollWidth/($.os.name=='linux'?7:8));}
+return getCaret(this.get(0));},setSelection:function(start,end){if(typeof end=='undefined')
+end=start;return this.each(function(){if(this.selectionStart||this.selectionStart=='0'){this.selectionStart=start;this.selectionEnd=end;}else if(document.body.createTextRange){var selection=document.body.createTextRange;selection.setToElementText(this);var length=selection.text.length;selection.moveStart('character',start);selection.moveEnd('character',-length+end);selection.select();}});},scrollToCaretPosition:function(){function getLineLength(e){return Math.floor(e.scrollWidth/($.os.name=='linux'?7:8));}
 function getCaretScrollPosition(e){var text=e.value.replace(/\r/g,"");var caret=$(e).getCaretPosition();var lineLength=getLineLength(e);var row=0;var charInLine=0;var lastSpaceInLine=0;for(i=0;i<caret;i++){charInLine++;if(text.charAt(i)==" "){lastSpaceInLine=charInLine;}else if(text.charAt(i)=="\n"){lastSpaceInLine=0;charInLine=0;row++;}
 if(charInLine>lineLength){if(lastSpaceInLine>0){charInLine=charInLine-lastSpaceInLine;lastSpaceInLine=0;row++;}}}
 var nextSpace=0;for(j=caret;j<caret+lineLength;j++){if(text.charAt(j)==" "||text.charAt(j)=="\n"||caret==text.length){nextSpace=j;break;}}
 if(nextSpace>lineLength&&caret<=lineLength){charInLine=caret-lastSpaceInLine;row++;}
 return($.os.name=='mac'?13:($.os.name=='linux'?15:16))*row;}
-return this.each(function(){$(this).focus();if(this.selectionStart||this.selectionStart=='0'){this.selectionStart=pos;this.selectionEnd=pos;$(this).scrollTop(getCaretScrollPosition(this));}else if(document.selection&&document.selection.createRange){var range=document.selection.createRange();var oldPos=$(this).getCaretPosition();var goBack=false;if(oldPos==pos){pos++;goBack=true;}
-range.moveToElementText(this);range.collapse();range.move('character',pos);range.select();this.scrollTop+=range.offsetTop;if(goBack){range.move('character',-1);range.select();}}
+return this.each(function(){$(this).focus();if(this.selectionStart||this.selectionStart=='0'){$(this).scrollTop(getCaretScrollPosition(this));}else if(document.selection&&document.selection.createRange){var range=document.selection.createRange();var pos=$(this).getCaretPosition();range.moveToElementText(this);range.collapse();range.move('character',pos+1);range.select();this.scrollTop+=range.offsetTop;range.move('character',-1);range.select();}
 $(this).trigger('scrollToPosition');});}});})(jQuery);(function($){$.wikiEditor={'modules':{},'instances':[],'supportedBrowsers':{'ltr':{'msie':7,'firefox':2,'opera':9,'safari':3,'chrome':1,'camino':1},'rtl':{'msie':8,'firefox':2,'opera':9,'safari':3,'chrome':1,'camino':1}},imgPath:wgScriptPath+'/extensions/UsabilityInitiative/images/wikiEditor/'};$.wikiEditor.isSupportKnown=function(){return(function(supportedBrowsers){return $.browser.name in supportedBrowsers;})($.wikiEditor.supportedBrowsers[$('body.rtl').size()?'rtl':'ltr']);};$.wikiEditor.isSupported=function(){return(function(supportedBrowsers){return $.browser.name in supportedBrowsers&&$.browser.versionNumber>=supportedBrowsers[$.browser.name];})($.wikiEditor.supportedBrowsers[$('body.rtl').size()?'rtl':'ltr']);};$.wikiEditor.autoMsg=function(object,property){if(typeof property=='object'){for(i in property){if(property[i]in object||property[i]+'Msg'in object){property=property[i];break;}}}
 if(property in object){return object[property];}else if(property+'Msg'in object){return gM(object[property+'Msg']);}else{return'';}};$.fn.wikiEditor=function(){var context=$(this).data('wikiEditor-context');if(typeof context=='undefined'){var instance=$.wikiEditor.instances.length;context={'$textarea':$(this),'modules':{},'data':{},'instance':instance};$.wikiEditor.instances[instance]=$(this);$(this).wrap($('<div></div>').addClass('wikiEditor-ui').attr('id','wikiEditor-ui')).wrap($('<div></div>').addClass('wikiEditor-ui-bottom').attr('id','wikiEditor-ui-bottom')).wrap($('<div></div>').addClass('wikiEditor-ui-text').attr('id','wikiEditor-ui-text'));context.$ui=$(this).parent().parent().parent();context.$ui.after($('<div style="clear:both;"></div>'));context.$ui.prepend($('<div></div>').addClass('wikiEditor-ui-top').attr('id','wikiEditor-ui-top'));context.api={addModule:function(context,data){function callModuleApi(module,call,data){if(module in $.wikiEditor.modules&&'fn'in $.wikiEditor.modules[module]&&call in $.wikiEditor.modules[module].fn){$.wikiEditor.modules[module].fn[call](context,data);}}
 if(typeof data=='string'){callModuleApi(data,'create',{});}else if(typeof data=='object'){for(module in data){if(typeof module=='string'){callModuleApi(module,'create',data[module]);}}}}};for(module in $.wikiEditor.modules){if('api'in $.wikiEditor.modules[module]){for(call in $.wikiEditor.modules[module].api){if(!(call in context.api)){context.api[call]=$.wikiEditor.modules[module].api[call];}}}}
-context.$textarea.scrollToCaretPosition(0);}
+context.$textarea.setSelection(0).scrollToCaretPosition();}
 if(arguments.length>0&&typeof arguments[0]=='object'){context.api.addModule(context,arguments[0]);}else{arguments=$.makeArray(arguments);if(arguments.length>0){var call=arguments.shift();if(call in context.api){context.api[call](context,arguments[0]==undefined?{}:arguments[0]);}}}
-return $(this).data('wikiEditor-context',context);};})(jQuery);(function($){$.wikiEditor.modules.toolbar={api:{addToToolbar:function(context,data){for(type in data){switch(type){case'sections':var $sections=context.modules.$toolbar.find('div.sections');var $tabs=context.modules.$toolbar.find('div.tabs');for(section in data[type]){if(section=='main'){context.modules.$toolbar.prepend($.wikiEditor.modules.toolbar.fn.buildSection(context,section,data[type][section]));continue;}
+return $(this).data('wikiEditor-context',context);};})(jQuery);RegExp.escape=function(s){return s.replace(/([.*+?^${}()|\/\\[\]])/g,'\\$1');};(function($){$.wikiEditor.modules.dialogs={api:{addDialog:function(context,data){$.wikiEditor.modules.dialogs.fn.create(context,{'modules':data})},openDialog:function(context,data){if(data.dialog in $.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[data.dialog].id).dialog('open');}},closeDialog:function(context,data){if(data.dialog in $.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[data.dialog].id).dialog('close');}}},fn:{create:function(context,config){for(module in config){$.wikiEditor.modules.dialogs.modules[module]=config[module];}
+for(module in $.wikiEditor.modules.dialogs.modules){var module=$.wikiEditor.modules.dialogs.modules[module];if($('#'+module.id).size()==0){var configuration=module.dialog;configuration.bgiframe=true;configuration.autoOpen=false;configuration.modal=true;configuration.title=$.wikiEditor.autoMsg(module,'title');configuration.newButtons={};for(msg in configuration.buttons)
+configuration.newButtons[gM(msg)]=configuration.buttons[msg];configuration.buttons=configuration.newButtons;$('<div /> ').attr('id',module.id).html(module.html).data('context',context).appendTo($('body')).each(module.init).dialog(configuration).bind('dialogopen',$.wikiEditor.modules.dialogs.fn.resize).find('.ui-tabs').bind('tabsshow',function(){$(this).closest('.ui-dialog-content').each($.wikiEditor.modules.dialogs.fn.resize);});var maxTI=0;$j('[tabindex]').each(function(){var ti=parseInt($j(this).attr('tabindex'));if(ti>maxTI)
+maxTI=ti;});var tabIndex=maxTI+1;$j('.ui-dialog input, .ui-dialog button').not('[tabindex]').each(function(){$j(this).attr('tabindex',tabIndex++);});}}},resize:function(){var wrapper=$(this).closest('.ui-dialog');var oldHidden=$(this).find('*').not(':visible');oldHidden.each(function(){$(this).data('oldstyle',$(this).attr('style'));});oldHidden.show();var oldWS=$(this).css('white-space');$(this).css('white-space','nowrap');if(wrapper.width()<=$(this).get(0).scrollWidth){$(this).width($(this).get(0).scrollWidth);wrapper.width(wrapper.get(0).scrollWidth);$(this).dialog({'width':wrapper.width()});}
+$(this).css('white-space',oldWS);oldHidden.each(function(){$(this).attr('style',$(this).data('oldstyle'));});}},'modules':{}};})(jQuery);(function($){$.wikiEditor.modules.toolbar={api:{addToToolbar:function(context,data){for(type in data){switch(type){case'sections':var $sections=context.modules.$toolbar.find('div.sections');var $tabs=context.modules.$toolbar.find('div.tabs');for(section in data[type]){if(section=='main'){context.modules.$toolbar.prepend($.wikiEditor.modules.toolbar.fn.buildSection(context,section,data[type][section]));continue;}
 $sections.append($.wikiEditor.modules.toolbar.fn.buildSection(context,section,data[type][section]));$tabs.append($.wikiEditor.modules.toolbar.fn.buildTab(context,section,data[type][section]));}
 break;case'groups':if(!('section'in data)){continue;}
 var $section=context.modules.$toolbar.find('div[rel='+data.section+'].section');for(group in data[type]){$section.append($.wikiEditor.modules.toolbar.fn.buildGroup(context,group,data[type][group]));}
@@ -96,12 +131,12 @@
 return $section;},updateBookletSelection:function(context,id,$pages,$index){var cookie='wikiEditor-'+context.instance+'-booklet-'+id+'-page';var selected=$.cookie(cookie);var $selectedIndex=$index.find('*[rel='+selected+']');if($selectedIndex.size()==0){selected=$index.children().eq(0).attr('rel');$.cookie(cookie,selected);}
 $pages.children().hide();$pages.find('*[rel='+selected+']').show();$index.children().removeClass('current');$selectedIndex.addClass('current');},build:function(context,config){var $tabs=$('<div />').addClass('tabs').appendTo(context.modules.$toolbar);var $sections=$('<div />').addClass('sections').appendTo(context.modules.$toolbar);context.modules.$toolbar.append($('<div />').css('clear','both'));var sectionQueue=[];for(section in config){if(section=='main'){context.modules.$toolbar.prepend($.wikiEditor.modules.toolbar.fn.buildSection(context,section,config[section]));}else{sectionQueue.push({'$sections':$sections,'context':context,'id':section,'config':config[section]});$tabs.append($.wikiEditor.modules.toolbar.fn.buildTab(context,section,config[section]));}}
 $.eachAsync(sectionQueue,{'bulk':0,'end':function(){$('body').css('position','static');$('body').css('position','relative');},'loop':function(i,s){s.$sections.append($.wikiEditor.modules.toolbar.fn.buildSection(s.context,s.id,s.config));}});}}};})(jQuery);(function($){$.wikiEditor.modules.toc={api:{},fn:{create:function(context,config){if('$toc'in context.modules){return;}
-context.modules.$toc=$('<div></div>').addClass('wikiEditor-ui-toc').attr('id','wikiEditor-ui-toc');$.wikiEditor.modules.toc.fn.build(context,config);context.$ui.find('.wikiEditor-ui-bottom').append(context.modules.$toc);context.modules.$toc.height(context.$ui.find('.wikiEditor-ui-bottom').height());context.modules.$toc.css('width','12em').css('marginTop',-(context.$ui.find('.wikiEditor-ui-bottom').height()));context.$ui.find('.wikiEditor-ui-text').css(($('body.rtl').size()?'marginLeft':'marginRight'),'12em');$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);context.$textarea.bind('keyup encapsulateSelection',function(event){var context=$(this).data('wikiEditor-context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);}});}).bind('mouseup scrollToPosition focus',function(event){var context=$(this).data('wikiEditor-context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.update(context);}});}).blur(function(){var context=$(this).data('wikiEditor-context');$.wikiEditor.modules.toc.fn.unhighlight(context);});},unhighlight:function(context){context.modules.$toc.find('a').removeClass('currentSelection');},update:function(context){$.wikiEditor.modules.toc.fn.unhighlight(context);var position=context.$textarea.getCaretPosition();var section=0;if(context.data.outline.length>0){if(!(position<context.data.outline[0].position-1)){while(section<context.data.outline.length&&context.data.outline[section].position-1<position){section++;}
+context.modules.$toc=$('<div></div>').addClass('wikiEditor-ui-toc').attr('id','wikiEditor-ui-toc');$.wikiEditor.modules.toc.fn.build(context,config);context.$ui.find('.wikiEditor-ui-bottom').append(context.modules.$toc);context.modules.$toc.height(context.$ui.find('.wikiEditor-ui-bottom').height());context.modules.$toc.css('width','12em').css('marginTop',-(context.$ui.find('.wikiEditor-ui-bottom').height()));context.$ui.find('.wikiEditor-ui-text').css(($('body.rtl').size()?'marginLeft':'marginRight'),'12em');$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);context.$textarea.delayedBind(1000,'keyup encapsulateSelection',function(event){var context=$(this).data('wikiEditor-context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);}});}).bind('mouseup scrollToPosition focus keyup encapsulateSelection',function(event){var context=$(this).data('wikiEditor-context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.update(context);}});}).blur(function(){var context=$(this).data('wikiEditor-context');$.wikiEditor.modules.toc.fn.unhighlight(context);});},unhighlight:function(context){context.modules.$toc.find('a').removeClass('currentSelection');},update:function(context){$.wikiEditor.modules.toc.fn.unhighlight(context);var position=context.$textarea.getCaretPosition();var section=0;if(context.data.outline.length>0){if(!(position<context.data.outline[0].position-1)){while(section<context.data.outline.length&&context.data.outline[section].position-1<position){section++;}
 section=Math.max(0,section);}
 context.modules.$toc.find('a.section-'+section).addClass('currentSelection');}},build:function(context){function buildStructure(outline,offset,level){if(offset==undefined)offset=0;if(level==undefined)level=1;var sections=[];for(var i=offset;i<outline.length;i++){if(outline[i].nLevel==level){var sub=buildStructure(outline,i+1,level+1);if(sub.length){outline[i].sections=sub;}
 sections[sections.length]=outline[i];}else if(outline[i].nLevel<level){break;}}
 return sections;}
-function buildList(structure){var list=$('<ul></ul>');for(i in structure){var item=$('<li></li>').append($('<a></a>').attr('href','#').addClass('section-'+structure[i].index).data('textbox',context.$textarea).data('position',structure[i].position).click(function(event){$(this).data('textbox').scrollToCaretPosition($(this).data('position'));event.preventDefault();}).text(structure[i].text));if(structure[i].sections!==undefined){item.append(buildList(structure[i].sections));}
+function buildList(structure){var list=$('<ul></ul>');for(i in structure){var item=$('<li></li>').append($('<a></a>').attr('href','#').addClass('section-'+structure[i].index).data('textbox',context.$textarea).data('position',structure[i].position).click(function(event){$(this).data('textbox').setSelection($(this).data('position')).scrollToCaretPosition();event.preventDefault();}).text(structure[i].text));if(structure[i].sections!==undefined){item.append(buildList(structure[i].sections));}
 list.append(item);}
 return list;}
 var outline=[];var wikitext='\n'+context.$textarea.val()+'\n';var headings=wikitext.match(/\n={1,5}.*={1,5}(?=\n)/g);var offset=0;headings=$.makeArray(headings);for(var h=0;h<headings.length;h++){text=headings[h];var position=wikitext.indexOf(text,offset);if(position>offset){offset=position+1;}else if(position==-1){continue;}
@@ -109,8 +144,8 @@
 var endLevel=0;for(var c=text.length-1;c>=0;c--){if(text.charAt(c)=='='){endLevel++;}else{break;}}
 var level=Math.min(startLevel,endLevel);text=$.trim(text.substr(level,text.length-(level*2)));outline[h]={'text':text,'position':position,'level':level,'index':h+1};}
 var lastLevel=0;var nLevel=0;for(var i=0;i<outline.length;i++){if(outline[i].level>lastLevel){nLevel++;}
-else if(outline[i].level<nLevel){nLevel-=Math.max(1,lastLevel-outline[i].level);}
+else if(outline[i].level<lastLevel){nLevel-=Math.max(1,lastLevel-outline[i].level);}
 if(nLevel<=0){nLevel=1;}
 outline[i].nLevel=nLevel;lastLevel=outline[i].level;}
 var structure=buildStructure(outline);if($('input[name=wpSection]').val()=='')
-structure.unshift({'text':wgPageName.replace(/_/g,' '),'level':1,'index':0,'position':0});context.modules.$toc.html(buildList(structure));context.data.outline=outline;}}};})(jQuery);
\ No newline at end of file
+structure.unshift({'text':wgPageName.replace(/_/g,' '),'level':1,'index':0,'position':0});context.modules.$toc.html(buildList(structure));context.modules.$toc.find('ul a').autoEllipse({'position':'right','tooltip':true});context.data.outline=outline;}}};})(jQuery);
\ No newline at end of file
Index: js/js2/jquery-ui-1.7.2.js
===================================================================
--- js/js2/jquery-ui-1.7.2.js	(revision 56989)
+++ js/js2/jquery-ui-1.7.2.js	(working copy)
@@ -3439,3 +3439,1639 @@
 });
 
 })(jQuery);
+/*
+ * jQuery UI Datepicker 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ *	ui.core.js
+ */
+
+(function($) { // hide the namespace
+
+$.extend($.ui, { datepicker: { version: "1.7.2" } });
+
+var PROP_NAME = 'datepicker';
+
+/* Date picker manager.
+   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+   Settings for (groups of) date pickers are maintained in an instance object,
+   allowing multiple different settings on the same page. */
+
+function Datepicker() {
+	this.debug = false; // Change this to true to start debugging
+	this._curInst = null; // The current instance in use
+	this._keyEvent = false; // If the last event was a key event
+	this._disabledInputs = []; // List of date picker inputs that have been disabled
+	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+	this._inDialog = false; // True if showing within a "dialog", false if not
+	this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
+	this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
+	this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
+	this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
+	this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
+	this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
+	this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
+	this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
+	this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
+	this.regional = []; // Available regional settings, indexed by language code
+	this.regional[''] = { // Default regional settings
+		closeText: 'Done', // Display text for close link
+		prevText: 'Prev', // Display text for previous month link
+		nextText: 'Next', // Display text for next month link
+		currentText: 'Today', // Display text for current month link
+		monthNames: ['January','February','March','April','May','June',
+			'July','August','September','October','November','December'], // Names of months for drop-down and formatting
+		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
+		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
+		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
+		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
+		dateFormat: 'mm/dd/yy', // See format options on parseDate
+		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+		isRTL: false // True if right-to-left language, false if left-to-right
+	};
+	this._defaults = { // Global defaults for all the date picker instances
+		showOn: 'focus', // 'focus' for popup on focus,
+			// 'button' for trigger button, or 'both' for either
+		showAnim: 'show', // Name of jQuery animation for popup
+		showOptions: {}, // Options for enhanced animations
+		defaultDate: null, // Used when field is blank: actual date,
+			// +/-number for offset from today, null for today
+		appendText: '', // Display text following the input box, e.g. showing the format
+		buttonText: '...', // Text for trigger button
+		buttonImage: '', // URL for trigger button image
+		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+		hideIfNoPrevNext: false, // True to hide next/previous month links
+			// if not applicable, false to just disable them
+		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+		gotoCurrent: false, // True if today link goes back to current selection instead
+		changeMonth: false, // True if month can be selected directly, false if only prev/next
+		changeYear: false, // True if year can be selected directly, false if only prev/next
+		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+		yearRange: '-10:+10', // Range of years to display in drop-down,
+			// either relative to current year (-nn:+nn) or absolute (nnnn:nnnn)
+		showOtherMonths: false, // True to show dates in other months, false to leave blank
+		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+			// takes a Date and returns the number of the week for it
+		shortYearCutoff: '+10', // Short year values < this are in the current century,
+			// > this are in the previous century,
+			// string value starting with '+' for current year + value
+		minDate: null, // The earliest selectable date, or null for no limit
+		maxDate: null, // The latest selectable date, or null for no limit
+		duration: 'normal', // Duration of display/closure
+		beforeShowDay: null, // Function that takes a date and returns an array with
+			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
+			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+		beforeShow: null, // Function that takes an input field and
+			// returns a set of custom settings for the date picker
+		onSelect: null, // Define a callback function when a date is selected
+		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+		onClose: null, // Define a callback function when the datepicker is closed
+		numberOfMonths: 1, // Number of months to show at a time
+		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+		stepMonths: 1, // Number of months to step back/forward
+		stepBigMonths: 12, // Number of months to step back/forward for the big links
+		altField: '', // Selector for an alternate field to store selected dates into
+		altFormat: '', // The date format to use for the alternate field
+		constrainInput: true, // The input is constrained by the current date format
+		showButtonPanel: false // True to show button panel, false to not show it
+	};
+	$.extend(this._defaults, this.regional['']);
+	this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');
+}
+
+$.extend(Datepicker.prototype, {
+	/* Class name added to elements to indicate already configured with a date picker. */
+	markerClassName: 'hasDatepicker',
+
+	/* Debug logging (if enabled). */
+	log: function () {
+		if (this.debug)
+			console.log.apply('', arguments);
+	},
+
+	/* Override the default settings for all instances of the date picker.
+	   @param  settings  object - the new settings to use as defaults (anonymous object)
+	   @return the manager object */
+	setDefaults: function(settings) {
+		extendRemove(this._defaults, settings || {});
+		return this;
+	},
+
+	/* Attach the date picker to a jQuery selection.
+	   @param  target    element - the target input field or division or span
+	   @param  settings  object - the new settings to use for this date picker instance (anonymous) */
+	_attachDatepicker: function(target, settings) {
+		// check for settings on the control itself - in namespace 'date:'
+		var inlineSettings = null;
+		for (var attrName in this._defaults) {
+			var attrValue = target.getAttribute('date:' + attrName);
+			if (attrValue) {
+				inlineSettings = inlineSettings || {};
+				try {
+					inlineSettings[attrName] = eval(attrValue);
+				} catch (err) {
+					inlineSettings[attrName] = attrValue;
+				}
+			}
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		var inline = (nodeName == 'div' || nodeName == 'span');
+		if (!target.id)
+			target.id = 'dp' + (++this.uuid);
+		var inst = this._newInst($(target), inline);
+		inst.settings = $.extend({}, settings || {}, inlineSettings || {});
+		if (nodeName == 'input') {
+			this._connectDatepicker(target, inst);
+		} else if (inline) {
+			this._inlineDatepicker(target, inst);
+		}
+	},
+
+	/* Create a new instance object. */
+	_newInst: function(target, inline) {
+		var id = target[0].id.replace(/([:\[\]\.])/g, '\\\\$1'); // escape jQuery meta chars
+		return {id: id, input: target, // associated target
+			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+			drawMonth: 0, drawYear: 0, // month being drawn
+			inline: inline, // is datepicker inline or not
+			dpDiv: (!inline ? this.dpDiv : // presentation div
+			$('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};
+	},
+
+	/* Attach the date picker to an input field. */
+	_connectDatepicker: function(target, inst) {
+		var input = $(target);
+		inst.append = $([]);
+		inst.trigger = $([]);
+		if (input.hasClass(this.markerClassName))
+			return;
+		var appendText = this._get(inst, 'appendText');
+		var isRTL = this._get(inst, 'isRTL');
+		if (appendText) {
+			inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
+			input[isRTL ? 'before' : 'after'](inst.append);
+		}
+		var showOn = this._get(inst, 'showOn');
+		if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
+			input.focus(this._showDatepicker);
+		if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
+			var buttonText = this._get(inst, 'buttonText');
+			var buttonImage = this._get(inst, 'buttonImage');
+			inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
+				$('<img/>').addClass(this._triggerClass).
+					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+				$('<button type="button"></button>').addClass(this._triggerClass).
+					html(buttonImage == '' ? buttonText : $('<img/>').attr(
+					{ src:buttonImage, alt:buttonText, title:buttonText })));
+			input[isRTL ? 'before' : 'after'](inst.trigger);
+			inst.trigger.click(function() {
+				if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target)
+					$.datepicker._hideDatepicker();
+				else
+					$.datepicker._showDatepicker(target);
+				return false;
+			});
+		}
+		input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).
+			bind("setData.datepicker", function(event, key, value) {
+				inst.settings[key] = value;
+			}).bind("getData.datepicker", function(event, key) {
+				return this._get(inst, key);
+			});
+		$.data(target, PROP_NAME, inst);
+	},
+
+	/* Attach an inline date picker to a div. */
+	_inlineDatepicker: function(target, inst) {
+		var divSpan = $(target);
+		if (divSpan.hasClass(this.markerClassName))
+			return;
+		divSpan.addClass(this.markerClassName).append(inst.dpDiv).
+			bind("setData.datepicker", function(event, key, value){
+				inst.settings[key] = value;
+			}).bind("getData.datepicker", function(event, key){
+				return this._get(inst, key);
+			});
+		$.data(target, PROP_NAME, inst);
+		this._setDate(inst, this._getDefaultDate(inst));
+		this._updateDatepicker(inst);
+		this._updateAlternate(inst);
+	},
+
+	/* Pop-up the date picker in a "dialog" box.
+	   @param  input     element - ignored
+	   @param  dateText  string - the initial date to display (in the current format)
+	   @param  onSelect  function - the function(dateText) to call when a date is selected
+	   @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+	   @param  pos       int[2] - coordinates for the dialog's position within the screen or
+	                     event - with x/y coordinates or
+	                     leave empty for default (screen centre)
+	   @return the manager object */
+	_dialogDatepicker: function(input, dateText, onSelect, settings, pos) {
+		var inst = this._dialogInst; // internal instance
+		if (!inst) {
+			var id = 'dp' + (++this.uuid);
+			this._dialogInput = $('<input type="text" id="' + id +
+				'" size="1" style="position: absolute; top: -100px;"/>');
+			this._dialogInput.keydown(this._doKeyDown);
+			$('body').append(this._dialogInput);
+			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+			inst.settings = {};
+			$.data(this._dialogInput[0], PROP_NAME, inst);
+		}
+		extendRemove(inst.settings, settings || {});
+		this._dialogInput.val(dateText);
+
+		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+		if (!this._pos) {
+			var browserWidth = window.innerWidth || document.documentElement.clientWidth ||	document.body.clientWidth;
+			var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+			var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+			var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+			this._pos = // should use actual width/height below
+				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+		}
+
+		// move input on screen for focus, but hidden behind dialog
+		this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px');
+		inst.settings.onSelect = onSelect;
+		this._inDialog = true;
+		this.dpDiv.addClass(this._dialogClass);
+		this._showDatepicker(this._dialogInput[0]);
+		if ($.blockUI)
+			$.blockUI(this.dpDiv);
+		$.data(this._dialogInput[0], PROP_NAME, inst);
+		return this;
+	},
+
+	/* Detach a datepicker from its control.
+	   @param  target    element - the target input field or division or span */
+	_destroyDatepicker: function(target) {
+		var $target = $(target);
+		var inst = $.data(target, PROP_NAME);
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		$.removeData(target, PROP_NAME);
+		if (nodeName == 'input') {
+			inst.append.remove();
+			inst.trigger.remove();
+			$target.removeClass(this.markerClassName).
+				unbind('focus', this._showDatepicker).
+				unbind('keydown', this._doKeyDown).
+				unbind('keypress', this._doKeyPress);
+		} else if (nodeName == 'div' || nodeName == 'span')
+			$target.removeClass(this.markerClassName).empty();
+	},
+
+	/* Enable the date picker to a jQuery selection.
+	   @param  target    element - the target input field or division or span */
+	_enableDatepicker: function(target) {
+		var $target = $(target);
+		var inst = $.data(target, PROP_NAME);
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		if (nodeName == 'input') {
+			target.disabled = false;
+			inst.trigger.filter('button').
+				each(function() { this.disabled = false; }).end().
+				filter('img').css({opacity: '1.0', cursor: ''});
+		}
+		else if (nodeName == 'div' || nodeName == 'span') {
+			var inline = $target.children('.' + this._inlineClass);
+			inline.children().removeClass('ui-state-disabled');
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value == target ? null : value); }); // delete entry
+	},
+
+	/* Disable the date picker to a jQuery selection.
+	   @param  target    element - the target input field or division or span */
+	_disableDatepicker: function(target) {
+		var $target = $(target);
+		var inst = $.data(target, PROP_NAME);
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+		var nodeName = target.nodeName.toLowerCase();
+		if (nodeName == 'input') {
+			target.disabled = true;
+			inst.trigger.filter('button').
+				each(function() { this.disabled = true; }).end().
+				filter('img').css({opacity: '0.5', cursor: 'default'});
+		}
+		else if (nodeName == 'div' || nodeName == 'span') {
+			var inline = $target.children('.' + this._inlineClass);
+			inline.children().addClass('ui-state-disabled');
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value == target ? null : value); }); // delete entry
+		this._disabledInputs[this._disabledInputs.length] = target;
+	},
+
+	/* Is the first field in a jQuery collection disabled as a datepicker?
+	   @param  target    element - the target input field or division or span
+	   @return boolean - true if disabled, false if enabled */
+	_isDisabledDatepicker: function(target) {
+		if (!target) {
+			return false;
+		}
+		for (var i = 0; i < this._disabledInputs.length; i++) {
+			if (this._disabledInputs[i] == target)
+				return true;
+		}
+		return false;
+	},
+
+	/* Retrieve the instance data for the target control.
+	   @param  target  element - the target input field or division or span
+	   @return  object - the associated instance data
+	   @throws  error if a jQuery problem getting data */
+	_getInst: function(target) {
+		try {
+			return $.data(target, PROP_NAME);
+		}
+		catch (err) {
+			throw 'Missing instance data for this datepicker';
+		}
+	},
+
+	/* Update or retrieve the settings for a date picker attached to an input field or division.
+	   @param  target  element - the target input field or division or span
+	   @param  name    object - the new settings to update or
+	                   string - the name of the setting to change or retrieve,
+	                   when retrieving also 'all' for all instance settings or
+	                   'defaults' for all global defaults
+	   @param  value   any - the new value for the setting
+	                   (omit if above is an object or to retrieve a value) */
+	_optionDatepicker: function(target, name, value) {
+		var inst = this._getInst(target);
+		if (arguments.length == 2 && typeof name == 'string') {
+			return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
+				(inst ? (name == 'all' ? $.extend({}, inst.settings) :
+				this._get(inst, name)) : null));
+		}
+		var settings = name || {};
+		if (typeof name == 'string') {
+			settings = {};
+			settings[name] = value;
+		}
+		if (inst) {
+			if (this._curInst == inst) {
+				this._hideDatepicker(null);
+			}
+			var date = this._getDateDatepicker(target);
+			extendRemove(inst.settings, settings);
+			this._setDateDatepicker(target, date);
+			this._updateDatepicker(inst);
+		}
+	},
+
+	// change method deprecated
+	_changeDatepicker: function(target, name, value) {
+		this._optionDatepicker(target, name, value);
+	},
+
+	/* Redraw the date picker attached to an input field or division.
+	   @param  target  element - the target input field or division or span */
+	_refreshDatepicker: function(target) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._updateDatepicker(inst);
+		}
+	},
+
+	/* Set the dates for a jQuery selection.
+	   @param  target   element - the target input field or division or span
+	   @param  date     Date - the new date
+	   @param  endDate  Date - the new end date for a range (optional) */
+	_setDateDatepicker: function(target, date, endDate) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._setDate(inst, date, endDate);
+			this._updateDatepicker(inst);
+			this._updateAlternate(inst);
+		}
+	},
+
+	/* Get the date(s) for the first entry in a jQuery selection.
+	   @param  target  element - the target input field or division or span
+	   @return Date - the current date or
+	           Date[2] - the current dates for a range */
+	_getDateDatepicker: function(target) {
+		var inst = this._getInst(target);
+		if (inst && !inst.inline)
+			this._setDateFromField(inst);
+		return (inst ? this._getDate(inst) : null);
+	},
+
+	/* Handle keystrokes. */
+	_doKeyDown: function(event) {
+		var inst = $.datepicker._getInst(event.target);
+		var handled = true;
+		var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
+		inst._keyEvent = true;
+		if ($.datepicker._datepickerShowing)
+			switch (event.keyCode) {
+				case 9:  $.datepicker._hideDatepicker(null, '');
+						break; // hide on tab out
+				case 13: var sel = $('td.' + $.datepicker._dayOverClass +
+							', td.' + $.datepicker._currentClass, inst.dpDiv);
+						if (sel[0])
+							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+						else
+							$.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
+						return false; // don't submit the form
+						break; // select the value on enter
+				case 27: $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
+						break; // hide on escape
+				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							-$.datepicker._get(inst, 'stepBigMonths') :
+							-$.datepicker._get(inst, 'stepMonths')), 'M');
+						break; // previous month/year on page up/+ ctrl
+				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							+$.datepicker._get(inst, 'stepBigMonths') :
+							+$.datepicker._get(inst, 'stepMonths')), 'M');
+						break; // next month/year on page down/+ ctrl
+				case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
+						handled = event.ctrlKey || event.metaKey;
+						break; // clear on ctrl or command +end
+				case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
+						handled = event.ctrlKey || event.metaKey;
+						break; // current on ctrl or command +home
+				case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
+						handled = event.ctrlKey || event.metaKey;
+						// -1 day on ctrl or command +left
+						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+									-$.datepicker._get(inst, 'stepBigMonths') :
+									-$.datepicker._get(inst, 'stepMonths')), 'M');
+						// next month/year on alt +left on Mac
+						break;
+				case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
+						handled = event.ctrlKey || event.metaKey;
+						break; // -1 week on ctrl or command +up
+				case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
+						handled = event.ctrlKey || event.metaKey;
+						// +1 day on ctrl or command +right
+						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+									+$.datepicker._get(inst, 'stepBigMonths') :
+									+$.datepicker._get(inst, 'stepMonths')), 'M');
+						// next month/year on alt +right
+						break;
+				case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
+						handled = event.ctrlKey || event.metaKey;
+						break; // +1 week on ctrl or command +down
+				default: handled = false;
+			}
+		else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
+			$.datepicker._showDatepicker(this);
+		else {
+			handled = false;
+		}
+		if (handled) {
+			event.preventDefault();
+			event.stopPropagation();
+		}
+	},
+
+	/* Filter entered characters - based on date format. */
+	_doKeyPress: function(event) {
+		var inst = $.datepicker._getInst(event.target);
+		if ($.datepicker._get(inst, 'constrainInput')) {
+			var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
+			var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
+			return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
+		}
+	},
+
+	/* Pop-up the date picker for a given input field.
+	   @param  input  element - the input field attached to the date picker or
+	                  event - if triggered by focus */
+	_showDatepicker: function(input) {
+		input = input.target || input;
+		if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
+			input = $('input', input.parentNode)[0];
+		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
+			return;
+		var inst = $.datepicker._getInst(input);
+		var beforeShow = $.datepicker._get(inst, 'beforeShow');
+		extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
+		$.datepicker._hideDatepicker(null, '');
+		$.datepicker._lastInput = input;
+		$.datepicker._setDateFromField(inst);
+		if ($.datepicker._inDialog) // hide cursor
+			input.value = '';
+		if (!$.datepicker._pos) { // position below input
+			$.datepicker._pos = $.datepicker._findPos(input);
+			$.datepicker._pos[1] += input.offsetHeight; // add the height
+		}
+		var isFixed = false;
+		$(input).parents().each(function() {
+			isFixed |= $(this).css('position') == 'fixed';
+			return !isFixed;
+		});
+		if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
+			$.datepicker._pos[0] -= document.documentElement.scrollLeft;
+			$.datepicker._pos[1] -= document.documentElement.scrollTop;
+		}
+		var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+		$.datepicker._pos = null;
+		inst.rangeStart = null;
+		// determine sizing offscreen
+		inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
+		$.datepicker._updateDatepicker(inst);
+		// fix width for dynamic number of date pickers
+		// and adjust position before showing
+		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+			'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
+			left: offset.left + 'px', top: offset.top + 'px'});
+		if (!inst.inline) {
+			var showAnim = $.datepicker._get(inst, 'showAnim') || 'show';
+			var duration = $.datepicker._get(inst, 'duration');
+			var postProcess = function() {
+				$.datepicker._datepickerShowing = true;
+				if ($.browser.msie && parseInt($.browser.version,10) < 7) // fix IE < 7 select problems
+					$('iframe.ui-datepicker-cover').css({width: inst.dpDiv.width() + 4,
+						height: inst.dpDiv.height() + 4});
+			};
+			if ($.effects && $.effects[showAnim])
+				inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+			else
+				inst.dpDiv[showAnim](duration, postProcess);
+			if (duration == '')
+				postProcess();
+			if (inst.input[0].type != 'hidden')
+				inst.input[0].focus();
+			$.datepicker._curInst = inst;
+		}
+	},
+
+	/* Generate the date picker content. */
+	_updateDatepicker: function(inst) {
+		var dims = {width: inst.dpDiv.width() + 4,
+			height: inst.dpDiv.height() + 4};
+		var self = this;
+		inst.dpDiv.empty().append(this._generateHTML(inst))
+			.find('iframe.ui-datepicker-cover').
+				css({width: dims.width, height: dims.height})
+			.end()
+			.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
+				.bind('mouseout', function(){
+					$(this).removeClass('ui-state-hover');
+					if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
+					if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover');
+				})
+				.bind('mouseover', function(){
+					if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) {
+						$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
+						$(this).addClass('ui-state-hover');
+						if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover');
+						if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover');
+					}
+				})
+			.end()
+			.find('.' + this._dayOverClass + ' a')
+				.trigger('mouseover')
+			.end();
+		var numMonths = this._getNumberOfMonths(inst);
+		var cols = numMonths[1];
+		var width = 17;
+		if (cols > 1) {
+			inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
+		} else {
+			inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
+		}
+		inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
+			'Class']('ui-datepicker-multi');
+		inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
+			'Class']('ui-datepicker-rtl');
+		if (inst.input && inst.input[0].type != 'hidden' && inst == $.datepicker._curInst)
+			$(inst.input[0]).focus();
+	},
+
+	/* Check positioning to remain on screen. */
+	_checkOffset: function(inst, offset, isFixed) {
+		var dpWidth = inst.dpDiv.outerWidth();
+		var dpHeight = inst.dpDiv.outerHeight();
+		var inputWidth = inst.input ? inst.input.outerWidth() : 0;
+		var inputHeight = inst.input ? inst.input.outerHeight() : 0;
+		var viewWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) + $(document).scrollLeft();
+		var viewHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) + $(document).scrollTop();
+
+		offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
+		offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
+		offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+		// now check if datepicker is showing outside window viewport - move to a better place if so.
+		offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0;
+		offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight*2 - viewHeight) : 0;
+
+		return offset;
+	},
+
+	/* Find an object's position on the screen. */
+	_findPos: function(obj) {
+        while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {
+            obj = obj.nextSibling;
+        }
+        var position = $(obj).offset();
+	    return [position.left, position.top];
+	},
+
+	/* Hide the date picker from view.
+	   @param  input  element - the input field attached to the date picker
+	   @param  duration  string - the duration over which to close the date picker */
+	_hideDatepicker: function(input, duration) {
+		var inst = this._curInst;
+		if (!inst || (input && inst != $.data(input, PROP_NAME)))
+			return;
+		if (inst.stayOpen)
+			this._selectDate('#' + inst.id, this._formatDate(inst,
+				inst.currentDay, inst.currentMonth, inst.currentYear));
+		inst.stayOpen = false;
+		if (this._datepickerShowing) {
+			duration = (duration != null ? duration : this._get(inst, 'duration'));
+			var showAnim = this._get(inst, 'showAnim');
+			var postProcess = function() {
+				$.datepicker._tidyDialog(inst);
+			};
+			if (duration != '' && $.effects && $.effects[showAnim])
+				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'),
+					duration, postProcess);
+			else
+				inst.dpDiv[(duration == '' ? 'hide' : (showAnim == 'slideDown' ? 'slideUp' :
+					(showAnim == 'fadeIn' ? 'fadeOut' : 'hide')))](duration, postProcess);
+			if (duration == '')
+				this._tidyDialog(inst);
+			var onClose = this._get(inst, 'onClose');
+			if (onClose)
+				onClose.apply((inst.input ? inst.input[0] : null),
+					[(inst.input ? inst.input.val() : ''), inst]);  // trigger custom callback
+			this._datepickerShowing = false;
+			this._lastInput = null;
+			if (this._inDialog) {
+				this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
+				if ($.blockUI) {
+					$.unblockUI();
+					$('body').append(this.dpDiv);
+				}
+			}
+			this._inDialog = false;
+		}
+		this._curInst = null;
+	},
+
+	/* Tidy up after a dialog display. */
+	_tidyDialog: function(inst) {
+		inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
+	},
+
+	/* Close date picker if clicked elsewhere. */
+	_checkExternalClick: function(event) {
+		if (!$.datepicker._curInst)
+			return;
+		var $target = $(event.target);
+		if (($target.parents('#' + $.datepicker._mainDivId).length == 0) &&
+				!$target.hasClass($.datepicker.markerClassName) &&
+				!$target.hasClass($.datepicker._triggerClass) &&
+				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
+			$.datepicker._hideDatepicker(null, '');
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustDate: function(id, offset, period) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		if (this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+		this._adjustInstDate(inst, offset +
+			(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
+			period);
+		this._updateDatepicker(inst);
+	},
+
+	/* Action for current link. */
+	_gotoToday: function(id) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
+			inst.selectedDay = inst.currentDay;
+			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+			inst.drawYear = inst.selectedYear = inst.currentYear;
+		}
+		else {
+		var date = new Date();
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		}
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Action for selecting a new month/year. */
+	_selectMonthYear: function(id, select, period) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		inst._selectingMonthYear = false;
+		inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
+		inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
+			parseInt(select.options[select.selectedIndex].value,10);
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Restore input focus after not changing month/year. */
+	_clickMonthYear: function(id) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		if (inst.input && inst._selectingMonthYear && !$.browser.msie)
+			inst.input[0].focus();
+		inst._selectingMonthYear = !inst._selectingMonthYear;
+	},
+
+	/* Action for selecting a day. */
+	_selectDay: function(id, month, year, td) {
+		var target = $(id);
+		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+		var inst = this._getInst(target[0]);
+		inst.selectedDay = inst.currentDay = $('a', td).html();
+		inst.selectedMonth = inst.currentMonth = month;
+		inst.selectedYear = inst.currentYear = year;
+		if (inst.stayOpen) {
+			inst.endDay = inst.endMonth = inst.endYear = null;
+		}
+		this._selectDate(id, this._formatDate(inst,
+			inst.currentDay, inst.currentMonth, inst.currentYear));
+		if (inst.stayOpen) {
+			inst.rangeStart = this._daylightSavingAdjust(
+				new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
+			this._updateDatepicker(inst);
+		}
+	},
+
+	/* Erase the input field and hide the date picker. */
+	_clearDate: function(id) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		inst.stayOpen = false;
+		inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null;
+		this._selectDate(target, '');
+	},
+
+	/* Update the input field with the selected date. */
+	_selectDate: function(id, dateStr) {
+		var target = $(id);
+		var inst = this._getInst(target[0]);
+		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+		if (inst.input)
+			inst.input.val(dateStr);
+		this._updateAlternate(inst);
+		var onSelect = this._get(inst, 'onSelect');
+		if (onSelect)
+			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+		else if (inst.input)
+			inst.input.trigger('change'); // fire the change event
+		if (inst.inline)
+			this._updateDatepicker(inst);
+		else if (!inst.stayOpen) {
+			this._hideDatepicker(null, this._get(inst, 'duration'));
+			this._lastInput = inst.input[0];
+			if (typeof(inst.input[0]) != 'object')
+				inst.input[0].focus(); // restore focus
+			this._lastInput = null;
+		}
+	},
+
+	/* Update any alternate field to synchronise with the main field. */
+	_updateAlternate: function(inst) {
+		var altField = this._get(inst, 'altField');
+		if (altField) { // update alternate field too
+			var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
+			var date = this._getDate(inst);
+			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+			$(altField).each(function() { $(this).val(dateStr); });
+		}
+	},
+
+	/* Set as beforeShowDay function to prevent selection of weekends.
+	   @param  date  Date - the date to customise
+	   @return [boolean, string] - is this date selectable?, what is its CSS class? */
+	noWeekends: function(date) {
+		var day = date.getDay();
+		return [(day > 0 && day < 6), ''];
+	},
+
+	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+	   @param  date  Date - the date to get the week for
+	   @return  number - the number of the week within the year that contains this date */
+	iso8601Week: function(date) {
+		var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
+		var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan
+		var firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7
+		firstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday
+		if (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary
+			checkDate.setDate(checkDate.getDate() - 3); // Generate for previous year
+			return $.datepicker.iso8601Week(checkDate);
+		} else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year
+			firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7;
+			if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary
+				return 1;
+			}
+		}
+		return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date
+	},
+
+	/* Parse a string value into a date object.
+	   See formatDate below for the possible formats.
+
+	   @param  format    string - the expected format of the date
+	   @param  value     string - the date in the above format
+	   @param  settings  Object - attributes include:
+	                     shortYearCutoff  number - the cutoff year for determining the century (optional)
+	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+	                     dayNames         string[7] - names of the days from Sunday (optional)
+	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+	                     monthNames       string[12] - names of the months (optional)
+	   @return  Date - the extracted date value or null if value is blank */
+	parseDate: function (format, value, settings) {
+		if (format == null || value == null)
+			throw 'Invalid arguments';
+		value = (typeof value == 'object' ? value.toString() : value + '');
+		if (value == '')
+			return null;
+		var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
+		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+		var year = -1;
+		var month = -1;
+		var day = -1;
+		var doy = -1;
+		var literal = false;
+		// Check whether a format character is doubled
+		var lookAhead = function(match) {
+			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+			if (matches)
+				iFormat++;
+			return matches;
+		};
+		// Extract a number from the string value
+		var getNumber = function(match) {
+			lookAhead(match);
+			var origSize = (match == '@' ? 14 : (match == 'y' ? 4 : (match == 'o' ? 3 : 2)));
+			var size = origSize;
+			var num = 0;
+			while (size > 0 && iValue < value.length &&
+					value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') {
+				num = num * 10 + parseInt(value.charAt(iValue++),10);
+				size--;
+			}
+			if (size == origSize)
+				throw 'Missing number at position ' + iValue;
+			return num;
+		};
+		// Extract a name from the string value and convert to an index
+		var getName = function(match, shortNames, longNames) {
+			var names = (lookAhead(match) ? longNames : shortNames);
+			var size = 0;
+			for (var j = 0; j < names.length; j++)
+				size = Math.max(size, names[j].length);
+			var name = '';
+			var iInit = iValue;
+			while (size > 0 && iValue < value.length) {
+				name += value.charAt(iValue++);
+				for (var i = 0; i < names.length; i++)
+					if (name == names[i])
+						return i + 1;
+				size--;
+			}
+			throw 'Unknown name at position ' + iInit;
+		};
+		// Confirm that a literal character matches the string value
+		var checkLiteral = function() {
+			if (value.charAt(iValue) != format.charAt(iFormat))
+				throw 'Unexpected literal at position ' + iValue;
+			iValue++;
+		};
+		var iValue = 0;
+		for (var iFormat = 0; iFormat < format.length; iFormat++) {
+			if (literal)
+				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+					literal = false;
+				else
+					checkLiteral();
+			else
+				switch (format.charAt(iFormat)) {
+					case 'd':
+						day = getNumber('d');
+						break;
+					case 'D':
+						getName('D', dayNamesShort, dayNames);
+						break;
+					case 'o':
+						doy = getNumber('o');
+						break;
+					case 'm':
+						month = getNumber('m');
+						break;
+					case 'M':
+						month = getName('M', monthNamesShort, monthNames);
+						break;
+					case 'y':
+						year = getNumber('y');
+						break;
+					case '@':
+						var date = new Date(getNumber('@'));
+						year = date.getFullYear();
+						month = date.getMonth() + 1;
+						day = date.getDate();
+						break;
+					case "'":
+						if (lookAhead("'"))
+							checkLiteral();
+						else
+							literal = true;
+						break;
+					default:
+						checkLiteral();
+				}
+		}
+		if (year == -1)
+			year = new Date().getFullYear();
+		else if (year < 100)
+			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+				(year <= shortYearCutoff ? 0 : -100);
+		if (doy > -1) {
+			month = 1;
+			day = doy;
+			do {
+				var dim = this._getDaysInMonth(year, month - 1);
+				if (day <= dim)
+					break;
+				month++;
+				day -= dim;
+			} while (true);
+		}
+		var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+		if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
+			throw 'Invalid date'; // E.g. 31/02/*
+		return date;
+	},
+
+	/* Standard date formats. */
+	ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
+	COOKIE: 'D, dd M yy',
+	ISO_8601: 'yy-mm-dd',
+	RFC_822: 'D, d M y',
+	RFC_850: 'DD, dd-M-y',
+	RFC_1036: 'D, d M y',
+	RFC_1123: 'D, d M yy',
+	RFC_2822: 'D, d M yy',
+	RSS: 'D, d M y', // RFC 822
+	TIMESTAMP: '@',
+	W3C: 'yy-mm-dd', // ISO 8601
+
+	/* Format a date object into a string value.
+	   The format can be combinations of the following:
+	   d  - day of month (no leading zero)
+	   dd - day of month (two digit)
+	   o  - day of year (no leading zeros)
+	   oo - day of year (three digit)
+	   D  - day name short
+	   DD - day name long
+	   m  - month of year (no leading zero)
+	   mm - month of year (two digit)
+	   M  - month name short
+	   MM - month name long
+	   y  - year (two digit)
+	   yy - year (four digit)
+	   @ - Unix timestamp (ms since 01/01/1970)
+	   '...' - literal text
+	   '' - single quote
+
+	   @param  format    string - the desired format of the date
+	   @param  date      Date - the date value to format
+	   @param  settings  Object - attributes include:
+	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+	                     dayNames         string[7] - names of the days from Sunday (optional)
+	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+	                     monthNames       string[12] - names of the months (optional)
+	   @return  string - the date in the above format */
+	formatDate: function (format, date, settings) {
+		if (!date)
+			return '';
+		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+		// Check whether a format character is doubled
+		var lookAhead = function(match) {
+			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+			if (matches)
+				iFormat++;
+			return matches;
+		};
+		// Format a number, with leading zero if necessary
+		var formatNumber = function(match, value, len) {
+			var num = '' + value;
+			if (lookAhead(match))
+				while (num.length < len)
+					num = '0' + num;
+			return num;
+		};
+		// Format a name, short or long as requested
+		var formatName = function(match, value, shortNames, longNames) {
+			return (lookAhead(match) ? longNames[value] : shortNames[value]);
+		};
+		var output = '';
+		var literal = false;
+		if (date)
+			for (var iFormat = 0; iFormat < format.length; iFormat++) {
+				if (literal)
+					if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+						literal = false;
+					else
+						output += format.charAt(iFormat);
+				else
+					switch (format.charAt(iFormat)) {
+						case 'd':
+							output += formatNumber('d', date.getDate(), 2);
+							break;
+						case 'D':
+							output += formatName('D', date.getDay(), dayNamesShort, dayNames);
+							break;
+						case 'o':
+							var doy = date.getDate();
+							for (var m = date.getMonth() - 1; m >= 0; m--)
+								doy += this._getDaysInMonth(date.getFullYear(), m);
+							output += formatNumber('o', doy, 3);
+							break;
+						case 'm':
+							output += formatNumber('m', date.getMonth() + 1, 2);
+							break;
+						case 'M':
+							output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
+							break;
+						case 'y':
+							output += (lookAhead('y') ? date.getFullYear() :
+								(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
+							break;
+						case '@':
+							output += date.getTime();
+							break;
+						case "'":
+							if (lookAhead("'"))
+								output += "'";
+							else
+								literal = true;
+							break;
+						default:
+							output += format.charAt(iFormat);
+					}
+			}
+		return output;
+	},
+
+	/* Extract all possible characters from the date format. */
+	_possibleChars: function (format) {
+		var chars = '';
+		var literal = false;
+		for (var iFormat = 0; iFormat < format.length; iFormat++)
+			if (literal)
+				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+					literal = false;
+				else
+					chars += format.charAt(iFormat);
+			else
+				switch (format.charAt(iFormat)) {
+					case 'd': case 'm': case 'y': case '@':
+						chars += '0123456789';
+						break;
+					case 'D': case 'M':
+						return null; // Accept anything
+					case "'":
+						if (lookAhead("'"))
+							chars += "'";
+						else
+							literal = true;
+						break;
+					default:
+						chars += format.charAt(iFormat);
+				}
+		return chars;
+	},
+
+	/* Get a setting value, defaulting if necessary. */
+	_get: function(inst, name) {
+		return inst.settings[name] !== undefined ?
+			inst.settings[name] : this._defaults[name];
+	},
+
+	/* Parse existing date and initialise date picker. */
+	_setDateFromField: function(inst) {
+		var dateFormat = this._get(inst, 'dateFormat');
+		var dates = inst.input ? inst.input.val() : null;
+		inst.endDay = inst.endMonth = inst.endYear = null;
+		var date = defaultDate = this._getDefaultDate(inst);
+		var settings = this._getFormatConfig(inst);
+		try {
+			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+		} catch (event) {
+			this.log(event);
+			date = defaultDate;
+		}
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		inst.currentDay = (dates ? date.getDate() : 0);
+		inst.currentMonth = (dates ? date.getMonth() : 0);
+		inst.currentYear = (dates ? date.getFullYear() : 0);
+		this._adjustInstDate(inst);
+	},
+
+	/* Retrieve the default date shown on opening. */
+	_getDefaultDate: function(inst) {
+		var date = this._determineDate(this._get(inst, 'defaultDate'), new Date());
+		var minDate = this._getMinMaxDate(inst, 'min', true);
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		date = (minDate && date < minDate ? minDate : date);
+		date = (maxDate && date > maxDate ? maxDate : date);
+		return date;
+	},
+
+	/* A date may be specified as an exact value or a relative one. */
+	_determineDate: function(date, defaultDate) {
+		var offsetNumeric = function(offset) {
+			var date = new Date();
+			date.setDate(date.getDate() + offset);
+			return date;
+		};
+		var offsetString = function(offset, getDaysInMonth) {
+			var date = new Date();
+			var year = date.getFullYear();
+			var month = date.getMonth();
+			var day = date.getDate();
+			var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
+			var matches = pattern.exec(offset);
+			while (matches) {
+				switch (matches[2] || 'd') {
+					case 'd' : case 'D' :
+						day += parseInt(matches[1],10); break;
+					case 'w' : case 'W' :
+						day += parseInt(matches[1],10) * 7; break;
+					case 'm' : case 'M' :
+						month += parseInt(matches[1],10);
+						day = Math.min(day, getDaysInMonth(year, month));
+						break;
+					case 'y': case 'Y' :
+						year += parseInt(matches[1],10);
+						day = Math.min(day, getDaysInMonth(year, month));
+						break;
+				}
+				matches = pattern.exec(offset);
+			}
+			return new Date(year, month, day);
+		};
+		date = (date == null ? defaultDate :
+			(typeof date == 'string' ? offsetString(date, this._getDaysInMonth) :
+			(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
+		date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
+		if (date) {
+			date.setHours(0);
+			date.setMinutes(0);
+			date.setSeconds(0);
+			date.setMilliseconds(0);
+		}
+		return this._daylightSavingAdjust(date);
+	},
+
+	/* Handle switch to/from daylight saving.
+	   Hours may be non-zero on daylight saving cut-over:
+	   > 12 when midnight changeover, but then cannot generate
+	   midnight datetime, so jump to 1AM, otherwise reset.
+	   @param  date  (Date) the date to check
+	   @return  (Date) the corrected date */
+	_daylightSavingAdjust: function(date) {
+		if (!date) return null;
+		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+		return date;
+	},
+
+	/* Set the date(s) directly. */
+	_setDate: function(inst, date, endDate) {
+		var clear = !(date);
+		var origMonth = inst.selectedMonth;
+		var origYear = inst.selectedYear;
+		date = this._determineDate(date, new Date());
+		inst.selectedDay = inst.currentDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
+		if (origMonth != inst.selectedMonth || origYear != inst.selectedYear)
+			this._notifyChange(inst);
+		this._adjustInstDate(inst);
+		if (inst.input) {
+			inst.input.val(clear ? '' : this._formatDate(inst));
+		}
+	},
+
+	/* Retrieve the date(s) directly. */
+	_getDate: function(inst) {
+		var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
+			this._daylightSavingAdjust(new Date(
+			inst.currentYear, inst.currentMonth, inst.currentDay)));
+			return startDate;
+	},
+
+	/* Generate the HTML for the current state of the date picker. */
+	_generateHTML: function(inst) {
+		var today = new Date();
+		today = this._daylightSavingAdjust(
+			new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
+		var isRTL = this._get(inst, 'isRTL');
+		var showButtonPanel = this._get(inst, 'showButtonPanel');
+		var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
+		var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
+		var numMonths = this._getNumberOfMonths(inst);
+		var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
+		var stepMonths = this._get(inst, 'stepMonths');
+		var stepBigMonths = this._get(inst, 'stepBigMonths');
+		var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
+		var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+			new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+		var minDate = this._getMinMaxDate(inst, 'min', true);
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		var drawMonth = inst.drawMonth - showCurrentAtPos;
+		var drawYear = inst.drawYear;
+		if (drawMonth < 0) {
+			drawMonth += 12;
+			drawYear--;
+		}
+		if (maxDate) {
+			var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+				maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()));
+			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+				drawMonth--;
+				if (drawMonth < 0) {
+					drawMonth = 11;
+					drawYear--;
+				}
+			}
+		}
+		inst.drawMonth = drawMonth;
+		inst.drawYear = drawYear;
+		var prevText = this._get(inst, 'prevText');
+		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+			this._getFormatConfig(inst)));
+		var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+			'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
+			' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
+			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
+		var nextText = this._get(inst, 'nextText');
+		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+			this._getFormatConfig(inst)));
+		var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+			'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
+			' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
+			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
+		var currentText = this._get(inst, 'currentText');
+		var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
+		currentText = (!navigationAsDateFormat ? currentText :
+			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+		var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
+		var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
+			(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#' + inst.id + '\');"' +
+			'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
+		var firstDay = parseInt(this._get(inst, 'firstDay'),10);
+		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+		var dayNames = this._get(inst, 'dayNames');
+		var dayNamesShort = this._get(inst, 'dayNamesShort');
+		var dayNamesMin = this._get(inst, 'dayNamesMin');
+		var monthNames = this._get(inst, 'monthNames');
+		var monthNamesShort = this._get(inst, 'monthNamesShort');
+		var beforeShowDay = this._get(inst, 'beforeShowDay');
+		var showOtherMonths = this._get(inst, 'showOtherMonths');
+		var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
+		var endDate = inst.endDay ? this._daylightSavingAdjust(
+			new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate;
+		var defaultDate = this._getDefaultDate(inst);
+		var html = '';
+		for (var row = 0; row < numMonths[0]; row++) {
+			var group = '';
+			for (var col = 0; col < numMonths[1]; col++) {
+				var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+				var cornerClass = ' ui-corner-all';
+				var calender = '';
+				if (isMultiMonth) {
+					calender += '<div class="ui-datepicker-group ui-datepicker-group-';
+					switch (col) {
+						case 0: calender += 'first'; cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
+						case numMonths[1]-1: calender += 'last'; cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
+						default: calender += 'middle'; cornerClass = ''; break;
+					}
+					calender += '">';
+				}
+				calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
+					(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
+					(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
+					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+					selectedDate, row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+					'</div><table class="ui-datepicker-calendar"><thead>' +
+					'<tr>';
+				var thead = '';
+				for (var dow = 0; dow < 7; dow++) { // days of the week
+					var day = (dow + firstDay) % 7;
+					thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
+						'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
+				}
+				calender += thead + '</tr></thead><tbody>';
+				var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+				if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
+					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+				var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+				var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate
+				var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+				for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+					calender += '<tr>';
+					var tbody = '';
+					for (var dow = 0; dow < 7; dow++) { // create date picker days
+						var daySettings = (beforeShowDay ?
+							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
+						var otherMonth = (printDate.getMonth() != drawMonth);
+						var unselectable = otherMonth || !daySettings[0] ||
+							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+						tbody += '<td class="' +
+							((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
+							(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
+							((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
+							(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
+							// or defaultDate is current printedDate and defaultDate is selectedDate
+							' ' + this._dayOverClass : '') + // highlight selected day
+							(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') +  // highlight unselectable days
+							(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
+							(printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
+							' ' + this._currentClass : '') + // highlight selected day
+							(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
+							((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
+							(unselectable ? '' : ' onclick="DP_jQuery.datepicker._selectDay(\'#' +
+							inst.id + '\',' + drawMonth + ',' + drawYear + ', this);return false;"') + '>' + // actions
+							(otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : // display for other months
+							(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
+							(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
+							(printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? // in current range
+							' ui-state-active' : '') + // highlight selected day
+							'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display for this month
+						printDate.setDate(printDate.getDate() + 1);
+						printDate = this._daylightSavingAdjust(printDate);
+					}
+					calender += tbody + '</tr>';
+				}
+				drawMonth++;
+				if (drawMonth > 11) {
+					drawMonth = 0;
+					drawYear++;
+				}
+				calender += '</tbody></table>' + (isMultiMonth ? '</div>' + 
+							((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
+				group += calender;
+			}
+			html += group;
+		}
+		html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
+			'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
+		inst._keyEvent = false;
+		return html;
+	},
+
+	/* Generate the month and year header. */
+	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+			selectedDate, secondary, monthNames, monthNamesShort) {
+		minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate);
+		var changeMonth = this._get(inst, 'changeMonth');
+		var changeYear = this._get(inst, 'changeYear');
+		var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
+		var html = '<div class="ui-datepicker-title">';
+		var monthHtml = '';
+		// month selection
+		if (secondary || !changeMonth)
+			monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span> ';
+		else {
+			var inMinYear = (minDate && minDate.getFullYear() == drawYear);
+			var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
+			monthHtml += '<select class="ui-datepicker-month" ' +
+				'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
+				'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
+			 	'>';
+			for (var month = 0; month < 12; month++) {
+				if ((!inMinYear || month >= minDate.getMonth()) &&
+						(!inMaxYear || month <= maxDate.getMonth()))
+					monthHtml += '<option value="' + month + '"' +
+						(month == drawMonth ? ' selected="selected"' : '') +
+						'>' + monthNamesShort[month] + '</option>';
+			}
+			monthHtml += '</select>';
+		}
+		if (!showMonthAfterYear)
+			html += monthHtml + ((secondary || changeMonth || changeYear) && (!(changeMonth && changeYear)) ? '&#xa0;' : '');
+		// year selection
+		if (secondary || !changeYear)
+			html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
+		else {
+			// determine range of years to display
+			var years = this._get(inst, 'yearRange').split(':');
+			var year = 0;
+			var endYear = 0;
+			if (years.length != 2) {
+				year = drawYear - 10;
+				endYear = drawYear + 10;
+			} else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {
+				year = drawYear + parseInt(years[0], 10);
+				endYear = drawYear + parseInt(years[1], 10);
+			} else {
+				year = parseInt(years[0], 10);
+				endYear = parseInt(years[1], 10);
+			}
+			year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+			endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+			html += '<select class="ui-datepicker-year" ' +
+				'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
+				'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
+				'>';
+			for (; year <= endYear; year++) {
+				html += '<option value="' + year + '"' +
+					(year == drawYear ? ' selected="selected"' : '') +
+					'>' + year + '</option>';
+			}
+			html += '</select>';
+		}
+		if (showMonthAfterYear)
+			html += (secondary || changeMonth || changeYear ? '&#xa0;' : '') + monthHtml;
+		html += '</div>'; // Close datepicker_header
+		return html;
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustInstDate: function(inst, offset, period) {
+		var year = inst.drawYear + (period == 'Y' ? offset : 0);
+		var month = inst.drawMonth + (period == 'M' ? offset : 0);
+		var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
+			(period == 'D' ? offset : 0);
+		var date = this._daylightSavingAdjust(new Date(year, month, day));
+		// ensure it is within the bounds set
+		var minDate = this._getMinMaxDate(inst, 'min', true);
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		date = (minDate && date < minDate ? minDate : date);
+		date = (maxDate && date > maxDate ? maxDate : date);
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		if (period == 'M' || period == 'Y')
+			this._notifyChange(inst);
+	},
+
+	/* Notify change of month/year. */
+	_notifyChange: function(inst) {
+		var onChange = this._get(inst, 'onChangeMonthYear');
+		if (onChange)
+			onChange.apply((inst.input ? inst.input[0] : null),
+				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+	},
+
+	/* Determine the number of months to show. */
+	_getNumberOfMonths: function(inst) {
+		var numMonths = this._get(inst, 'numberOfMonths');
+		return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
+	},
+
+	/* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */
+	_getMinMaxDate: function(inst, minMax, checkRange) {
+		var date = this._determineDate(this._get(inst, minMax + 'Date'), null);
+		return (!checkRange || !inst.rangeStart ? date :
+			(!date || inst.rangeStart > date ? inst.rangeStart : date));
+	},
+
+	/* Find the number of days in a given month. */
+	_getDaysInMonth: function(year, month) {
+		return 32 - new Date(year, month, 32).getDate();
+	},
+
+	/* Find the day of the week of the first of a month. */
+	_getFirstDayOfMonth: function(year, month) {
+		return new Date(year, month, 1).getDay();
+	},
+
+	/* Determines if we should allow a "next/prev" month display change. */
+	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+		var numMonths = this._getNumberOfMonths(inst);
+		var date = this._daylightSavingAdjust(new Date(
+			curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1));
+		if (offset < 0)
+			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+		return this._isInRange(inst, date);
+	},
+
+	/* Is the given date in the accepted range? */
+	_isInRange: function(inst, date) {
+		// during range selection, use minimum of selected date and range start
+		var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(
+			new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay)));
+		newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate);
+		var minDate = newMinDate || this._getMinMaxDate(inst, 'min');
+		var maxDate = this._getMinMaxDate(inst, 'max');
+		return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));
+	},
+
+	/* Provide the configuration settings for formatting/parsing. */
+	_getFormatConfig: function(inst) {
+		var shortYearCutoff = this._get(inst, 'shortYearCutoff');
+		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+		return {shortYearCutoff: shortYearCutoff,
+			dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
+			monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
+	},
+
+	/* Format the given date for display. */
+	_formatDate: function(inst, day, month, year) {
+		if (!day) {
+			inst.currentDay = inst.selectedDay;
+			inst.currentMonth = inst.selectedMonth;
+			inst.currentYear = inst.selectedYear;
+		}
+		var date = (day ? (typeof day == 'object' ? day :
+			this._daylightSavingAdjust(new Date(year, month, day))) :
+			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+		return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
+	}
+});
+
+/* jQuery extend now ignores nulls! */
+function extendRemove(target, props) {
+	$.extend(target, props);
+	for (var name in props)
+		if (props[name] == null || props[name] == undefined)
+			target[name] = props[name];
+	return target;
+};
+
+/* Determine whether an object is an array. */
+function isArray(a) {
+	return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
+		(a.constructor && a.constructor.toString().match(/\Array\(\)/))));
+};
+
+/* Invoke the datepicker functionality.
+   @param  options  string - a command, optionally followed by additional parameters or
+                    Object - settings for attaching new datepicker functionality
+   @return  jQuery object */
+$.fn.datepicker = function(options){
+
+	/* Initialise the date picker. */
+	if (!$.datepicker.initialized) {
+		$(document).mousedown($.datepicker._checkExternalClick).
+			find('body').append($.datepicker.dpDiv);
+		$.datepicker.initialized = true;
+	}
+
+	var otherArgs = Array.prototype.slice.call(arguments, 1);
+	if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate'))
+		return $.datepicker['_' + options + 'Datepicker'].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
+		return $.datepicker['_' + options + 'Datepicker'].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	return this.each(function() {
+		typeof options == 'string' ?
+			$.datepicker['_' + options + 'Datepicker'].
+				apply($.datepicker, [this].concat(otherArgs)) :
+			$.datepicker._attachDatepicker(this, options);
+	});
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.7.2";
+
+// Workaround for #4055
+// Add another global to avoid noConflict issues with inline event handlers
+window.DP_jQuery = $;
+
+})(jQuery);