User:TheCatalyst31/AddCommonsCatLinks.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <nowiki>
//copy of [[User:Dudemanfellabra/AddCommonsCatLinks.js]] by way of [[User:84/nrhp-chrome/AddCommonsCatLinks.js]]

// global vars
var thiswikitext=""
var Rows=[];
var HTMLRows=[];
var Matches=[];
var FileMatches=[];
var FileSuggestions=[];
var refnum=[];
var currentRow=0
var MatchesFound=false
var InvalidCatImage=false
var globvars = mw.config.get([
    'wgPageName',
    'wgNamespaceNumber',
    'wgContentLanguage',
    'wgUserLanguage'
]);

var RegisterTable = {
    "ar":{ // Arabic
        "Algeria":{
            "TopCatName":"Category:Cultural_monuments_in_Algeria_with_known_IDs",
            "RowTemplate":"صف معلم الجزائر",
            "PropertyNameParam":"اسم",
            "IdentifierName":"رقم",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"صورة",
            "Unverified":true
        },
        "Jordan":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Jordan_with_known_IDs",
            "RowTemplate":"معلم الأردن",
            "PropertyNameParam":"اسم",
            "IdentifierName":"رقم",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"صورة",
            "Unverified":true
        }
    },
    "az":{ // Azerbaijani
        "Azerbaijan":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Azerbaijan_with_known_IDs",
            "RowTemplate":"AZE Monument row",
            "PropertyNameParam":"name",
            "IdentifierName":"ID",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":true
        }
    },
    "be-x-old":{ // Belarusian
        "Belarus":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Belarus_with_known_IDs",
            "RowTemplate":"Вікі любіць славутасьці/Элемэнт сьпісу",
            "PropertyNameParam":"назва",
            "IdentifierName":"шыфр",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"выява",
            "Unverified":true
        }
    },
    "ca":{ // Catalan
        "Andorra":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Andorra_with_known_IDs",
            "RowTemplate":"Filera BIC And",
            "PropertyNameParam":"nom",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"imatge",
            "Unverified":true
        },
        "France":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_France_with_known_IDs",
            "RowTemplate":"Filera MH",
            "PropertyNameParam":"nom",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"imatge",
            "Unverified":true
        },
        "Spain":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Spain_with_known_IDs",
            "RowTemplate":"Filera BIC",
            "PropertyNameParam":"nom",
            "IdentifierName":"bic",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"imatge",
            "Unverified":true
        },
        "Spain - Catalonia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Spain_with_known_IDs",
            "RowTemplate":"Filera IPA",
            "PropertyNameParam":"nom",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"imatge",
            "Unverified":true
        },
        "Spain - Catalonia - WLPA":{
            "TopCatName":"Category:Public_art_in_Spain_with_known_IDs",
            "RowTemplate":"Filera art públic",
            "PropertyNameParam":"nom",
            "IdentifierName":"codi",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"imatge",
            "Unverified":true
        },
        "Spain - Valencia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Spain_with_known_IDs",
            "RowTemplate":"Filera BIC Val",
            "PropertyNameParam":"nom",
            "IdentifierName":"bic",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"imatge",
            "Unverified":true
        }
    },
    "cs":{ // Czech
        "Czech Republic":{
            "TopCatName":"Category:Cultural_monuments_in_the_Czech_Republic_with_known_IDs",
            "RowTemplate":"Památky v Česku",
            "PropertyNameParam":"Název",
            "IdentifierName":"Id_objektu",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commons",
            "ImageParam":"Obrázek",
            "Unverified":false
        }
    },
    "da":{ // Danish
        "Denmark Archaeological monuments":{
            "TopCatName":"Category:Archaeological_monuments_in_Denmark_with_known_IDs",
            "RowTemplate":"Tabelrække FF",
            "PropertyNameParam":"stednavn",
            "IdentifierName":"systemnummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"billede",
            "Unverified":true
        },
        "Denmark Listed buildings":{
            "TopCatName":"Category:Listed_buildings_in_Denmark_with_known_IDs",
            "RowTemplate":"Tabelrække FBB",
            "PropertyNameParam":"betegnelse",
            "IdentifierName":["kommunenr","ejendomsnr","bygningsnr"], // "bygningsnr" has default value 1
            "CombineIdentifiers":true,
            "CombineWith":"-",
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"billede",
            "Unverified":true
        }
    },
    "de":{ // German
        "Austria":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Austria_with_known_IDs",
            "RowTemplate":"Denkmalliste Österreich Tabellenzeile",
            "PropertyNameParam":"Name",
            "IdentifierName":"ObjektID",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Austria 2":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Austria_with_known_IDs",
            "RowTemplate":"Denkmalliste Österreich Tabellenzeile \\(ehemaliges Denkmal\\)", // must escape parentheses for regex
            "PropertyNameParam":"Name",
            "IdentifierName":"ObjektID",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Austria 3":{
            "TopCatName":"Category:Natural_monuments_in_Austria_with_known_ID",
            "RowTemplate":"Naturdenkmal Österreich Tabellenzeile",
            "PropertyNameParam":"Name",
            "IdentifierName":"ID",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Austria - WLPA":{
            "TopCatName":"Category:Public_art_in_Austria_with_known_IDs",
            "RowTemplate":"WLPA-AT-Zeile",
            "PropertyNameParam":"Name",
            "IdentifierName":"ID",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":true
        },
        "Germany - Bavaria":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Bavaria_with_known_IDs",
            "RowTemplate":"Tabellenzeile Baudenkmal Bayern",
            "PropertyNameParam":"Adresse",
            "IdentifierName":"Nummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild",
            "Unverified":false
        },
        "Germany - Bavaria3":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Bavaria_with_known_IDs",
            "RowTemplate":"Denkmalliste Bayern Tabellenzeile",
            "PropertyNameParam":"Adresse",
            "IdentifierName":"Nummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild",
            "Unverified":false
        },
        "Germany - Bavaria2":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Bavaria_with_known_IDs",
            "RowTemplate":"Tabellenzeile Bodendenkmal Bayern",
            "PropertyNameParam":"Adresse",
            "IdentifierName":"Nummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild",
            "Unverified":false
        },
        "Germany - Hesse":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Hesse_with_known_IDs",
            "RowTemplate":"Denkmalliste Hessen Tabellenzeile",
            "PropertyNameParam":"Bezeichnung",
            "IdentifierName":"Nummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild", // also "Bild2", "Bild3", but I think those wouldn't be used unless 1 was.. leaving them out for now
            "Unverified":false
        },
        "Germany - North Rhine-Westphalia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_NRW_with_known_ID",
            "RowTemplate":"Denkmalliste1 Tabellenzeile",
            "PropertyNameParam":"Bezeichnung",
            "IdentifierName":"Nummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild",
            "Unverified":false
        },
        "Germany - North Rhine-Westphalia - Bergheim":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Bergheim_with_known_ID",
            "RowTemplate":"Denkmalliste Bergheim Tabellenzeile",
            "PropertyNameParam":"Bezeichnung",
            "IdentifierName":"Nummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild",
            "Unverified":false
        },
        "Germany - North Rhine-Westphalia - Cologne":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Cologne_with_known_ID",
            "RowTemplate":"Denkmalliste Köln Tabellenzeile",
            "PropertyNameParam":"Bezeichnung",
            "IdentifierName":"Nummer_Denkmalliste",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild",
            "Unverified":false
        },
        "Germany - Saxony":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Saxony_with_known_ID",
            "RowTemplate":"Denkmalliste Sachsen Tabellenzeile",
            "PropertyNameParam":"Name",
            "IdentifierName":"ID",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Bild",
            "Unverified":false
        },
        "Italy - South Tyrol":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_South_Tyrol_with_known_IDs",
            "RowTemplate":"Denkmalliste Südtirol Tabellenzeile",
            "PropertyNameParam":"Name",
            "IdentifierName":"ObjektID",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Malta":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Malta_with_known_IDs",
            "RowTemplate":"Denkmalliste Malta Tabellenzeile",
            "PropertyNameParam":"Name-de",
            "IdentifierName":"Inventarnummer",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat", // not in use
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Slovakia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Slovakia_with_known_IDs",
            "RowTemplate":"Denkmalliste Slowakei Tabellenzeile",
            "PropertyNameParam":"Name",
            "IdentifierName":"ObjektID",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Switzerland":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"Denkmalliste Schweiz Tabellenzeile",
            "PropertyNameParam":["Anzeige-Objekt","Objekt"],
            "IdentifierName":"KGS-Nr",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Switzerland2":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"Denkmalliste2 Schweiz Tabellenzeile",
            "PropertyNameParam":["Anzeige-Objekt","Objekt"],
            "IdentifierName":["Region-ISO","ID"],
            "CombineIdentifiers":true,
            "CombineWith":"/",
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Switzerland3":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"Denkmalliste2 Schweiz-ZH Tabellenzeile",
            "PropertyNameParam":["Anzeige-Objekt","Objekt"],
            "IdentifierName":["Region-ISO","ID"],
            "CombineIdentifiers":true,
            "CombineWith":"/",
            "CommonscatParam":"Commonscat",
            "ImageParam":"Foto",
            "Unverified":false
        },
        "Switzerland4":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"Kulturgüter Schweiz Tabellenzeile",
            "PropertyNameParam":"Name",
            "IdentifierName":"KGS-Nr",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat", // not in use
            "ImageParam":"Foto",
            "Unverified":false
        }
    },
    "en":{ // English
        "Antarctica":{
            "TopCatName":"Category:Antarctic_Protected_Areas_with_known_IDs",
            "RowTemplate":"Antarctic Protected Area row",
            "PropertyNameParam":"name",
            "IdentifierName":["type","number"],
            "CombineIdentifiers":true,
            "CombineWith":"-",
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Aruba":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Aruba_with_known_IDs",
            "RowTemplate":"Table row Aruba monuments",
            "PropertyNameParam":"descr_en",
            "IdentifierName":"objcode",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Belgium - Flemish Region":{
            "TopCatName":"Category:Onroerend_erfgoed_with_known_IDs",
            "RowTemplate":"Table row BE",
            "PropertyNameParam":"descr_en",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Belgium - Wallonia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Wallonia_with_known_IDs",
            "RowTemplate":"Table row Wallonia",
            "PropertyNameParam":"descr_en",
            "IdentifierName":["niscode","objcode"],
            "CombineIdentifiers":true,
            "CombineWith":"-",
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Canada":{
            "TopCatName":"Category:Heritage_properties_in_Canada_with_known_IDs",
            "RowTemplate":"HPC row",
            "PropertyNameParam":"name",
            "IdentifierName":["idf","idp","idm"],
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "China":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_China_with_known_IDs",
            "RowTemplate":"NHS China row",
            "PropertyNameParam":"site",
            "IdentifierName":"designation",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Ghana":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Ghana_with_known_IDs",
            "RowTemplate":"Ghana Monument row",
            "PropertyNameParam":"name",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Hong Kong - Declared Monuments":{
            "TopCatName":"Category:Declared_monuments_of_Hong_Kong_with_known_IDs",
            "RowTemplate":"HK Declared Monument row",
            "PropertyNameParam":"name",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Hong Kong - Historic Buildings":{
            "TopCatName":"Category:Historic_buildings_of_Hong_Kong_with_known_IDs",
            "RowTemplate":"HK Historic Building row",
            "PropertyNameParam":"name",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "India":{
            "TopCatName":"Category:ASI_monuments_with_known_ID's",
            "RowTemplate":"ASI Monument row",
            "PropertyNameParam":"description",
            "IdentifierName":"number",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Israel - WLPA":{
            "TopCatName":"Category:Public_art_in_Israel_with_known_IDs",
            "RowTemplate":"Public art in Israel - row",
            "PropertyNameParam":"title",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Japan":{
            "TopCatName":"Category:National_historic_sites_of_Japan_with_known_IDs",
            "RowTemplate":"NHS Japan row",
            "PropertyNameParam":"name",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Kenya":{
            "TopCatName":"Category:Kenya_Monuments_with_known_IDs",
            "RowTemplate":"Kenya Monument row",
            "PropertyNameParam":"name",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Nepal":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Nepal_with_known_IDs",
            "RowTemplate":"Nepal Monument row",
            "PropertyNameParam":"description",
            "IdentifierName":"number",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Pakistan":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Pakistan_with_known_IDs",
            "RowTemplate":"PKmonument row",
            "PropertyNameParam":"description",
            "IdentifierName":"number",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Philippines":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_the_Philippines_with_known_IDs",
            "RowTemplate":"Philippine cultural property row",
            "PropertyNameParam":"site_name",
            "IdentifierName":"cp-wmph-id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "South Africa":{
            "TopCatName":"Category:South_Africa_Heritage_Resources_with_known_IDs",
            "RowTemplate":"SAHRA heritage site row",
            "PropertyNameParam":"Site_name",
            "IdentifierName":"SiteReference",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "Switzerland":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"SIoCPoNaRS row",
            "PropertyNameParam":"name",
            "IdentifierName":"KGS_nr",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "UK - England":{
            "TopCatName":"Category:Listed_buildings_in_England_with_known_IDs",
            "RowTemplate":"EH listed building row",
            "PropertyNameParam":"name",
            "IdentifierName":"uid",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "UK - Wales":{
            "TopCatName":"Category:Listed_buildings_in_Wales_with_known_IDs",
            "RowTemplate":"Cadw listed building row",
            "PropertyNameParam":"name",
            "IdentifierName":"hb",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "UK - Wales - Cardiff":{
            "TopCatName":"Category:Listed_buildings_in_Wales_with_known_IDs",
            "RowTemplate":"Cardiff listed building row",
            "PropertyNameParam":"name",
            "IdentifierName":"hb",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "UK - Scotland":{
            "TopCatName":"Category:Listed_buildings_in_Scotland_with_known_IDs",
            "RowTemplate":"HS listed building row",
            "PropertyNameParam":"name",
            "IdentifierName":"hb",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "UK - Northern Ireland":{
            "TopCatName":"Category:Listed_buildings_in_Northern_Ireland_with_known_IDs",
            "RowTemplate":"NIEA listed building row",
            "PropertyNameParam":"address",
            "IdentifierName":"hb",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "US NRHP":{
            "TopCatName":"Category:National_Register_of_Historic_Places_with_known_IDs",
            "RowTemplate":"NRHP row",
            "PropertyNameParam":"name",
            "IdentifierName":"refnum",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        },
        "US - CA":{
            "TopCatName":"Category:California_Historical_Landmarks_with_known_IDs",
            "RowTemplate":"CHL row",
            "PropertyNameParam":"name",
            "IdentifierName":"refnum",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":false
        }
    },
    "es":{ // Spanish
        "Argentina":{
            "TopCatName":"Category:Monuments_in_Argentina_with_known_IDs",
            "RowTemplate":"MonumentoArgentina",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Bolivia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Bolivia_with_known_IDs",
            "RowTemplate":"MonumentoBolivia",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría",
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Chile":{
            "TopCatName":"Category:National_monuments_in_Chile_with_known_IDs",
            "RowTemplate":"MonumentoChile",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría",
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Colombia":{
            "TopCatName":"Category:National_monuments_in_Colombia_with_known_IDs",
            "RowTemplate":"MonumentoColombia",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría",
            "ImageParam":"imagen",
            "Unverified":true
        },
        "El Salvador":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_El_Salvador_with_known_IDs",
            "RowTemplate":"MonumentoElSalvador",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría",
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Mexico":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Mexico_with_known_IDs",
            "RowTemplate":"MonumentoMéxico",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría",
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Panama":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Panama_with_known_IDs",
            "RowTemplate":"Fila PCN",
            "PropertyNameParam":"nombre",
            "IdentifierName":"registro",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría", // not in use
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Spain":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Spain_with_known_IDs",
            "RowTemplate":"Fila BIC",
            "PropertyNameParam":"nombre",
            "IdentifierName":"bic",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría", // not in use
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Uruguay":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Uruguay_with_known_IDs",
            "RowTemplate":"MonumentoUruguay",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría", // not in use
            "ImageParam":"imagen",
            "Unverified":true
        },
        "Venezuela":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Venezuela_with_known_IDs",
            "RowTemplate":"MonumentoVenezuela",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"monumento_categoría",
            "ImageParam":"imagen",
            "Unverified":true
        }
    },
    "et":{ // Estonian
        "Estonia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Estonia_(with_known_IDs)",
            "RowTemplate":"KRR rida",
            "PropertyNameParam":"nimi",
            "IdentifierName":"number",
            "CombineIdentifiers":false,
            "CommonscatParam":"commons", // exists but doesn't include ":commons:Category:"
            "ImageParam":"pilt",
            "Unverified":true
        }
    },
    "fi":{ // Finnish
        "Finland - WLPA":{
            "TopCatName":"Category:Public_art_in_Finland_with_known_IDs",
            "RowTemplate":"Wlpa-teokset-rivi",
            "PropertyNameParam":"nimi",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"kuva",
            "Unverified":true
        }
    },
    "fr":{ // French
        "Belgium - Flemish Region":{
            "TopCatName":"Category:Onroerend_erfgoed_with_known_IDs",
            "RowTemplate":"Ligne de tableau MH-Fla",
            "PropertyNameParam":["nom_objet","nom object","monument"],
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"catégorie commons",
            "ImageParam":"image",
            "Unverified":true
        },
        "Belgium - Wallonia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Wallonia_with_known_IDs",
            "RowTemplate":"Ligne de tableau MH-Wal",
            "PropertyNameParam":["nom objet","monument","nom_objet"],
            "IdentifierName":["id commune","id_commune","CLT/PEX","id objet","id_objet"],
            "CombineIdentifiers":true,
            "CombineWith":"-",
            "CommonscatParam":"catégorie commons",
            "ImageParam":"image",
            "Unverified":true
        },
        "Canada":{
            "TopCatName":"Category:Heritage_properties_in_Canada_with_known_IDs",
            "RowTemplate":"Ligne de tableau LPC",
            "PropertyNameParam":"lieu",
            "IdentifierName":"numéro",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"image",
            "Unverified":true
        },
        "Cameroon":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Cameroon_with_known_IDs",
            "RowTemplate":"Monument Cameroun ligne",
            "PropertyNameParam":"nom",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":true
        },
        "France":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_France_with_known_IDs",
            "RowTemplate":"Ligne de tableau MH",
            "PropertyNameParam":"monument",
            "IdentifierName":"notice",
            "CombineIdentifiers":false,
            "CommonscatParam":"catégorie commons",
            "ImageParam":"image",
            "Unverified":true
        },
        "Switzerland":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"Ligne de tableau Monuments (Suisse)",
            "PropertyNameParam":"objet",
            "IdentifierName":"no PBC",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"photo",
            "Unverified":true
        },
        "Tunisia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Tunisia_with_known_IDs",
            "RowTemplate":"Ligne de tableau monument Tunisie",
            "PropertyNameParam":"monument",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":true
        }
    },
    "gl":{ // Galician
        "Spain":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Spain_with_known_IDs",
            "RowTemplate":"BIC",
            "PropertyNameParam":"nomeoficial",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"imaxe",
            "Unverified":true
        }
    },
    "he":{ // Hebrew
        "Israel":{
            "TopCatName":"Category:Heritage_sites_in_Israel_with_known_IDs",
            "RowTemplate":"אתר מורשת בישראל בשורה",
            "PropertyNameParam":"שם אתר",
            "IdentifierName":"מספר אתר",
            "CombineIdentifiers":false,
            "CommonscatParam":"קטגוריה בוויקישיתוף",
            "ImageParam":"תמונה",
            "Unverified":true
        }
    },
    "hu":{ // Hungarian
        "Hungary":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Hungary_with_known_IDs",
            "RowTemplate":"Műemlék",
            "PropertyNameParam":"megnevezés",
            "IdentifierName":"azonosító",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonskat",
            "ImageParam":"kép",
            "Unverified":true
        }
    },
    "hy":{ // Armenian
        "Armenia":{
            "TopCatName":"Cultural_heritage_monuments_in_Armenia_with_known_IDs",
            "RowTemplate":"Հուշարձան ցանկ",
            "PropertyNameParam":"հուշարձան",
            "IdentifierName":"համարանիշ",
            "CombineIdentifiers":false,
            "CommonscatParam":"վիքիպահեստ", // not in use
            "ImageParam":"պատկեր",
            "Unverified":true
        }
    },
    "it":{ // Italian
        "Italy":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Italy_with_known_IDs",
            "RowTemplate":"WLM2013-riga",
            "PropertyNameParam":"monumento",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"immagine",
            "Unverified":true
        },
        "Switzerland":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"Riga della tabella dei beni culturali (Svizzera)",
            "PropertyNameParam":["oggetto-visualizzato","oggetto"],
            "IdentifierName":"no PBC",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"foto",
            "Unverified":true
        },
        "Switzerland2":{
            "TopCatName":"Category:Cultural_properties_of_national_significance_in_Switzerland_with_known_IDs",
            "RowTemplate":"SIoCPoNaRS row",
            "PropertyNameParam":"name",
            "IdentifierName":"KGS_nr",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"image",
            "Unverified":true
        }
    },
    "nl":{ // Dutch
        "Aruba":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Aruba_with_known_IDs",
            "RowTemplate":"Tabelrij monument Aruba",
            "PropertyNameParam":"omschrijving",
            "IdentifierName":"objectnr",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":true
        },
        "Belgium - Brussels":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Brussels_with_known_IDs",
            "RowTemplate":"Tabelrij erfgoed Brussels Hoofdstedelijk Gewest",
            "PropertyNameParam":"omschrijving",
            "IdentifierName":"code",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"image",
            "Unverified":true
        },
        "Belgium - Flemish Region":{
            "TopCatName":"Category:Onroerend_erfgoed_with_known_IDs",
            "RowTemplate":"Tabelrij erfgoed Vlaanderen",
            "PropertyNameParam":"objectnaam",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"image",
            "Unverified":true
        },
        "Belgium - Wallonia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Wallonia_with_known_IDs",
            "RowTemplate":"Tabelrij erfgoed Wallonië",
            "PropertyNameParam":"descr_nl",
            "IdentifierName":["niscode","objcode"],
            "CombineIdentifiers":true,
            "CombineWith":"-",
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"image",
            "Unverified":true
        },
        "Netherlands - Gemeentelijke monumenten":{
            "TopCatName":"Category:Gemeentelijke_monumenten_with_known_IDs",
            "RowTemplate":"Tabelrij gemeentelijk monument",
            "PropertyNameParam":"object",
            "IdentifierName":["gemcode","objnr"],
            "CombineIdentifiers":true,
            "CombineWith":"/",
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":true
        },
        "Netherlands - Provinciale monumenten":{
            "TopCatName":"Category:Provinciale_monumenten_with_known_IDs",
            "RowTemplate":"Tabelrij provinciaal monument",
            "PropertyNameParam":"object",
            "IdentifierName":"objnr",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":true
        },
        "Netherlands - Rijksmonumenten":{
            "TopCatName":"Category:Rijksmonumenten_with_known_IDs",
            "RowTemplate":"Tabelrij rijksmonument",
            "PropertyNameParam":"objectnaam",
            "IdentifierName":"objrijksnr",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"image",
            "Unverified":true
        }
    },
    "no":{ // Norwegian
        "Norway":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Norway_with_known_IDs",
            "RowTemplate":"Kulturminner row",
            "PropertyNameParam":"navn",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"bilde",
            "Unverified":true
        }
    },
    "pl":{ // Polish
        "Poland":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Poland_with_known_IDs",
            "RowTemplate":"Zabytki/wpis",
            "PropertyNameParam":"nazwa",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commons",
            "ImageParam":"zdjęcie",
            "Unverified":true
        }
    },
    "pt":{ // Portuguese
        "Portugal":{
            "TopCatName":"Category:IGESPAR_with_known_IDs",
            "RowTemplate":"IGESPAR/linha",
            "PropertyNameParam":"designacoes",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"imagem",
            "Unverified":true
        }
    },
    "ro":{ // Romanian
        "Romania":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Romania_with_known_IDs",
            "RowTemplate":"ElementLMI",
            "PropertyNameParam":"Denumire",
            "IdentifierName":"Cod",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commons",
            "ImageParam":"Imagine",
            "Unverified":true
        }
    },
    "ru":{ // Russian
        "Russia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Russia_with_known_IDs",
            "RowTemplate":"WLM/строка",
            "PropertyNameParam":"название",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"фото",
            "Unverified":true
        },
        "Russia - St. Petersburg":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Russia_with_known_IDs",
            "RowTemplate":"ПамАрх row",
            "PropertyNameParam":"имя",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"изображение",
            "Unverified":true
        }
    },
    "sk":{ // Slovak
        "Slovakia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Slovakia_with_known_IDs",
            "RowTemplate":"Monuments tableline-SK",
            "PropertyNameParam":"Názov",
            "IdentifierName":"IDobjektu",
            "CombineIdentifiers":false,
            "CommonscatParam":"Commonscat",
            "ImageParam":"Fotka",
            "Unverified":true
        }
    },
    "sr":{ // Serbian
        "Serbia":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Serbia_with_known_IDs",
            "RowTemplate":"Споменици ред",
            "PropertyNameParam":"Назив",
            "IdentifierName":"ИД",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"Слика",
            "Unverified":true
        }
    },
    "sv":{ // Swedish
        "Sweden - Archaeological monuments":{
            "TopCatName":"Category:Archaeological_monuments_in_Sweden_with_known_IDs",
            "RowTemplate":"FMIS",
            "PropertyNameParam":"namn",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"bild",
            "Unverified":true
        },
        "Sweden - Listed historical ships":{
            "TopCatName":"Category:Listed_historical_ships_in_Sweden_with_known_IDs",
            "RowTemplate":"K-fartyg",
            "PropertyNameParam":"namn",
            "IdentifierName":"signal",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"bild",
            "Unverified":true
        },
        "Sweden - Protected buildings":{
            "TopCatName":"Category:Protected_buildings_in_Sweden_with_known_IDs",
            "RowTemplate":"BBR",
            "PropertyNameParam":"namn",
            "IdentifierName":"bbr",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"bild",
            "Unverified":true
        },
        "Sweden - Working Life Museums":{
            "TopCatName":"Category:Working_Life_Museums_in_Sweden_with_known_IDs",
            "RowTemplate":"Arbetslivsmuseum",
            "PropertyNameParam":"namn",
            "IdentifierName":"id",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat",
            "ImageParam":"bild",
            "Unverified":true
        }
    },
    "th":{ // Thai
        "Thailand":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Thailand_with_known_IDs",
            "RowTemplate":"แถวโบราณสถาน",
            "PropertyNameParam":"ชื่อ",
            "IdentifierName":"ทะเบียน",
            "CombineIdentifiers":false,
            "CommonscatParam":"commonscat", // not in use
            "ImageParam":"ภาพ",
            "Unverified":true
        }
    },
    "uk":{ // Ukrainian
        "Ukraine":{
            "TopCatName":"Category:Cultural_heritage_monuments_in_Ukraine_with_known_IDs",
            "RowTemplate":"ВЛП-рядок",
            "PropertyNameParam":"назва",
            "IdentifierName":"ID",
            "CombineIdentifiers":false,
            "CommonscatParam":"галерея",
            "ImageParam":"фото",
            "Unverified":true
        }
    }
}
var ThisRegisterTable = {}

var GUIMessages= {
    "cs":{ // Czech
        "ButtonText":"Hledej v Commons chybějící obrázky a kategorie",
        "RowMismatch":"Chybné vyznačení řádků! Pravděpodobně je nesprávně formátovaná řádková šablona. Všechny řádkové šablony musejí obsahovat class='vcard', aby je skript mohl identifikovat. Pokud řádkové šablony použité na této stránce obsahují class='vcard', dejte mi zprávu na en:User_talk:Dudemanfellabra a já se pokusím problém vyřešit. Skript se nyní sám ukončí. Omlouvám se!",
        "MalformedRow":"Chybné vyznačení řádků! Pravděpodobně je nesprávně formátovaná některá řádková šablona ve zdrojovém wikikódu, například chybí ukončovací }} nebo je chybně vyznačen HTML komentář. Pokud se vám na této stránce nedaří nalézt chybu nebo se domníváte, že příčina je jiná, dejte mi zprávu na :en:User_talk:Dudemanfellabra a já se pokusím problém vyřešit. Skript se nyní sám ukončí. Omlouvám se!",
        "CheckingMatches":"Hledám odkazy k přidání…",
        "EditSummary":"[[:en:User:Dudemanfellabra/AddCommonsCatLinks|Poloautomatické]] přidání obrázku(-ů) a/nebo odkazu(-ů) commonscat do seznamu",
        "NoneFound":"Nebyl nalezen žádný odkaz k přídání. Skript byl ukončen.",
        "Found":"Nalezeny odkazy k přidání!",
        "Invalid":"Odkazovaný obrázek a/nebo kategorie v projektu Commons neexistují. Můžete vybrat jiný odkaz k jejich nahrazení. Pokud chcete ponechat stávající odkazy, zvolte 'Nepřidávat žádný obrázek/kategorii.'",
        "FollowingImages":"K objektu „NAME“ byly nalezeny tyto obrázky:",
        "SelectOne":"Vyber k přidání:",
        "DontAddImage":"Nepřidávat žádný obrázek",
        "OtherSuggested":"Další doporučené obrázky k objektu „NAME“ z odpovídajících kategorií:",
        "Suggested":"Doporučené obrázky k objektu „NAME“ z odpovídajících kategorií:",
        "From":"z CATNAME",
        "FollowingCats":"K objektu „NAME“ byly nalezeny tyto kategorie:",
        "DontAddCat":"Nepřídávat žádnou kategorii",
        "SelectButton":"Vybrat",
        "Done":"Hotovo!<br>Edituji stránku…",
        "SuccessfulEdit":"Hotovo! Pro zobrazení výsledku obnovte stránku!",
        "FailedEdit":"Uložení selhalo, editační filtr hlásí chybu.",
        "LeavePage":"Opravdu chcete opustit tuto stránku? Kategorie/soubory, které jste přidal/a, nebudou uloženy!"
    },
    "de":{ // German
        "ButtonText":"Commons nach Bildern und Kategorien durchsuchen",
        "RowMismatch":"Zeilenfehler! Dies kommt möglicherweise von einer falsch formatierten Zeilenvorlage. Alle Zeilenvorlagen müssen class='vcard' enthalten, damit das Skript sie identifizieren kann. Sollte {{ROWTEMPLATE}} class='vcard' beinhalten, bitte ich um eine Nachricht auf :en:User_talk:Dudemanfellabra, und ich werde versuchen, das Problem zu beheben. Das Skript wird jetzt beendet.",
        "MalformedRow":"Row mismatch! This is probably due to an incorrectly formatted row template in the wikicode, e.g. a missing }} or a misplaced HTML comment. If you cannot find the error on this page or believe it is due to something else, please let me know at :en:User_talk:Dudemanfellabra, and I will try to resolve the problem. The script will now exit itself. Sorry!",
        "CheckingMatches":"Nach Übereinstimmungen suchen ...",
        "EditSummary":"[[:en:User:Dudemanfellabra/AddCommonsCatLinks|Halbautomatisches]] Hinzufügen von Bildern und/oder Commonskategorien zur Denkmalliste",
        "NoneFound":"Keine Übereinstimmungen gefunden oder selektiert. Das Skript wurde beendet.",
        "Found":"Übereinstimmungen gefunden!",
        "Invalid":"The existing image and/or category cannot be found on Commons. Selecting a match here will replace the existing one(s). If you do not want to replace anything, choose Keine Kategorie/Bild hinzufügen.",
        "FollowingImages":"NAME stimmt mit folgenden Bildern überein:",
        "SelectOne":"Zum Hinzufügen auswählen:",
        "DontAddImage":"Kein Bild hinzufügen",
        "OtherSuggested":"Andere mögliche Bilder für NAME aus der gefundenen oder bereits existierenden Kategorie:",
        "Suggested":"Mögliche Bilder für NAME aus der gefundenen oder bereits existierenden Kategorie:",
        "From":"aus CATNAME",
        "FollowingCats":"NAME passt auf folgende Kategorien:",
        "DontAddCat":"Keine Kategorie hinzufügen",
        "SelectButton":"Auswählen",
        "Done":"Fast fertig!<br>Artikel wird bearbeitet ...",
        "SuccessfulEdit":"Fertig! Seite neu laden, um das Ergebnis anzusehen!",
        "FailedEdit":"Die Bearbeitung ist fehlgeschlagen.",
        "LeavePage":"Bist du sicher, dass du die Seite verlassen möchtest? Die ausgewählten Kategorien und Bilder werden nicht gespeichert!"
    },
    "en":{ // English
        "ButtonText":"Check Commons for images and categories",
        "RowMismatch":"Row mismatch! This is probably due to an incorrectly formatted row template. All row templates must include class='vcard' in order for this script to identify them. If the row template(s) on this page include class='vcard', please let me know at :en:User_talk:Dudemanfellabra, and I will try to resolve the problem. The script will now exit itself. Sorry!",
        "MalformedRow":"Row mismatch! This is probably due to an incorrectly formatted row template in the wikicode, e.g. a missing }} or a misplaced HTML comment. If you cannot find the error on this page or believe it is due to something else, please let me know at :en:User_talk:Dudemanfellabra, and I will try to resolve the problem. The script will now exit itself. Sorry!",
        "CheckingMatches":"Checking for matches...",
        "EditSummary":"[[:en:User:Dudemanfellabra/AddCommonsCatLinks|Semi-automated]] addition of image(s) and/or commonscat link(s) to monument list",
        "NoneFound":"No matches found or selected. Script exited.",
        "Found":"Matches found!",
        "Invalid":"The existing image and/or category cannot be found on Commons. Selecting a match here will replace the existing one(s). If you do not want to replace anything, choose Do not add any category/image.",
        "FollowingImages":"NAME matches the following images:",
        "SelectOne":"Select one to add:",
        "DontAddImage":"Do not add any image",
        "OtherSuggested":"Other suggested images for NAME from matched or existing categories:",
        "Suggested":"Suggested images for NAME from matched or existing categories:",
        "From":"from CATNAME",
        "FollowingCats":"NAME matches the following categories:",
        "DontAddCat":"Do not add any category",
        "SelectButton":"Select",
        "Done":"Done!<br>Editing page...",
        "SuccessfulEdit":"Done! Refresh the page to see the result!",
        "FailedEdit":"The edit query returned an error.",
        "LeavePage":"Are you sure you want to leave the page? All categories/files that you have added will not be saved!"
    },
    "es":{ // Spanish
        "ButtonText":"Buscar en Commons para imagenes y categorías",
        "RowMismatch":"¡Hay un desajuste de las filas! Probablemente se debe a la plantilla de fila con formato incorrecto. Para que este script reconoce las filas, debían incluir class='vcard' en el código. Si la(s) plantilla(s) en esta página sí incluye class='vcard', por favor me envia un mensaje a :en:User_talk:Dudemanfellabra. Trataré de corregir el fallo. El script ahora se terminaré. ¡Lo siento!",
        "MalformedRow":"Row mismatch! This is probably due to an incorrectly formatted row template in the wikicode, e.g. a missing }} or a misplaced HTML comment. If you cannot find the error on this page or believe it is due to something else, please let me know at :en:User_talk:Dudemanfellabra, and I will try to resolve the problem. The script will now exit itself. Sorry!",
        "CheckingMatches":"Buscando parejas...",
        "EditSummary":"Adición [[:en:User:Dudemanfellabra/AddCommonsCatLinks|semiautomático]] de imagen(es) y/o enlace(s) a categorías de Commons a la lista de monumentos",
        "NoneFound":"Parejas no encontró o no seleccionó. Script terminó.",
        "Found":"¡Encontró parejas!",
        "Invalid":"La imágen/categoría preexistente no está en Commons. Seleccionar pareja la sustituirá por la preexistente. Si no la querías sustituir, selecciona No añade ninguna imagen/categoría.",
        "FollowingImages":"NAME es una pareja de los siguientes imágenes:",
        "SelectOne":"Elige uno para añadir:",
        "DontAddImage":"No añade ninguno imagen",
        "OtherSuggested":"Otras imágenes sugeridos de NAME de categorías encontradas o preexistentes:",
        "Suggested":"Imágenes sugeridos de NAME de categorías encontradas o preexistentes:",
        "From":"de CATNAME",
        "FollowingCats":"NAME es una pareja de los siguientes categorías:",
        "DontAddCat":"No añade ninguna categoría",
        "SelectButton":"Añade los elegidos",
        "Done":"¡Listo!<br>Editando la página...",
        "SuccessfulEdit":"¡Listo! ¡Actualiza la pagína para ver el resultado!",
        "FailedEdit":"Había un error mientras editando.",
        "LeavePage":"¿Está seguro de que quiera irse de la página? ¡Categorías/imágenes que han seleccionado no se guardarán!"
    }
}
var ThisGUIMessages = {}

var LanguageTable = {
    "ab":{"name":"Abkhaz","nativeName":"аҧсуа"},
    "aa":{"name":"Afar","nativeName":"Afaraf"},
    "af":{"name":"Afrikaans","nativeName":"Afrikaans"},
    "ak":{"name":"Akan","nativeName":"Akan"},
    "sq":{"name":"Albanian","nativeName":"Shqip"},
    "am":{"name":"Amharic","nativeName":"አማርኛ"},
    "ar":{"name":"Arabic","nativeName":"العربية"},
    "an":{"name":"Aragonese","nativeName":"Aragonés"},
    "hy":{"name":"Armenian","nativeName":"Հայերեն"},
    "as":{"name":"Assamese","nativeName":"অসমীয়া"},
    "av":{"name":"Avaric","nativeName":"авар мацӀ, магӀарул мацӀ"},
    "ae":{"name":"Avestan","nativeName":"avesta"},
    "ay":{"name":"Aymara","nativeName":"aymar aru"},
    "az":{"name":"Azerbaijani","nativeName":"azərbaycan dili"},
    "bm":{"name":"Bambara","nativeName":"bamanankan"},
    "ba":{"name":"Bashkir","nativeName":"башҡорт теле"},
    "eu":{"name":"Basque","nativeName":"euskara, euskera"},
    "be":{"name":"Belarusian","nativeName":"Беларуская"},
    "be-x-old":{"name":"Belarusian","nativeName":"Беларуская"},
    "bn":{"name":"Bengali","nativeName":"বাংলা"},
    "bh":{"name":"Bihari","nativeName":"भोजपुरी"},
    "bi":{"name":"Bislama","nativeName":"Bislama"},
    "bs":{"name":"Bosnian","nativeName":"bosanski jezik"},
    "br":{"name":"Breton","nativeName":"brezhoneg"},
    "bg":{"name":"Bulgarian","nativeName":"български език"},
    "my":{"name":"Burmese","nativeName":"ဗမာစာ"},
    "ca":{"name":"Catalan; Valencian","nativeName":"Català"},
    "ch":{"name":"Chamorro","nativeName":"Chamoru"},
    "ce":{"name":"Chechen","nativeName":"нохчийн мотт"},
    "ny":{"name":"Chichewa; Chewa; Nyanja","nativeName":"chiCheŵa, chinyanja"},
    "zh":{"name":"Chinese","nativeName":"中文 (Zhōngwén), 汉语, 漢語"},
    "cv":{"name":"Chuvash","nativeName":"чӑваш чӗлхи"},
    "kw":{"name":"Cornish","nativeName":"Kernewek"},
    "co":{"name":"Corsican","nativeName":"corsu, lingua corsa"},
    "cr":{"name":"Cree","nativeName":"ᓀᐦᐃᔭᐍᐏᐣ"},
    "hr":{"name":"Croatian","nativeName":"hrvatski"},
    "cs":{"name":"Czech","nativeName":"česky, čeština"},
    "da":{"name":"Danish","nativeName":"dansk"},
    "dv":{"name":"Divehi; Dhivehi; Maldivian;","nativeName":"ދިވެހި"},
    "nl":{"name":"Dutch","nativeName":"Nederlands, Vlaams"},
    "en":{"name":"English","nativeName":"English"},
    "eo":{"name":"Esperanto","nativeName":"Esperanto"},
    "et":{"name":"Estonian","nativeName":"eesti, eesti keel"},
    "ee":{"name":"Ewe","nativeName":"Eʋegbe"},
    "fo":{"name":"Faroese","nativeName":"føroyskt"},
    "fj":{"name":"Fijian","nativeName":"vosa Vakaviti"},
    "fi":{"name":"Finnish","nativeName":"suomi, suomen kieli"},
    "fr":{"name":"French","nativeName":"français, langue française"},
    "ff":{"name":"Fula; Fulah; Pulaar; Pular","nativeName":"Fulfulde, Pulaar, Pular"},
    "gl":{"name":"Galician","nativeName":"Galego"},
    "ka":{"name":"Georgian","nativeName":"ქართული"},
    "de":{"name":"German","nativeName":"Deutsch"},
    "el":{"name":"Greek, Modern","nativeName":"Ελληνικά"},
    "gn":{"name":"Guaraní","nativeName":"Avañeẽ"},
    "gu":{"name":"Gujarati","nativeName":"ગુજરાતી"},
    "ht":{"name":"Haitian; Haitian Creole","nativeName":"Kreyòl ayisyen"},
    "ha":{"name":"Hausa","nativeName":"Hausa, هَوُسَ"},
    "he":{"name":"Hebrew (modern)","nativeName":"עברית"},
    "hz":{"name":"Herero","nativeName":"Otjiherero"},
    "hi":{"name":"Hindi","nativeName":"हिन्दी, हिंदी"},
    "ho":{"name":"Hiri Motu","nativeName":"Hiri Motu"},
    "hu":{"name":"Hungarian","nativeName":"Magyar"},
    "ia":{"name":"Interlingua","nativeName":"Interlingua"},
    "id":{"name":"Indonesian","nativeName":"Bahasa Indonesia"},
    "ie":{"name":"Interlingue","nativeName":"Originally called Occidental; then Interlingue after WWII"},
    "ga":{"name":"Irish","nativeName":"Gaeilge"},
    "ig":{"name":"Igbo","nativeName":"Asụsụ Igbo"},
    "ik":{"name":"Inupiaq","nativeName":"Iñupiaq, Iñupiatun"},
    "io":{"name":"Ido","nativeName":"Ido"},
    "is":{"name":"Icelandic","nativeName":"Íslenska"},
    "it":{"name":"Italian","nativeName":"Italiano"},
    "iu":{"name":"Inuktitut","nativeName":"ᐃᓄᒃᑎᑐᑦ"},
    "ja":{"name":"Japanese","nativeName":"日本語 (にほんご/にっぽんご)"},
    "jv":{"name":"Javanese","nativeName":"basa Jawa"},
    "kl":{"name":"Kalaallisut, Greenlandic","nativeName":"kalaallisut, kalaallit oqaasii"},
    "kn":{"name":"Kannada","nativeName":"ಕನ್ನಡ"},
    "kr":{"name":"Kanuri","nativeName":"Kanuri"},
    "ks":{"name":"Kashmiri","nativeName":"कश्मीरी, كشميري‎"},
    "kk":{"name":"Kazakh","nativeName":"Қазақ тілі"},
    "km":{"name":"Khmer","nativeName":"ភាសាខ្មែរ"},
    "ki":{"name":"Kikuyu, Gikuyu","nativeName":"Gĩkũyũ"},
    "rw":{"name":"Kinyarwanda","nativeName":"Ikinyarwanda"},
    "ky":{"name":"Kirghiz, Kyrgyz","nativeName":"кыргыз тили"},
    "kv":{"name":"Komi","nativeName":"коми кыв"},
    "kg":{"name":"Kongo","nativeName":"KiKongo"},
    "ko":{"name":"Korean","nativeName":"한국어 (韓國語), 조선말 (朝鮮語)"},
    "ku":{"name":"Kurdish","nativeName":"Kurdî, كوردی‎"},
    "kj":{"name":"Kwanyama, Kuanyama","nativeName":"Kuanyama"},
    "la":{"name":"Latin","nativeName":"latine, lingua latina"},
    "lb":{"name":"Luxembourgish, Letzeburgesch","nativeName":"Lëtzebuergesch"},
    "lg":{"name":"Luganda","nativeName":"Luganda"},
    "li":{"name":"Limburgish, Limburgan, Limburger","nativeName":"Limburgs"},
    "ln":{"name":"Lingala","nativeName":"Lingála"},
    "lo":{"name":"Lao","nativeName":"ພາສາລາວ"},
    "lt":{"name":"Lithuanian","nativeName":"lietuvių kalba"},
    "lu":{"name":"Luba-Katanga","nativeName":""},
    "lv":{"name":"Latvian","nativeName":"latviešu valoda"},
    "gv":{"name":"Manx","nativeName":"Gaelg, Gailck"},
    "mk":{"name":"Macedonian","nativeName":"македонски јазик"},
    "mg":{"name":"Malagasy","nativeName":"Malagasy fiteny"},
    "ms":{"name":"Malay","nativeName":"bahasa Melayu, بهاس ملايو‎"},
    "ml":{"name":"Malayalam","nativeName":"മലയാളം"},
    "mt":{"name":"Maltese","nativeName":"Malti"},
    "mi":{"name":"Māori","nativeName":"te reo Māori"},
    "mr":{"name":"Marathi (Marāṭhī)","nativeName":"मराठी"},
    "mh":{"name":"Marshallese","nativeName":"Kajin M̧ajeļ"},
    "mn":{"name":"Mongolian","nativeName":"монгол"},
    "na":{"name":"Nauru","nativeName":"Ekakairũ Naoero"},
    "nv":{"name":"Navajo, Navaho","nativeName":"Diné bizaad, Dinékʼehǰí"},
    "nb":{"name":"Norwegian Bokmål","nativeName":"Norsk bokmål"},
    "nd":{"name":"North Ndebele","nativeName":"isiNdebele"},
    "ne":{"name":"Nepali","nativeName":"नेपाली"},
    "ng":{"name":"Ndonga","nativeName":"Owambo"},
    "nn":{"name":"Norwegian Nynorsk","nativeName":"Norsk nynorsk"},
    "no":{"name":"Norwegian","nativeName":"Norsk"},
    "ii":{"name":"Nuosu","nativeName":"ꆈꌠ꒿ Nuosuhxop"},
    "nr":{"name":"South Ndebele","nativeName":"isiNdebele"},
    "oc":{"name":"Occitan","nativeName":"Occitan"},
    "oj":{"name":"Ojibwe, Ojibwa","nativeName":"ᐊᓂᔑᓈᐯᒧᐎᓐ"},
    "cu":{"name":"Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic","nativeName":"ѩзыкъ словѣньскъ"},
    "om":{"name":"Oromo","nativeName":"Afaan Oromoo"},
    "or":{"name":"Oriya","nativeName":"ଓଡ଼ିଆ"},
    "os":{"name":"Ossetian, Ossetic","nativeName":"ирон æвзаг"},
    "pa":{"name":"Panjabi, Punjabi","nativeName":"ਪੰਜਾਬੀ, پنجابی‎"},
    "pi":{"name":"Pāli","nativeName":"पाऴि"},
    "fa":{"name":"Persian","nativeName":"فارسی"},
    "pl":{"name":"Polish","nativeName":"polski"},
    "ps":{"name":"Pashto, Pushto","nativeName":"پښتو"},
    "pt":{"name":"Portuguese","nativeName":"Português"},
    "qu":{"name":"Quechua","nativeName":"Runa Simi, Kichwa"},
    "rm":{"name":"Romansh","nativeName":"rumantsch grischun"},
    "rn":{"name":"Kirundi","nativeName":"kiRundi"},
    "ro":{"name":"Romanian, Moldavian, Moldovan","nativeName":"română"},
    "ru":{"name":"Russian","nativeName":"русский язык"},
    "sa":{"name":"Sanskrit (Saṁskṛta)","nativeName":"संस्कृतम्"},
    "sc":{"name":"Sardinian","nativeName":"sardu"},
    "sd":{"name":"Sindhi","nativeName":"सिन्धी, سنڌي، سندھی‎"},
    "se":{"name":"Northern Sami","nativeName":"Davvisámegiella"},
    "sm":{"name":"Samoan","nativeName":"gagana faa Samoa"},
    "sg":{"name":"Sango","nativeName":"yângâ tî sängö"},
    "sr":{"name":"Serbian","nativeName":"српски језик"},
    "gd":{"name":"Scottish Gaelic; Gaelic","nativeName":"Gàidhlig"},
    "sn":{"name":"Shona","nativeName":"chiShona"},
    "si":{"name":"Sinhala, Sinhalese","nativeName":"සිංහල"},
    "sk":{"name":"Slovak","nativeName":"slovenčina"},
    "sl":{"name":"Slovene","nativeName":"slovenščina"},
    "so":{"name":"Somali","nativeName":"Soomaaliga, af Soomaali"},
    "st":{"name":"Southern Sotho","nativeName":"Sesotho"},
    "es":{"name":"Spanish; Castilian","nativeName":"español, castellano"},
    "su":{"name":"Sundanese","nativeName":"Basa Sunda"},
    "sw":{"name":"Swahili","nativeName":"Kiswahili"},
    "ss":{"name":"Swati","nativeName":"SiSwati"},
    "sv":{"name":"Swedish","nativeName":"svenska"},
    "ta":{"name":"Tamil","nativeName":"தமிழ்"},
    "te":{"name":"Telugu","nativeName":"తెలుగు"},
    "tg":{"name":"Tajik","nativeName":"тоҷикӣ, toğikī, تاجیکی‎"},
    "th":{"name":"Thai","nativeName":"ไทย"},
    "ti":{"name":"Tigrinya","nativeName":"ትግርኛ"},
    "bo":{"name":"Tibetan Standard, Tibetan, Central","nativeName":"བོད་ཡིག"},
    "tk":{"name":"Turkmen","nativeName":"Türkmen, Түркмен"},
    "tl":{"name":"Tagalog","nativeName":"Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔"},
    "tn":{"name":"Tswana","nativeName":"Setswana"},
    "to":{"name":"Tonga (Tonga Islands)","nativeName":"faka Tonga"},
    "tr":{"name":"Turkish","nativeName":"Türkçe"},
    "ts":{"name":"Tsonga","nativeName":"Xitsonga"},
    "tt":{"name":"Tatar","nativeName":"татарча, tatarça, تاتارچا‎"},
    "tw":{"name":"Twi","nativeName":"Twi"},
    "ty":{"name":"Tahitian","nativeName":"Reo Tahiti"},
    "ug":{"name":"Uighur, Uyghur","nativeName":"Uyƣurqə, ئۇيغۇرچە‎"},
    "uk":{"name":"Ukrainian","nativeName":"українська"},
    "ur":{"name":"Urdu","nativeName":"اردو"},
    "uz":{"name":"Uzbek","nativeName":"zbek, Ўзбек, أۇزبېك‎"},
    "ve":{"name":"Venda","nativeName":"Tshivenḓa"},
    "vi":{"name":"Vietnamese","nativeName":"Tiếng Việt"},
    "vo":{"name":"Volapük","nativeName":"Volapük"},
    "wa":{"name":"Walloon","nativeName":"Walon"},
    "cy":{"name":"Welsh","nativeName":"Cymraeg"},
    "wo":{"name":"Wolof","nativeName":"Wollof"},
    "fy":{"name":"Western Frisian","nativeName":"Frysk"},
    "xh":{"name":"Xhosa","nativeName":"isiXhosa"},
    "yi":{"name":"Yiddish","nativeName":"ייִדיש"},
    "yo":{"name":"Yoruba","nativeName":"Yorùbá"},
    "za":{"name":"Zhuang, Chuang","nativeName":"Saɯ cueŋƅ, Saw cuengh"}
}

function FindCommonsCatButton() {
    if (location.href.indexOf('action')!=-1||location.href.indexOf('.js')!=-1||globvars.wgNamespaceNumber==10||globvars.wgNamespaceNumber==11) return
    if (!RegisterTable[globvars.wgContentLanguage]) return

    thiswikitext=getThisWikitext(globvars.wgPageName)
    if (thiswikitext=="error"||thiswikitext=="") return

    // don't match rows inside nowiki or pre tags
    var testtext=thiswikitext.replace(/<[ ]*?(nowiki|pre)[ ]*?>(.|\n)*?<[ ]*?\/[ ]*?(nowiki|pre)[ ]*?>/gi, "")
    var match=0
    for (var r in RegisterTable[globvars.wgContentLanguage]) {
        var regex = new RegExp("{{[\\s]*"+RegisterTable[globvars.wgContentLanguage][r].RowTemplate+"(\\s)*\\|", "g")
        if (testtext.search(regex)!=-1) match++
    }
    if (match==0) return

    if (!GUIMessages[globvars.wgUserLanguage]) {           // default to contentLanguage GUI if userLanguage is not yet supported
        if (!GUIMessages[globvars.wgContentLanguage]) {    // English if both not yet supported
            ThisGUIMessages = GUIMessages["en"]
        } else {
            ThisGUIMessages = GUIMessages[globvars.wgContentLanguage]
        }
    } else {
        ThisGUIMessages = GUIMessages[globvars.wgUserLanguage]
    }

    var button=document.createElement("input")
    button.setAttribute("type", "button");
    button.setAttribute("value", ThisGUIMessages.ButtonText);
    button.setAttribute("id", "commonsbutton");
    button.setAttribute("onclick", "CommonsClick()");
    var content=document.getElementById('mw-content-text')

    content.parentNode.insertBefore(button, content)
}

function CommonsClick() {
    var button = document.getElementById('commonsbutton')
    button.disabled = true

    var ProgressDiv = document.createElement("div")
    ProgressDiv.setAttribute("id", "ProgressDiv")
    ProgressDiv.setAttribute("style", "width:500px; border:5px solid black; padding:5px; position:fixed; background:#ffffff; z-index:100")
    ProgressDiv.style.left = "200px"
    ProgressDiv.style.top = "5px"
    commonsbutton.parentNode.insertBefore(ProgressDiv, commonsbutton)

    if (!GUIMessages[globvars.wgUserLanguage]&&!GUIMessages[globvars.wgContentLanguage]) {
        ProgressDiv.innerHTML="Preferred language ("+LanguageTable[globvars.wgUserLanguage].name+"/"+LanguageTable[globvars.wgUserLanguage].nativeName+") unavailable. Defaulting to English. <small>(If you can help translate, <a href='//en.wikipedia.org/w/index.php?title=User_talk:Dudemanfellabra&action=edit&section=new&preloadtitle=I+can+help+translate+the+CommonsCat+script+into+"+LanguageTable[globvars.wgUserLanguage].name+"!'>let me know!</a>)</small><br>"+ThisGUIMessages.CheckingMatches+" "
    } else {
        ProgressDiv.innerHTML=ThisGUIMessages.CheckingMatches+" "
    }
    window.onbeforeunload = OnBeforeUnLoad;
    FindRows()
}

function FindRows() {
    var AllHTMLRows=document.getElementsByTagName("tr")
    for (var i=0; i<AllHTMLRows.length; i++){
        if (AllHTMLRows[i].className.indexOf("vcard")!=-1||AllHTMLRows[i].className.search(/with(out)?_image/g)!=-1) HTMLRows.push(AllHTMLRows[i])
    }

    var str = "{{"
    var start=0
    var commentstart=0
    while (true) {
        commentstart=thiswikitext.indexOf("<!--",start)
        start=thiswikitext.indexOf(str,start)
        if (start==-1) break
        while (commentstart<start&&commentstart!=-1) {
            start=thiswikitext.indexOf("-->",commentstart)
            commentstart=thiswikitext.indexOf("<!--",start)
            start=thiswikitext.indexOf(str,start)
        }
        if (start==-1) break
        var open=1
        var index=start+str.length
        while (open!=0 && index<thiswikitext.length) {
            if (thiswikitext.substr(index,2)=="}}") {
                open--
                index++
            } else if (thiswikitext.substr(index,2)=="{{") {
                open++
                index++
            }
            index++
        }
        var template=thiswikitext.substr(start,index-start)
        for (var r in RegisterTable[globvars.wgContentLanguage]) {
            var regex = new RegExp("{{[\\s]*"+RegisterTable[globvars.wgContentLanguage][r].RowTemplate+"(\\s)*\\|", "g")
            if (template.match(regex)!=null) {Rows[Rows.length]=[template,r]; break}
        }
        start++
    }
    for (var i=0; i<Rows.length; i++) {          // get rid of false positives inside nowiki or pre tags
        var regex=new RegExp("<[ ]*?(nowiki|pre)[ ]*?>((?!<[ ]*?/[ ]*?(nowiki|pre)[ ]*?>)(.|\\n))*?"+Rows[i][0].replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")+"(.|\\n)*?<[ ]*?/[ ]*?(nowiki|pre)[ ]*?>", "g")
        if (thiswikitext.match(regex)!=null) {Rows.splice(i,1); i--}
    }
    if (Rows.length!=HTMLRows.length) {
        var unverified=false
        for (var i=0; i<Rows.length; i++) {
            if (RegisterTable[globvars.wgContentLanguage][Rows[i][1]].Unverified) unverified=true
        }
        if (unverified) {
            alert(ThisGUIMessages.RowMismatch)    // if at least one template unverified, could be a vcard error
        } else {
            alert(ThisGUIMessages.MalformedRow)   // if not, probably malformed row
        }
        window.onbeforeunload = function() {}
        setTimeout(function(){ProgressDiv.parentNode.removeChild(ProgressDiv)}, 10000);
        return
    }
    currentRow=0
    CheckRow()
}

function CheckRow() {
    var ProgressDiv=document.getElementById("ProgressDiv")
    InvalidCatImage = false
    if (!GUIMessages[globvars.wgUserLanguage]&&!GUIMessages[globvars.wgContentLanguage]) {
        ProgressDiv.innerHTML="Preferred language ("+LanguageTable[globvars.wgUserLanguage].name+"/"+LanguageTable[globvars.wgUserLanguage].nativeName+") unavailable. Defaulting to English. <small>(If you can help translate, <a href='//en.wikipedia.org/w/index.php?title=User_talk:Dudemanfellabra&action=edit&section=new&preloadtitle=I+can+help+translate+the+CommonsCat+script+into+"+LanguageTable[globvars.wgUserLanguage].name+"!'>let me know!</a>)</small><br>"+ThisGUIMessages.CheckingMatches+" "
    } else {
        ProgressDiv.innerHTML=ThisGUIMessages.CheckingMatches+" "
    }
    if (currentRow==Rows.length) {
        if (MatchesFound) {
            if (!GUIMessages[globvars.wgContentLanguage]) {               // edit summary defaults to content language if available
                if (!GUIMessages[globvars.wgUserLanguage]) {              // if not, it falls back to user preferred language
                    var summary = GUIMessages["en"].EditSummary  // if neither, English
                } else {
                    var summary = GUIMessages[globvars.wgUserLanguage].EditSummary
                }
            } else {
                var summary = GUIMessages[globvars.wgContentLanguage].EditSummary
            }
            editPageWithCommonsCat({
                title: globvars.wgPageName,
                text: thiswikitext,
                summary: summary
            });
        } else {
            ProgressDiv.innerHTML+=ThisGUIMessages.NoneFound
            window.onbeforeunload = function() {}
            setTimeout(function(){ProgressDiv.parentNode.removeChild(ProgressDiv)}, 10000);
        }
        return;
    }
    HTMLRows[currentRow].scrollIntoView()      // highlight current row
    window.scrollBy(0,-10-ProgressDiv.offsetHeight)
    ThisRegisterTable=RegisterTable[globvars.wgContentLanguage][Rows[currentRow][1]]

    Matches=[]
    FileMatches=[]
    FileSuggestions=[]
    refnum = []
    var tempRow = Rows[currentRow][0]
    tempRow = tempRow.replace(/\<\!\-\-(.|[\r\n])*?\-\-\>/g,"") // remove commented out parameters
    var HasImage=false
    var HasCommonsCat=false
    if (typeof ThisRegisterTable.IdentifierName=='string') {
        ThisRegisterTable.IdentifierName = [ThisRegisterTable.IdentifierName]
    }
    for (var j=0; j<ThisRegisterTable.IdentifierName.length; j++) {
        var regex=new RegExp("\\|[ ]*?"+ThisRegisterTable.IdentifierName[j]+"[ ]*?=.*?(?=(\\n|\\||}}))", "g")
        var temprefnum=tempRow.match(regex)
        if (temprefnum==null) {
            if (ThisRegisterTable.IdentifierName[j]=="bygningsnr") { // special case for Denmark listed buildings in Danish where the
                temprefnum = ["|bygningsnr=1"]                       // parameter "bygningsnr" has default value "1" if not specified
            } else {
                continue
            }
        }
        temprefnum=temprefnum[0]
        regex=new RegExp("\\|[ ]*?"+ThisRegisterTable.IdentifierName[j]+"[ ]*?=", "g")
        temprefnum=temprefnum.replace(regex,"").trim().split(/\s*,\s*/)
        for (var k=0; k<temprefnum.length; k++) {
            if (temprefnum[k]!="") refnum.push(temprefnum[k])
        }
    }
    if (ThisRegisterTable.CombineIdentifiers == true) {            // Some countries have multiple fields joined together
        refnum=[refnum.join(ThisRegisterTable.CombineWith)]
    }
    for (var j=0; j<refnum.length; j++) {
        if (refnum[j].length<8) {
            refnum[j]="00000000"+refnum[j]       // identifiers with less than 8 digits are padded left with zeroes
            refnum[j]=refnum[j].substr(refnum[j].length-8,8)
        }
    }

    if (typeof ThisRegisterTable.PropertyNameParam=='string') {
        ThisRegisterTable.PropertyNameParam = [ThisRegisterTable.PropertyNameParam]
    }

    var j=0
    while (j<ThisRegisterTable.PropertyNameParam.length) {
        var regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.PropertyNameParam[j]+"[ ]*?=.*?((\\[\\[.*?]]|\\{\\{(.|\\n)*?}}|<[ ]*?ref(.|\\n)*?(<[ ]*?)?/[ ]*?(ref)?[ ]*?>).*?)*(?=(\\n|\\||}}))", "g")
        var name=tempRow.match(regex)
        if (name!=null) {
            name = name[0]
            break
        } else {
            j++
        }
    }
    if (name==null) name=""

    regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.PropertyNameParam+"[ ]*?=", "g")
    name=name.replace(regex,"").replace(/(<[ ]*?)?ref(.|\n)*?<[ ]*?\/[ ]*?(ref)?[ ]*?>/g,"").replace(/\[\[.*?\|(.*?)]]/g, "$1").trim()

    regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.CommonscatParam+"[ ]*?=.*?(?=(\\n|\\||}}))", "g")
    var commonscat=tempRow.match(regex)
    if (commonscat!=null) {
        regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.CommonscatParam+"[ ]*?=", "g")
        commonscat=commonscat[0].replace(regex,"").trim()
        if (commonscat!="") {
            HasCommonsCat = true    // only true if commonscat param there and non-blank
        }
    }
    regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.ImageParam+"[ ]*?=.*?(?=(\\n|\\||}}))", "g")
    var image=tempRow.match(regex)
    if (image!=null) {
        regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.ImageParam+"[ ]*?=", "g")
        image=image[0].replace(regex,"").trim()
        if (image!="") {
            HasImage = true    // only true if image param there and non-blank
        }
    }
    ValidateExistingCatImage(name,commonscat,image,HasCommonsCat,HasImage)
}

function ValidateExistingCatImage(name,commonscat,image,HasCommonsCat,HasImage) {
    var titles=""
    if (HasImage) titles+="|File:"+image
    if (HasCommonsCat) titles+="|Category:"+commonscat
    if (titles=="") {  // if neither cat nor image, check for matches
        var temprefnum=[];
        for (var i=0; i<refnum.length; i++) {
            temprefnum[i]=refnum[i]
        }
        CheckForMatches(name,temprefnum,HasCommonsCat,HasImage)
        return
    }

    // if we're here, must be either cat or image or both
    titles=titles.substr(1,titles.length-1) // remove leading pipe

    $.ajax({ // see if existing cat/image actually exists
    url: '//commons.wikimedia.org/w/api.php?action=query&prop=info&format=json&titles='+encodeURIComponent(titles),
    data: {
        format: 'json'
    },
    dataType: 'jsonp',
    success: function(CommonsCatjsonObject) {ValidationComplete(CommonsCatjsonObject,name,HasCommonsCat,HasImage)}
    });
}

function ValidationComplete(CommonsCatjsonObject,name,HasCommonsCat,HasImage) {
    for (var p in CommonsCatjsonObject.query.pages) {
        if (typeof CommonsCatjsonObject.query.pages[p].missing!="undefined") {
            if (CommonsCatjsonObject.query.pages[p].ns==14) {HasCommonsCat=false; InvalidCatImage=true}
            if (CommonsCatjsonObject.query.pages[p].ns==6) {HasImage=false; InvalidCatImage=true}
        }
    }

    if (!HasCommonsCat||!HasImage) {
        var temprefnum=[];
        for (var i=0; i<refnum.length; i++) {
            temprefnum[i]=refnum[i]
        }
        CheckForMatches(name,temprefnum,HasCommonsCat,HasImage)
    } else {
        currentRow++
        CheckRow(currentRow)   // if already has both commonscat and image, skip
    }
}

function CheckForMatches(name,temprefnum,HasCommonsCat,HasImage) {
    if (refnum.length==0) {
        if (Matches.length==0&&FileMatches.length==0&&FileSuggestions.length==0) {
            currentRow++
            CheckRow(currentRow)   // skip if no matches found
        } else {
            ChooseCat(name,temprefnum)
        }
        return
    }
    var sortkey=" "+refnum[0].replace(/\?/g,"") // strip question marks used as placeholders.. code breaks without this
    if (!HasCommonsCat) {
        $.ajax({
        url: '//commons.wikimedia.org/w/api.php?action=query&list=categorymembers&format=json&cmtitle='+ThisRegisterTable.TopCatName+'&cmprop=title|sortkeyprefix&cmtype=subcat&cmlimit=max&cmsort=sortkey&cmstartsortkeyprefix='+sortkey+'&cmendsortkeyprefix='+sortkey+'0',
        data: {
            format: 'json'
        },
        dataType: 'jsonp',
        success: function(CommonsCatjsonObject) {GotCats(CommonsCatjsonObject,name,temprefnum,sortkey,HasCommonsCat,HasImage)}
        });
    } else {
        GotCats({"query":{"categorymembers":[]}},name,temprefnum,sortkey,HasCommonsCat,HasImage)
    }
}

function GotCats(CommonsCatjsonObject,name,temprefnum,sortkey,HasCommonsCat,HasImage) {
    for (var c in CommonsCatjsonObject.query.categorymembers) {
        var title=CommonsCatjsonObject.query.categorymembers[c].title.replace("Category:","")
        Matches[Matches.length] = [title,refnum[0]]
    }

    if (!HasImage) {
        $.ajax({
        url: '//commons.wikimedia.org/w/api.php?action=query&list=categorymembers&format=json&cmtitle='+ThisRegisterTable.TopCatName+'&cmprop=title|sortkeyprefix&cmtype=file&cmlimit=max&cmsort=sortkey&cmstartsortkeyprefix='+sortkey+'&cmendsortkeyprefix='+sortkey+'0',
        data: {
            format: 'json'
        },
        dataType: 'jsonp',
        success: function(CommonsCatjsonObject) {GotFiles(CommonsCatjsonObject,name,temprefnum,HasCommonsCat,HasImage)}
        });
    } else {
        GotFiles({"query":{"categorymembers":[]}},name,temprefnum,HasCommonsCat,HasImage)
    }
}

function GotFiles(CommonsCatjsonObject,name,temprefnum,HasCommonsCat,HasImage) {
    for (var c in CommonsCatjsonObject.query.categorymembers) {
        var title=CommonsCatjsonObject.query.categorymembers[c].title.replace("File:","")
        FileMatches[FileMatches.length] = [title,refnum[0]]
    }
    if (!HasImage&&HasCommonsCat&&refnum.length==1) {
        var regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.CommonscatParam+"[ ]*?=.*?(?=(\\n|\\||}}))", "g")
        var commonscat=Rows[currentRow][0].match(regex)
        regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.CommonscatParam+"[ ]*?=", "g")
        commonscat=commonscat[0].replace(regex,"").replace(/\<\!\-\-(.|[\r\n])*?\-\-\>/g,"").trim()
        commonscat=[commonscat]    // make array to allow compatibility with multiple matched categories below
        $.ajax({
        url: '//commons.wikimedia.org/w/api.php?action=query&list=categorymembers&format=json&cmtitle=Category:'+commonscat[0].replace(/ /g,"_")+'&cmprop=title&cmtype=file&cmlimit=max',
        data: {
            format: 'json'
        },
        dataType: 'jsonp',
        success: function(CommonsCatjsonObject) {GotSuggestedFiles(CommonsCatjsonObject,name,commonscat,temprefnum,HasCommonsCat,HasImage)}
        });
    } else if (!HasImage&&Matches.length!=0&&refnum.length==1) {
        var commonscat=[]
        for (var i=0; i<Matches.length; i++) {
            commonscat.push(Matches[i][0])
        }
        $.ajax({
        url: '//commons.wikimedia.org/w/api.php?action=query&list=categorymembers&format=json&cmtitle=Category:'+commonscat[0].replace(/ /g,"_")+'&cmprop=title&cmtype=file&cmlimit=max',
        data: {
            format: 'json'
        },
        dataType: 'jsonp',
        success: function(CommonsCatjsonObject) {GotSuggestedFiles(CommonsCatjsonObject,name,commonscat,temprefnum,HasCommonsCat,HasImage)}
        });
    } else {
        refnum.splice(0,1)
        CheckForMatches(name,temprefnum,HasCommonsCat,HasImage)  // check next refnum
    }
}

function GotSuggestedFiles(CommonsCatjsonObject,name,commonscat,temprefnum,HasCommonsCat,HasImage) {
    for (var c in CommonsCatjsonObject.query.categorymembers) {
        var title=CommonsCatjsonObject.query.categorymembers[c].title.replace("File:","")
        FileSuggestions[FileSuggestions.length] = [title,commonscat[0]]
    }
    if (commonscat.length!=1) {
        commonscat.splice(0,1)
        $.ajax({
        url: '//commons.wikimedia.org/w/api.php?action=query&list=categorymembers&format=json&cmtitle=Category:'+commonscat[0].replace(/ /g,"_")+'&cmprop=title&cmtype=file&cmlimit=max',
        data: {
            format: 'json'
        },
        dataType: 'jsonp',
        success: function(CommonsCatjsonObject) {GotSuggestedFiles(CommonsCatjsonObject,name,commonscat,temprefnum,HasCommonsCat,HasImage)}
        });
    } else {
        refnum.splice(0,1)
        CheckForMatches(name,temprefnum,HasCommonsCat,HasImage)  // check next refnum
    }
}

var arrows = ""
var scrolled = false // global vars for scrolling mechanism

function isOnScreen(elem) {
    if (elem != null) {
        var height = $(window).height()
        var elemTop = elem.getBoundingClientRect().top
        var elemBot = elemTop + elem.offsetHeight

        if (elemBot<0) {
            return "up"
        } else if (elemTop>height) {
            return "down"
        } else {
            return "onscreen"
        }
    } else {
        return false
    }
}

function ChooseCat(name,temprefnum) {
    var ProgressDiv=document.getElementById("ProgressDiv")
    if (InvalidCatImage) {
        ProgressDiv.innerHTML+=ThisGUIMessages.Invalid
        InvalidCatImage = false
    } else {
        ProgressDiv.innerHTML+=ThisGUIMessages.Found
    }
    var span=document.createElement("span")
    ProgressDiv.appendChild(span)
    window.onscroll = function () { scrolled = true }
    arrows = setInterval(function() {
        if(scrolled) {
            scrolled = false;
            var direction = isOnScreen(document.getElementById("overlay"))
            if (direction=="up") {
                span.innerHTML = " <a href='#overlay' onclick='setTimeout(function(){window.scrollBy(0,-10-document.getElementById(\"ProgressDiv\").offsetHeight)},50)'>&#8593;</a>" // up arrow
            } else if (direction=="down") {
                span.innerHTML = " <a href='#overlay' onclick='setTimeout(function(){window.scrollBy(0,-10-document.getElementById(\"ProgressDiv\").offsetHeight)},50)'>&#8595;</a>" // down arrow
            } else {
                span.innerHTML = ""
            }
        }
    }, 250);

    for (var j=0; j<FileMatches.length; j++) {
        for (var k=0; k<FileSuggestions.length; k++) {
            if (FileMatches[j][0]==FileSuggestions[k][0]) {FileSuggestions.splice(k,1); k--} // don't suggest file if already matched
        }
    }

    if (FileMatches.length>0) {
        var done = "no"
        var loops = 0
        var toQuery=FileMatches.length
        while (done=="no") {
            if (toQuery>20) {
                var TempFileMatches = FileMatches.slice(20*loops,20*(loops+1))
            } else {
                var TempFileMatches = FileMatches.slice(20*loops)
            }
            var FileTitleStr="File:"+TempFileMatches[0][0]
            for (var j=1; j<TempFileMatches.length; j++) {
                FileTitleStr+="|File:"+TempFileMatches[j][0]
            }
            var URLs=JSON.parse(   // get URLs of images to display
                $.ajax({
                    dataType: "json",
                    url: mw.util.wikiScript('api'),
                    data: {
                        format: 'json',
                        action: 'query',
                        prop: 'imageinfo',
                        iiprop: 'url',
                        iiurlwidth: '100',
                        titles: FileTitleStr
                    },
                    async:false
                })
                .responseText
            );
            for (var p in URLs.query.pages) {
                for (var j=0; j<FileMatches.length; j++) {
                    if (URLs.query.pages[p].title.replace(/^.*?:/,"")==FileMatches[j][0]) {
                        for (var k in URLs.query.pages[p].imageinfo) {
                            if (!URLs.query.pages[p].imageinfo[k].thumberror) {
                                FileMatches[j].push(URLs.query.pages[p].imageinfo[k].thumburl)
                            }
                        }
                    }
                }
            }
            if (toQuery>20) {
                toQuery = toQuery-20
                loops++
            } else {
                done = "yes"
            }
        }
        for (var j=0; j<FileMatches.length; j++) {
            if (FileMatches[j].length<3) {FileMatches.splice(j,1); j--} // get rid of files where fetching thumbnails failed
        }
    }
    if (FileSuggestions.length>0) {
        var done = "no"
        var loops = 0
        var toQuery=FileSuggestions.length
        while (done=="no") {
            if (toQuery>20) {
                var TempFileSuggestions = FileSuggestions.slice(20*loops,20*(loops+1))
            } else {
                var TempFileSuggestions = FileSuggestions.slice(20*loops)
            }
            var FileTitleStr="File:"+TempFileSuggestions[0][0]
            for (var j=1; j<TempFileSuggestions.length; j++) {
                FileTitleStr+="|File:"+TempFileSuggestions[j][0]
            }
            var URLs=JSON.parse(   // get URLs of images to display
                $.ajax({
                    dataType: "json",
                    url: mw.util.wikiScript('api'),
                    data: {
                        format: 'json',
                        action: 'query',
                        prop: 'imageinfo',
                        iiprop: 'url',
                        iiurlwidth: '100',
                        titles: FileTitleStr
                    },
                    async:false
                })
                .responseText
            );
            for (var p in URLs.query.pages) {
                for (var j=0; j<FileSuggestions.length; j++) {
                    if (URLs.query.pages[p].title.replace(/^.*?:/,"")==FileSuggestions[j][0]) {
                        for (var k in URLs.query.pages[p].imageinfo) {
                            if (!URLs.query.pages[p].imageinfo[k].thumberror) {
                                FileSuggestions[j].push(URLs.query.pages[p].imageinfo[k].thumburl)
                            }
                        }
                    }
                }
            }
            if (toQuery>20) {
                toQuery = toQuery-20
                loops++
            } else {
                done = "yes"
            }
        }
        for (var j=0; j<FileSuggestions.length; j++) {
            if (FileSuggestions[j].length<3) {FileSuggestions.splice(j,1); j--} // get rid of files where fetching thumbnails failed
        }
    }

    if (Matches.length==0&&FileMatches.length==0&&FileSuggestions.length==0) { // if all matches can't have thumbnails, just skip
        window.clearInterval(arrows)
        currentRow++
        CheckRow(currentRow)
        return
    }

    if (FileMatches.length>0) {
        var fieldsetfiles = document.createElement("fieldset");
        fieldsetfiles.setAttribute("style","margin:0px")
        var legend = document.createElement("legend");
        legend.innerHTML=ThisGUIMessages.FollowingImages.replace("NAME",name+" (#"+temprefnum+")")
        fieldsetfiles.appendChild(legend);
        fieldsetfiles.innerHTML+=ThisGUIMessages.SelectOne+"<br>"

        for (var j=0; j<FileMatches.length; j++) {
            var image = document.createElement("input")
            image.setAttribute("type","radio")
            image.setAttribute("name","imageselect")
            image.setAttribute("id","image"+j)
            if (j==0) image.setAttribute("checked","checked")
            fieldsetfiles.appendChild(image);
            var imagelabel = document.createElement("label")
            imagelabel.setAttribute("for","image"+j)
            imagelabel.innerHTML='<a href="//commons.wikimedia.org/wiki/File:'+encodeURIComponent(FileMatches[j][0])+'" target="_blank"><div style="display:inline-block; vertical-align:middle; width:100px; overflow-x:hidden; text-overflow:ellipsis"><center><img src="'+FileMatches[j][2].replace(/ /g,"_")+'" style="max-height:100%; max-width:100%;"><br>'+FileMatches[j][1]+'<br>'+FileMatches[j][0]+'</center></div></a>'
            fieldsetfiles.appendChild(imagelabel);
            if ((j+1)%5==0) fieldsetfiles.innerHTML+="<br>"
        }
        if (FileSuggestions.length==0) {
            if (FileMatches.length%5!=0) fieldsetfiles.innerHTML+="<br>"
            var skip = document.createElement("input")
            skip.setAttribute("type","radio")
            skip.setAttribute("name","imageselect")
            skip.setAttribute("id","skipimage")
            fieldsetfiles.appendChild(skip);
            var skiplabel = document.createElement("label")
            skiplabel.setAttribute("for","skipimage")
            skiplabel.innerHTML=ThisGUIMessages.DontAddImage
            fieldsetfiles.appendChild(skiplabel);
            fieldsetfiles.innerHTML+="<br>"
        }
        if (Matches.length==0&&FileSuggestions.length==0) {
            var selectbutton=document.createElement("input")
            selectbutton.setAttribute("type", "button")
            selectbutton.setAttribute("value", ThisGUIMessages.SelectButton)
            selectbutton.setAttribute("style","margin-top:7px")
            selectbutton.setAttribute("onclick", "CatChosen()");
            fieldsetfiles.appendChild(selectbutton)
        }
    }
    if (FileSuggestions.length>0) {
        var fieldsetfilesuggestions = document.createElement("fieldset");
        fieldsetfilesuggestions.setAttribute("style","margin:0px")
        var legend = document.createElement("legend");
        if (FileMatches.length!=0) {
            legend.innerHTML=ThisGUIMessages.OtherSuggested.replace("NAME",name+" (#"+temprefnum+")")
        } else {
            legend.innerHTML=ThisGUIMessages.Suggested.replace("NAME",name+" (#"+temprefnum+")")
        }
        fieldsetfilesuggestions.appendChild(legend);
        fieldsetfilesuggestions.innerHTML+=ThisGUIMessages.SelectOne+"<br>"

        for (var j=0; j<FileSuggestions.length; j++) {
            var image = document.createElement("input")
            image.setAttribute("type","radio")
            image.setAttribute("name","imageselect")
            image.setAttribute("id","imagesuggestion"+j)
            if (j==0&&FileMatches.length==0) image.setAttribute("checked","checked")
            fieldsetfilesuggestions.appendChild(image);
            var imagelabel = document.createElement("label")
            imagelabel.setAttribute("for","imagesuggestion"+j)
            imagelabel.innerHTML='<a href="//commons.wikimedia.org/wiki/File:'+encodeURIComponent(FileSuggestions[j][0])+'" target="_blank"><div style="display:inline-block; vertical-align:middle; width:100px; overflow-x:hidden; text-overflow:ellipsis"><center><img src="'+FileSuggestions[j][2].replace(/ /g,"_")+'" style="max-height:100%; max-width:100%;"><br>('+ThisGUIMessages.From.replace('CATNAME','Category:'+FileSuggestions[j][1])+')<br>'+FileSuggestions[j][0]+'</center></div></a>'
            fieldsetfilesuggestions.appendChild(imagelabel);
            if ((j+1)%5==0) fieldsetfilesuggestions.innerHTML+="<br>"
        }
        if (FileSuggestions.length%5!=0) fieldsetfilesuggestions.innerHTML+="<br>"
        var skip = document.createElement("input")
        skip.setAttribute("type","radio")
        skip.setAttribute("name","imageselect")
        skip.setAttribute("id","skipimagesuggestions")
        fieldsetfilesuggestions.appendChild(skip);
        var skiplabel = document.createElement("label")
        skiplabel.setAttribute("for","skipimagesuggestions")
        skiplabel.innerHTML=ThisGUIMessages.DontAddImage
        fieldsetfilesuggestions.appendChild(skiplabel);
        fieldsetfilesuggestions.innerHTML+="<br>"

        if (Matches.length==0) {
            var selectbutton=document.createElement("input")
            selectbutton.setAttribute("type", "button")
            selectbutton.setAttribute("value", ThisGUIMessages.SelectButton)
            selectbutton.setAttribute("style","margin-top:7px")
            selectbutton.setAttribute("onclick", "CatChosen()");
            fieldsetfilesuggestions.appendChild(selectbutton)
        }
    }
    if (Matches.length>0) {
        var fieldsetcats = document.createElement("fieldset");
        fieldsetcats.setAttribute("style","margin:0px")
        var legend = document.createElement("legend");
        legend.innerHTML=ThisGUIMessages.FollowingCats.replace("NAME",name+" (#"+temprefnum+")")
        fieldsetcats.appendChild(legend);
        fieldsetcats.innerHTML+=ThisGUIMessages.SelectOne+"<br>"

        for (var j=0; j<Matches.length; j++) {
            var cat = document.createElement("input")
            cat.setAttribute("type","radio")
            cat.setAttribute("name","catselect")
            cat.setAttribute("id","cat"+j)
            if (j==0) cat.setAttribute("checked","checked")
            fieldsetcats.appendChild(cat);
            var catlabel = document.createElement("label")
            catlabel.setAttribute("for","cat"+j)
            catlabel.innerHTML=Matches[j][1]+' – <a href="//commons.wikimedia.org/wiki/Category:'+encodeURIComponent(Matches[j][0])+'" target="_blank">'+Matches[j][0]+'</a>'
            fieldsetcats.appendChild(catlabel);
            fieldsetcats.innerHTML+="<br>"
        }
        var skip = document.createElement("input")
        skip.setAttribute("type","radio")
        skip.setAttribute("name","catselect")
        skip.setAttribute("id","skip")
        fieldsetcats.appendChild(skip);
        var skiplabel = document.createElement("label")
        skiplabel.setAttribute("for","skip")
        skiplabel.innerHTML=ThisGUIMessages.DontAddCat
        fieldsetcats.appendChild(skiplabel);
        fieldsetcats.innerHTML+="<br>"

        var selectbutton=document.createElement("input")
        selectbutton.setAttribute("type", "button")
        selectbutton.setAttribute("value", ThisGUIMessages.SelectButton)
        selectbutton.setAttribute("style","margin-top:7px")
        selectbutton.setAttribute("onclick", "CatChosen()");
        fieldsetcats.appendChild(selectbutton)
    }
    var overlay = document.createElement("tr")
    var td=document.createElement("td")
    td.setAttribute("colspan",HTMLRows[currentRow].getElementsByTagName("td").length+1)
    overlay.appendChild(td)
    if (FileMatches.length>0) td.appendChild(fieldsetfiles)
    if (FileSuggestions.length>0) td.appendChild(fieldsetfilesuggestions)
    if (Matches.length>0) td.appendChild(fieldsetcats)
    overlay.setAttribute("style", "outline:2px solid red; border-top:0px; background:#ffffff")
    overlay.setAttribute("id","overlay")
    HTMLRows[currentRow].setAttribute("style","border-bottom:0px;")
    HTMLRows[currentRow].parentNode.insertBefore(overlay, HTMLRows[currentRow].nextSibling)
}

function CatChosen() {
    var overlay=document.getElementById("overlay")
    var options=overlay.getElementsByTagName("input")
    var titles=overlay.getElementsByTagName("label")
    for (var i=0; i<options.length-1; i++) {
        if (options[i].checked) {
            if (options[i].name.search("cat")!=-1) {
                var link=titles[i].getElementsByTagName("a")
                if (link.length==0) continue    // if chose not to add cat
                MatchesFound = true             // if chose to add something
                var catname=link[0].innerHTML
                var tempRow = Rows[currentRow][0]
                var regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.CommonscatParam+"[ ]*?=.*?(?=(\\n|\\||}}))", "g")
                var regex2 = new RegExp("<!--((?!-->)(.|\\n))*?\\|[ ]*?"+ThisRegisterTable.CommonscatParam+"[ ]*?=(.|\\n)*?-->", "g")
                if (tempRow.match(regex)!=null&&tempRow.match(regex2)==null) { // if parameter is already there but blank and not commented out, put selection there
                    tempRow=tempRow.replace(regex, "|"+ThisRegisterTable.CommonscatParam+"="+catname)
                } else {
                    tempRow=tempRow.replace(regex2,"") // remove commented out parameter if present
                    var EndOfTemplate=tempRow.lastIndexOf("}}")
                    if (tempRow.indexOf("\n")!=-1&&tempRow.indexOf("\n")!=0&&tempRow.indexOf("\n")!=tempRow.length-1) {
                        tempRow = tempRow.substr(0,EndOfTemplate)+"|"+ThisRegisterTable.CommonscatParam+"="+catname+"\n}}"+tempRow.substr(EndOfTemplate+2,tempRow.length-EndOfTemplate-2)
                    } else {
                        tempRow = tempRow.substr(0,EndOfTemplate)+"|"+ThisRegisterTable.CommonscatParam+"="+catname+"}}"+tempRow.substr(EndOfTemplate+2,tempRow.length-EndOfTemplate-2)
                    }
                }
                thiswikitext=thiswikitext.replace(Rows[currentRow][0],tempRow)
                Rows[currentRow][0] = tempRow
            } else {
                var link=titles[i].getElementsByTagName("a")
                if (link.length==0) continue    // if chose not to add image
                MatchesFound = true             // if chose to add something
                var imagename=link[0].innerHTML
                var StartIndex=imagename.lastIndexOf("<br>")+4
                imagename=imagename.substr(StartIndex,imagename.indexOf("</center>",StartIndex)-StartIndex)
                var tempRow = Rows[currentRow][0]
                var regex = new RegExp("\\|[ ]*?"+ThisRegisterTable.ImageParam+"[ ]*?=.*?(?=(\\n|\\||}}))", "g")
                var regex2 = new RegExp("<!--((?!-->)(.|\\n))*?\\|[ ]*?"+ThisRegisterTable.ImageParam+"[ ]*?=(.|\\n)*?-->", "g")
                if (tempRow.match(regex)!=null&&tempRow.match(regex2)==null) { // if parameter is already there but blank and not commented out, put selection there
                    tempRow=tempRow.replace(regex, "|"+ThisRegisterTable.ImageParam+"="+imagename)
                } else {
                    tempRow=tempRow.replace(regex2,"") // remove commented out parameter if present
                    var EndOfTemplate=tempRow.lastIndexOf("}}")
                    if (tempRow.indexOf("\n")!=-1&&tempRow.indexOf("\n")!=0&&tempRow.indexOf("\n")!=tempRow.length-1) {
                        tempRow = tempRow.substr(0,EndOfTemplate)+"|"+ThisRegisterTable.ImageParam+"="+imagename+"\n}}"+tempRow.substr(EndOfTemplate+2,tempRow.length-EndOfTemplate-2)
                    } else {
                        tempRow = tempRow.substr(0,EndOfTemplate)+"|"+ThisRegisterTable.ImageParam+"="+imagename+"}}"+tempRow.substr(EndOfTemplate+2,tempRow.length-EndOfTemplate-2)
                    }
                }
                thiswikitext=thiswikitext.replace(Rows[currentRow][0],tempRow)
                Rows[currentRow][0] = tempRow
            }
        }
    }
    overlay.parentNode.removeChild(overlay)
    window.clearInterval(arrows)
    currentRow++
    CheckRow(currentRow)
}

function getThisWikitext(title) {
    try {
        var output=JSON.parse(
            $.ajax({
                dataType: "json",
                url: mw.util.wikiScript('api'),
                data: {
                    format: 'json',
                    action: 'query',
                    prop: 'revisions',
                    rvprop: 'content',
                    titles: title,
                    indexpageids: true,
                    redirects: 'true'
                },
                async:false
            })
            .responseText
        );
        for (var page in output.query.pages) {
            wikitext = output.query.pages[page].revisions[0]['*'];
        }
        return wikitext
    }
    catch(err) {
        return "error"
    }
}

function editPageWithCommonsCat(info,ProgressDiv) {
    var ProgressDiv=document.getElementById("ProgressDiv")
    ProgressDiv.innerHTML+=ThisGUIMessages.Done+" "
	var token;
	token = mw.user.tokens.get( 'csrfToken');
	if (token === null) {
		alert('Page edit failed: enable to acquire edit token');
		return;
	}
	
    $.ajax({
        url: mw.util.wikiScript( 'api' ),
        type: 'POST',
        dataType: 'json',
        data: {
            format: 'json',
            action: 'edit',
            title: info.title,
            text: info.text,
            summary: info.summary,
            token: token
        }
    })
        .done (function( data ) {
            window.onbeforeunload = function() {}
            if (data && data.edit && data.edit.result && data.edit.result == 'Success') {
                ProgressDiv.innerHTML+=ThisGUIMessages.SuccessfulEdit
            } else {
                ProgressDiv.innerHTML+=ThisGUIMessages.FailedEdit
            }
            setTimeout(function(){ProgressDiv.parentNode.removeChild(ProgressDiv)}, 10000);
        })
        .fail (function() {
            alert('Ajax failure.');
        });
}

function OnBeforeUnLoad () {
    return ThisGUIMessages.LeavePage;
}

$(FindCommonsCatButton);
// </nowiki>