/*

Filename:	console2.js

Author:		Alex Jonas

Project:	ICONS Project Administrative Database calendar

Notes:		This external JavaScript file supports the following Oracle PL/SQL procedure: STAFF.administration.console.

Last Updated: 	7/23/2010

*/


	//Create global variables.

	var dSims = new Array();  //Array to hold matching distributed simnums.
	var sSims = new Array();  //Array to hold matching single site simnums.
	var hSims = new Array();  //Array to hold matching hosted simnums.
	var trainings = new Array();  //Array to hold matching trainingIds.
	//var staffVacations = new Array();  //Array to hold matching staff vacationIds.
	var staffOutOfOffice = new Array();  //Array to hold matching staff "out of office" records.
	var cellNum = 0;
	var nowStr = '';
	var dtCurrentDate;

	var today = new Date();
	today.setHours(0);
	today.setMinutes(0);
	today.setSeconds(0);
	today.setMilliseconds(0);

	function writeSimRow(num) {

		//Write simulation information out in traditional tabular form; not currently used.

		var months = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

		var html = '';

		html += '<table width="100%" cellspacing="1" celpadding="3" border="0">';
		html += '  <tr bgcolor="#C0C0C0" align="center">';
		html += '    <th>Sim. No.</th>';
		html += '    <th>Simulation</th>';
		html += '    <th>Level</th>';
		html += '    <th>Semester</th>';
		html += '    <th>Year</th>';
		html += '    <th>Dates</th>';
		html += '  </tr>';

		var i;
		for (i = 0; i < distributed.length; i++) {

			if (num == distributed[i].simnum) {

				html += '  <tr bgcolor="#E7E6E0" align="center">';
				html += '    <td>' + distributed[i].simnum + '</td>';
				html += '    <td>' + distributed[i].typeName + '</td>';
				html += '    <td>' + distributed[i].gradeLevel + '</td>';
				html += '    <td>' + distributed[i].semester + '</td>';
				html += '    <td>' + distributed[i].year + '</td>';
				html += '    <td>' + formatDates(distributed[i].startDate, distributed[i].endDate) + '</td>';
				//html += '    <td>' + months[distributed[i].startDate.getMonth()] + ' ' + distributed[i].startDate.getDate() + ', ' + distributed[i].startDate.getFullYear() + ' - ' + months[distributed[i].endDate.getMonth()] + ' ' + distributed[i].endDate.getDate() + ', ' + distributed[i].endDate.getFullYear() + '</td>';
				html += '  </tr>';

			}

		}

		html += '</table>';

		document.getElementById('details').innerHTML = html;

	}

	function writeDetails(simnumStr) {

		//Write simulation information in list form to the "details" div.

		var i, j, k, l;

		var simnum = simnumStr.split(', ');

		var html = '<p style="font-size: 13;"><b>Sim Details</b></p>';

		for (i = 0; i < simnum.length; i++) {

			for (j = 0; j < distributed.length; j++) {

				if (simnum[i] == distributed[j].simnum) {

					html += '<p style="font-size: 12;"><b><a href="/staff/administration.simulation_details?v_sid=' + sid + '&v_simnum=' + distributed[j].simnum + '" title="Participation details for sim #' + distributed[j].simnum + '">Sim #' + distributed[j].simnum + '</a></b><br />';
					html += distributed[j].typeName + '<br />';
					html += 'distributed ' + distributed[j].gradeLevel + '<br />';
					//html += distributed[j].semester + ' ' + distributed[j].year + '<br />';
					html += formatDates(distributed[j].startDate, distributed[j].endDate) + '<br />';
					html += '</p>';

				}

			}

			for (k = 0; k < singleSite.length; k++) {

				if (simnum[i] == singleSite[k].simnum) {

					html += '<p style="font-size: 12;"><b><a href="/staff/administration.show_reg_details?v_sid=' + sid + '&v_registration_id=' + singleSite[k].regId + '" title="Registration details for sim #' + singleSite[k].simnum + '">Sim #' + singleSite[k].simnum + '</a></b><br />';
					html += singleSite[k].typeName + '<br />';
					html += 'single-site ' + singleSite[k].gradeLevel + '<br />';
					html += 'for ' + singleSite[k].facultyName + ', ' + singleSite[k].institution + '<br />';
					//html += singleSite[k].semester + ' ' + singleSite[k].year + '<br />';
					html += formatDates(singleSite[k].startDate, singleSite[k].endDate) + '<br />';
					html += '</p>';

				}

			}

			for (l = 0; l < hosted.length; l++) {

				if (simnum[i] == hosted[l].simnum) {

					html += '<p style="font-size: 12;"><b><a href="/staff/administration2.hosted_sim_details?v_sid=' + sid + '&v_simnum=' + hosted[l].simnum + '" title="Hosting details for sim #' + hosted[l].simnum + '">Sim #' + hosted[l].simnum + '</a></b><br />';
					html += 'hosted sim (' + hosted[l].name + ')<br />';
					html += 'for ' + hosted[l].client + '<br />';
					html += hosted[l].semester + ' ' + hosted[l].year + '<br />';
					html += formatDates(hosted[l].startDate, hosted[l].endDate) + '<br />';
					html += '</p>';

				}

			}

		}

		document.getElementById('details').innerHTML = html;

	}

	function formatDate2(dateObj) {

		//Return a date object as a string with the format 'Mon DD, YYYY'.

		var months = new Array('Jan.','Feb.','Mar.','Apr.','May.','Jun.','Jul.','Aug.','Sep.','Oct.','Nov.','Dec.');

		var formattedDate = '';

		var day = dateObj.getDate();
		var month = months[dateObj.getMonth()];
		var year = dateObj.getFullYear();

		formattedDate = month + ' ' + day + ', ' + year;

		return formattedDate;

	}

	function formatDates(objDate1, objDate2) {

		//Return two date objects as a string with the format 'Mon DD, YYYY' OR  'Mon DD - DD, YYYY' OR 'Mon DD - Mon DD, YYYY' OR 'Mon DD, YYYY - Mon DD, YYYY', as appropriate.

		var fomattedDates;
		var year1, year2;
		var month1, month2;
		var date1, date2;

		var bolSameYear = false;
		var bolSameMonth = false;
		var bolSameDate = false;

		var months = new Array('Jan.', 'Feb.', 'Mar.', 'Apr.', 'May', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.');

		var formattedDates ='';

		if ( objDate1.getFullYear() == objDate2.getFullYear() ) {

			bolSameYear = true;

		}

		if ( objDate1.getMonth() == objDate2.getMonth() ) {

			bolSameMonth = true;

		}

		if ( objDate1.getDate() == objDate2.getDate() ) {

			bolSameDate = true;

		}

		if (bolSameYear && bolSameMonth & bolSameDate) {

			formattedDates += months[objDate1.getMonth()] + ' ' + objDate1.getDate() + ', ' + objDate1.getFullYear();

		} else if (bolSameYear && bolSameMonth) {

			formattedDates += months[objDate1.getMonth()] + ' ' + objDate1.getDate() + ' - '  + objDate2.getDate() + ', ' + objDate1.getFullYear();

		} else if (bolSameYear) {

			formattedDates += months[objDate1.getMonth()] + ' ' + objDate1.getDate() + ' - '  + months[objDate2.getMonth()] + ' ' + objDate2.getDate() + ', ' + objDate1.getFullYear();

		} else {

			formattedDates += months[objDate1.getMonth()] + ' ' + objDate1.getDate() + ', ' + objDate1.getFullYear() + ' - '  + months[objDate2.getMonth()] + ' ' + objDate2.getDate() + ', ' + objDate2.getFullYear();

		}

		return formattedDates;

	}

	function getSimnums(simnums) {

		//Return a string of simnums for a specific training.

		var html = '';
		var i;

		if (simnums.length == 1 && simnums[0] == '') {

			html = 'Simnums TBA';

		} else {

			for (i = 0; i < simnums.length; i++) {

				html += '#' + simnums[i] + ', '

			}

			html = html.substring(0, (html.length - 2));


		} 

		return html;

	}

	function getTrainers(trainers) {

		//Return a string of trainer names for a specific training.

		var html = '';
		var i;

		if (trainers.length == 1 && trainers[0] == '') {

			html = 'Trainers TBA';

		} else {

			html = 'delivered by ';


			for (i = 0; i < trainers.length; i++) {

				html += trainers[i] + ', '

			}

			html = html.substring(0, (html.length - 2));


		} 

		return html;

	}

	function getDaysRow2() {

		//Return a row of day names for the calendar.

		var daysOfTheWeek = new Array('S','M','T', 'W', 'T', 'F', 'S');

		var html = '';

		html += '  <tr style="background-color: #E7E6E0;">\n';

		var i;
		for (i = 0; i < daysOfTheWeek.length; i++) {

			html += '    <th width="40" style="font-size: 11;">' + daysOfTheWeek[i] + '</th>\n';

		}

		html += '  </tr>\n';

		return html;

	}

	function createSimnumStr(simnums) {

		//Convert an array of simnums into a comma-space delimited string of simnums.

		var simnumStr = '';

		var i;
		for (i = 0; i < simnums.length; i++) {

			simnumStr += simnums[i] + ', ';

		}

		simnumStr = simnumStr.substring(0, simnumStr.length - 2);

		return simnumStr;

	}

	function createSimnumTitleStr(simnumStr) {

		//Append 'simnum ' or 'simnums ' to a comma-space delimited string of simnums; used for html "title" attributes.

		if (simnumStr.indexOf(',') == -1) {

			var simnumStr = 'simnum ' + simnumStr;

		} else {

			var simnumStr = 'simnums ' + simnumStr;

		}

		return simnumStr;

	}

	function createCalendar(date) {

		//Create and write a monthly calendar to the "calendar" div.

		(date == null) ? now = new Date() : now = new Date(date);

		var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

		var daysInMonth = new Array('31','28','31','30','31','30','31','31','30','31','30','31');

		var div4 = now.getFullYear() % 4;
		var div100 = now.getFullYear() % 100;
		var div400 = now.getFullYear() % 400;

		if ( ( (div4 == 0) && (div100 != 0) ) || (div400 == 0) ) {

			daysInMonth[1] = 29;
		}

		var prevMonth;
		var nextMonth;

		var year = now.getFullYear();
		var month = now.getMonth();
		var day = now.getDate();

		nowStr = getDateStr(now);

		var prevMonth = new Date(year, month - 1, 1);
		var prevMonthStr = getDateStr(prevMonth);

		var nextMonth = new Date(year, month + 1, 1);
		var nextMonthStr = getDateStr(nextMonth);

		var calendarDays = new Array();  //Set blank array of possible date slots.

		var firstDay = new Date(year, month, 1);  //Create a date object corresponding to the first day of the month.

		var lastDay = new Date(year, month, daysInMonth[month]);  //Create a date object corresponding to the last day of the month (technically, the day before the first day of the next month).

		firstDay = firstDay.getDay();  //Should now equal the day of the week for use as an offset when populating the calendarDays array.

		lastDay = lastDay.getDate();  //Should now equal 28, 29, 30, or 31.

		//Clear the calendarDays array.

		var i, j, k, l, m, n, o, p;

		for (i = 1; i <= 42; i++) {

			calendarDays[i] = '';

		}

		//Populate the calendarDays array, offsetting for the day of the week corresponding to the first day of the month.

		for (i = 1; i <= lastDay; i++) {

			calendarDays[firstDay + i] = i;  //And here's the offset.

		}

		//Build the actual calendar output.

		var html = '';

		html += '<table cellspacing="0" cellpadding="3" border="1">';
		html += '  <tr style="background-color: #E7E6E0;">';
		html += '    <th><a style="color: blue;" href="javascript:clearDetails(); createCalendar(\'' + prevMonthStr + '\');" title="previous month"><<</a></th>';
		html += '    <th colspan="5">' + months[month] + '&nbsp;' + year + '</th>';
		html += '    <th><a style="color: blue;" href="javascript:clearDetails(); createCalendar(\'' + nextMonthStr + '\');" title="next month">>></a></th>';
		html += '  </tr>';
		html += getDaysRow2();

		for (i = 1; i <= 6; i++) {

			html += '  <tr valign="top">';

			for (j = 1; j <= 7; j++) {

				cellNum = ((i - 1) * 7) + j;

				if (calendarDays[((i - 1) * 7) + j] == '') {

					html += '    <td id="cell' + cellNum + '" width="40" bgcolor="#FFFFFF"><img src="http://www.icons.umd.edu/images/pix1.gif" alt="image spacer" width="1" height="40" border="0" /></td>\n';

				} else {

					dSims.length = 0;  //Clear global array dSims.

					sSims.length = 0;  //Clear global array sSims.

					hSims.length = 0;  //Clear global array hSims.

					trainings.length = 0;  //Clear global array trainings.

					//staffVacations.length = 0;  //Clear global array staffVacations.

					staffOutOfOffice.length = 0;  //Clear global array staffOutOfOffice.

					dtCurrentDate = new Date(year, month, calendarDays[((i - 1) * 7) + j]);

					html += '    <td id="cell' + cellNum + '" width="40" bgcolor="' + getCellBgColor(dtCurrentDate) + '" style="background-color: ' + getCellBgColor(dtCurrentDate, cellNum) + '; text-align: center; font-size: 11;"><img src="http://www.icons.umd.edu/images/pix1.gif" alt="image spacer" width="1" height="40" border="0" align="left" /><a style="color: #000000;" href="javascript:writeDigest(\'' + getDateStr(dtCurrentDate) + '\', ' + cellNum + ')" onClick="unHighlightCells(); highlightCell(' + cellNum + ');">' + calendarDays[((i - 1) * 7) + j] + '</a><br />\n';

					for (k = 0; k < distributed.length; k++) {

						if (dtCurrentDate - distributed[k].startDate == 0) {

							dSims.push(distributed[k].simnum);

						}

					}

					for (l = 0; l < singleSite.length; l++) {

						if (dtCurrentDate - singleSite[l].startDate == 0) {

							sSims.push(singleSite[l].simnum);

						}

					}


					for (m = 0; m < hosted.length; m++) {

						if (dtCurrentDate - hosted[m].startDate == 0) {

							hSims.push(hosted[m].simnum);

						}

					}

					for (n = 0; n < training.length; n++) {

						if (dtCurrentDate - training[n].startDate == 0) {

							trainings.push(training[n].trainingId);

						}

					}

					/*

					for (o = 0; o < vacations.length; o++) {

						if (dtCurrentDate - vacations[o].startDate == 0) {

							staffVacations.push(vacations[o].vacationId);

						}

					}

					*/

					for (p = 0; p < outOfOffice.length; p++) {

						if (dtCurrentDate - outOfOffice[p].startDate == 0) {

							staffOutOfOffice.push(outOfOffice[p].outOfOfficeId);

						}

					}

					if (document.getElementById('showD').checked == true && dSims.length > 0) {

						html += '    <a href="javascript:writeDetails(\'' + createSimnumStr(dSims) + '\');" title="' + createSimnumTitleStr(createSimnumStr(dSims)) + '" onClick="unHighlightCells(); highlightCell(' + cellNum + ');">d</a>';

					}

					if (document.getElementById('showS').checked == true && sSims.length > 0) {

						html += '    <a href="javascript:writeDetails(\'' + createSimnumStr(sSims) + '\');" title="' + createSimnumTitleStr(createSimnumStr(sSims)) + '" onClick="unHighlightCells(); highlightCell(' + cellNum + ');">s</a>';

					}

					if (document.getElementById('showH').checked == true && hSims.length > 0) {

						html += '    <a href="javascript:writeDetails(\'' + createSimnumStr(hSims) + '\');" title="' + createSimnumTitleStr(createSimnumStr(hSims)) + '" onClick="unHighlightCells(); highlightCell(' + cellNum + ');">h</a>';

					}

					if (document.getElementById('showT').checked == true && trainings.length > 0) {

						html += '    <a href="javascript:void(0)" onClick="writeTrainingStr(\'' + getDateStr(dtCurrentDate) + '\'); unHighlightCells(); highlightCell(' + cellNum + ');" title="training..." onClick="unHighlightCells(); highlightCell(' + cellNum + ');">t</a>';

					}

					/*

					if (document.getElementById('showV').checked == true && staffVacations.length > 0) {

						html += '    <a href="javascript:void(0)" onClick="writeVacationStr(\'' + getDateStr(dtCurrentDate) + '\'); unHighlightCells(); highlightCell(' + cellNum + ');" title="on vacation..." onClick="unHighlightCells(); highlightCell(' + cellNum + ');">v</a>';

					}

					*/

					if (document.getElementById('showO').checked == true && staffOutOfOffice.length > 0) {
						html += '    <a href="javascript:void(0)" onClick="writeOutOfOfficeStr(\'' + getDateStr(dtCurrentDate) + '\'); unHighlightCells(); highlightCell(' + cellNum + ');" title="out of the office..." onClick="unHighlightCells(); highlightCell(' + cellNum + ');">o</a>';

					}

					html += getHoliday(dtCurrentDate);

					html += '    </td>\n';


				}


			}

			html += '  </tr>';

		}

		html += '</table>';

		document.getElementById('calendar').innerHTML = html;

	}

	function clearDetails() {

		//Clear content from the "details" div.

		unHighlightCells();

		document.getElementById('details').innerHTML = '';

	}

	function jumpTo(month, year) {

		//Create calendar for the given month and year after clearing content from the "details" div.

		clearDetails();

		var timeFrame = month + '/01/' + year;

		createCalendar(timeFrame);

		document.forms[0].calMonth.selectedIndex = 0;
		document.forms[0].calYear.selectedIndex = 0;

	}

	function highlightCell(num) {

		//Highlight the given calendar cell.

		var cellnum = 'cell' + num;

		document.getElementById(cellnum).style.backgroundColor = 'pink';


	}

	function unHighlightCells() {

		//Unhighlight all the calendar cells.

		var cellnum = '';
		var elem;
		var currentBgColor = '';
		var i;

		for (i = 1; i <= 42; i++) {

			cellnum = 'cell' + i;

			elem = document.getElementById(cellnum);

			currentBgColor = elem.style.backgroundColor;

			if (elem.style.backgroundColor && (elem.style.backgroundColor == 'rgb(231, 230, 224)' || elem.style.backgroundColor == '#e7e6e0')) {

				elem.style.backgroundColor = currentBgColor;

			} else {

				elem.style.backgroundColor = '#FFFFFF';

			}

		}

	}

	function getCellBgColor(currentDate, cellNum) {

		//Return the background color of the calendar cell corresponding to the passed date (currentDate).

		var bgColor = '#FFFFFF';
		var match = 0;

		if (currentDate - today == 0) {

			bgColor = 'pink';

			writeDigest(getDateStr(currentDate), cellNum);

		} else {


			var i;
			for (i = 0; i < holidays.length; i++) {

				if (currentDate - holidays[i].observanceDate == 0) {

					match++;
					break;

				}

			}

			if (match) {

				bgColor = '#E7E6E0';

			}

		}

		return bgColor;

	}

	function getHoliday(currentDate) {

		var holidayStr = '';
		var observed = '';
		var description = '';
		var match = 0;
		var i;

		for (i = 0; i < holidays.length; i++) {  //Check for matching holidays.

			if (currentDate - holidays[i].observanceDate == 0) {

				match++;
				break;

			}

		}

		if (match) {  //Write out holiday string.


			if (holidays[i].earnedDate - holidays[i].observanceDate != 0) {

				observed = ' (observed)';

			} else {

				observed = '';

			}

			description = '\'<p><small><b>Holiday Details</b></small></p><p><small>' + formatDate2(dtCurrentDate) +  ' is ' + holidays[i].description.replace("\'","\\\'") + observed + '</small></p>\'';

			holidayStr = '<br /><a href="javascript:void(0);" onClick="unHighlightCells(); document.getElementById(\'details\').innerHTML = ' + description + ';" title="' + holidays[i].description + observed + '">hol</a>';

		}

		return holidayStr;

	}

	function writeTrainingStr(dateStr) {

		var dateObj = new Date(dateStr);
		var html = '<p style="font-size: 13;"><b>Training Details</b></p>';
		var i;

		for (i = 0; i < training.length; i++) {

			if (dateObj - training[i].startDate == 0) {

				html += '<p style="font-size: 12;"><b><a href="/staff/administration2.training_details?v_sid=' + sid + '&v_training_id=' + training[i].trainingId + '" title="Details for training #' + training[i].trainingId + '">Training #' + training[i].trainingId + '</a></b><br />';
				html += training[i].name + '<br />';
				html += 'for ' + training[i].client + '<br />';
				html += training[i].trainingType;

				if (training[i].trainingType.toLowerCase() == 'on-line simulation' && training[i].simnums.length > 0) {

					html += ' (' + getSimnums(training[i].simnums) + ')';

				}

				html += '<br />';
				html += getTrainers(training[i].trainers) + '<br />';
				html += formatDates(training[i].startDate, training[i].endDate) + '<br />';
				html += '</p>';

			}

		}


		document.getElementById('details').innerHTML =  html;

	}

	/*

	function writeVacationStr(dateStr) {

		var dateObj = new Date(dateStr);
		var html = '<p style="font-size: 13;"><b>Vacation Details</b></p>';
		var i;

		for (i = 0; i < vacations.length; i++) {

			if (dateObj - vacations[i].startDate == 0) {

				html += '<p style="font-size: 12;"><b>' + vacations[i].name + '</b><br />';
				html += formatDates(vacations[i].startDate, vacations[i].endDate) + '<br />';

				if (vacations[i].comments) {

					html += vacations[i].comments + '<br />';

				}

				html += '</p>';

			}

		}


		document.getElementById('details').innerHTML =  html;

	}

	*/

	function writeOutOfOfficeStr(dateStr) {

		var dateObj = new Date(dateStr);
		var html = '<p style="font-size: 13;"><b>Out of Office Details</b></p>';
		var i;

		for (i = 0; i < outOfOffice.length; i++) {

			if (dateObj - outOfOffice[i].startDate == 0) {

				html += '<p style="font-size: 12;"><b>' + outOfOffice[i].name + '</b><br />';
				html += (outOfOffice[i].reason + '<br />');
				html += formatDates(outOfOffice[i].startDate, outOfOffice[i].endDate) + '<br />';

				if (outOfOffice[i].comments) {

					html += outOfOffice[i].comments + '<br />';

				}

				html += '</p>';

			}

		}


		document.getElementById('details').innerHTML =  html;

	}

	function getDateStr(dateObj) {

		//Return a date string in MM/DD/YYYY format suitable for creating a new date object. 

		var actualMonth = new Array('01','02','03','04','05','06','07','08','09','10','11','12');

		var day = dateObj.getDate();
		var month = dateObj.getMonth();
		var year = dateObj.getFullYear();

		var dateStr = actualMonth[month] + '/' + day + '/' + year;

		return(dateStr);

	}

	function toggleCheckbox(id, nowStr) {
			
		var obj = document.getElementById(id);
				
		(obj.checked) ? (obj.checked = false) : (obj.checked = true);

		clearDetails();

		createCalendar(nowStr);

	}

	function writeDigest(dateStr, cellNum) {

		//Write slightly abbreviated descriptions of distributed, single site, and hosted sims, as well as trainings, to the "details" div section.

		var currentDate = new Date(dateStr);

		var html = '<p style="font-size: 13;"><b>Daily Digest for ' + formatDate2(currentDate) + ':</b></p>';

		var html = html + '<p style="font-size: 11;"><a href="javascript:void(0);" onClick="toggleOutOfOffice();"><span id="outOfOfficeToggle">Show &quot;Out of Office&quot;</span></a></p>';

		var html = html + '<div id="outOfOfficeDigest" style="display: none;">';

		var html = html + '<ol style="font-size: 11;">' + getOutOfOffice(currentDate); + '</ol>';  //Nice pun on the function name, eh?

		var html = html + '</div>';

		var i;

		for (i = 0; i < training.length; i++) {

			if (training[i].startDate - currentDate <= 0 && training[i].endDate - currentDate >= 0) {


				html += '<p style="font-size: 12;"><b><a href="/staff/administration2.training_details?v_sid=' + sid + '&v_training_id=' + training[i].trainingId + '" title="Details for training #' + training[i].trainingId + '">Training #' + training[i].trainingId + '</a></b><br />' + training[i].name + ' for ' + training[i].client + '<br />' + getTrainers(training[i].trainers) + '<br />' + formatDates(training[i].startDate, training[i].endDate) + '</p>';

			}

		}

		for (i = 0; i < distributed.length; i++) {

			if (distributed[i].startDate - currentDate <= 0 && distributed[i].endDate - currentDate >= 0) {


				html += '<p style="font-size: 12;"><b><a href="/staff/administration.simulation_details?v_sid=' + sid + '&v_simnum=' + distributed[i].simnum + '" title="Participation details for sim #' + distributed[i].simnum + '">Distributed Sim #' + distributed[i].simnum + '</a></b><br />' + distributed[i].typeName + ' (' + distributed[i].gradeLevel + '-level)<br />' + formatDates(distributed[i].startDate, distributed[i].endDate) + '<br /><a href="javascript:popWin(\'http://www.icons.umd.edu/staff/administration2.show_conferences?p_sid=' + sid + '&p_simnum=' + distributed[i].simnum + '&p_date=' + dateStr + '\',\'' + distributed[i].simnum + '\');">Check for conferences</a></p>';

			}

		}

		for (i = 0; i < hosted.length; i++) {

			if (hosted[i].startDate - currentDate <= 0 && hosted[i].endDate - currentDate >= 0) {


				html += '<p style="font-size: 12;"><b><a href="/staff/administration2.hosted_sim_details?v_sid=' + sid + '&v_simnum=' + hosted[i].simnum + '" title="Hosting details for sim #' + hosted[i].simnum + '">Hosted Sim #' + hosted[i].simnum + '</a></b><br />' + hosted[i].name + ' for ' + hosted[i].client + '<br />' + formatDates(hosted[i].startDate, hosted[i].endDate) + '<br /><a href="javascript:popWin(\'http://www.icons.umd.edu/staff/administration2.show_conferences?p_sid=' + sid + '&p_simnum=' + hosted[i].simnum + '&p_date=' + dateStr + '\',\'' + hosted[i].simnum + '\');">Check for conferences</a></p>';

			}

		}

		for (i = 0; i < singleSite.length; i++) {

			if (singleSite[i].startDate - currentDate <= 0 && singleSite[i].endDate - currentDate >= 0) {


				html += '<p style="font-size: 12;"><b><a href="/staff/administration.show_reg_details?v_sid=' + sid + '&v_registration_id=' + singleSite[i].regId + '" title="Registration details for sim #' + singleSite[i].simnum + '">Single Site Sim #' + singleSite[i].simnum + '</a></b><br />' + singleSite[i].typeName + ' (' + singleSite[i].gradeLevel + '-level)<br />for ' + singleSite[i].facultyName + ' at ' + singleSite[i].institution + '<br />' + formatDates(singleSite[i].startDate, singleSite[i].endDate) + '</p>';

			}

		}

		document.getElementById('details').innerHTML =  html;

	}


	function toggleOutOfOffice() {

		var elem;

		elem = document.getElementById('outOfOfficeDigest');

		(elem.style.display == 'none') ? elem.style.display = 'block' : elem.style.display = 'none';

		elem = document.getElementById('outOfOfficeToggle');

		(elem.innerHTML == 'Show \"Out of Office\"') ? elem.innerHTML = 'Hide \"Out of Office\"' : elem.innerHTML = 'Show \"Out of Office\"';

	}


	function getOutOfOffice(currentDate) {

		var html = '';

		for (var i = 0; i < outOfOffice.length; i++) {

			if (outOfOffice[i].startDate - currentDate <= 0 && outOfOffice[i].endDate - currentDate >= 0) {


				html += ('<li><b>' + outOfOffice[i].name + '</b> (' + outOfOffice[i].reason + ')</li>');

			}

		}

		if (html == '') html = 'None.';

		return html;

	}

