var covForm = new Array();
var covName = new Array();
var catForm = new Array();
var catName = new Array();
var catStock = new Array();
var polyName = new Array();
var polyForm = new Array();
var anForm = new Array();
var anName = new Array();
var acidName = new Array();
var acidForm = new Array();
var quizName = new Array();
var possCompounds = new Array();
var randomForm;
var randomFormHTML;
var randomName;
var randomCatNum;
var randomAnNum;
var quizType;
var tempQuizType;
var whichQuiz;
var theQuestion;
var theAnswer;
var quizWindowOpened;
var tableWindowOpened;
var helpWindowOpened;
var emailAdd = 'chemistry@chemistry.alanearhart.org';
var dateMod = '7\/30\/06';

// Available quiz names

quizName[0]  = "Binary Molecular Compounds: Names From Formulas";
quizName[1]  = "Binary Molecular Compounds: Formulas From Names";
quizName[2]  = "Monatomic Cations: Names From Formulas";
quizName[3]  = "Monatomic Cations: Formulas From Names";
quizName[4]  = "Monatomic Anions: Names From Formulas";
quizName[5]  = "Monatomic Anions: Formulas From Names";
quizName[6]  = "Binary Ionic Compounds: Names From Formulas";
quizName[7]  = "Binary Ionic Compounds: Formulas From Names";
quizName[8]  = "Polyatomic Ionic Compounds: Names From Formulas";
quizName[9]  = "Polyatomic Ionic Compounds: Formulas From Names";
quizName[10] = "Polyatomic and Binary Ionic Compounds: Names From Formulas";
quizName[11] = "Polyatomic and Binary Ionic Compounds: Formulas From Names";
quizName[12] = "Binary Acids and Oxyacids: Names From Formulas";
quizName[13] = "Binary Acids and Oxyacids: Formulas From Names";
quizName[14] = "Random Selection From All But Acids";
quizName[15] = "Random Selection From Everything";

// Molecular compounds
//     0-173 binary
//   174-182 binary hydrogen

 covForm[0] = 'SbBr3';
 covName[0] = 'antimony tribromide';
 covForm[1] = 'SbCl3';
 covName[1] = 'antimony trichloride';
 covForm[2] = 'SbCl5';
 covName[2] = 'antimony pentachloride';
 covForm[3] = 'SbF3';
 covName[3] = 'antimony trifluoride';
 covForm[4] = 'SbF5';
 covName[4] = 'antimony pentafluoride';
 covForm[5] = 'SbI3';
 covName[5] = 'antimony triiodide';
 covForm[6] = 'SbI5';
 covName[6] = 'antimony pentaiodide';
 covForm[7] = 'Sb2O3';
 covName[7] = 'diantimony trioxide';
 covForm[8] = 'Sb2O5';
 covName[8] = 'diantimony pentoxide';
 covForm[9] = 'Sb2S3';
 covName[9] = 'diantimony trisulfide';
covForm[10] = 'Sb2S5';
covName[10] = 'diantimony pentasulfide';
covForm[11] = 'Sb4O10';
covName[11] = 'tetraantimony decoxide';
covForm[12] = 'Sb4O6';
covName[12] = 'tetraantimony hexoxide';

covForm[13] = 'AsBr3';
covName[13] = 'arsenic tribromide';
covForm[14] = 'AsCl3';
covName[14] = 'arsenic trichloride';
covForm[15] = 'AsF3';
covName[15] = 'arsenic trifluoride';
covForm[16] = 'AsF5';
covName[16] = 'arsenic pentafluoride';
covForm[17] = 'AsI2';
covName[17] = 'arsenic diiodide';
covForm[18] = 'AsI3';
covName[18] = 'arsenic triiodide';
covForm[19] = 'AsI5';
covName[19] = 'arsenic pentaiodide';
covForm[20] = 'AsP';
covName[20] = 'arsenic monophosphide';
covForm[21] = 'As2O3';
covName[21] = 'diarsenic trioxide';
covForm[22] = 'As2O5';
covName[22] = 'diarsenic pentoxide';
covForm[23] = 'As2S2';
covName[23] = 'diarsenic disulfide';
covForm[24] = 'As2S3';
covName[24] = 'diarsenic trisulfide';
covForm[25] = 'As2S5';
covName[25] = 'diarsenic pentasulfide';
covForm[26] = 'As4O6';
covName[26] = 'tetraarsenic hexoxide';

covForm[27] = 'BBr3';
covName[27] = 'boron tribromide';
covForm[28] = 'BCl3';
covName[28] = 'boron trichloride';
covForm[29] = 'BF3';
covName[29] = 'boron trifluoride';
covForm[30] = 'BI3';
covName[30] = 'boron triiodide';
covForm[31] = 'BN';
covName[31] = 'boron mononitride';
covForm[32] = 'BP';
covName[32] = 'boron monophosphide';
covForm[33] = 'B2O3';
covName[33] = 'diboron trioxide';
covForm[34] = 'B2S3';
covName[34] = 'diboron trisulfide';
covForm[35] = 'B2S5';
covName[35] = 'diboron pentasulfide';
covForm[36] = 'B2Se3';
covName[36] = 'diboron triselenide';
covForm[37] = 'B3Si';
covName[37] = 'triboron monosilicide';
covForm[38] = 'B4C';
covName[38] = 'tetraboron monocarbide';
covForm[39] = 'B6Si';
covName[39] = 'hexaboron monosilicide';

covForm[40] = 'BrCl';
covName[40] = 'bromine monochloride';
covForm[41] = 'BrF';
covName[41] = 'bromine monofluoride';
covForm[42] = 'BrF3';
covName[42] = 'bromine trifluoride';
covForm[43] = 'BrF5';
covName[43] = 'bromine pentafluoride';
covForm[44] = 'BrO2';
covName[44] = 'bromine dioxide';
covForm[45] = 'Br2O';
covName[45] = 'dibromine monoxide';
covForm[46] = 'Br3O8';
covName[46] = 'tribromine octoxide';

covForm[47] = 'CBr4';
covName[47] = 'carbon tetrabromide';
covForm[48] = 'CCl4';
covName[48] = 'carbon tetrachloride';
covForm[49] = 'CF4';
covName[49] = 'carbon tetrafluoride';
covForm[50] = 'CI4';
covName[50] = 'carbon tetraiodide';
covForm[51] = 'CO';
covName[51] = 'carbon monoxide';
covForm[52] = 'CO2';
covName[52] = 'carbon dioxide';
covForm[53] = 'CS2';
covName[53] = 'carbon disulfide';
covForm[54] = 'CSe2';
covName[54] = 'carbon diselenide';

covForm[55] = 'ClF';
covName[55] = 'chlorine monofluoride';
covForm[56] = 'ClF3';
covName[56] = 'chlorine trifluoride';
covForm[57] = 'ClO2';
covName[57] = 'chlorine dioxide';
covForm[58] = 'ClO4';
covName[58] = 'chlorine tetroxide';
covForm[59] = 'Cl2O';
covName[59] = 'dichlorine monoxide';
covForm[60] = 'Cl2O7';
covName[60] = 'dichlorine heptoxide';
covForm[61] = 'Cl2O8';
covName[61] = 'dichlorine octoxide';

covForm[62] = 'GeBr2';
covName[62] = 'germanium dibromide';
covForm[63] = 'GeBr4';
covName[63] = 'germanium tetrabromide';
covForm[64] = 'GeCl2';
covName[64] = 'germanium dichloride';
covForm[65] = 'GeCl4';
covName[65] = 'germanium tetrachloride';
covForm[66] = 'GeF2';
covName[66] = 'germanium difluoride';
covForm[67] = 'GeF4';
covName[67] = 'germanium tetrafluoride';
covForm[68] = 'GeI2';
covName[68] = 'germanium diiodide';
covForm[69] = 'GeO';
covName[69] = 'germanium monoxide';
covForm[70] = 'GeO2';
covName[70] = 'germanium dioxide';
covForm[71] = 'GeS';
covName[71] = 'germanium monosulfide';
covForm[72] = 'GeS2';
covName[72] = 'germanium disulfide';
covForm[73] = 'Ge3N2';
covName[73] = 'trigermanium dinitride';
covForm[74] = 'Ge3N4';
covName[74] = 'trigermanium tetranitride';

covForm[75] = 'IBr';
covName[75] = 'iodine monobromide';
covForm[76] = 'IBr3';
covName[76] = 'iodine tribromide';
covForm[77] = 'ICl';
covName[77] = 'iodine monochloride';
covForm[78] = 'ICl3';
covName[78] = 'iodine trichloride';
covForm[79] = 'IF6';
covName[79] = 'iodine hexafluoride';
covForm[80] = 'IF7';
covName[80] = 'iodine heptafluoride';
covForm[81] = 'IO2';
covName[81] = 'iodine dioxide';
covForm[82] = 'I2O4';
covName[82] = 'diiodine tetroxide';
covForm[83] = 'I2O5';
covName[83] = 'diiodine pentoxide';
covForm[84] = 'I4O9';
covName[84] = 'tetraiodine nonoxide';

covForm[85] = 'KrF2';
covName[85] = 'krypton difluoride';

covForm[86] = 'NBr3';
covName[86] = 'nitrogen tribromide';
covForm[87] = 'NCl3';
covName[87] = 'nitrogen trichloride';
covForm[88] = 'NF3';
covName[88] = 'nitrogen trifluoride';
covForm[89] = 'NI3';
covName[89] = 'nitrogen triiodide';
covForm[90] = 'NO';
covName[90] = 'nitrogen monoxide';
covForm[91] = 'NO2';
covName[91] = 'nitrogen dioxide';
covForm[92] = 'NO3';
covName[92] = 'nitrogen trioxide';
covForm[93] = 'N2Br4';
covName[93] = 'dinitrogen tetrabromide';
covForm[94] = 'N2F4';
covName[94] = 'dinitrogen tetrafluoride';
covForm[95] = 'N2O';
covName[95] = 'dinitrogen monoxide';
covForm[96] = 'N2O3';
covName[96] = 'dinitrogen trioxide';
covForm[97] = 'N2O4';
covName[97] = 'dinitrogen tetroxide';
covForm[98] = 'N2O5';
covName[98] = 'dinitrogen pentoxide';
covForm[99] = 'N2S5';
covName[99] = 'dinitrogen pentasulfide';
covForm[100] = 'N4S4';
covName[100] = 'tetranitrogen tetrasulfide';

covForm[101] = 'OF2';
covName[101] = 'oxygen difluoride';
covForm[102] = 'O2F2';
covName[102] = 'dioxygen difluoride';

covForm[103] = 'PBr3';
covName[103] = 'phosphorus tribromide';
covForm[104] = 'PBr5';
covName[104] = 'phosphorus pentabromide';
covForm[105] = 'PCl2';
covName[105] = 'phosphorus dichloride';
covForm[106] = 'PCl3';
covName[106] = 'phosphorus trichloride';
covForm[107] = 'PCl5';
covName[107] = 'phosphorus pentachloride';
covForm[108] = 'PF3';
covName[108] = 'phosphorus trifluoride';
covForm[109] = 'PF5';
covName[109] = 'phosphorus pentafluoride';
covForm[110] = 'PI3';
covName[110] = 'phosphorus triiodide';
covForm[111] = 'P2O3';
covName[111] = 'diphosphorus trioxide';
covForm[112] = 'P2O4';
covName[112] = 'diphosphorus tetroxide';
covForm[113] = 'P2O5';
covName[113] = 'diphosphorus pentoxide';
covForm[114] = 'P2S5';
covName[114] = 'diphosphorus pentasulfide';
covForm[115] = 'P2Se5';
covName[115] = 'diphosphorus pentaselenide';
covForm[116] = 'P4O10';
covName[116] = 'tetraphosphorus decoxide';
covForm[117] = 'P4O6';
covName[117] = 'tetraphosphorus hexoxide';
covForm[118] = 'P4S10';
covName[118] = 'tetraphosphorus decasulfide';
covForm[119] = 'P4S7';
covName[119] = 'tetraphosphorus heptasulfide';
covForm[120] = 'P4Se3';
covName[120] = 'tetraphosphorus triselenide';

covForm[121] = 'SeBr4';
covName[121] = 'selenium tetrabromide';
covForm[122] = 'SeCl4';
covName[122] = 'selenium tetrachloride';
covForm[123] = 'SeF4';
covName[123] = 'selenium tetrafluoride';
covForm[124] = 'SeF6';
covName[124] = 'selenium hexafluoride';
covForm[125] = 'SeO2';
covName[125] = 'selenium dioxide';
covForm[126] = 'SeO3';
covName[126] = 'selenium trioxide';
covForm[127] = 'SeS';
covName[127] = 'selenium monosulfide';
covForm[128] = 'SeS2';
covName[128] = 'selenium disulfide';
covForm[129] = 'Se2Br2';
covName[129] = 'diselenium dibromide';
covForm[130] = 'Se2Cl2';
covName[130] = 'diselenium dichloride';
covForm[131] = 'Se2I2';
covName[131] = 'diselenium diiodide';

covForm[132] = 'SiBr4';
covName[132] = 'silicon tetrabromide';
covForm[133] = 'SiCl4';
covName[133] = 'silicon tetrachloride';
covForm[134] = 'SiF4';
covName[134] = 'silicon tetrafluoride';
covForm[135] = 'SiI4';
covName[135] = 'silicon tetraiodide';
covForm[136] = 'SiO';
covName[136] = 'silicon monoxide';
covForm[137] = 'SiO2';
covName[137] = 'silicon dioxide';
covForm[138] = 'SiS';
covName[138] = 'silicon monosulfide';
covForm[139] = 'SiS2';
covName[139] = 'silicon disulfide';
covForm[140] = 'Si2Br6';
covName[140] = 'disilicon hexabromide';
covForm[141] = 'Si2Cl6';
covName[141] = 'disilicon hexachloride';
covForm[142] = 'Si2F6';
covName[142] = 'disilicon hexafluoride';
covForm[143] = 'Si2I6';
covName[143] = 'disilicon hexaiodide';

covForm[144] = 'SCl2';
covName[144] = 'sulfur dichloride';
covForm[145] = 'SCl4';
covName[145] = 'sulfur tetrachloride';
covForm[146] = 'SF2';
covName[146] = 'sulfur difluoride';
covForm[147] = 'SF4';
covName[147] = 'sulfur tetrafluoride';
covForm[148] = 'SF6';
covName[148] = 'sulfur hexafluoride';
covForm[149] = 'SO';
covName[149] = 'sulfur monoxide';
covForm[150] = 'SO2';
covName[150] = 'sulfur dioxide';
covForm[151] = 'SO3';
covName[151] = 'sulfur trioxide';
covForm[152] = 'SO4';
covName[152] = 'sulfur tetroxide';
covForm[153] = 'S2Br2';
covName[153] = 'disulfur dibromide';
covForm[154] = 'S2Cl2';
covName[154] = 'disulfur dichloride';
covForm[155] = 'S2F10';
covName[155] = 'disulfur decafluoride';
covForm[156] = 'S2O7';
covName[156] = 'disulfur heptoxide';
covForm[157] = 'S4N2';
covName[157] = 'tetrasulfur dinitride';
covForm[158] = 'S4N4';
covName[158] = 'tetrasulfur tetranitride';

covForm[159] = 'TeBr2';
covName[159] = 'tellurium dibromide';
covForm[160] = 'TeBr4';
covName[160] = 'tellurium tetrabromide';
covForm[161] = 'TeCl2';
covName[161] = 'tellurium dichloride';
covForm[162] = 'TeCl4';
covName[162] = 'tellurium tetrachloride';
covForm[163] = 'TeF4';
covName[163] = 'tellurium tetrafluoride';
covForm[164] = 'TeI2';
covName[164] = 'tellurium diiodide';
covForm[165] = 'TeI4';
covName[165] = 'tellurium tetraiodide';
covForm[166] = 'TeO';
covName[166] = 'tellurium monoxide';
covForm[167] = 'TeO2';
covName[167] = 'tellurium dioxide';
covForm[168] = 'TeO3';
covName[168] = 'tellurium trioxide';
covForm[169] = 'TeS2';
covName[169] = 'tellurium disulfide';

covForm[170] = 'XeF2';
covName[170] = 'xenon difluoride';
covForm[171] = 'XeF4';
covName[171] = 'xenon tetrafluoride';
covForm[172] = 'XeF6';
covName[172] = 'xenon hexafluoride';
covForm[173] = 'XeO3';
covName[173] = 'xenon trioxide';

covForm[174] = 'HF';
covName[174] = 'hydrogen fluoride';
covForm[175] = 'HCl';
covName[175] = 'hydrogen chloride';
covForm[176] = 'HBr';
covName[176] = 'hydrogen bromide';
covForm[177] = 'HI';
covName[177] = 'hydrogen iodide';
covForm[178] = 'H2O';
covName[178] = 'hydrogen oxide';
covForm[179] = 'H2S';
covName[179] = 'hydrogen sulfide';
covForm[180] = 'H2Se';
covName[180] = 'hydrogen selenide';
covForm[181] = 'H2Te';
covName[181] = 'hydrogen telluride';
covForm[182] = 'H3N';
covName[182] = 'hydrogen nitride';

// Monatomic cations
//    0-9  group IA/IIA
//   10-14 group IIIA (metals)
//   15-37 transition, post-transition

  catForm[0] = '1Li';
  catName[0] = 'lithium';
 catStock[0] = '';
  catForm[1] = '1Na';
  catName[1] = 'sodium';
 catStock[1] = '';
  catForm[2] = '1K';
  catName[2] = 'potassium';
 catStock[2] = '';
  catForm[3] = '1Rb';
  catName[3] = 'rubidium';
 catStock[3] = '';
  catForm[4] = '1Cs';
  catName[4] = 'cesium';
 catStock[4] = '';
  catForm[5] = '2Mg';
  catName[5] = 'magnesium';
 catStock[5] = '';
  catForm[6] = '2Ca';
  catName[6] = 'calcium';
 catStock[6] = '';
  catForm[7] = '2Sr';
  catName[7] = 'strontium';
 catStock[7] = '';
  catForm[8] = '2Ba';
  catName[8] = 'barium';
 catStock[8] = '';
  catForm[9] = '2Ra';
  catName[9] = 'radium';
 catStock[9] = '';
 catForm[10] = '3Al';
 catName[10] = 'aluminum';
catStock[10] = '';
 catForm[11] = '3Ga';
 catName[11] = 'gallium';
catStock[11] = '';
 catForm[12] = '3In';
 catName[12] = 'indium';
catStock[12] = '';
 catForm[13] = '3Tl';
 catName[13] = 'thallium';
catStock[13] = '';
 catForm[14] = '2Cd';
 catName[14] = 'cadmium';
catStock[14] = '';
 catForm[15] = '1Ag';
 catName[15] = 'silver';
catStock[15] = '';
 catForm[16] = '2Zn';
 catName[16] = 'zinc';
catStock[16] = '';
 catForm[17] = '2Cr';
 catName[17] = 'chromium';
catStock[17] = 'II';
 catForm[18] = '3Cr';
 catName[18] = 'chromium';
catStock[18] = 'III';
 catForm[19] = '2Co';
 catName[19] = 'cobalt';
catStock[19] = 'II';
 catForm[20] = '3Co';
 catName[20] = 'cobalt';
catStock[20] = 'III';
 catForm[21] = '1Cu';
 catName[21] = 'copper';
catStock[21] = 'I';
 catForm[22] = '2Cu';
 catName[22] = 'copper';
catStock[22] = 'II';
 catForm[23] = '2Fe';
 catName[23] = 'iron';
catStock[23] = 'II';
 catForm[24] = '3Fe';
 catName[24] = 'iron';
catStock[24] = 'III';
 catForm[25] = '2Pb';
 catName[25] = 'lead';
catStock[25] = 'II';
 catForm[26] = '4Pb';
 catName[26] = 'lead';
catStock[26] = 'IV';
 catForm[27] = '2Mn';
 catName[27] = 'manganese';
catStock[27] = 'II';
 catForm[28] = '3Mn';
 catName[28] = 'manganese';
catStock[28] = 'III';
 catForm[29] = '2Hg<SUB STYLE=\"font-size: smaller\">2</SUB>';
 catName[29] = 'mercury';
catStock[29] = 'I';
 catForm[30] = '2Hg';
 catName[30] = 'mercury';
catStock[30] = 'II';
 catForm[31] = '2Sn';
 catName[31] = 'tin';
catStock[31] = 'II';
 catForm[32] = '4Sn';
 catName[32] = 'tin';
catStock[32] = 'IV';
 catForm[33] = '1Au';
 catName[33] = 'gold';
catStock[33] = 'I';
 catForm[34] = '3Au';
 catName[34] = 'gold';
catStock[34] = 'III';
 catForm[35] = '2Ni';
 catName[35] = 'nickel';
catStock[35] = 'II';
 catForm[36] = '3Ni';
 catName[36] = 'nickel';
catStock[36] = 'III';

// Monatomic anions

anForm[0] = '1F';
anName[0] = 'fluoride';
anForm[1] = '1Cl';
anName[1] = 'chloride';
anForm[2] = '1Br';
anName[2] = 'bromide';
anForm[3] = '1I';
anName[3] = 'iodide';
anForm[4] = '2O';
anName[4] = 'oxide';
anForm[5] = '2S';
anName[5] = 'sulfide';
anForm[6] = '2Se';
anName[6] = 'selenide';
anForm[7] = '3N';
anName[7] = 'nitride';
anForm[8] = '3P';
anName[8] = 'phosphide';

// Polyatomic ions
//   all are anions except for #31, ammonium

polyName[0]  = '1hypochlorite';
polyForm[0]  = 'ClO';
polyName[1]  = '1chlorite';
polyForm[1]  = 'ClO2';
polyName[2]  = '1chlorate';
polyForm[2]  = 'ClO3';
polyName[3]  = '1perchlorate';
polyForm[3]  = 'ClO4';
polyName[4]  = '1hypobromite';
polyForm[4]  = 'BrO';
polyName[5]  = '1bromite';
polyForm[5]  = 'BrO2';
polyName[6]  = '1bromate';
polyForm[6]  = 'BrO3';
polyName[7]  = '1perbromate';
polyForm[7]  = 'BrO4';
polyName[8]  = '2selenate';
polyForm[8]  = 'SeO4';
polyName[9]  = '3phosphate';
polyForm[9]  = 'PO4';
polyName[10] = '2hydrogen phosphate';
polyForm[10] = 'HPO4';
polyName[11] = '1dihydrogen phosphate';
polyForm[11] = 'H2PO4';
polyName[12] = '2chromate';
polyForm[12] = 'CrO4';
polyName[13] = '2dichromate';
polyForm[13] = 'Cr2O7';
polyName[14] = '2sulfite';
polyForm[14] = 'SO3';
polyName[15] = '1hydrogen sulfite';
polyForm[15] = 'HSO3';
polyName[16] = '2sulfate';
polyForm[16] = 'SO4';
polyName[17] = '1hydrogen sulfate';
polyForm[17] = 'HSO4';
polyName[18] = '2thiosulfate';
polyForm[18] = 'S2O3';
polyName[19] = '2carbonate';
polyForm[19] = 'CO3';
polyName[20] = '1hydrogen carbonate';
polyForm[20] = 'HCO3';
polyName[21] = '2oxalate';
polyForm[21] = 'C2O4';
polyName[22] = '1nitrite';
polyForm[22] = 'NO2';
polyName[23] = '1nitrate';
polyForm[23] = 'NO3';
polyName[24] = '1cyanide';
polyForm[24] = 'CN';
polyName[25] = '1cyanate';
polyForm[25] = 'OCN';
polyName[26] = '1thiocyanate';
polyForm[26] = 'SCN';
polyName[27] = '1hydroxide';
polyForm[27] = 'OH';
polyName[28] = '1permanganate';
polyForm[28] = 'MnO4';
polyName[29] = '2peroxide';
polyForm[29] = 'O2';
polyName[30] = '1acetate';
polyForm[30] = 'C2H3O2';
polyName[31] = '1ammonium';
polyForm[31] = 'NH4';

// Acids
//    0-17 oxyacids
//   18-23 binary

acidName[0]  = 'hypochlorous';
acidForm[0]  = 'HClO';
acidName[1]  = 'chlorous';
acidForm[1]  = 'HClO2';
acidName[2]  = 'chloric';
acidForm[2]  = 'HClO3';
acidName[3]  = 'perchloric';
acidForm[3]  = 'HClO4';
acidName[4]  = 'hypobromous';
acidForm[4]  = 'HBrO';
acidName[5]  = 'bromous';
acidForm[5]  = 'HBrO2';
acidName[6]  = 'bromic';
acidForm[6]  = 'HBrO3';
acidName[7]  = 'perbromic';
acidForm[7]  = 'HBrO4';
acidName[8]  = 'selenic';
acidForm[8]  = 'H2SeO4';
acidName[9]  = 'phosphoric';
acidForm[9]  = 'H3PO4';
acidName[10] = 'chromic';
acidForm[10] = 'H2CrO4';
acidName[11] = 'sulfurous';
acidForm[11] = 'H2SO3';
acidName[12] = 'sulfuric';
acidForm[12] = 'H2SO4';
acidName[13] = 'carbonic';
acidForm[13] = 'H2CO3';
acidName[14] = 'oxalic';
acidForm[14] = 'H2C2O4';
acidName[15] = 'nitrous';
acidForm[15] = 'HNO2';
acidName[16] = 'nitric';
acidForm[16] = 'HNO3';
acidName[17] = 'acetic';
acidForm[17] = 'HC2H3O2';
acidName[18] = 'hydrofluoric';
acidForm[18] = 'HF';
acidName[19] = 'hydrochloric';
acidForm[19] = 'HCl';
acidName[20] = 'hydrobromic';
acidForm[20] = 'HBr';
acidName[21] = 'hydroiodic';
acidForm[21] = 'HI';
acidName[22] = 'hydrosulfuric';
acidForm[22] = 'H2S';
acidName[23] = 'hydroselenic';
acidForm[23] = 'H2Se';

// Possible number of compounds to pick from

possCompounds[0]  = 174 - 1;
possCompounds[2]  = catForm.length - 1;
possCompounds[4]  = anForm.length - 1;
possCompounds[8]  = polyForm.length - 1;
possCompounds[12] = acidForm.length - 1;

function openHelpWindow() {
  helpWindowOpened = 1;
  helpWindow = window.open('nomen-help.html','helpWindowName','resizable=1,scrollbars=1,status=1,width=650,height=400');
  helpWindow.focus();
}

function printAddress() {
  quizWindow.document.write('<HR>\n<DIV>\n' +
    '<A HREF=\"javascript: opener.openHelpWindow()\"><IMG ALT=\"help!\" ' +
    'BORDER=\"0\" ALIGN=\"right\" SRC=\"..\/..\/Images\/help-button.gif\" ' +
    'HEIGHT=\"37\" WIDTH=\"62\"><\/A>\nScript last modified: ' + dateMod + 
    '<BR><A HREF=\"mailto:' + emailAdd + '\">' + emailAdd +
    '<\/A>\n<\/DIV>\n');
}

function initValues(isAdmin) {
  var isAdmin;
  
  if (isAdmin == 1) {
    window.document.adminnomen.password.value = '';
  }
  tableWindowOpened = 0;
  quizWindowOpened = 0;
  helpWindowOpened = 0;
}

function closeChildWindows() {
  if (quizWindowOpened) {
    if (!quizWindow.closed) {
      quizWindow.close();
    }
  }
  if (tableWindowOpened) {
    if (!tableWindow.closed) {
      tableWindow.close();
    }
  }
  if (helpWindowOpened) {
    if (!helpWindow.closed) {
      helpWindow.close();
    }
  }
}

function popUpTable(url) {
  tableWindowOpened = 1;
  tableWindow = window.open('period-' + url + '.html','tableWindowName','resizable=1,scrollbars=1,width=675,height=600');
  tableWindow.focus();
}

function generateAnotherNomenQuiz(tempValue) {
  var tempValue;
  var tempAllCheck;

  quizType = tempValue;
  prepareNomenQuiz();
  printNomenQuiz();
}

function popUpNomenQuiz(button) {
  var button;

  quizType = button.substring(6,button.length) - 0;
  quizType --;
  if ((isP101) && (quizType == 12)) {
    quizType += 2;
  }
  prepareNomenQuiz();
  printNomenQuiz();
}

function prepareNomenQuiz() {
  var randomNum;
  var nameFormula;

  if ((quizType != 14) && (quizType != 15)) {
    tempQuizType = quizType;
  }
  else {
    randomNum = Math.round((99)*Math.random());
    whichQuiz = Math.round(1*Math.random());
    if (quizType == 14) {
      if (randomNum < 11) {
        tempQuizType = 0 + whichQuiz;
      }
      else if (randomNum < 18) {
        tempQuizType = 2 + whichQuiz;
      }
      else if (randomNum < 25) {
        tempQuizType = 4 + whichQuiz;
      }
      else if (randomNum < 65) {
        tempQuizType = 6 + whichQuiz;
      }
      else {
        tempQuizType = 8 + whichQuiz;
      }
    }
    else {
      if (randomNum < 8) {
        tempQuizType = 0 + whichQuiz;
      }
      else if (randomNum < 15) {
        tempQuizType = 2 + whichQuiz;
      }
      else if (randomNum < 22) {
        tempQuizType = 4 + whichQuiz;
      }
      else if (randomNum < 62) {
        tempQuizType = 6 + whichQuiz;
      }
      else if (randomNum < 85) {
        tempQuizType = 8 + whichQuiz;
      }
      else {
        tempQuizType = 12 + whichQuiz;
      }
    }
  }

  switch(tempQuizType) {
    case 0:  // molecular names
      randomNum = Math.round((possCompounds[0] + 9)*Math.random());
      randomForm = covForm[randomNum];
      randomName = covName[randomNum];
      modifyMolecule();
      whichQuiz = 0;
      theAnswer = randomName;
      theQuestion = randomFormHTML;
      break;
    case 1:  // molecular formulas
      randomNum = Math.round(possCompounds[0]*Math.random());
      randomForm = covForm[randomNum];
      randomName = covName[randomNum];
      modifyMolecule();
      whichQuiz = 1;
      theAnswer = randomFormHTML;
      theQuestion = randomName;
      break;
    case 2:  // ionic monatomic cation names
      prepareIon(1);
      whichQuiz = 0;
      theAnswer = randomName;
      theQuestion = randomFormHTML;
      break;
    case 3:  // ionic monatomic cation formulas
      prepareIon(1);
      whichQuiz = 1;
      theAnswer = randomFormHTML;
      theQuestion = randomName;
      break;
    case 4:  // ionic monatomic anion names
      prepareIon(-1);
      whichQuiz = 0;
      theAnswer = randomName;
      theQuestion = randomFormHTML;
      break;
    case 5:  // ionic monatomic anion formulas
      prepareIon(-1);
      whichQuiz = 1;
      theAnswer = randomFormHTML;
      theQuestion = randomName;
      break;
    case 6:  // ionic binary compound names
      assembleMonatomicIonicCompound();
      whichQuiz = 0;
      theAnswer = randomName;
      theQuestion = randomFormHTML;
      break;
    case 7:  // ionic binary compound formulas
      assembleMonatomicIonicCompound();
      whichQuiz = 1;
      theAnswer = randomFormHTML;
      theQuestion = randomName;
      break;
    case 8:  // ionic polyatomic compound names
      assemblePolyIonicCompound();
      whichQuiz = 0;
      theAnswer = randomName;
      theQuestion = randomFormHTML;
      break;
    case 9:  // ionic polyatomic compound formulas
      assemblePolyIonicCompound();
      whichQuiz = 1;
      theAnswer = randomFormHTML;
      theQuestion = randomName;
      break;
    case 10:  // ionic binary and polyatomic compound names
      randomNum = Math.round(1519*Math.random());
      if (randomNum < 333) {
        assembleMonatomicIonicCompound();
      }
      else {
        assemblePolyIonicCompound();
      }
      whichQuiz = 0;
      theAnswer = randomName;
      theQuestion = randomFormHTML;
      break;
    case 11:  // ionic binary and polyatomic compound formulas
      randomNum = Math.round(1519*Math.random());
      if (randomNum < 333) {
        assembleMonatomicIonicCompound();
      }
      else {
        assemblePolyIonicCompound();
      }
      whichQuiz = 1;
      theAnswer = randomFormHTML;
      theQuestion = randomName;
      break;
    case 12:  // binary acids and oxyacids names
      randomNum = Math.round(possCompounds[12]*Math.random());
      randomForm = acidForm[randomNum];
      randomName = acidName[randomNum] + ' acid';
      modifyMolecule();
      whichQuiz = 0;
      theAnswer = randomName;
      theQuestion = randomFormHTML;
      break;
    case 13:  // binary acids and oxyacids formulas
      randomNum = Math.round(possCompounds[12]*Math.random());
      randomForm = acidForm[randomNum];
      randomName = acidName[randomNum] + ' acid';
      modifyMolecule();
      whichQuiz = 1;
      theAnswer = randomFormHTML;
      theQuestion = randomName;
      break;
  }
}

// Modify the selected molecule to html the subscripts

function modifyMolecule() {
  var result;
  var currChar;
  var subOn;
  var digitCheck = /\d/;

  subOn = 0;
  randomFormHTML = '';
  for (var currCount = 0; currCount < randomForm.length; currCount++) {
    currChar = randomForm.charAt(currCount);
    result = currChar.match(digitCheck);
    if (result != null) {
      if (!subOn) {
        randomFormHTML += '<SUB STYLE=\"font-size: smaller\">';
        subOn = 1;
      }
      randomFormHTML += currChar;
    }
    else {
      if (subOn) {
        randomFormHTML += '<\/SUB>';
        subOn = 0;
      }
      randomFormHTML += currChar;
    }
  }
  if (subOn) {
    randomFormHTML += '<\/SUB>';
  }
}

// Assemble the selected monatomic ion

function prepareIon(numCheck) {
  var numCheck;
  var whichIon;

  if (numCheck < 0) {
    whichIon = "-";
    randomNum = Math.round(possCompounds[4]*Math.random());
    randomForm = anForm[randomNum];
    randomName = anName[randomNum];
  }
  else {
    whichIon = "+";

    // PHYS 101 does not do the mercury(I) and (II) ions

    randomNum = Math.round(possCompounds[2]*Math.random());
    if (isP101 && ((randomNum == 29) || (randomNum == 30))) {
      randomNum = randomNum - 2;
    }
    randomForm = catForm[randomNum];
    randomName = catName[randomNum];
    if (catStock[randomNum]) {
      randomName += '(' + catStock[randomNum] + ')';
    }
  }

  randomName += ' ion';
  randomFormHTML = randomForm.substring(1,randomForm.length);
  randomFormHTML += '<SUP STYLE=\"font-size: smaller\">' +
                    randomForm.charAt(0) + whichIon + '<\/SUP>';
}

// Assemble a binary ionic compound from a given cation and anion

function assembleMonatomicIonicCompound() {
  var tempAnCharge;
  var tempCatForm;

  randomCatNum = Math.round(possCompounds[2]*Math.random());
  if (isP101 && ((randomCatNum == 29) || (randomCatNum == 30))) {
    randomCatNum = randomCatNum - 2;
  }
  tempCatCharge = catForm[randomCatNum].charAt(0);
  randomAnNum = Math.round(possCompounds[4]*Math.random());
  tempAnCharge = anForm[randomAnNum].charAt(0);
  randomName = catName[randomCatNum];
  if (catStock[randomCatNum]) {
    randomName += '(' + catStock[randomCatNum] + ')';
  }
  randomName += ' ' + anName[randomAnNum]
  randomFormHTML = catForm[randomCatNum].substring(1,catForm[randomCatNum].length);
  if ((tempCatCharge == '4') && (tempAnCharge == '2')) {
    tempCatCharge = 2;
    tempAnCharge = 1;
  }
  if ((tempCatCharge != tempAnCharge) && (tempAnCharge != '1')) {
    if (randomCatNum != 29) {
      randomFormHTML += '<SUB STYLE=\"font-size: smaller\">' +
                        tempAnCharge + '<\/SUB>';
    }
    else {
      randomFormHTML = '(' + randomFormHTML + ')' +
                       '<SUB STYLE=\"font-size: smaller\">' + tempAnCharge + 
                       '<\/SUB>';
    }
  }
  randomFormHTML += anForm[randomAnNum].substring(1,anForm[randomAnNum].length);
  if ((tempCatCharge != tempAnCharge) && (tempCatCharge != '1')) {
    randomFormHTML += '<SUB STYLE=\"font-size: smaller\">' +
                      tempCatCharge + '<\/SUB>';
  }
}

// Assemble a polyatomic ionic compound from a given polyatomic cation
//  or polyatomic anion et al

function assemblePolyIonicCompound() {
  var isPolyCat;
  var isPolyAn;
  var tempCatCharge;
  var tempAnCharge;
  var tempCatForm;
  var tempAnForm;

  randomCatNum = Math.round((catForm.length)*Math.random());
  if (isP101 && ((randomCatNum == 29) || (randomCatNum == 30))) {
    randomCatNum = randomCatNum - 2;
  }
  if (randomCatNum != catForm.length) {
    isPolyCat = 0;
    randomName = catName[randomCatNum];
    if (catStock[randomCatNum]) {
      randomName += '(' + catStock[randomCatNum] + ')';
    }
    tempCatCharge = catForm[randomCatNum].charAt(0);
    tempCatForm = catForm[randomCatNum].substring(1,catForm[randomCatNum].length);
  }
  else {
    isPolyCat = 1;
    randomName = polyName[31].substring(1,polyName[31].length)
    tempCatCharge = polyName[31].charAt(0);
    randomForm = polyForm[31];
    modifyMolecule();
    tempCatForm = randomFormHTML;
  }

  isPolyAn = 0;
  if (isPolyCat) {
    randomAnNum = Math.round((anForm.length + polyForm.length - 2)*Math.random());
    if (randomAnNum > 8) {
      isPolyAn = 1;
      randomAnNum -= 9;
    }
  }
  else {
    isPolyAn = 1;
    randomAnNum = Math.round((polyForm.length - 2)*Math.random());
  }

  if (!isPolyAn) {
    randomName += ' ' + anName[randomAnNum];
    tempAnCharge = anForm[randomAnNum].charAt(0);
    tempAnForm = anForm[randomAnNum].substring(1,anForm[randomAnNum].length);
  }
  else {
    randomName += ' ' + polyName[randomAnNum].substring(1,polyName[randomAnNum].length);
    tempAnCharge = polyName[randomAnNum].charAt(0);
    randomForm = polyForm[randomAnNum];
    modifyMolecule();
    tempAnForm = randomFormHTML;
  }

  if ((tempCatCharge == '4') && (tempAnCharge == '2')) {
    tempCatCharge = 2;
    tempAnCharge = 1;
  }

  if (tempCatCharge == tempAnCharge) {
    randomFormHTML = tempCatForm + tempAnForm;
  }
  else {
    if (tempAnCharge == '1') {
      randomFormHTML = tempCatForm;
    }
    else {
      if (!isPolyCat) {
        if (randomCatNum != 29) {
          randomFormHTML = tempCatForm + '<SUB STYLE=\"font-size: smaller\">' +
            tempAnCharge + '<\/SUB>';
        }
        else {
          randomFormHTML = '(' + tempCatForm + ')' +
            '<SUB STYLE=\"font-size: smaller\">' + tempAnCharge + '<\/SUB>';
        }
      }
      else {
        randomFormHTML = '(' + tempCatForm + ')' + 
          '<SUB STYLE=\"font-size: smaller\">' + tempAnCharge + '<\/SUB>';
      }
    }

    if (tempCatCharge == '1') {
      randomFormHTML += tempAnForm;
    }
    else {
      if (!isPolyAn) {
        randomFormHTML += tempAnForm + '<SUB STYLE=\"font-size: smaller\">' +
          tempCatCharge + '<\/SUB>';
      }
      else {
        randomFormHTML += '(' + tempAnForm + ')' + 
          '<SUB STYLE=\"font-size: smaller\">' + tempCatCharge + '<\/SUB>';
      }
    }
  }
}

function printNomenQuiz() {
  quizWindowOpened = 1;
  quizWindow = window.open('','quizWindowName','resizable=1,scrollbars=1,status=1,width=600,height=450');
  quizWindow.document.write('<HTML>\n<HEAD>\n');
  printNomenQuizHeader();
  quizWindow.document.write('<\/HEAD>\n' +
    '<BODY STYLE=\"background-color: #FFFFFF\">');
  printNomenQuizBody();
  quizWindow.document.write('<DIV ALIGN=\"center\">\n<FORM>\n' +
    '<TABLE ALIGN=\"center\">\n<TR>\n<TD ALIGN=\"center\" COLSPAN=\"2\">\n' +
    '<INPUT TYPE=\"button\"\n' +
    'onClick=\"opener.generateAnotherNomenQuiz(' + quizType + ');\"\n' +
    'onMouseOver=\"mOver(2,0);self.status=\'Generate another quiz\';return true\"' +
    'onMouseOut=\"mOut(2,0);self.status=\'\';return true\"\n' +
    'VALUE=\"Gimme\' Another One\">\n' +
    '<\/TD>\n<\/TR>\n<TR>\n<TD ALIGN=\"center\">\n' +
    '<INPUT TYPE=\"button\"\n' +
    'onClick=\"window.close()\"\n' +
    'onMouseOver=\"mOver(2,1);self.status=\'Close this window\';return true\"\n' +
    'onMouseOut=\"mOut(2,1);self.status=\'\';return true\"\n' +
    'VALUE=\"Close Window\">\n' +
    '<\/TD>\n<TD ALIGN=\"center\">\n' +
    '<INPUT TYPE=\"button\" onClick=\"opener.focus()\"\n' +
    'onMouseOver=\"mOver(2,2);self.status=\'Switch back to the tutorial\';return true\"\n' +
    'onMouseOut=\"mOut(2,2);self.status=\'\';return true\"\n' +
    'VALUE=\"Switch Windows\">\n' +
    '<\/TD>\n<\/TR>\n<\/TABLE>\n<\/FORM>\n<\/DIV>');
  printAddress();
  quizWindow.document.write('<\/BODY>\n<\/HTML>\n');
  quizWindow.focus();
  quizWindow.document.close();
}

function printNomenQuizHeader() {
  quizWindow.document.write('<TITLE>Inorganic Nomenclature Quiz<\/TITLE>\n');
  quizWindow.document.write('<SCR' + 'IPT TYPE=\"text/javascript\" LANGUAGE=\"javascript\">\n');
  printButtonChanges();
  quizWindow.document.write('<\/SCR' + 'IPT>\n')
  quizWindow.document.write('<STYLE TYPE=\"text\/css\">\n<!--\n' +
    '.hideIt { position: relative; visibility: hidden; }\n' +
    '.showIt { position: relative; visibility: visible; }\n' +
    '\/\/--><\/STYLE>\n');
}

function printNomenQuizBody() {

  quizWindow.document.write('<H1 STYLE=\"text-align: center\">' +
    quizName[quizType] + '<\/H1>\n' + '<DIV ALIGN=\"center\">\n');
  if (whichQuiz) {
    quizWindow.document.write('Write the chemical formula for:');
  }
  else {
    quizWindow.document.write('Write the chemical name for');
    if (tempQuizType == 12) {
      quizWindow.document.write(' the acid');
    }
    quizWindow.document.write(':');
  }
  quizWindow.document.write('<BR>\n<TABLE BGCOLOR=\"#FFFFCC\">\n' +
    '<TR>\n<TD ALIGN=\"center\">\n<B>\n');
  if (whichQuiz) {
    quizWindow.document.write('<SPAN STYLE=\"font-size: larger\">');
  }
  else {
    quizWindow.document.write('<SPAN STYLE=\"font-size: x-large\">');
  }
  quizWindow.document.write(theQuestion + '<\/SPAN>\n<\/B>\n<\/TD>\n' +
    '<\/TR>\n<\/TABLE>\n' +
    '<DIV ID=\"question\" CLASS=\"showIt\" ALIGN=\"center\">\n' +
    '<TABLE>\n<TR>\n<TD ALIGN=\"center\">\n<FORM>\n' +
    '<INPUT TYPE=\"button\" onClick=\"opener.showHide(\'answer\',\'question\')\"\n' +
    'onMouseOver=\"mOver(0,0);self.status=\'\';return true\"\n' +
    'onMouseOut=\"mOut(0,0);self.status=\'\';return true\"\n' +
    'VALUE=\"Reveal Answer!\">\n' +
    '<\/FORM>\n<\/TD>\n<\/TR>\n<\/TABLE>\n<\/DIV>\n<\/DIV>\n\n<BR>\n\n' +
    '<DIV ID=\"answer\" CLASS=\"hideIt\" ALIGN=\"center\">\n' +
    '<TABLE BGCOLOR=\"#FFFFCC\">\n<TR>\n<TD ALIGN=\"center\">\n<B>\n');
  if (whichQuiz) {
    quizWindow.document.write('<SPAN STYLE=\"font-size: x-large\">');
  }
  else {
    quizWindow.document.write('<SPAN STYLE=\"font-size: larger\">');
  }
  quizWindow.document.write(theAnswer + '<\/SPAN>\n<\/B>\n<\/TD>\n<\/TR>\n' +
    '<\/TABLE>\n<FORM>\n' +
    '<INPUT TYPE=\"button\" onClick=\"opener.showHide(\'question\',\'answer\')\"\n' +
    'onMouseOver=\"mOver(1,0);self.status=\'\';return true\"\n' +
    'onMouseOut=\"mOut(1,0);self.status=\'\';return true\"\n' +
    'VALUE=\"Hide Answer\">\n' +
    '<\/FORM>\n<\/DIV>\n');
}

function show(layer) {
  if (document.layers) {  // NN4 DOM
    quizWindow.document.layers[layer].visibility="visible";
  }
  else if ((document.all) && (!document.getElementById)) { // IE4 DOM
    quizWindow.document.all[layer].style.visibility="visible";
  }
  else if (document.getElementById) { // W3C standards-compliant DOM
    quizWindow.document.getElementById(layer).style.visibility="visible";
  }
}

function hide(layer) {
  if (document.layers) {  // NN4 DOM
    quizWindow.document.layers[layer].visibility="hide";
  }
  else if ((document.all) && (!document.getElementById)) { // IE4 DOM
    quizWindow.document.all[layer].style.visibility="hidden";
  }
  else if (document.getElementById) { // W3C standards-compliant DOM
    quizWindow.document.getElementById(layer).style.visibility="hidden";
  }
}

function showHide(layer1,layer2) {
  show(layer1);
  hide(layer2);
}

function printButtonChanges() {
  quizWindow.document.write('function mOver(whichForm,whichElement) {\n' +
    'var whichForm;\nvar whichElement;\n\n' +
    'document.forms[whichForm].elements[whichElement].style.backgroundColor = \'#000000\';\n' +
    'document.forms[whichForm].elements[whichElement].style.color = \'#FFFFFF\';\n' +
    '}\n\n' +
    'function mOut(whichForm,whichElement) {\n' +
    'var whichForm;\nvar whichElement;\n\n' +
    'document.forms[whichForm].elements[whichElement].style.backgroundColor = \'\';\n' +
    'document.forms[whichForm].elements[whichElement].style.color = \'\';\n}\n\n');
}
