
  if (document.images) {
  //
  //  Load all images (eliminates flicker when clicking on county the 1st time).
  //  These images are not used - it just forces all the images to be loaded
  //  into memory and cache.
  //
    img01 = new Image; img01.src = 'images/nj01.gif';
    img02 = new Image; img02.src = 'images/nj02.gif';
    img03 = new Image; img03.src = 'images/nj03.gif';
    img04 = new Image; img04.src = 'images/nj04.gif';
    img05 = new Image; img05.src = 'images/nj05.gif';
    img06 = new Image; img06.src = 'images/nj06.gif';
    img07 = new Image; img07.src = 'images/nj07.gif';
    img08 = new Image; img08.src = 'images/nj08.gif';
    img09 = new Image; img09.src = 'images/nj09.gif';
    img10 = new Image; img10.src = 'images/nj10.gif';
    img11 = new Image; img11.src = 'images/nj11.gif';
    img12 = new Image; img12.src = 'images/nj12.gif';
    img13 = new Image; img13.src = 'images/nj13.gif';
    img14 = new Image; img14.src = 'images/nj14.gif';
    img15 = new Image; img15.src = 'images/nj15.gif';
    img16 = new Image; img16.src = 'images/nj16.gif';
    img17 = new Image; img17.src = 'images/nj17.gif';
    img18 = new Image; img18.src = 'images/nj18.gif';
    img19 = new Image; img19.src = 'images/nj19.gif';
    img20 = new Image; img20.src = 'images/nj20.gif';
    img21 = new Image; img21.src = 'images/nj21.gif';
  }


  var sBType = BrowserID();       // Identify the Client Web Browser.
  var oXmlDom = createXMLDOM();   // Create the XML DOM object for global use.
  var sRunDate = "";              // Other unique values for global use.
  var sStatsYear = "";
  var sTotAccs = "";
  var sTotFats = "";
  var sTotInjs = "";

  function BrowserID() {
    if (window.ActiveXObject) {
      return "I";                 // Internet Explorer
    }
    else if (document.implementation && document.implementation.createDocument) {
      return "M";                 // Mozilla (FireFox, NetScape, etc.)
    }
    else {
      return "U";                 // Unknown Web Browser Type.
    }
  }
  //
  //  Each function below switches images according
  //  to the selected county.
  //
  function Atlantic() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj01.gif' width='211' height='399' border='0'>";
    DisplayCounty('01','Atlantic');
  }
  
  function Bergen() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj02.gif' width='211' height='399' border='0'>";
    DisplayCounty('02','Bergen');
  }
  
  function Burlington() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj03.gif' width='211' height='399' border='0'>";
    DisplayCounty('03','Burlington');
  }
  
  function Camden() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj04.gif' width='211' height='399' border='0'>";
    DisplayCounty('04','Camden');
  }
  
  function CapeMay() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj05.gif' width='211' height='399' border='0'>";
    DisplayCounty('05','Cape May');
  }
  
  function Cumberland() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj06.gif' width='211' height='399' border='0'>";
    DisplayCounty('06','Cumberland');
  }
  
  function Essex() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj07.gif' width='211' height='399' border='0'>";
    DisplayCounty('07','Essex');
  }
  
  function Gloucester() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj08.gif' width='211' height='399' border='0'>";
    DisplayCounty('08','Gloucester');
  }
  
  function Hudson() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj09.gif' width='211' height='399' border='0'>";
    DisplayCounty('09','Hudson');
  }
  
  function Hunterdon() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj10.gif' width='211' height='399' border='0'>";
    DisplayCounty('10','Hunterdon');
  }
  
  function Mercer() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj11.gif' width='211' height='399' border='0'>";
    DisplayCounty('11','Mercer');
  }
  
  function Middlesex() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj12.gif' width='211' height='399' border='0'>";
    DisplayCounty('12','Middlesex');
  }
  
  function Monmouth() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj13.gif' width='211' height='399' border='0'>";
    DisplayCounty('13','Monmouth');
  }
  
  function Morris() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj14.gif' width='211' height='399' border='0'>";
    DisplayCounty('14','Morris');
  }
  
  function Ocean() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj15.gif' width='211' height='399' border='0'>";
    DisplayCounty('15','Ocean');
  }
  
  function Passaic() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj16.gif' width='211' height='399' border='0'>";
    DisplayCounty('16','Passaic');
  }
  
  function Salem() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj17.gif' width='211' height='399' border='0'>";
    DisplayCounty('17','Salem');
  }
  
  function Somerset() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj18.gif' width='211' height='399' border='0'>";
    DisplayCounty('18','Somerset');
  }
  
  function Sussex() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj19.gif' width='211' height='399' border='0'>";
    DisplayCounty('19','Sussex');
  }
  
  function Union() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj20.gif' width='211' height='399' border='0'>";
    DisplayCounty('20','Union');
  }
  
  function Warren() {
    document.getElementById("NJMap").innerHTML="<img usemap='#CountyMap' src='images/nj21.gif' width='211' height='399' border='0'>";
    DisplayCounty('21','Warren');
  }
  //
  // End county functions.
  //

  function loadFAUXML() {
  //
  //  This function loads and parses the FAU Quick Stats XML file.
  //
    oXmlDom.async = false;        // Load the file synchronously.
    oXmlDom.load("FAUQStats2009.xml");
  
//    if (oXmlDom.parseError != 0) {        // XML Validation against DTD
//      var oError = oXmlDom.parseError;
//      alert("An error occurred:\n\n"
//            + "Error Code: " + oError.errorCode + "\n"
//            + "Line: " + oError.line + "\n"
//            + "Line Pos: " + oError.linepos + "\n"
//            + "Reason: " + oError.reason);
//    } else {

      if (sBType == "I") {                  // IE Specific Script
        sRunDate = oXmlDom.documentElement.selectSingleNode("//RUNDATE").text;
        sStatsYear = oXmlDom.documentElement.selectSingleNode("//STATSYEAR").text;
        sTotAccs = oXmlDom.documentElement.selectSingleNode("//TOTACCIDENTS").text;
        sTotFats = oXmlDom.documentElement.selectSingleNode("//TOTFATALITIES").text;
        sTotInjs = oXmlDom.documentElement.selectSingleNode("//TOTINJURIES").text;
      }
      else if (sBType == "M") {             // Mozilla Specific Script
        sRunDate = oXmlDom.evaluate("//RUNDATE", oXmlDom, null, 0, null).iterateNext().textContent;
        sStatsYear = oXmlDom.evaluate("//STATSYEAR", oXmlDom, null, 0, null).iterateNext().textContent;
        sTotAccs = oXmlDom.evaluate("//TOTACCIDENTS", oXmlDom, null, 0, null).iterateNext().textContent;
        sTotFats = oXmlDom.evaluate("//TOTFATALITIES", oXmlDom, null, 0, null).iterateNext().textContent;
        sTotInjs = oXmlDom.evaluate("//TOTINJURIES", oXmlDom, null, 0, null).iterateNext().textContent;
      }
      //  Plug in single occurrence values
      document.getElementById("RunDate").innerHTML = sRunDate;
      document.getElementById("StatYear").innerHTML = sStatsYear;
      document.getElementById("StatYear2").innerHTML = sStatsYear;
      document.getElementById("TotAccs").innerHTML = sTotAccs;
      document.getElementById("TotFats").innerHTML = sTotFats;
//      document.getElementById("TotInjs").innerHTML = sTotInjs;
//    }
  }

  function createXMLDOM() {
  //
  //  Create XML DOM Object.
  //
    if (sBType == "I") {  // Internet Explorer
      // Work backwards through the latest MSXML versions until one works.
      var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",
                           "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",
                           "Microsoft.XmlDom"];
  
      for (var i=0; i < arrSignatures.length; i++) {
        try {
          var oXmlDom = new ActiveXObject(arrSignatures[i]);
          return oXmlDom;
        } catch (oError) {
          // Do Nothing
        }
      }
      throw new Error("MSXML is not installed on your system.");
    }
    else if (sBType == "M") {  // Mozilla (FireFox, NetScape, etc.)
      var oXmlDom = document.implementation.createDocument("", "FAUQSTATS", null);
      return oXmlDom;
    }
    else {
      throw new Error("Your browser does not support XML DOM objects.");
    }
  }

  function DisplayCounty(id, name) {
  //
  //  Takes County ID and Name and displays corresponding data table.
  //
    var sText = "";
    var nAcnt = 0;
    var nCtyFats = 0;
    var nCtyInjs = 0;
    var sMuni = "";
    var sMuniHold = "";
    sText += "<table cellspacing='1' cellpadding='1' width='100%' border='1' class='xxsblat'>";
//    sText += "<tr align='center'><th colspan='6'>" + name + " County</th></tr>";	// With 'Injuries' Column
    sText += "<tr align='center'><th colspan='5'>" + name + " County</th></tr>";	// Without 'Injuries' Column
//    sText += "<tr><th>Municipality</th><th align='center'>Date</th><th align='center'>Time</th><th>Location</th><th align='center'>Injuries</th><th align='center'>Fatalities</th></tr>";	// With 'Injuries' Column
    sText += "<tr><th>Municipality</th><th align='center'>Date</th><th align='center'>Time</th><th>Location</th><th align='center'>Fatalities</th></tr>";	// Without 'Injuries' Column

    if (sBType == "I") {  // Internet Explorer
      var lMNodes =  oXmlDom.documentElement.selectNodes("//COUNTY[@CCODE='" + id + "']//MUNICIPALITY");
      for (var i=0; i < lMNodes.length; i++) {  // Loop for the Selected County's Municipalities.
        sMuni = lMNodes[i].selectSingleNode("@MNAME").text;
        var lANodes = lMNodes[i].selectNodes("ACCIDENT");
        for (var j=0; j < lANodes.length; j++) {  // Loop for the Municipalities Accidents.
          if (sMuni != sMuniHold) { sMuniHold = sMuni; }
          else { sMuni = "&nbsp; &nbsp; &nbsp; &quot;"; }
          var sDate = lANodes[j].selectSingleNode("@DATE").text;
          var sTime = lANodes[j].selectSingleNode("@TIME").text;
          var sLoc = "&nbsp;";  // Default values if the tags aren't there
          var sFats = "&nbsp;";
          var sInjs = "&nbsp;";
          if (lANodes[j].selectSingleNode("LOCATION") != null) {
            sLoc = lANodes[j].selectSingleNode("LOCATION").text;
          }
          if (lANodes[j].selectSingleNode("FATALITIES") != null) {
            sFats = lANodes[j].selectSingleNode("FATALITIES").text;
            nCtyFats += parseInt(sFats, 10);
          }
          if (lANodes[j].selectSingleNode("INJURIES") != null) {
            sInjs = lANodes[j].selectSingleNode("INJURIES").text;
            nCtyInjs += parseInt(sInjs, 10);
          }
//          sText += "<tr class='bwhi'><td>" + sMuni + "</td><td align='center'>" + sDate + "</td><td align='center'>" + sTime + "</td><td>" + sLoc + "</td><td align='center'>" + sInjs + "</td><td align='center'>" + sFats + "</td></tr>";		// With 'Injuries' Column
          sText += "<tr class='bwhi'><td>" + sMuni + "</td><td align='center'>" + sDate + "</td><td align='center'>" + sTime + "</td><td>" + sLoc + "</td><td align='center'>" + sFats + "</td></tr>";		// Without 'Injuries' Column
          nAcnt++;
        }
      }
    }
    else if (sBType == "M") {  // Mozilla (FireFox, NetScape, etc.)
      var oEvaluatorM = new XPathEvaluator();
      var oResultM = oEvaluatorM.evaluate("//COUNTY[@CCODE='" + id + "']//MUNICIPALITY",
                                        oXmlDom, 
                                        null, 
                                        XPathResult.ORDERED_NODE_ITERATOR_TYPE, 
                                        null);
      if (oResultM != null) {
        var oElementM = oResultM.iterateNext();
        while (oElementM) {  // Loop for the Selected County's Municipalities.
          sMuni = oXmlDom.evaluate("@MNAME",
                                        oElementM, 
                                        null, 
                                        XPathResult.ANY_TYPE, 
                                        null).iterateNext().textContent;

          var oEvaluatorA = new XPathEvaluator();
          var oResultA = oEvaluatorA.evaluate("ACCIDENT",
                                            oElementM, 
                                            null, 
                                            XPathResult.ORDERED_NODE_ITERATOR_TYPE, 
                                            null);
          if (oResultA != null) {
            var oElementA = oResultA.iterateNext();
            while (oElementA) {  // Loop for the Municipalities Accidents.
              if (sMuni != sMuniHold) { sMuniHold = sMuni; }
              else { sMuni = "&nbsp; &nbsp; &nbsp; &quot;"; }
              var sDate = oXmlDom.evaluate("@DATE",
                                            oElementA, 
                                            null, 
                                            XPathResult.ANY_TYPE, 
                                            null).iterateNext().textContent;
              var sTime = oXmlDom.evaluate("@TIME",
                                            oElementA, 
                                            null, 
                                            XPathResult.ANY_TYPE, 
                                            null).iterateNext().textContent;
              var sLoc = "&nbsp;";  // Default values if the tags aren't there
              var sFats = "&nbsp;";
              var sInjs = "&nbsp;";
              var oLocElement = oXmlDom.evaluate("LOCATION",
                                            oElementA, 
                                            null, 
                                            XPathResult.ANY_TYPE, 
                                            null).iterateNext();
              if (oLocElement != null) {
                var sLoc = oLocElement.textContent;
              }

              var oFatsElement = oXmlDom.evaluate("FATALITIES",
                                            oElementA, 
                                            null, 
                                            XPathResult.ANY_TYPE, 
                                            null).iterateNext();
              if (oFatsElement != null) {
                var sFats = oFatsElement.textContent;
                nCtyFats += parseInt(sFats, 10);
              }

              var oInjsElement = oXmlDom.evaluate("INJURIES",
                                   oElementA, 
                                   null, 
                                   XPathResult.ANY_TYPE, 
                                   null).iterateNext();
              if (oInjsElement != null) {
                var sInjs = oInjsElement.textContent;
                nCtyInjs += parseInt(sInjs, 10);
              }
//              sText += "<tr class='bwhi'><td>" + sMuni + "</td><td align='center'>" + sDate + "</td><td align='center'>" + sTime + "</td><td>" + sLoc + "</td><td align='center'>" + sInjs + "</td><td align='center'>" + sFats + "</td></tr>";		// With 'Injuries' Column
              sText += "<tr class='bwhi'><td>" + sMuni + "</td><td align='center'>" + sDate + "</td><td align='center'>" + sTime + "</td><td>" + sLoc + "</td><td align='center'>" + sFats + "</td></tr>";		// Without 'Injuries' Column
              nAcnt++;
              oElementA = oResultA.iterateNext(); // Next Accident
            }
          }

          oElementM = oResultM.iterateNext(); // Next Municipality
        }
      }
    }
//    sText += "<tr><td colspan='3' align='center'><b>Accident Count: " + nAcnt + "</b></td><td align='right'><b>County Totals: </b></td><td align='center'><b>" + nCtyInjs + "</b></td><td align='center'><b>" + nCtyFats + "</b></td></tr>";		// With 'Injuries' Column
    sText += "<tr><td colspan='3' align='center'><b>Accident Count: " + nAcnt + "</b></td><td align='right'><b>County Totals: </b></td><td align='center'><b>" + nCtyFats + "</b></td></tr>";		// Without 'Injuries' Column
    sText += "</table>";
    document.getElementById("QStats").innerHTML = sText;  // Plug in the data table.
  }
