// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 *******************************************************************************
 * Copyright (C) 2009-2013, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 */
package com.ibm.icu.impl;

import java.util.MissingResourceException;


/**
 * Utilities for mapping between old and new language, country, and other
 * locale ID related names.
 */
public class LocaleIDs {

    /**
     * Returns a list of all 2-letter country codes defined in ISO 3166.
     * Can be used to create Locales.
     * @stable ICU 3.0
     */
    public static String[] getISOCountries() {
        return _countries.clone();
    }

    /**
     * Returns a list of all 2-letter language codes defined in ISO 639
     * plus additional 3-letter codes determined to be useful for locale generation as
     * defined by Unicode CLDR.
     * Can be used to create Locales.
     * [NOTE:  ISO 639 is not a stable standard-- some languages' codes have changed.
     * The list this function returns includes both the new and the old codes for the
     * languages whose codes have changed.]
     * @stable ICU 3.0
     */
    public static String[] getISOLanguages() {
        return _languages.clone();
    }

    /**
     * Returns a three-letter abbreviation for the provided country.  If the provided
     * country is empty, returns the empty string.  Otherwise, returns
     * an uppercase ISO 3166 3-letter country code.
     * @exception MissingResourceException Throws MissingResourceException if the
     * three-letter country abbreviation is not available for this locale.
     * @stable ICU 3.0
     */
    public static String getISO3Country(String country){

        int offset = findIndex(_countries, country);
        if(offset>=0){
            return _countries3[offset];
        }else{
            offset = findIndex(_obsoleteCountries, country);
            if(offset>=0){
                return _obsoleteCountries3[offset];
            }
        }
        return "";
    }
    /**
     * Returns a three-letter abbreviation for the language.  If language is
     * empty, returns the empty string.  Otherwise, returns
     * a lowercase ISO 639-2/T language code.
     * The ISO 639-2 language codes can be found on-line at
     *   <a href="ftp://dkuug.dk/i18n/iso-639-2.txt"><code>ftp://dkuug.dk/i18n/iso-639-2.txt</code></a>
     * @exception MissingResourceException Throws MissingResourceException if the
     * three-letter language abbreviation is not available for this locale.
     * @stable ICU 3.0
     */
    public static String getISO3Language(String language) {

        int offset = findIndex(_languages, language);
        if(offset>=0){
            return _languages3[offset];
        } else {
            offset = findIndex(_obsoleteLanguages, language);
            if (offset >= 0) {
                return _obsoleteLanguages3[offset];
            }
        }
        return "";
    }

    public static String threeToTwoLetterLanguage(String lang) {

        /* convert 3 character code to 2 character code if possible *CWB*/
        int offset = findIndex(_languages3, lang);
        if (offset >= 0) {
            return _languages[offset];
        }

        offset = findIndex(_obsoleteLanguages3, lang);
        if (offset >= 0) {
            return _obsoleteLanguages[offset];
        }

        return null;
    }

    public static String threeToTwoLetterRegion(String region) {

        /* convert 3 character code to 2 character code if possible *CWB*/
        int offset = findIndex(_countries3, region);
        if (offset >= 0) {
            return _countries[offset];
        }

        offset = findIndex(_obsoleteCountries3, region);
        if (offset >= 0) {
            return _obsoleteCountries[offset];
        }

        return null;
    }

    /**
     * linear search of the string array. the arrays are unfortunately ordered by the
     * two-letter target code, not the three-letter search code, which seems backwards.
     */
    private static int findIndex(String[] array, String target){
        for (int i = 0; i < array.length; i++) {
            if (target.equals(array[i])) {
                return i;
            }
        }
        return -1;
    }


    /**
     * Tables used in normalizing portions of the id.
     */
    /* tables updated per http://lcweb.loc.gov/standards/iso639-2/
       to include the revisions up to 2001/7/27 *CWB*/
    /* The 3 character codes are the terminology codes like RFC 3066.
       This is compatible with prior ICU codes */
    /* "in" "iw" "ji" "jw" & "sh" have been withdrawn but are still in
       the table but now at the end of the table because
       3 character codes are duplicates.  This avoids bad searches
       going from 3 to 2 character codes.*/
    /* The range qaa-qtz is reserved for local use. */

    /* This list MUST be in sorted order, and MUST contain the two-letter codes
    if one exists otherwise use the three letter code */
    private static final String[] _languages = {
        "aa",  "ab",  "ace", "ach", "ada", "ady", "ae",  "af",  
        "afa", "afh", "agq", "ain", "ak",  "akk", "ale", "alg", 
        "alt", "am",  "an",  "ang", "anp", "apa", "ar",  "arc", 
        "arn", "arp", "ars", "art", "arw", "as",  "asa", "ast",
        "ath", "aus", "av",  "awa", "ay",  "az",  
        "ba",  "bad", "bai", "bal", "ban", "bas", "bat", "bax", 
        "bbj", "be",  "bej", "bem", "ber", "bez", "bfd", "bg",  
        "bh",  "bho", "bi",  "bik", "bin", "bkm", "bla", "bm",  
        "bn",  "bnt", "bo",  "br",  "bra", "brx", "bs",  "bss", 
        "btk", "bua", "bug", "bum", "byn", "byv", 
        "ca",  "cad", "cai", "car", "cau", "cay", "cch", "ce",  
        "ceb", "cel", "cgg", "ch",  "chb", "chg", "chk", "chm", 
        "chn", "cho", "chp", "chr", "chy", "ckb", "cmc", "co",  
        "cop", "cpe", "cpf", "cpp", "cr",  "crh", "crp", "cs",  
        "csb", "cu",  "cus", "cv",  "cy",  
        "da",  "dak", "dar", "dav", "day", "de",  "del", "den", 
        "dgr", "din", "dje", "doi", "dra", "dsb", "dua", "dum", 
        "dv",  "dyo", "dyu", "dz",  "dzg", 
        "ebu", "ee",  "efi", "egy", "eka", "el",  "elx", "en",  
        "enm", "eo",  "es",  "et",  "eu",  "ewo", 
        "fa",  "fan", "fat", "ff",  "fi",  "fil", "fiu", "fj",  
        "fo",  "fon", "fr",  "frm", "fro", "frr", "frs", "fur", 
        "fy",  
        "ga",  "gaa", "gay", "gba", "gd",  "gem", "gez", "gil", 
        "gl",  "gmh", "gn",  "goh", "gon", "gor", "got", "grb", 
        "grc", "gsw", "gu",  "guz", "gv",  "gwi", 
        "ha",  "hai", "haw", "he",  "hi",  "hil", "him", "hit", 
        "hmn", "ho",  "hr",  "hsb", "ht",  "hu",  "hup", "hy",  
        "hz",  
        "ia",  "iba", "ibb", "id",  "ie",  "ig",  "ii",  "ijo", 
        "ik",  "ilo", "inc", "ine", "inh", "io",  "ira", "iro", 
        "is",  "it",  "iu",  
        "ja",  "jbo", "jgo", "jmc", "jpr", "jrb", "jv",  
        "ka",  "kaa", "kab", "kac", "kaj", "kam", "kar", "kaw", 
        "kbd", "kbl", "kcg", "kde", "kea", "kfo", "kg",  "kha", 
        "khi", "kho", "khq", "ki",  "kj",  "kk",  "kkj", "kl",  
        "kln", "km",  "kmb", "kn",  "ko",  "kok", "kos", "kpe", 
        "kr",  "krc", "krl", "kro", "kru", "ks",  "ksb", "ksf", 
        "ksh", "ku",  "kum", "kut", "kv",  "kw",  "ky",  
        "la",  "lad", "lag", "lah", "lam", "lb",  "lez", "lg",  
        "li",  "lkt", "ln",  "lo",  "lol", "loz", "lt",  "lu",  
        "lua", "lui", "lun", "luo", "lus", "luy", "lv",  
        "mad", "maf", "mag", "mai", "mak", "man", "map", "mas", 
        "mde", "mdf", "mdr", "men", "mer", "mfe", "mg",  "mga", 
        "mgh", "mgo", "mh",  "mi",  "mic", "min", "mis", "mk",  
        "mkh", "ml",  "mn",  "mnc", "mni", "mno", "mo",  "moh", 
        "mos", "mr",  "ms",  "mt",  "mua", "mul", "mun", "mus", 
        "mwl", "mwr", "my",  "mye", "myn", "myv", 
        "na",  "nah", "nai", "nap", "naq", "nb",  "nd",  "nds", 
        "ne",  "new", "ng",  "nia", "nic", "niu", "nl",  "nmg", 
        "nn",  "nnh", "no",  "nog", "non", "nqo", "nr",  "nso", 
        "nub", "nus", "nv",  "nwc", "ny",  "nym", "nyn", "nyo", 
        "nzi", 
        "oc",  "oj",  "om",  "or",  "os",  "osa", "ota", "oto", 
        "pa",  "paa", "pag", "pal", "pam", "pap", "pau", "peo", 
        "phi", "phn", "pi",  "pl",  "pon", "pra", "pro", "ps",  
        "pt",  
        "qu",  
        "raj", "rap", "rar", "rm",  "rn",  "ro",  "roa", "rof", 
        "rom", "ru",  "rup", "rw",  "rwk", 
        "sa",  "sad", "sah", "sai", "sal", "sam", "saq", "sas", 
        "sat", "sba", "sbp", "sc",  "scn", "sco", "sd",  "se",  
        "see", "seh", "sel", "sem", "ses", "sg",  "sga", "sgn", 
        "shi", "shn", "shu", "si",  "sid", "sio", "sit", 
        "sk",  "sl",  "sla", "sm",  "sma", "smi", "smj", "smn", 
        "sms", "sn",  "snk", "so",  "sog", "son", "sq",  "sr",  
        "srn", "srr", "ss",  "ssa", "ssy", "st",  "su",  "suk", 
        "sus", "sux", "sv",  "sw",  "swb", "swc", "syc", "syr", 
        "ta",  "tai", "te",  "tem", "teo", "ter", "tet", "tg",  
        "th",  "ti",  "tig", "tiv", "tk",  "tkl", "tl",  "tlh", 
        "tli", "tmh", "tn",  "to",  "tog", "tpi", "tr",  "trv", 
        "ts",  "tsi", "tt",  "tum", "tup", "tut", "tvl", "tw",  
        "twq", "ty",  "tyv", "tzm", 
        "udm", "ug",  "uga", "uk",  "umb", "und", "ur",  "uz",  
        "vai", "ve",  "vi",  "vo",  "vot", "vun", 
        "wa",  "wae", "wak", "wal", "war", "was", "wen", "wo",  
        "xal", "xh",  "xog", 
        "yao", "yap", "yav", "ybb", "yi",  "yo",  "ypk", "yue", 
        "za",  "zap", "zbl", "zen", "zh",  "znd", "zu",  "zun", 
        "zxx", "zza" };
        
    private static final String[] _replacementLanguages = {
        "id", "he", "yi", "jv", "sr", "no",/* replacement language codes */
    };
    
    private static final String[] _obsoleteLanguages = {
        "in", "iw", "ji", "jw", "sh", "nb",    /* obsolete language codes */
    };
    
    /* This list MUST contain a three-letter code for every two-letter code in the
    list above, and they MUST ne in the same order (i.e., the same language must
    be in the same place in both lists)! */
    private static final String[] _languages3 = {
        "aar", "abk", "ace", "ach", "ada", "ady", "ave", "afr", 
        "afa", "afh", "agq", "ain", "aka", "akk", "ale", "alg", 
        "alt", "amh", "arg", "ang", "anp", "apa", "ara", "arc", 
        "arn", "arp", "ars", "art", "arw", "asm", "asa", "ast",
        "ath", "aus", "ava", "awa", "aym", "aze", 
        "bak", "bad", "bai", "bal", "ban", "bas", "bat", "bax", 
        "bbj", "bel", "bej", "bem", "ber", "bez", "bfd", "bul", 
        "bih", "bho", "bis", "bik", "bin", "bkm", "bla", "bam", 
        "ben", "bnt", "bod", "bre", "bra", "brx", "bos", "bss", 
        "btk", "bua", "bug", "bum", "byn", "byv", 
        "cat", "cad", "cai", "car", "cau", "cay", "cch", "che", 
        "ceb", "cel", "cgg", "cha", "chb", "chg", "chk", "chm", 
        "chn", "cho", "chp", "chr", "chy", "ckb", "cmc", "cos", 
        "cop", "cpe", "cpf", "cpp", "cre", "crh", "crp", "ces", 
        "csb", "chu", "cus", "chv", "cym", 
        "dan", "dak", "dar", "dav", "day", "deu", "del", "den", 
        "dgr", "din", "dje", "doi", "dra", "dsb", "dua", "dum", 
        "div", "dyo", "dyu", "dzo", "dzg", 
        "ebu", "ewe", "efi", "egy", "eka", "ell", "elx", "eng", 
        "enm", "epo", "spa", "est", "eus", "ewo", 
        "fas", "fan", "fat", "ful", "fin", "fil", "fiu", "fij", 
        "fao", "fon", "fra", "frm", "fro", "frr", "frs", "fur", 
        "fry", 
        "gle", "gaa", "gay", "gba", "gla", "gem", "gez", "gil", 
        "glg", "gmh", "grn", "goh", "gon", "gor", "got", "grb", 
        "grc", "gsw", "guj", "guz", "glv", "gwi", 
        "hau", "hai", "haw", "heb", "hin", "hil", "him", "hit", 
        "hmn", "hmo", "hrv", "hsb", "hat", "hun", "hup", "hye", 
        "her", 
        "ina", "iba", "ibb", "ind", "ile", "ibo", "iii", "ijo", 
        "ipk", "ilo", "inc", "ine", "inh", "ido", "ira", "iro", 
        "isl", "ita", "iku", 
        "jpn", "jbo", "jgo", "jmc", "jpr", "jrb", "jav", 
        "kat", "kaa", "kab", "kac", "kaj", "kam", "kar", "kaw", 
        "kbd", "kbl", "kcg", "kde", "kea", "kfo", "kon", "kha", 
        "khi", "kho", "khq", "kik", "kua", "kaz", "kkj", "kal", 
        "kln", "khm", "kmb", "kan", "kor", "kok", "kos", "kpe", 
        "kau", "krc", "krl", "kro", "kru", "kas", "ksb", "ksf", 
        "ksh", "kur", "kum", "kut", "kom", "cor", "kir", 
        "lat", "lad", "lag", "lah", "lam", "ltz", "lez", "lug", 
        "lim", "lkt", "lin", "lao", "lol", "loz", "lit", "lub", 
        "lua", "lui", "lun", "luo", "lus", "luy", "lav", 
        "mad", "maf", "mag", "mai", "mak", "man", "map", "mas", 
        "mde", "mdf", "mdr", "men", "mer", "mfe", "mlg", "mga", 
        "mgh", "mgo", "mah", "mri", "mic", "min", "mis", "mkd", 
        "mkh", "mal", "mon", "mnc", "mni", "mno", "mol", "moh", 
        "mos", "mar", "msa", "mlt", "mua", "mul", "mun", "mus", 
        "mwl", "mwr", "mya", "mye", "myn", "myv", 
        "nau", "nah", "nai", "nap", "naq", "nob", "nde", "nds", 
        "nep", "new", "ndo", "nia", "nic", "niu", "nld", "nmg", 
        "nno", "nnh", "nor", "nog", "non", "nqo", "nbl", "nso", 
        "nub", "nus", "nav", "nwc", "nya", "nym", "nyn", "nyo", 
        "nzi", 
        "oci", "oji", "orm", "ori", "oss", "osa", "ota", "oto", 
        "pan", "paa", "pag", "pal", "pam", "pap", "pau", "peo", 
        "phi", "phn", "pli", "pol", "pon", "pra", "pro", "pus", 
        "por", 
        "que", 
        "raj", "rap", "rar", "roh", "run", "ron", "roa", "rof", 
        "rom", "rus", "rup", "kin", "rwk", 
        "san", "sad", "sah", "sai", "sal", "sam", "saq", "sas", 
        "sat", "sba", "sbp", "srd", "scn", "sco", "snd", "sme", 
        "see", "seh", "sel", "sem", "ses", "sag", "sga", "sgn", 
        "shi", "shn", "shu", "sin", "sid", "sio", "sit", 
        "slk", "slv", "sla", "smo", "sma", "smi", "smj", "smn", 
        "sms", "sna", "snk", "som", "sog", "son", "sqi", "srp", 
        "srn", "srr", "ssw", "ssa", "ssy", "sot", "sun", "suk", 
        "sus", "sux", "swe", "swa", "swb", "swc", "syc", "syr", 
        "tam", "tai", "tel", "tem", "teo", "ter", "tet", "tgk", 
        "tha", "tir", "tig", "tiv", "tuk", "tkl", "tgl", "tlh", 
        "tli", "tmh", "tsn", "ton", "tog", "tpi", "tur", "trv", 
        "tso", "tsi", "tat", "tum", "tup", "tut", "tvl", "twi", 
        "twq", "tah", "tyv", "tzm", 
        "udm", "uig", "uga", "ukr", "umb", "und", "urd", "uzb", 
        "vai", "ven", "vie", "vol", "vot", "vun", 
        "wln", "wae", "wak", "wal", "war", "was", "wen", "wol", 
        "xal", "xho", "xog", 
        "yao", "yap", "yav", "ybb", "yid", "yor", "ypk", "yue", 
        "zha", "zap", "zbl", "zen", "zho", "znd", "zul", "zun", 
        "zxx", "zza" };

    private static final String[] _obsoleteLanguages3 = {
        /* "in",  "iw",  "ji",  "jw",  "sh", */
        "ind", "heb", "yid", "jaw", "srp",
    };

    /* ZR(ZAR) is now CD(COD) and FX(FXX) is PS(PSE) as per
       http://www.evertype.com/standards/iso3166/iso3166-1-en.html
       added new codes keeping the old ones for compatibility
       updated to include 1999/12/03 revisions *CWB*/

    /* RO(ROM) is now RO(ROU) according to
       http://www.iso.org/iso/en/prods-services/iso3166ma/03updates-on-iso-3166/nlv3e-rou.html
    */
    /* This list MUST be in sorted order, and MUST contain only two-letter codes! */
    private static final String[] _countries = {
        "AD",  "AE",  "AF",  "AG",  "AI",  "AL",  "AM",
        "AO",  "AQ",  "AR",  "AS",  "AT",  "AU",  "AW",  "AX",  "AZ",
        "BA",  "BB",  "BD",  "BE",  "BF",  "BG",  "BH",  "BI",
        "BJ",  "BL",  "BM",  "BN",  "BO",  "BQ",  "BR",  "BS",  "BT",  "BV",
        "BW",  "BY",  "BZ",  "CA",  "CC",  "CD",  "CF",  "CG",
        "CH",  "CI",  "CK",  "CL",  "CM",  "CN",  "CO",  "CR",
        "CU",  "CV",  "CW",  "CX",  "CY",  "CZ",  "DE",  "DJ",  "DK",
        "DM",  "DO",  "DZ",  "EC",  "EE",  "EG",  "EH",  "ER",
        "ES",  "ET",  "FI",  "FJ",  "FK",  "FM",  "FO",  "FR",
        "GA",  "GB",  "GD",  "GE",  "GF",  "GG",  "GH",  "GI",  "GL",
        "GM",  "GN",  "GP",  "GQ",  "GR",  "GS",  "GT",  "GU",
        "GW",  "GY",  "HK",  "HM",  "HN",  "HR",  "HT",  "HU",
        "ID",  "IE",  "IL",  "IM",  "IN",  "IO",  "IQ",  "IR",  "IS",
        "IT",  "JE",  "JM",  "JO",  "JP",  "KE",  "KG",  "KH",  "KI",
        "KM",  "KN",  "KP",  "KR",  "KW",  "KY",  "KZ",  "LA",
        "LB",  "LC",  "LI",  "LK",  "LR",  "LS",  "LT",  "LU",
        "LV",  "LY",  "MA",  "MC",  "MD",  "ME",  "MF",  "MG",  "MH",  "MK",
        "ML",  "MM",  "MN",  "MO",  "MP",  "MQ",  "MR",  "MS",
        "MT",  "MU",  "MV",  "MW",  "MX",  "MY",  "MZ",  "NA",
        "NC",  "NE",  "NF",  "NG",  "NI",  "NL",  "NO",  "NP",
        "NR",  "NU",  "NZ",  "OM",  "PA",  "PE",  "PF",  "PG",
        "PH",  "PK",  "PL",  "PM",  "PN",  "PR",  "PS",  "PT",
        "PW",  "PY",  "QA",  "RE",  "RO",  "RS",  "RU",  "RW",  "SA",
        "SB",  "SC",  "SD",  "SE",  "SG",  "SH",  "SI",  "SJ",
        "SK",  "SL",  "SM",  "SN",  "SO",  "SR",  "SS",  "ST",  "SV",
        "SX",  "SY",  "SZ",  "TC",  "TD",  "TF",  "TG",  "TH",  "TJ",
        "TK",  "TL",  "TM",  "TN",  "TO",  "TR",  "TT",  "TV",
        "TW",  "TZ",  "UA",  "UG",  "UM",  "US",  "UY",  "UZ",
        "VA",  "VC",  "VE",  "VG",  "VI",  "VN",  "VU",  "WF",
        "WS",  "YE",  "YT",  "ZA",  "ZM",  "ZW" };
    
    private static final String[] _deprecatedCountries = {
        "AN", "BU", "CS", "DD", "DY", "FX", "HV", "NH", "RH", "SU", "TP", "UK", "VD", "YD", "YU", "ZR" /* deprecated country list */
    };
    
    private static final String[] _replacementCountries = {
    /*  "AN", "BU", "CS", "DD", "DY", "FX", "HV", "NH", "RH", "SU", "TP", "UK", "VD", "YD", "YU", "ZR" */
        "CW", "MM", "RS", "DE", "BJ", "FR", "BF", "VU", "ZW", "RU", "TL", "GB", "VN", "YE", "RS", "CD"  /* replacement country codes */      
    };
    
    /* this table is used for three letter codes */
    private static final String[] _obsoleteCountries = {
        "AN",  "BU", "CS", "FX", "RO", "SU", "TP", "YD", "YU", "ZR",   /* obsolete country codes */
    };
    
    /* This list MUST contain a three-letter code for every two-letter code in
    the above list, and they MUST be listed in the same order! */
    private static final String[] _countries3 = {
        /*  "AD",  "AE",  "AF",  "AG",  "AI",  "AL",  "AM",      */
        "AND", "ARE", "AFG", "ATG", "AIA", "ALB", "ARM",
    /*  "AO",  "AQ",  "AR",  "AS",  "AT",  "AU",  "AW",  "AX",  "AZ",     */
        "AGO", "ATA", "ARG", "ASM", "AUT", "AUS", "ABW", "ALA", "AZE",
    /*  "BA",  "BB",  "BD",  "BE",  "BF",  "BG",  "BH",  "BI",     */
        "BIH", "BRB", "BGD", "BEL", "BFA", "BGR", "BHR", "BDI",
    /*  "BJ",  "BL",  "BM",  "BN",  "BO",  "BQ",  "BR",  "BS",  "BT",  "BV",     */
        "BEN", "BLM", "BMU", "BRN", "BOL", "BES", "BRA", "BHS", "BTN", "BVT",
    /*  "BW",  "BY",  "BZ",  "CA",  "CC",  "CD",  "CF",  "CG",     */
        "BWA", "BLR", "BLZ", "CAN", "CCK", "COD", "CAF", "COG",
    /*  "CH",  "CI",  "CK",  "CL",  "CM",  "CN",  "CO",  "CR",     */
        "CHE", "CIV", "COK", "CHL", "CMR", "CHN", "COL", "CRI",
    /*  "CU",  "CV",  "CW",  "CX",  "CY",  "CZ",  "DE",  "DJ",  "DK",     */
        "CUB", "CPV", "CUW", "CXR", "CYP", "CZE", "DEU", "DJI", "DNK",
    /*  "DM",  "DO",  "DZ",  "EC",  "EE",  "EG",  "EH",  "ER",     */
        "DMA", "DOM", "DZA", "ECU", "EST", "EGY", "ESH", "ERI",
    /*  "ES",  "ET",  "FI",  "FJ",  "FK",  "FM",  "FO",  "FR",     */
        "ESP", "ETH", "FIN", "FJI", "FLK", "FSM", "FRO", "FRA",
    /*  "GA",  "GB",  "GD",  "GE",  "GF",  "GG",  "GH",  "GI",  "GL",     */
        "GAB", "GBR", "GRD", "GEO", "GUF", "GGY", "GHA", "GIB", "GRL",
    /*  "GM",  "GN",  "GP",  "GQ",  "GR",  "GS",  "GT",  "GU",     */
        "GMB", "GIN", "GLP", "GNQ", "GRC", "SGS", "GTM", "GUM",
    /*  "GW",  "GY",  "HK",  "HM",  "HN",  "HR",  "HT",  "HU",     */
        "GNB", "GUY", "HKG", "HMD", "HND", "HRV", "HTI", "HUN",
    /*  "ID",  "IE",  "IL",  "IM",  "IN",  "IO",  "IQ",  "IR",  "IS" */
        "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL",
    /*  "IT",  "JE",  "JM",  "JO",  "JP",  "KE",  "KG",  "KH",  "KI",     */
        "ITA", "JEY", "JAM", "JOR", "JPN", "KEN", "KGZ", "KHM", "KIR",
    /*  "KM",  "KN",  "KP",  "KR",  "KW",  "KY",  "KZ",  "LA",     */
        "COM", "KNA", "PRK", "KOR", "KWT", "CYM", "KAZ", "LAO",
    /*  "LB",  "LC",  "LI",  "LK",  "LR",  "LS",  "LT",  "LU",     */
        "LBN", "LCA", "LIE", "LKA", "LBR", "LSO", "LTU", "LUX",
    /*  "LV",  "LY",  "MA",  "MC",  "MD",  "ME",  "MF",  "MG",  "MH",  "MK",     */
        "LVA", "LBY", "MAR", "MCO", "MDA", "MNE", "MAF", "MDG", "MHL", "MKD",
    /*  "ML",  "MM",  "MN",  "MO",  "MP",  "MQ",  "MR",  "MS",     */
        "MLI", "MMR", "MNG", "MAC", "MNP", "MTQ", "MRT", "MSR",
    /*  "MT",  "MU",  "MV",  "MW",  "MX",  "MY",  "MZ",  "NA",     */
        "MLT", "MUS", "MDV", "MWI", "MEX", "MYS", "MOZ", "NAM",
    /*  "NC",  "NE",  "NF",  "NG",  "NI",  "NL",  "NO",  "NP",     */
        "NCL", "NER", "NFK", "NGA", "NIC", "NLD", "NOR", "NPL",
    /*  "NR",  "NU",  "NZ",  "OM",  "PA",  "PE",  "PF",  "PG",     */
        "NRU", "NIU", "NZL", "OMN", "PAN", "PER", "PYF", "PNG",
    /*  "PH",  "PK",  "PL",  "PM",  "PN",  "PR",  "PS",  "PT",     */
        "PHL", "PAK", "POL", "SPM", "PCN", "PRI", "PSE", "PRT",
    /*  "PW",  "PY",  "QA",  "RE",  "RO",  "RS",  "RU",  "RW",  "SA",     */
        "PLW", "PRY", "QAT", "REU", "ROU", "SRB", "RUS", "RWA", "SAU",
    /*  "SB",  "SC",  "SD",  "SE",  "SG",  "SH",  "SI",  "SJ",     */
        "SLB", "SYC", "SDN", "SWE", "SGP", "SHN", "SVN", "SJM",
    /*  "SK",  "SL",  "SM",  "SN",  "SO",  "SR",  "SS",  "ST",  "SV",     */
        "SVK", "SLE", "SMR", "SEN", "SOM", "SUR", "SSD", "STP", "SLV",
    /*  "SX",  "SY",  "SZ",  "TC",  "TD",  "TF",  "TG",  "TH",  "TJ",     */
        "SXM", "SYR", "SWZ", "TCA", "TCD", "ATF", "TGO", "THA", "TJK",
    /*  "TK",  "TL",  "TM",  "TN",  "TO",  "TR",  "TT",  "TV",     */
        "TKL", "TLS", "TKM", "TUN", "TON", "TUR", "TTO", "TUV",
    /*  "TW",  "TZ",  "UA",  "UG",  "UM",  "US",  "UY",  "UZ",     */
        "TWN", "TZA", "UKR", "UGA", "UMI", "USA", "URY", "UZB",
    /*  "VA",  "VC",  "VE",  "VG",  "VI",  "VN",  "VU",  "WF",     */
        "VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF",
    /*  "WS",  "YE",  "YT",  "ZA",  "ZM",  "ZW",          */
        "WSM", "YEM", "MYT", "ZAF", "ZMB", "ZWE" };
    
    private static final String[] _obsoleteCountries3 = {
    /*  "AN",  "BU",  "CS",  "FX",  "RO",  "SU",  "TP",  "YD",  "YU",  "ZR" */
        "ANT", "BUR", "SCG", "FXX", "ROM", "SUN", "TMP", "YMD", "YUG", "ZAR",
    };


    public static String getCurrentCountryID(String oldID){
        int offset = findIndex(_deprecatedCountries, oldID);
        if (offset >= 0) {
            return _replacementCountries[offset];
        }
        return oldID;
    }

    public static String getCurrentLanguageID(String oldID){
        int offset = findIndex(_obsoleteLanguages, oldID);
        if (offset >= 0) {
            return _replacementLanguages[offset];
        }
        return oldID;
    }


}
