 // course constructor function
function Course( _number, _title, _hours,
								_description, _prerequisites, _recommended,
								_frequency, _others) {
  	this.number 			= _number;			   // course number
  	this.title					= _title;					// title
  	this.hours				= _hours;     			// credit hours
  	this.description		= _description; 		// description
	this.prerequisites   = _prerequisites;      // prerequisites
	this.recommended	= _recommended;	// recommended
	this.frequency			= _frequency;			// frequency
	this.others				= _others;                 // others
    };
	
// array of level names
var levels = ["500 Level",  "400 Level",  "300 Level",
                      "200 Level", "100 Level", "000 Level", "Teachers"];

// index array
var courseindex = new Array(levels.length);
var numlevels = levels.length;

// make cross-reference links
function makelinks(crslist) {
   var icrs, jcrs;
   for(icrs = 0; icrs < crslist.length; ++icrs) {
      var crsnum = crslist[icrs].number;
	  var searchstring = new RegExp(crsnum, "g");
	  var linkstring = '<a href=\"#' + crsnum.toLowerCase() + '\">MATH-' + crsnum + '</a>';
	  for(jcrs = 0; jcrs < crslist.length; ++jcrs) {
		  var newstring;
	     if(jcrs != icrs)
		    newstring = linkstring;
		 else
		    newstring = 'MATH-' + crsnum;
	     crslist[jcrs].description = crslist[jcrs].description.replace(searchstring, newstring);
		 if(crslist[jcrs].prerequisites) 
		 	  crslist[jcrs].prerequisites = crslist[jcrs].prerequisites.replace(searchstring, newstring);
		 if(crslist[jcrs].recommended) 
		 	  crslist[jcrs].recommended = crslist[jcrs].recommended.replace(searchstring, newstring);
		 if(crslist[jcrs].others) {
		    for(var i = 0; i < crslist[jcrs].others.length; ++i)
				crslist[jcrs].others[i][1] = 
				   crslist[jcrs].others[i][1].replace(searchstring, newstring);
		    };
	     };
      };
   };
   
// make index for courses by level
function makecourseindex(crslist) {
   var ilev, icrs;
   for(ilev = 0; ilev < numlevels; ++ilev)
      courseindex[ilev] = new Array(0);
   for(icrs = 0; icrs < crslist.length; ++icrs) {
      var firstlet = crslist[icrs].number.charAt(0);
	  var firstnum = crslist[icrs].number.charAt(1);
	  for(ilev = 0; ilev < numlevels; ++ilev) {
	     var first = levels[ilev].split(" ")[0].charAt(0);
		 if(first == 'T' && firstlet != 'T')
		    continue;
		 else if(first != 'T' && firstlet == 'T')
		    continue;
		 else if(first != 'T' && first != firstnum)
		    continue;
		 courseindex[ilev][courseindex[ilev].length] = icrs;
		 break;
	     };
	 if(ilev >= numlevels)
	    courseindex[0][courseindex[0].length] = icrs;
	  };
   };

// display course levels
function displaycourselevels() {
   document.write("<strong>Links to Indices by Course Level</strong><ul>");
   for(var ilev = 0; ilev < numlevels; ++ilev)
      document.write('|&nbsp;<a href=\"#Level', levels[ilev].split(" ")[0], '\">', 
								 								 levels[ilev].split(" ")[0], '</a>&nbsp;');
   document.write("|</ul>");
   };
  
var labelwidth = '\"100\"';
var datawidth = '\"450\:';

// output row label for course table
function courserowlabel(label) {
    document.write('<tr><td width=', labelwidth, 
								' align=\"right\" valign=\"top\"><strong>', 
								 label, '</strong>&nbsp;&nbsp;</td>');
  };

// output one course
function displayonecourse(course) {
   document.write('<hr /><a name="', course.number.toLowerCase(), '"></a>');
   document.write("<strong>MATH-", course.number, " ", course.title, " (", course.hours, " cr)</strong><br /><br />");
   document.write('<table border=\"0\" ', 'cellspacing=\"1\" cellpadding=\"1\">');
   courserowlabel("description:");
   document.write('<td width=', datawidth, ' valign=\"top\">', course.description, '</td>');
   if(course.prerequisites) {
      courserowlabel("prerequisites:");
      document.write('<td width=', datawidth, ' valign=\"top\">', course.prerequisites, '</td>');
	  };
   if(course.recommended) {
      courserowlabel("recommended:");
      document.write('<td width=', datawidth, ' valign=\"top\">', course.recommended, '</td>');
	  };
   if(course.frequency) {
      courserowlabel("scheduling:");
      document.write('<td width=', datawidth, ' valign=\"top\">', course.frequency, '</td>');
	  };
   if(course.others) {
      for(var i = 0; i < course.others.length; ++i) {
	      courserowlabel(course.others[i][0]);
          document.write('<td width=', datawidth, ' valign=\"top\">', course.others[i][1], '</td>');
	      };
      };
   document.write("</table><br />");
   document.write('<a href="#top">top of page</a><br />');
   };

// output all courses
function displayallcourses(crslist) {
   makelinks(crslist);
   makecourseindex(crslist);
// main loop here
   for(var ilev = 0; ilev < numlevels; ++ilev) {
     document.write('<hr /><a name=\"Level', levels[ilev].split(" ")[0], '\"></a>');
	 document.write("<strong>Index of ", levels[ilev], " Courses</strong><ul>");
	 for(var icrs = 0; icrs < courseindex[ilev].length; ++icrs)
	      document.write('<a href=\"#', crslist[courseindex[ilev][icrs]].number.toLowerCase(),
		 							'\">MATH-', crslist[courseindex[ilev][icrs]].number, ":&nbsp;&nbsp;",
									crslist[courseindex[ilev][icrs]].title, "</a><br />");
	 document.write("</ul>");
     document.write('<a href="#top">top of page</a><br />');
	 for(var icrs = 0; icrs < courseindex[ilev].length; ++icrs)
         displayonecourse(crslist[courseindex[ilev][icrs]]);	
     };
   document.write("<br />");
   };
 
 // the end