Index: millennium.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/millennium/millennium.module,v
retrieving revision 1.13.2.33.2.2.2.32
diff -u -p -r1.13.2.33.2.2.2.32 millennium.module
--- millennium.module	17 Oct 2009 02:29:20 -0000	1.13.2.33.2.2.2.32
+++ millennium.module	19 Oct 2009 09:13:54 -0000
@@ -60,6 +60,9 @@ define('MILLENNIUM_PREG_CLASS_SEARCH_EXC
  */
 function millennium_init() {
   global $_millennium_field_labels;
+  global $millennium_langcodes_to_human;
+  global $mattype;
+
   $_millennium_field_labels = array(
     'title' => t('Title'),
     'type' => t('Item type'),
@@ -85,6 +88,511 @@ function millennium_init() {
     'series' => t('Series'),
     'other_number' => t('Other number'),
   );
+
+  $mattype = array(
+    "a" => t("Book"),
+    "c" => t("Sheet music"), //"Notated music",
+    "d" => t("Sheet music"), //"Manuscript notated music",
+    "e" => t("Map"), //"Cartographic material",
+    "g" => t("Projected medium"),
+    "i" => t("Sound Recording"), //"Nonmusical sound recording",
+    "j" => t("Music"), //"Musical sound recording",
+    "k" => t("Graphic"), //"Two-dimensional nonprojectable graphic",
+    "m" => t("Computer file"),
+    "o" => t("Kit"),
+    "p" => t("Other"), //"Mixed material",
+    "r" => t("Object"), //"Three-dimensional artifact or naturally occurring object",
+    "t" => t("Manuscript") //"Manuscript language material",
+  );
+
+  $millennium_langcodes_to_human = array(
+    'aar' => t('Afar'),
+    'abk' => t('Abkhaz'),
+    'ace' => t('Achinese'),
+    'ach' => t('Acoli'),
+    'ada' => t('Adangme'),
+    'ady' => t('Adygei'),
+    'afa' => t('Afroasiatic'),
+    'afh' => t('Afrihili'),
+    'afr' => t('Afrikaans'),
+    'ain' => t('Ainu'),
+    'aka' => t('Akan'),
+    'akk' => t('Akkadian'),
+    'alb' => t('Albanian'),
+    'ale' => t('Aleut'),
+    'alg' => t('Algonquian'),
+    'alt' => t('Altai'),
+    'amh' => t('Amharic'),
+    'ang' => t('English, Old'),
+    'anp' => t('Angika'),
+    'apa' => t('Apache languages'),
+    'ara' => t('Arabic'),
+    'arc' => t('Aramaic'),
+    'arg' => t('Aragonese Spanish'),
+    'arm' => t('Armenian'),
+    'arn' => t('Mapuche'),
+    'arp' => t('Arapaho'),
+    'art' => t('Artificial'),
+    'arw' => t('Arawak'),
+    'asm' => t('Assamese'),
+    'ast' => t('Bable'),
+    'ath' => t('Athapascan'),
+    'aus' => t('Australian languages'),
+    'ava' => t('Avaric'),
+    'ave' => t('Avestan'),
+    'awa' => t('Awadhi'),
+    'aym' => t('Aymara'),
+    'aze' => t('Azerbaijani'),
+    'bad' => t('Banda languages'),
+    'bai' => t('Bamileke languages'),
+    'bak' => t('Bashkir'),
+    'bal' => t('Baluchi'),
+    'bam' => t('Bambara'),
+    'ban' => t('Balinese'),
+    'baq' => t('Basque'),
+    'bas' => t('Basa'),
+    'bat' => t('Baltic'),
+    'bej' => t('Beja'),
+    'bel' => t('Belarusian'),
+    'bem' => t('Bemba'),
+    'ben' => t('Bengali'),
+    'ber' => t('Berber'),
+    'bho' => t('Bhojpuri'),
+    'bih' => t('Bihari'),
+    'bik' => t('Bikol'),
+    'bin' => t('Edo'),
+    'bis' => t('Bislama'),
+    'bla' => t('Siksika'),
+    'bnt' => t('Bantu'),
+    'bos' => t('Bosnian'),
+    'bra' => t('Braj'),
+    'bre' => t('Breton'),
+    'btk' => t('Batak'),
+    'bua' => t('Buriat'),
+    'bug' => t('Bugis'),
+    'bul' => t('Bulgarian'),
+    'bur' => t('Burmese'),
+    'byn' => t('Bilin'),
+    'cad' => t('Caddo'),
+    'cai' => t('Central American Indian'),
+    'car' => t('Carib'),
+    'cat' => t('Catalan'),
+    'cau' => t('Caucasian'),
+    'ceb' => t('Cebuano'),
+    'cel' => t('Celtic'),
+    'cha' => t('Chamorro'),
+    'chb' => t('Chibcha'),
+    'che' => t('Chechen'),
+    'chg' => t('Chagatai'),
+    'chi' => t('Chinese'),
+    'chk' => t('Chuukese'),
+    'chm' => t('Mari'),
+    'chn' => t('Chinook jargon'),
+    'cho' => t('Choctaw'),
+    'chp' => t('Chipewyan'),
+    'chr' => t('Cherokee'),
+    'chu' => t('Church Slavic'),
+    'chv' => t('Chuvash'),
+    'chy' => t('Cheyenne'),
+    'cmc' => t('Chamic languages'),
+    'cop' => t('Coptic'),
+    'cor' => t('Cornish'),
+    'cos' => t('Corsican'),
+    'cpe' => t('Creoles and Pidgins, English-based'),
+    'cpf' => t('Creoles and Pidgins, French-based'),
+    'cpp' => t('Creoles and Pidgins, Portuguese-based'),
+    'cre' => t('Cree'),
+    'crh' => t('Crimean Tatar'),
+    'crp' => t('Creoles and Pidgins'),
+    'csb' => t('Kashubian'),
+    'cus' => t('Cushitic'),
+    'cze' => t('Czech'),
+    'dak' => t('Dakota'),
+    'dan' => t('Danish'),
+    'dar' => t('Dargwa'),
+    'day' => t('Dayak'),
+    'del' => t('Delaware'),
+    'den' => t('Slave'),
+    'dgr' => t('Dogrib'),
+    'din' => t('Dinka'),
+    'div' => t('Divehi'),
+    'doi' => t('Dogri'),
+    'dra' => t('Dravidian'),
+    'dsb' => t('Lower Sorbian'),
+    'dua' => t('Duala'),
+    'dum' => t('Dutch, Middle'),
+    'dut' => t('Dutch'),
+    'dyu' => t('Dyula'),
+    'dzo' => t('Dzongkha'),
+    'efi' => t('Efik'),
+    'egy' => t('Egyptian'),
+    'eka' => t('Ekajuk'),
+    'elx' => t('Elamite'),
+    'eng' => t('English'),
+    'enm' => t('English, Middle'),
+    'epo' => t('Esperanto'),
+    'est' => t('Estonian'),
+    'ewe' => t('Ewe'),
+    'ewo' => t('Ewondo'),
+    'fan' => t('Fang'),
+    'fao' => t('Faroese'),
+    'fat' => t('Fanti'),
+    'fij' => t('Fijian'),
+    'fil' => t('Filipino'),
+    'fin' => t('Finnish'),
+    'fiu' => t('Finno-Ugrian'),
+    'fon' => t('Fon'),
+    'fre' => t('French'),
+    'frm' => t('French, Middle'),
+    'fro' => t('French, Old'),
+    'frr' => t('North Frisian'),
+    'frs' => t('East Frisian'),
+    'fry' => t('Frisian'),
+    'ful' => t('Fula'),
+    'fur' => t('Friulian'),
+    'gaa' => t('GÃ£'),
+    'gay' => t('Gayo'),
+    'gba' => t('Gbaya'),
+    'gem' => t('Germanic'),
+    'geo' => t('Georgian'),
+    'ger' => t('German'),
+    'gez' => t('Ethiopic'),
+    'gil' => t('Gilbertese'),
+    'gla' => t('Scottish Gaelic'),
+    'gle' => t('Irish'),
+    'glg' => t('Galician'),
+    'glv' => t('Manx'),
+    'gmh' => t('German, Middle High'),
+    'goh' => t('German, Old High'),
+    'gon' => t('Gondi'),
+    'gor' => t('Gorontalo'),
+    'got' => t('Gothic'),
+    'grb' => t('Grebo'),
+    'grc' => t('Greek, Ancient'),
+    'gre' => t('Greek, Modern'),
+    'grn' => t('Guarani'),
+    'gsw' => t('Swiss German'),
+    'guj' => t('Gujarati'),
+    'gwi' => t('Gwich\'in'),
+    'hai' => t('Haida'),
+    'hat' => t('Haitian French Creole'),
+    'hau' => t('Hausa'),
+    'haw' => t('Hawaiian'),
+    'heb' => t('Hebrew'),
+    'her' => t('Herero'),
+    'hil' => t('Hiligaynon'),
+    'him' => t('Himachali'),
+    'hin' => t('Hindi'),
+    'hit' => t('Hittite'),
+    'hmn' => t('Hmong'),
+    'hmo' => t('Hiri Motu'),
+    'hsb' => t('Upper Sorbian'),
+    'hun' => t('Hungarian'),
+    'hup' => t('Hupa'),
+    'iba' => t('Iban'),
+    'ibo' => t('Igbo'),
+    'ice' => t('Icelandic'),
+    'ido' => t('Ido'),
+    'iii' => t('Sichuan Yi'),
+    'ijo' => t('Ijo'),
+    'iku' => t('Inuktitut'),
+    'ile' => t('Interlingue'),
+    'ilo' => t('Iloko'),
+    'ina' => t('Interlingua'),
+    'inc' => t('Indic'),
+    'ind' => t('Indonesian'),
+    'ine' => t('Indo-European'),
+    'inh' => t('Ingush'),
+    'ipk' => t('Inupiaq'),
+    'ira' => t('Iranian'),
+    'iro' => t('Iroquoian'),
+    'ita' => t('Italian'),
+    'jav' => t('Javanese'),
+    'jbo' => t('Lojban'),
+    'jpn' => t('Japanese'),
+    'jpr' => t('Judeo-Persian'),
+    'jrb' => t('Judeo-Arabic'),
+    'kaa' => t('Kara-Kalpak'),
+    'kab' => t('Kabyle'),
+    'kac' => t('Kachin'),
+    'kal' => t('KalÃ¢tdlisut'),
+    'kam' => t('Kamba'),
+    'kan' => t('Kannada'),
+    'kar' => t('Karen languages'),
+    'kas' => t('Kashmiri'),
+    'kau' => t('Kanuri'),
+    'kaw' => t('Kawi'),
+    'kaz' => t('Kazakh'),
+    'kbd' => t('Kabardian'),
+    'kha' => t('Khasi'),
+    'khi' => t('Khoisan'),
+    'khm' => t('Khmer'),
+    'kho' => t('Khotanese'),
+    'kik' => t('Kikuyu'),
+    'kin' => t('Kinyarwanda'),
+    'kir' => t('Kyrgyz'),
+    'kmb' => t('Kimbundu'),
+    'kok' => t('Konkani'),
+    'kom' => t('Komi'),
+    'kon' => t('Kongo'),
+    'kor' => t('Korean'),
+    'kos' => t('Kusaie'),
+    'kpe' => t('Kpelle'),
+    'krc' => t('Karachay-Balkar'),
+    'krl' => t('Karelian'),
+    'kro' => t('Kru'),
+    'kru' => t('Kurukh'),
+    'kua' => t('Kuanyama'),
+    'kum' => t('Kumyk'),
+    'kur' => t('Kurdish'),
+    'kut' => t('Kootenai'),
+    'lad' => t('Ladino'),
+    'lah' => t('Lahnd?'),
+    'lam' => t('Lamba'),
+    'lao' => t('Lao'),
+    'lat' => t('Latin'),
+    'lav' => t('Latvian'),
+    'lez' => t('Lezgian'),
+    'lim' => t('Limburgish'),
+    'lin' => t('Lingala'),
+    'lit' => t('Lithuanian'),
+    'lol' => t('Mongo-Nkundu'),
+    'loz' => t('Lozi'),
+    'ltz' => t('Luxembourgish'),
+    'lua' => t('Luba-Lulua'),
+    'lub' => t('Luba-Katanga'),
+    'lug' => t('Ganda'),
+    'lui' => t('LuiseÃ±o'),
+    'lun' => t('Lunda'),
+    'luo' => t('Luo'),
+    'lus' => t('Lushai'),
+    'mac' => t('Macedonian'),
+    'mad' => t('Madurese'),
+    'mag' => t('Magahi'),
+    'mah' => t('Marshallese'),
+    'mai' => t('Maithili'),
+    'mak' => t('Makasar'),
+    'mal' => t('Malayalam'),
+    'man' => t('Mandingo'),
+    'mao' => t('Maori'),
+    'map' => t('Austronesian'),
+    'mar' => t('Marathi'),
+    'mas' => t('Masai'),
+    'may' => t('Malay'),
+    'mdf' => t('Moksha'),
+    'mdr' => t('Mandar'),
+    'men' => t('Mende'),
+    'mga' => t('Irish, Middle'),
+    'mic' => t('Micmac'),
+    'min' => t('Minangkabau'),
+    'mis' => t('Miscellaneous languages'),
+    'mkh' => t('Mon-Khmer'),
+    'mlg' => t('Malagasy'),
+    'mlt' => t('Maltese'),
+    'mnc' => t('Manchu'),
+    'mni' => t('Manipuri'),
+    'mno' => t('Manobo languages'),
+    'moh' => t('Mohawk'),
+    // 'mol' => t('Moldavian'),  #Changed as per http://catalogablog.blogspot.com/2009/01/changes-to-marc-code-list-for-languages.html
+    'rum' => t('Moldovan'),
+    'mon' => t('Mongolian'),
+    'mos' => t('MoorÃ©'),
+    'mul' => t('Multiple languages'),
+    'mun' => t('Munda'),
+    'mus' => t('Creek'),
+    'mwl' => t('Mirandese'),
+    'mwr' => t('Marwari'),
+    'myn' => t('Mayan languages'),
+    'myv' => t('Erzya'),
+    'nah' => t('Nahuatl'),
+    'nai' => t('North American Indian'),
+    'nap' => t('Neapolitan Italian'),
+    'nau' => t('Nauru'),
+    'nav' => t('Navajo'),
+    'nbl' => t('Ndebele'),
+    'nde' => t('Ndebele'),
+    'ndo' => t('Ndonga'),
+    'nds' => t('Low German'),
+    'nep' => t('Nepali'),
+    'new' => t('Newari'),
+    'nia' => t('Nias'),
+    'nic' => t('Niger-Kordofanian'),
+    'niu' => t('Niuean'),
+    'nno' => t('Norwegian'),
+    'nob' => t('Norwegian'),
+    'nog' => t('Nogai'),
+    'non' => t('Old Norse'),
+    'nor' => t('Norwegian'),
+    'nqo' => t('N\'Ko'),
+    'nso' => t('Northern Sotho'),
+    'nub' => t('Nubian languages'),
+    'nwc' => t('Newari, Old'),
+    'nya' => t('Nyanja'),
+    'nym' => t('Nyamwezi'),
+    'nyn' => t('Nyankole'),
+    'nyo' => t('Nyoro'),
+    'nzi' => t('Nzima'),
+    'oci' => t('Occitan'),
+    'oji' => t('Ojibwa'),
+    'ori' => t('Oriya'),
+    'orm' => t('Oromo'),
+    'osa' => t('Osage'),
+    'oss' => t('Ossetic'),
+    'ota' => t('Turkish, Ottoman'),
+    'oto' => t('Otomian languages'),
+    'paa' => t('Papuan'),
+    'pag' => t('Pangasinan'),
+    'pal' => t('Pahlavi'),
+    'pam' => t('Pampanga'),
+    'pan' => t('Panjabi'),
+    'pap' => t('Papiamento'),
+    'pau' => t('Palauan'),
+    'peo' => t('Old Persian'),
+    'per' => t('Persian'),
+    'phi' => t('Philippine'),
+    'phn' => t('Phoenician'),
+    'pli' => t('Pali'),
+    'pol' => t('Polish'),
+    'pon' => t('Ponape'),
+    'por' => t('Portuguese'),
+    'pra' => t('Prakrit languages'),
+    'pro' => t('ProvenÃ§al'),
+    'pus' => t('Pushto'),
+    'que' => t('Quechua'),
+    'raj' => t('Rajasthani'),
+    'rap' => t('Rapanui'),
+    'rar' => t('Rarotongan'),
+    'roa' => t('Romance'),
+    'roh' => t('Raeto-Romance'),
+    'rom' => t('Romani'),
+    'rum' => t('Romanian'),
+    'run' => t('Rundi'),
+    'rup' => t('Aromanian'),
+    'rus' => t('Russian'),
+    'sad' => t('Sandawe'),
+    'sag' => t('Sango'),
+    'sah' => t('Yakut'),
+    'sai' => t('South American Indian'),
+    'sal' => t('Salishan languages'),
+    'sam' => t('Samaritan Aramaic'),
+    'san' => t('Sanskrit'),
+    'sas' => t('Sasak'),
+    'sat' => t('Santali'),
+    'scc' => t('Serbian'),
+    'scn' => t('Sicilian Italian'),
+    'sco' => t('Scots'),
+    'scr' => t('Croatian'),
+    'sel' => t('Selkup'),
+    'sem' => t('Semitic'),
+    'sga' => t('Irish, Old'),
+    'sgn' => t('Sign languages'),
+    'shn' => t('Shan'),
+    'sid' => t('Sidamo'),
+    'sin' => t('Sinhalese'),
+    'sio' => t('Siouan'),
+    'sit' => t('Sino-Tibetan'),
+    'sla' => t('Slavic'),
+    'slo' => t('Slovak'),
+    'slv' => t('Slovenian'),
+    'sma' => t('Southern Sami'),
+    'sme' => t('Northern Sami'),
+    'smi' => t('Sami'),
+    'smj' => t('Lule Sami'),
+    'smn' => t('Inari Sami'),
+    'smo' => t('Samoan'),
+    'sms' => t('Skolt Sami'),
+    'sna' => t('Shona'),
+    'snd' => t('Sindhi'),
+    'snk' => t('Soninke'),
+    'sog' => t('Sogdian'),
+    'som' => t('Somali'),
+    'son' => t('Songhai'),
+    'sot' => t('Sotho'),
+    'spa' => t('Spanish'),
+    'srd' => t('Sardinian'),
+    'srn' => t('Sranan'),
+    'srr' => t('Serer'),
+    'ssa' => t('Nilo-Saharan'),
+    'ssw' => t('Swazi'),
+    'suk' => t('Sukuma'),
+    'sun' => t('Sundanese'),
+    'sus' => t('Susu'),
+    'sux' => t('Sumerian'),
+    'swa' => t('Swahili'),
+    'swe' => t('Swedish'),
+    'syc' => t('Syriac'),
+    'syr' => t('Syriac, Modern'),
+    'tah' => t('Tahitian'),
+    'tai' => t('Tai'),
+    'tam' => t('Tamil'),
+    'tat' => t('Tatar'),
+    'tel' => t('Telugu'),
+    'tem' => t('Temne'),
+    'ter' => t('Terena'),
+    'tet' => t('Tetum'),
+    'tgk' => t('Tajik'),
+    'tgl' => t('Tagalog'),
+    'tha' => t('Thai'),
+    'tib' => t('Tibetan'),
+    'tig' => t('TigrÃ©'),
+    'tir' => t('Tigrinya'),
+    'tiv' => t('Tiv'),
+    'tkl' => t('Tokelauan'),
+    'tlh' => t('Klingon'),
+    'tli' => t('Tlingit'),
+    'tmh' => t('Tamashek'),
+    'tog' => t('Tonga'),
+    'ton' => t('Tongan'),
+    'tpi' => t('Tok Pisin'),
+    'tsi' => t('Tsimshian'),
+    'tsn' => t('Tswana'),
+    'tso' => t('Tsonga'),
+    'tuk' => t('Turkmen'),
+    'tum' => t('Tumbuka'),
+    'tup' => t('Tupi languages'),
+    'tur' => t('Turkish'),
+    'tut' => t('Altaic'),
+    'tvl' => t('Tuvaluan'),
+    'twi' => t('Twi'),
+    'tyv' => t('Tuvinian'),
+    'udm' => t('Udmurt'),
+    'uga' => t('Ugaritic'),
+    'uig' => t('Uighur'),
+    'ukr' => t('Ukrainian'),
+    'umb' => t('Umbundu'),
+    'und' => t('Undetermined'),
+    'urd' => t('Urdu'),
+    'uzb' => t('Uzbek'),
+    'vai' => t('Vai'),
+    'ven' => t('Venda'),
+    'vie' => t('Vietnamese'),
+    'vol' => t('VolapÃ¼k'),
+    'vot' => t('Votic'),
+    'wak' => t('Wakashan languages'),
+    'wal' => t('Wolayta'),
+    'war' => t('Waray'),
+    'was' => t('Washo'),
+    'wel' => t('Welsh'),
+    'wen' => t('Sorbian'),
+    'wln' => t('Walloon'),
+    'wol' => t('Wolof'),
+    'xal' => t('Oirat'),
+    'xho' => t('Xhosa'),
+    'yao' => t('Yao'),
+    'yap' => t('Yapese'),
+    'yid' => t('Yiddish'),
+    'yor' => t('Yoruba'),
+    'ypk' => t('Yupik languages'),
+    'zap' => t('Zapotec'),
+    'zbl' => t('Blissymbolics'),
+    'zen' => t('Zenaga'),
+    'zha' => t('Zhuang'),
+    'znd' => t('Zande languages'),
+    'zul' => t('Zulu'),
+    'zun' => t('Zuni'),
+    'zxx' => t('No linguistic content'),
+    'zza' => t('Zaza')
+  );
 }
 
 /**
@@ -2066,7 +2574,7 @@ function millennium_get_holdings_info($r
   <td width="22%" > <!-- field ! --></td>
   <td width="23%" > <!-- field % -->&nbsp; DISPONIBLE</td></tr><tr><td align="center" colspan="4">
 
-  <a href="http://xxxxxxxxxxxxxxxxxxx/resourceTOC.aspx?resourceID=54">Consultar el servicio a travÃ©s de la Biblioteca Digital
+  <a href="http://xxxxxxxxxxxxxxxxxxx/resourceTOC.aspx?resourceID=54">Consultar el servicio a travÃƒÂ©s de la Biblioteca Digital
   </td></tr>
 
   -- EXAMPLE 3 --
@@ -2135,496 +2643,7 @@ function millennium_help($path, $arg) {
 
 
 function _millennium_langcode_to_human($code) {
-  // TODO: extract PO
-  // http://www.loc.gov/marc/languages/
-  static $millennium_langcodes_to_human = array(
-    'aar' => 'Afar',
-    'abk' => 'Abkhaz',
-    'ace' => 'Achinese',
-    'ach' => 'Acoli',
-    'ada' => 'Adangme',
-    'ady' => 'Adygei',
-    'afa' => 'Afroasiatic',
-    'afh' => 'Afrihili',
-    'afr' => 'Afrikaans',
-    'ain' => 'Ainu',
-    'aka' => 'Akan',
-    'akk' => 'Akkadian',
-    'alb' => 'Albanian',
-    'ale' => 'Aleut',
-    'alg' => 'Algonquian',
-    'alt' => 'Altai',
-    'amh' => 'Amharic',
-    'ang' => 'English, Old',
-    'anp' => 'Angika',
-    'apa' => 'Apache languages',
-    'ara' => 'Arabic',
-    'arc' => 'Aramaic',
-    'arg' => 'Aragonese Spanish',
-    'arm' => 'Armenian',
-    'arn' => 'Mapuche',
-    'arp' => 'Arapaho',
-    'art' => 'Artificial',
-    'arw' => 'Arawak',
-    'asm' => 'Assamese',
-    'ast' => 'Bable',
-    'ath' => 'Athapascan',
-    'aus' => 'Australian languages',
-    'ava' => 'Avaric',
-    'ave' => 'Avestan',
-    'awa' => 'Awadhi',
-    'aym' => 'Aymara',
-    'aze' => 'Azerbaijani',
-    'bad' => 'Banda languages',
-    'bai' => 'Bamileke languages',
-    'bak' => 'Bashkir',
-    'bal' => 'Baluchi',
-    'bam' => 'Bambara',
-    'ban' => 'Balinese',
-    'baq' => 'Basque',
-    'bas' => 'Basa',
-    'bat' => 'Baltic',
-    'bej' => 'Beja',
-    'bel' => 'Belarusian',
-    'bem' => 'Bemba',
-    'ben' => 'Bengali',
-    'ber' => 'Berber',
-    'bho' => 'Bhojpuri',
-    'bih' => 'Bihari',
-    'bik' => 'Bikol',
-    'bin' => 'Edo',
-    'bis' => 'Bislama',
-    'bla' => 'Siksika',
-    'bnt' => 'Bantu',
-    'bos' => 'Bosnian',
-    'bra' => 'Braj',
-    'bre' => 'Breton',
-    'btk' => 'Batak',
-    'bua' => 'Buriat',
-    'bug' => 'Bugis',
-    'bul' => 'Bulgarian',
-    'bur' => 'Burmese',
-    'byn' => 'Bilin',
-    'cad' => 'Caddo',
-    'cai' => 'Central American Indian',
-    'car' => 'Carib',
-    'cat' => 'Catalan',
-    'cau' => 'Caucasian',
-    'ceb' => 'Cebuano',
-    'cel' => 'Celtic',
-    'cha' => 'Chamorro',
-    'chb' => 'Chibcha',
-    'che' => 'Chechen',
-    'chg' => 'Chagatai',
-    'chi' => 'Chinese',
-    'chk' => 'Chuukese',
-    'chm' => 'Mari',
-    'chn' => 'Chinook jargon',
-    'cho' => 'Choctaw',
-    'chp' => 'Chipewyan',
-    'chr' => 'Cherokee',
-    'chu' => 'Church Slavic',
-    'chv' => 'Chuvash',
-    'chy' => 'Cheyenne',
-    'cmc' => 'Chamic languages',
-    'cop' => 'Coptic',
-    'cor' => 'Cornish',
-    'cos' => 'Corsican',
-    'cpe' => 'Creoles and Pidgins, English-based',
-    'cpf' => 'Creoles and Pidgins, French-based',
-    'cpp' => 'Creoles and Pidgins, Portuguese-based',
-    'cre' => 'Cree',
-    'crh' => 'Crimean Tatar',
-    'crp' => 'Creoles and Pidgins',
-    'csb' => 'Kashubian',
-    'cus' => 'Cushitic',
-    'cze' => 'Czech',
-    'dak' => 'Dakota',
-    'dan' => 'Danish',
-    'dar' => 'Dargwa',
-    'day' => 'Dayak',
-    'del' => 'Delaware',
-    'den' => 'Slave',
-    'dgr' => 'Dogrib',
-    'din' => 'Dinka',
-    'div' => 'Divehi',
-    'doi' => 'Dogri',
-    'dra' => 'Dravidian',
-    'dsb' => 'Lower Sorbian',
-    'dua' => 'Duala',
-    'dum' => 'Dutch, Middle',
-    'dut' => 'Dutch',
-    'dyu' => 'Dyula',
-    'dzo' => 'Dzongkha',
-    'efi' => 'Efik',
-    'egy' => 'Egyptian',
-    'eka' => 'Ekajuk',
-    'elx' => 'Elamite',
-    'eng' => 'English',
-    'enm' => 'English, Middle',
-    'epo' => 'Esperanto',
-    'est' => 'Estonian',
-    'ewe' => 'Ewe',
-    'ewo' => 'Ewondo',
-    'fan' => 'Fang',
-    'fao' => 'Faroese',
-    'fat' => 'Fanti',
-    'fij' => 'Fijian',
-    'fil' => 'Filipino',
-    'fin' => 'Finnish',
-    'fiu' => 'Finno-Ugrian',
-    'fon' => 'Fon',
-    'fre' => 'French',
-    'frm' => 'French, Middle',
-    'fro' => 'French, Old',
-    'frr' => 'North Frisian',
-    'frs' => 'East Frisian',
-    'fry' => 'Frisian',
-    'ful' => 'Fula',
-    'fur' => 'Friulian',
-    'gaa' => 'Gã',
-    'gay' => 'Gayo',
-    'gba' => 'Gbaya',
-    'gem' => 'Germanic',
-    'geo' => 'Georgian',
-    'ger' => 'German',
-    'gez' => 'Ethiopic',
-    'gil' => 'Gilbertese',
-    'gla' => 'Scottish Gaelic',
-    'gle' => 'Irish',
-    'glg' => 'Galician',
-    'glv' => 'Manx',
-    'gmh' => 'German, Middle High',
-    'goh' => 'German, Old High',
-    'gon' => 'Gondi',
-    'gor' => 'Gorontalo',
-    'got' => 'Gothic',
-    'grb' => 'Grebo',
-    'grc' => 'Greek, Ancient',
-    'gre' => 'Greek, Modern',
-    'grn' => 'Guarani',
-    'gsw' => 'Swiss German',
-    'guj' => 'Gujarati',
-    'gwi' => 'Gwich\'in',
-    'hai' => 'Haida',
-    'hat' => 'Haitian French Creole',
-    'hau' => 'Hausa',
-    'haw' => 'Hawaiian',
-    'heb' => 'Hebrew',
-    'her' => 'Herero',
-    'hil' => 'Hiligaynon',
-    'him' => 'Himachali',
-    'hin' => 'Hindi',
-    'hit' => 'Hittite',
-    'hmn' => 'Hmong',
-    'hmo' => 'Hiri Motu',
-    'hsb' => 'Upper Sorbian',
-    'hun' => 'Hungarian',
-    'hup' => 'Hupa',
-    'iba' => 'Iban',
-    'ibo' => 'Igbo',
-    'ice' => 'Icelandic',
-    'ido' => 'Ido',
-    'iii' => 'Sichuan Yi',
-    'ijo' => 'Ijo',
-    'iku' => 'Inuktitut',
-    'ile' => 'Interlingue',
-    'ilo' => 'Iloko',
-    'ina' => 'Interlingua',
-    'inc' => 'Indic',
-    'ind' => 'Indonesian',
-    'ine' => 'Indo-European',
-    'inh' => 'Ingush',
-    'ipk' => 'Inupiaq',
-    'ira' => 'Iranian',
-    'iro' => 'Iroquoian',
-    'ita' => 'Italian',
-    'jav' => 'Javanese',
-    'jbo' => 'Lojban',
-    'jpn' => 'Japanese',
-    'jpr' => 'Judeo-Persian',
-    'jrb' => 'Judeo-Arabic',
-    'kaa' => 'Kara-Kalpak',
-    'kab' => 'Kabyle',
-    'kac' => 'Kachin',
-    'kal' => 'Kalâtdlisut',
-    'kam' => 'Kamba',
-    'kan' => 'Kannada',
-    'kar' => 'Karen languages',
-    'kas' => 'Kashmiri',
-    'kau' => 'Kanuri',
-    'kaw' => 'Kawi',
-    'kaz' => 'Kazakh',
-    'kbd' => 'Kabardian',
-    'kha' => 'Khasi',
-    'khi' => 'Khoisan',
-    'khm' => 'Khmer',
-    'kho' => 'Khotanese',
-    'kik' => 'Kikuyu',
-    'kin' => 'Kinyarwanda',
-    'kir' => 'Kyrgyz',
-    'kmb' => 'Kimbundu',
-    'kok' => 'Konkani',
-    'kom' => 'Komi',
-    'kon' => 'Kongo',
-    'kor' => 'Korean',
-    'kos' => 'Kusaie',
-    'kpe' => 'Kpelle',
-    'krc' => 'Karachay-Balkar',
-    'krl' => 'Karelian',
-    'kro' => 'Kru',
-    'kru' => 'Kurukh',
-    'kua' => 'Kuanyama',
-    'kum' => 'Kumyk',
-    'kur' => 'Kurdish',
-    'kut' => 'Kootenai',
-    'lad' => 'Ladino',
-    'lah' => 'Lahnd?',
-    'lam' => 'Lamba',
-    'lao' => 'Lao',
-    'lat' => 'Latin',
-    'lav' => 'Latvian',
-    'lez' => 'Lezgian',
-    'lim' => 'Limburgish',
-    'lin' => 'Lingala',
-    'lit' => 'Lithuanian',
-    'lol' => 'Mongo-Nkundu',
-    'loz' => 'Lozi',
-    'ltz' => 'Luxembourgish',
-    'lua' => 'Luba-Lulua',
-    'lub' => 'Luba-Katanga',
-    'lug' => 'Ganda',
-    'lui' => 'Luiseño',
-    'lun' => 'Lunda',
-    'luo' => 'Luo',
-    'lus' => 'Lushai',
-    'mac' => 'Macedonian',
-    'mad' => 'Madurese',
-    'mag' => 'Magahi',
-    'mah' => 'Marshallese',
-    'mai' => 'Maithili',
-    'mak' => 'Makasar',
-    'mal' => 'Malayalam',
-    'man' => 'Mandingo',
-    'mao' => 'Maori',
-    'map' => 'Austronesian',
-    'mar' => 'Marathi',
-    'mas' => 'Masai',
-    'may' => 'Malay',
-    'mdf' => 'Moksha',
-    'mdr' => 'Mandar',
-    'men' => 'Mende',
-    'mga' => 'Irish, Middle',
-    'mic' => 'Micmac',
-    'min' => 'Minangkabau',
-    'mis' => 'Miscellaneous languages',
-    'mkh' => 'Mon-Khmer',
-    'mlg' => 'Malagasy',
-    'mlt' => 'Maltese',
-    'mnc' => 'Manchu',
-    'mni' => 'Manipuri',
-    'mno' => 'Manobo languages',
-    'moh' => 'Mohawk',
-    // 'mol' => 'Moldavian',  #Changed as per http://catalogablog.blogspot.com/2009/01/changes-to-marc-code-list-for-languages.html
-    'rum' => 'Moldovan',
-    'mon' => 'Mongolian',
-    'mos' => 'Mooré',
-    'mul' => 'Multiple languages',
-    'mun' => 'Munda',
-    'mus' => 'Creek',
-    'mwl' => 'Mirandese',
-    'mwr' => 'Marwari',
-    'myn' => 'Mayan languages',
-    'myv' => 'Erzya',
-    'nah' => 'Nahuatl',
-    'nai' => 'North American Indian',
-    'nap' => 'Neapolitan Italian',
-    'nau' => 'Nauru',
-    'nav' => 'Navajo',
-    'nbl' => 'Ndebele',
-    'nde' => 'Ndebele',
-    'ndo' => 'Ndonga',
-    'nds' => 'Low German',
-    'nep' => 'Nepali',
-    'new' => 'Newari',
-    'nia' => 'Nias',
-    'nic' => 'Niger-Kordofanian',
-    'niu' => 'Niuean',
-    'nno' => 'Norwegian',
-    'nob' => 'Norwegian',
-    'nog' => 'Nogai',
-    'non' => 'Old Norse',
-    'nor' => 'Norwegian',
-    'nqo' => 'N\'Ko',
-    'nso' => 'Northern Sotho',
-    'nub' => 'Nubian languages',
-    'nwc' => 'Newari, Old',
-    'nya' => 'Nyanja',
-    'nym' => 'Nyamwezi',
-    'nyn' => 'Nyankole',
-    'nyo' => 'Nyoro',
-    'nzi' => 'Nzima',
-    'oci' => 'Occitan',
-    'oji' => 'Ojibwa',
-    'ori' => 'Oriya',
-    'orm' => 'Oromo',
-    'osa' => 'Osage',
-    'oss' => 'Ossetic',
-    'ota' => 'Turkish, Ottoman',
-    'oto' => 'Otomian languages',
-    'paa' => 'Papuan',
-    'pag' => 'Pangasinan',
-    'pal' => 'Pahlavi',
-    'pam' => 'Pampanga',
-    'pan' => 'Panjabi',
-    'pap' => 'Papiamento',
-    'pau' => 'Palauan',
-    'peo' => 'Old Persian',
-    'per' => 'Persian',
-    'phi' => 'Philippine',
-    'phn' => 'Phoenician',
-    'pli' => 'Pali',
-    'pol' => 'Polish',
-    'pon' => 'Ponape',
-    'por' => 'Portuguese',
-    'pra' => 'Prakrit languages',
-    'pro' => 'Provençal',
-    'pus' => 'Pushto',
-    'que' => 'Quechua',
-    'raj' => 'Rajasthani',
-    'rap' => 'Rapanui',
-    'rar' => 'Rarotongan',
-    'roa' => 'Romance',
-    'roh' => 'Raeto-Romance',
-    'rom' => 'Romani',
-    'rum' => 'Romanian',
-    'run' => 'Rundi',
-    'rup' => 'Aromanian',
-    'rus' => 'Russian',
-    'sad' => 'Sandawe',
-    'sag' => 'Sango',
-    'sah' => 'Yakut',
-    'sai' => 'South American Indian',
-    'sal' => 'Salishan languages',
-    'sam' => 'Samaritan Aramaic',
-    'san' => 'Sanskrit',
-    'sas' => 'Sasak',
-    'sat' => 'Santali',
-    'scc' => 'Serbian',
-    'scn' => 'Sicilian Italian',
-    'sco' => 'Scots',
-    'scr' => 'Croatian',
-    'sel' => 'Selkup',
-    'sem' => 'Semitic',
-    'sga' => 'Irish, Old',
-    'sgn' => 'Sign languages',
-    'shn' => 'Shan',
-    'sid' => 'Sidamo',
-    'sin' => 'Sinhalese',
-    'sio' => 'Siouan',
-    'sit' => 'Sino-Tibetan',
-    'sla' => 'Slavic',
-    'slo' => 'Slovak',
-    'slv' => 'Slovenian',
-    'sma' => 'Southern Sami',
-    'sme' => 'Northern Sami',
-    'smi' => 'Sami',
-    'smj' => 'Lule Sami',
-    'smn' => 'Inari Sami',
-    'smo' => 'Samoan',
-    'sms' => 'Skolt Sami',
-    'sna' => 'Shona',
-    'snd' => 'Sindhi',
-    'snk' => 'Soninke',
-    'sog' => 'Sogdian',
-    'som' => 'Somali',
-    'son' => 'Songhai',
-    'sot' => 'Sotho',
-    'spa' => 'Spanish',
-    'srd' => 'Sardinian',
-    'srn' => 'Sranan',
-    'srr' => 'Serer',
-    'ssa' => 'Nilo-Saharan',
-    'ssw' => 'Swazi',
-    'suk' => 'Sukuma',
-    'sun' => 'Sundanese',
-    'sus' => 'Susu',
-    'sux' => 'Sumerian',
-    'swa' => 'Swahili',
-    'swe' => 'Swedish',
-    'syc' => 'Syriac',
-    'syr' => 'Syriac, Modern',
-    'tah' => 'Tahitian',
-    'tai' => 'Tai',
-    'tam' => 'Tamil',
-    'tat' => 'Tatar',
-    'tel' => 'Telugu',
-    'tem' => 'Temne',
-    'ter' => 'Terena',
-    'tet' => 'Tetum',
-    'tgk' => 'Tajik',
-    'tgl' => 'Tagalog',
-    'tha' => 'Thai',
-    'tib' => 'Tibetan',
-    'tig' => 'Tigré',
-    'tir' => 'Tigrinya',
-    'tiv' => 'Tiv',
-    'tkl' => 'Tokelauan',
-    'tlh' => 'Klingon',
-    'tli' => 'Tlingit',
-    'tmh' => 'Tamashek',
-    'tog' => 'Tonga',
-    'ton' => 'Tongan',
-    'tpi' => 'Tok Pisin',
-    'tsi' => 'Tsimshian',
-    'tsn' => 'Tswana',
-    'tso' => 'Tsonga',
-    'tuk' => 'Turkmen',
-    'tum' => 'Tumbuka',
-    'tup' => 'Tupi languages',
-    'tur' => 'Turkish',
-    'tut' => 'Altaic',
-    'tvl' => 'Tuvaluan',
-    'twi' => 'Twi',
-    'tyv' => 'Tuvinian',
-    'udm' => 'Udmurt',
-    'uga' => 'Ugaritic',
-    'uig' => 'Uighur',
-    'ukr' => 'Ukrainian',
-    'umb' => 'Umbundu',
-    'und' => 'Undetermined',
-    'urd' => 'Urdu',
-    'uzb' => 'Uzbek',
-    'vai' => 'Vai',
-    'ven' => 'Venda',
-    'vie' => 'Vietnamese',
-    'vol' => 'Volapük',
-    'vot' => 'Votic',
-    'wak' => 'Wakashan languages',
-    'wal' => 'Wolayta',
-    'war' => 'Waray',
-    'was' => 'Washo',
-    'wel' => 'Welsh',
-    'wen' => 'Sorbian',
-    'wln' => 'Walloon',
-    'wol' => 'Wolof',
-    'xal' => 'Oirat',
-    'xho' => 'Xhosa',
-    'yao' => 'Yao',
-    'yap' => 'Yapese',
-    'yid' => 'Yiddish',
-    'yor' => 'Yoruba',
-    'ypk' => 'Yupik languages',
-    'zap' => 'Zapotec',
-    'zbl' => 'Blissymbolics',
-    'zen' => 'Zenaga',
-    'zha' => 'Zhuang',
-    'znd' => 'Zande languages',
-    'zul' => 'Zulu',
-    'zun' => 'Zuni',
-    'zxx' => 'No linguistic content',
-    'zza' => 'Zaza'
-  );
+  global $millennium_langcodes_to_human;
   return (isset($millennium_langcodes_to_human[$code]) ? $millennium_langcodes_to_human[$code] : $code);
 }
 
@@ -2637,23 +2656,9 @@ function millennium_marcleader_to_mattyp
   $code7 = drupal_substr($leader, 7, 1);
   // http://www.loc.gov/marc/bibliographic/bdleader.html
   // TODO: extract PO
-  static $mattyype = array(
-    "a" => "Book",
-    "c" => "Sheet music", #"Notated music",
-    "d" => "Sheet music", #"Manuscript notated music",
-    "e" => "Map", #"Cartographic material",
-    "g" => "Projected medium",
-    "i" => "Sound Recording", #"Nonmusical sound recording",
-    "j" => "Music", #"Musical sound recording",
-    "k" => "Graphic", #"Two-dimensional nonprojectable graphic",
-    "m" => "Computer file",
-    "o" => "Kit",
-    "p" => "Other", #"Mixed material",
-    "r" => "Object", #"Three-dimensional artifact or naturally occurring object",
-    "t" => "Manuscript" #"Manuscript language material",
-  );
+  global $mattype;
   if ($code7 == "s") return "Periodicals";
-  return (isset($mattyype[$code6]) ? $mattyype[$code6] : false);
+  return (isset($mattype[$code6]) ? $mattype[$code6] : false);
 }
 
 /**
@@ -2831,7 +2836,7 @@ function millennium_token_values($type, 
 }
 
 /**
- * Remove diacritics from unicode characters (áéíóú => aeiou)
+ * Remove diacritics from unicode characters (Ã¡Ã©Ã­Ã³Ãº => aeiou)
  */
  /*
 function _millennium_utf8_diacritics_remove($string) {
