function createCatalogCourseDescriptionList(xmlDoc)
{
  if (KonquerorBrowserWarning(xmlDoc)) return;

  // grab all 'course' elements from MathDeptInfoAll XML file
  var x = xmlDoc.getElementsByTagName('course');

  // start a definition list, of class 'facstafflist', for all catalog courses, in which each list item contains information about one course;
  // setAttribute() coding is funny because IE uses "className" instead of "class" as its Javascript name for the "class" attribute;
  // this might break in a browser that (like IE) recognizes "document.all" but (unlike IE) does not recognize "className"
  /* <dl class="facstafflist"> */
  var defList = document.createElement('dl');
  defList.setAttribute((document.all ? 'className' : 'class'), 'facstafflist');

  // loop over all courses ...
  var i;
  for (i = 0;  i < x.length;  i++)
  {
    // ... but only select courses that have actual catalog entries for inclusion in the list
    if( x[i].getElementsByTagName('has_catalog_entry')[0].childNodes[0].nodeValue != 'Y' ) continue;

    // definition-list term gives the course number (including a destination anchor), course name, and number of units of credit offered for the course
    /*   <dt> */
    var defTerm = document.createElement('dt');

    /*     <a href="http://academic.venturacollege.edu/mbowen/mathdept/CatCourseDesc.html#Math_Vxx" name="Math_Vxx" id="Math_Vxx"> */
    var destAnchor = document.createElement('a');
    var destAnchorName = x[i].getElementsByTagName('unique_ID')[0].childNodes[0].nodeValue;
    destAnchor.setAttribute('href', window.location.protocol + '//' + window.location.host + window.location.pathname + '#' + destAnchorName);
    destAnchor.setAttribute('name', destAnchorName);
    destAnchor.setAttribute('id', destAnchorName);

    /*     <span class="uppercase">Math Vxx</span> */
    var spanAllCaps = document.createElement('span');
    spanAllCaps.setAttribute((document.all ? 'className' : 'class'), 'uppercase');
    spanAllCaps.appendChild(document.createTextNode(x[i].getElementsByTagName('course_number')[0].childNodes[0].nodeValue));
    destAnchor.appendChild(spanAllCaps);

    /*     </a> -  */
    defTerm.appendChild(destAnchor);
    defTerm.appendChild(document.createTextNode(' - '));

    /*     <span class="uppercase">Algebraic Differential Geometry and Trigonometry of Discrete Linear Health Care Statistics with Applied Calculus</span> */
    spanAllCaps = document.createElement('span');
    spanAllCaps.setAttribute((document.all ? 'className' : 'class'), 'uppercase');
    spanAllCaps.appendChild(document.createTextNode(x[i].getElementsByTagName('course_name')[0].childNodes[0].nodeValue));
    defTerm.appendChild(spanAllCaps);

    /*      - 5 Units */
    defTerm.appendChild(document.createTextNode(' - '));
    var units = x[i].getElementsByTagName('units')[0].childNodes[0].nodeValue;
    defTerm.appendChild(document.createTextNode(units));
    defTerm.appendChild(document.createTextNode('\u00A0Unit'));
    if( units != 1 && units != 0.5) defTerm.appendChild(document.createTextNode('s')); // Print "Units" or "Unit" depending whether course is 1 unit or less

    /*   </dt> */
    defList.appendChild(defTerm);

    // definition-list definition gives remaining catalog information, which includes requisites, meeting hours, course description, and, as applicable,
    // extra information, such as former ID, applicability for degree credit, fees, field trips, "same-as" courses, transferability, or CAN data
    /*   <dd> */
    var defDefn = document.createElement('dd');

    if( x[i].getElementsByTagName('requisites').length > 0 ) // if there are one or more requisites, add them
    {
      /*     <p>Prerequisite: Math Vxx</p> */
      var reqs = x[i].getElementsByTagName('requisites')[0].childNodes;
      // loop over all requisites for the current course
      var j;
      for (j = 0;  j < reqs.length;  j++)
      {
        if (reqs[j].nodeType != 1) continue;
        var paragraph = document.createElement('p');
        paragraph.appendChild(document.createTextNode(reqs[j].getAttribute('type')));
        paragraph.appendChild(document.createTextNode(': '));
        paragraph.appendChild(document.createTextNode(reqs[j].childNodes[0].nodeValue));
        defDefn.appendChild(paragraph);
      } // end of loop over all requisites
    } // end of if there are one or more requisites

    /*     <p>Hours: 5 lecture weekly</p> */
    paragraph = document.createElement('p');
    paragraph.appendChild(document.createTextNode('Hours: '));
    paragraph.appendChild(document.createTextNode(x[i].getElementsByTagName('hours')[0].childNodes[0].nodeValue));
    defDefn.appendChild(paragraph);

    /*     <p>This course covers sets, number systems, graphing, functions, and so on. Students will not receive credit if they do not study.</p> */
    paragraph = document.createElement('p');
    paragraph.appendChild(document.createTextNode(x[i].getElementsByTagName('description')[0].childNodes[0].nodeValue));
    defDefn.appendChild(paragraph);

    /*     <p> */
    paragraph = document.createElement('p');

    if( x[i].getElementsByTagName('etc')[0].hasChildNodes()) // if course has additional information, add it
    {
      /*     Not applicable for degree credit. Field trips may be required. Fees may be required. Same as CS Vxx. Formerly Math xx. */
      paragraph.appendChild(document.createTextNode(x[i].getElementsByTagName('etc')[0].childNodes[0].nodeValue));
    } // end of if course has additional information

    if( x[i].getElementsByTagName('transfer_credit').length > 0 ) // if course is transferable, add the transfer data
    {
      /*     Transfer credit: CSU; UC; credit limitations - see counselor. */
      paragraph.appendChild(document.createTextNode(' Transfer credit: '));
      paragraph.appendChild(document.createTextNode(x[i].getElementsByTagName('transfer_credit')[0].childNodes[0].nodeValue));
    } // end of if course is transferable

    if( x[i].getElementsByTagName('can_data').length > 0 ) // if course has CAN information, add it
    {
      /*      <strong>CAN MATH xx.</strong> */
      paragraph.appendChild(document.createTextNode(' '));
      var strong = document.createElement('strong');
      strong.appendChild(document.createTextNode(x[i].getElementsByTagName('can_data')[0].childNodes[0].nodeValue));
      paragraph.appendChild(strong);
    } // end of if course has CAN information

    /*     </p> */
    defDefn.appendChild(paragraph);

    /*   </dd> */
    defList.appendChild(defDefn);
  } // end of loop over all courses

  /* </dl> */
  document.getElementById('write_catalog_course_descriptions_here').appendChild(defList);
}