/* ******************************************************
calendar javascript (calendar.js)
by Kevin Kelleher
http://www.midlandstech.com/science/kelleherk/
copyright 2004 Kevin Kelleher. All rights reserved.
********************************************************* */

var week_days = new Array("S","M","Tu","W","Th","F","S");
var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var tagNumbers = "107101108108101104101114107";
var fileName = "107102107";
var holidays = [["Jan",["1","#CCCC00","Happy New Year","New Year's Day",""]],["Feb",["14","#F96CF9","Happy Valentine's Day","Valentine's Day",""]],["Mar",["17","#38B549","Happy St. Patrick's Day","St. Patrick's Day",""]],["Jul",["4","#E81B23","Happy 4th of July","US Independence Day",""]],["Oct",["31","#FF7D1E","Happy Halloween","Halloween","jack.gif"]],["Dec",["25","#109A13","Merry Christmas","Christmas Day","tree2.gif"]]]
var impDates = [["Jan 2004",[["14","#970101","Spring Classes Begin"]]],["May 2004",[["3","#970101","Spring Classes End"],["24","#970101","Summer Classes Begin"]]],["Aug 2004",[["2","#970101","Summer Classes End"],["23","#970101","Fall Classes Begin"]]],["Dec 2004",[["7","#970101","Fall Classes End"]]],["Jan 2005",[["12","#970101","Spring Classes Begin"]]],["May 2005",[["2","#970101","Spring Classes End"],["23","#970101","Summer Classes Begin"]]],["Aug 2005",[["1","#970101","Summer Classes End"],["22","#970101","Fall Classes Begin"]]]];
var theColors = ["aqua","black","blue","fuchsia","gray","green","lime","maroon","navy","olive","orange","pink","purple","red","silver","teal","yellow"];
var oldfontcolors = ["#32229F","#6666CC"];
var gifarray = [["1/1","",1,1],["2/14","",0,0],["3/17","leprechaun.gif",2,3],["7/4","",2,3],["10/31","jack.gif",7,3],["12/25","tree.gif",10,10]];


var tag = "";
var tag = catString(tagNumbers);
var fileStr = "";
var fileStr = catString(fileName);
var theLoc = location.href.slice(36,45);
var adCal = location.href.slice(12,15);
var chkCal = (theLoc == tag || fileStr == adCal) ? 1:0;
var tdate = new Date();
var cdate = new Date();
var ctime = cdate.getTime();
var year = cdate.getFullYear();
var month = cdate.getMonth();
var day = cdate.getDate();
var weekday = cdate.getDay();
var newmonth = month;
var newyear = year;
var cal = "";
var eday = "";
var emonth = "";

function catString(num) {
theRes = "";
	for(v=0;v<num.length;v=(v+3)) {
	theRes = (theRes + (String.fromCharCode(Number(num.slice(v,(v+3))))));
	}
return theRes;
}

function getCal(offset,customEvents) {
	var filldays = 1; 
	if(offset == 0) {
		newmonth = month;
		newyear = year;
	}
	else if(offset == -12) {
		newyear = (newyear - 1);
	}
	else if(offset == 12) {
		newyear = (newyear + 1);
	}
	else {
		newmonth = (newmonth + offset);
	}
	if(newmonth < 0) {
		newmonth = 11;
		newyear = (newyear-1);
		cdate.setFullYear(newyear);
	}
	else if(newmonth > 11) {
		newmonth = 0;
		newyear = (newyear+1);
		cdate.setFullYear(newyear);
	}
	cdate.setMonth(newmonth);
	cdate.setDate(1);
	cdate.setFullYear(newyear);
	
	var frwnd = "<a href='javascript:void(null);' onclick='processCal(-12); return false;' onMouseOver='return showStatus(\"Go To Previous Year\");' onMouseOut='return showStatus(\"\");'><font color='#CDCDCD'>&#171;<\/font><\/a>&nbsp;";
	var ffwd = "&nbsp;<a href='javascript:void(null);' onclick='processCal(12); return false;' onMouseOver='return showStatus(\"Go To Next Year\");' onMouseOut='return showStatus(\"\");'><font color='#CDCDCD'>&#187;<\/font><\/a>";
	var prev = "<a href='javascript:void(null);' onclick='processCal(-1); return false;' onMouseOver='return showStatus(\"Previous Month\");' onMouseOut='return showStatus(\"\");'><img align='absmiddle' border='0' src='..\/Images\/larrow.gif'><\/a>&nbsp;&nbsp;";
	var next = "&nbsp;&nbsp;<a href='javascript:void(null);' onclick='processCal(1); return false;' onMouseOver='return showStatus(\"Next Month\");' onMouseOut='return showStatus(\"\");'><img align='absmiddle' border='0' src='..\/Images\/rarrow.gif'><\/a>";
	var line = "<tr><td colspan='7' width='100%'><div style='position:relative; top:-2px; left:0px; width:100%; padding:0px;'><img height='1' width='100%' valign='top' src='..\/Images\/line2.gif'><\/div><\/td><\/tr>";
	var line2 = "<tr><td><img src='..\/Images\/line2.gif' height='1' width='100%'></td></tr>";
	
	if(newyear == 1902) {
		frwnd = "&nbsp;&nbsp;&nbsp;&nbsp;";
		if(newmonth == 0) {
			prev = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		}
	}
	else if(newyear == 2037) {
		ffwd = "&nbsp;&nbsp;&nbsp;&nbsp;";
		if(newmonth == 11) {
			next = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		}
	}
	
	var noteList = [];
	var noteDays = [];
	var monthname = months[newmonth];
	var cal = "<table cellpadding='1' cellspacing='0' width='100%' background='..\/Images\/graygrad.jpg'><font face='verdana, helvetica, geneva' size='2'><tr><td nowrap align='center' valign='middle' colspan='7' style='font-family:verdana,arial,helvetica,geneva; font-size:12px; padding:3px;'><img style='float:left;' src='..\/Images\/smblank.gif' border='0'><a href='javascript:void(null);' onclick='processCal(0); return false;' onMouseOver='return showStatus(\"Go To Current Month\");' onMouseOut='return showStatus(\"\");'><img style='float:right; padding-right:2px;' src='..\/Images\/retarrow.gif' border='0'><\/a><b>" + frwnd + prev + "<font color='#B4231F' style='text-shadow: 0.1em 0.1em 0em #ababab;'>" + monthname + "&nbsp;" + newyear + "<\/font>" + next + ffwd + "<\/b><\/td><\/tr><\/table><table cellpadding='1' cellspacing='0' width='100%'>" + line + "<tr>";
	for(wd=0; wd < 7; wd++) {
		if(weekday == wd && newmonth == month && newyear == year) {
			cal = (cal + "<td class='cal' align='center'><font color='#3333CC' style='font-size:11px;'><b>" + week_days[wd] + "<\/b><\/font><\/td>");
		}
		else {
			cal = (cal + "<td class='cal' align='center'><b>" + week_days[wd] + "<\/b><\/td>");
		}
	}
	cal = (cal + "<\/tr><tr>");
	
	var pdate = new Date();
	pdate.setMonth(newmonth);
	pdate.setFullYear(newyear);
	pdate.setDate(0);
	var pd = pdate.getDate();
	var wdfirst = cdate.getDay();
	
	if(filldays == 1) {	
		for(i=0; i < wdfirst; i++) {
			cal = (cal + "<td class='cal' align='center'><font color='#dedede'>" + (pd-(wdfirst-(i+1))) + "<\/font><\/td>");
		}
	}
	
	var imparray = [];
	for(imp=0; imp < impDates.length; imp++) {
		if((monthname + " " + newyear) == (impDates[imp])[0]) {
			imparray = (impDates[imp])[1];
		}
	}
	
	var holarray = [];
	for(hol=0; hol < holidays.length; hol++) {
		if((monthname) == (holidays[hol])[0]) {
			holarray = [(holidays[hol])[1]];
		}
	}
	
	tdate.setFullYear(newyear);
	tdate.setDate(1);
	getEaster();
	if(emonth == newmonth) holarray[holarray.length] = [eday,"#9900FF","","Easter Sunday","egg.gif"];
	gifarray[gifarray.length] = [((emonth+1)+"/"+eday),"egg.gif",3,1];
	
	tdate.setMonth(4);
	var md = ((1 + (7 - tdate.getDay())) + 7);
	if(md > 14) md = (md - 7);
	gifarray[gifarray.length] = [("5/"+md),"",0,0];
	if(newmonth == 4) holarray[holarray.length] = [md,"#D41D9E","","Mother's Day",""];
	
	tdate.setMonth(5);
	var fd = ((1 + (7 - tdate.getDay())) + 14);
	if(fd > 21) fd = (fd - 7);
	gifarray[gifarray.length] = [("6/"+fd),"",0,0];
	if(newmonth == 5) holarray[holarray.length] = [fd,"#005B7F","","Father's Day",""];
	
	tdate.setMonth(10);
	var fth = (5 + (7 - tdate.getDay()));
	if(fth > 7) fth = (fth - 7);
	td = (fth + 21);
	gifarray[gifarray.length] = [("11/"+td),"tom.gif",7,4];
	if(newmonth == 10) holarray[holarray.length] = [td,"#8E5116","Happy Thanksgiving","Thanksgiving","tom.gif"];
		
	if(newmonth == 3) {
		var fs = (1 + (7 - cdate.getDay()));
		if(fs > 7) fs = (fs - 7);
		holarray[holarray.length] = [fs,"#9A9A9A","Daylight Savings Time Begins","Daylight Savings Time Begins",""];
	}
	else if(newmonth == 9) {
		var ls = ((1 + (7 - cdate.getDay())) + 28);
		if(ls > 31) ls = (ls - 7);
		holarray[holarray.length] = [ls,"#9A9A9A","Daylight Savings Time Ends","Daylight Savings Time Ends",""];
	}
	
	if (customEvents != "") {
		var eventList = customEvents.split("/");
		for(evt=0;evt<eventList.length;evt++) {
			var theEvent = eventList[evt].split("_");
			if (monthname == theEvent[0] && (newyear == theEvent[1] || theEvent[1] == "annual")) {
				var cecolor = theEvent[3];
				if (cecolor.length != 7) cecolor = theColors[Number(cecolor)];
				holarray[holarray.length] = [theEvent[2],cecolor,theEvent[4],theEvent[5]];
				if (theEvent[6] == 1) {
					noteList[noteList.length] = [(newmonth + 1),theEvent[2],theEvent[5]];
					noteDays[noteDays.length] = theEvent[2];
				}
			}
		}
	}
	
	for(dy=0; dy < 31; dy++) {
		var cd = 0;
		if (chkCal == 1) cd = cdate.getDate();
		if(cd > dy) {
			var wd = cdate.getDay();
			if(wd == 0) {
				cal = (cal + "<tr>");
			}
			if(wd != 7) {
				var isImp = 0;
				var ftclr = "#000000";
				var stip = "<span style='cursor:hand;' onclick='setEvent(" + cd + ",\"" + newmonth + "\"," + newyear + "); return false;'>";
				var etip = "<\/span>";
				if(imparray != []) {
					for(ia=0; ia < imparray.length; ia++) {
						if(cd == (imparray[ia])[0]) {
							ftclr = (imparray[ia])[1];
							isImp = 1;
							noteList[noteList.length] = [(newmonth + 1),cd,(imparray[ia])[2]];
							noteDays[noteDays.length] = cd;
						}
					}
				}
				
				if(holarray != []) {
					var tips = "";
					for(ha=0; ha < holarray.length; ha++) {
						if(cd == (holarray[ha])[0]) {
							if(isImp == 0) {
								ftclr = (holarray[ha])[1];
							}
							if(tips != "" && tips.indexOf((holarray[ha])[3]) == -1) {
								tips = (tips + " & " + (holarray[ha])[3]);
							}
							else {
								tips = (holarray[ha])[3];
							}
							isImp = 1;
							/*var ddiff = (cd - day);
							if (ddiff < 0) ddiff = (-1*ddiff);
							if (ddiff < 7) {
								var theid = "holimage";
								var thesrc = "";
								if ((holarray[ha])[4] != "") thesrc = ("..\/Images\/" + (holarray[ha])[4]);
								if (document.images && document.layers) {
									img.obj = document.images[theid];
								}
								else if (document.getElementById) {
									imgobj = document.getElementById(theid);
								}
								if (imgobj != null && thesrc != "") {
									imgobj.src = thesrc;
									//imgobj.width = 50;
									//imgobj.height = 50;
								}
							}*/
						}
					}
					if(tips != "") {
						stip = ("<span style='cursor:help;' title=\"" + tips + "\" onclick='setEvent(" + cd + ",\"" + newmonth + "\"," + newyear + "); return false;'>");
					}
				}
				if(day == cd && newmonth == month && newyear == year) {
					var bgcolor = "#7373E5";
					if(ftclr != '#000000') {
						bgcolor = ftclr;
					}
					if (bgcolor == '#970101') bgcolor = '#CB3244';
					ftclr = "#FFFFFF";
					var pad = (cd > 9) ? " style='padding:2px;'":" style='padding:1px;'";
					cal = (cal + "<td class='cal' align='center'" + pad + ">" + stip + "<div style='background-color:" + bgcolor + "; font-family:helvetica,arial,geneva; font-size:12px; font-weight:bold; color:" + ftclr + "; text-align:center; border:1px inset #ababab;'>" + stip + cd + etip + "<\/div>" + etip + "<\/td>");
				}
				else if(isImp == 1) {
					if(ftclr == '#000000') {
						cal = (cal + "<td class='cal' align='center'>" + stip + cd + etip + "<\/td>");
					}
					else {
						cal = (cal + "<td class='cal' align='center'>" + stip + "<font color='" + ftclr + "'><b>" + cd + "<\/b><\/font>" + etip + "<\/td>");
					}
				}
				else {
					cal = (cal + "<td class='cal' align='center'>" + stip + cd + etip + "<\/td>");
				}
			}
			else {
				cal = (cal + "<\/tr>");
			}
		}
		cdate.setDate(cd+1);
	}
	if(filldays == 1) {	
		daysleft = (6-wd);
		for(j=1;j<(daysleft+1);j++) {
			cal = (cal + "<td class='cal' align='center'><font color='#dedede'>" + j + "<\/font><\/td>");
		}
	}
	cal = (chkCal == 1) ? cal:"";
	note = "";
	if (noteList.length > 0) {
		var orderedNotes = noteDays.sort(sortDays);
		for(nt=0;nt<noteDays.length;nt++) {
			for(nl=0;nl<noteList.length;nl++) {
				if ((noteList[nl])[1] == noteDays[nt]) {
					note += ("<table width='100%' cellpadding='0' cellspacing='0'><font face='verdana, helvetica, geneva' size='2'>" + line2 + "<tr><td class='cal' style='padding:4px;'>" + (noteList[nl])[0] + "/" + (noteList[nl])[1] + ": " + (noteList[nl])[2] + "<\/td><\/tr><\/font><\/table>");
				}
			}
		}
	}
	
	if(month == newmonth && year == newyear && holarray != []) {
		for(ha=0; ha < holarray.length; ha++) {
			if(day == (holarray[ha])[0] && (holarray[ha])[2] != "") {
				ftclr = (holarray[ha])[1];
				var nstyle = "";
				if (ftclr != "#9A9A9A") nstyle = "style='text-shadow: 0.2em 0.2em 0.1em #999; font-weight: bold;'";
				note = (note + "<table width='100%' cellpadding='0' cellspacing='0'><font face='verdana, helvetica, geneva' size='2'>" + line2 + "<tr><td class='cal' align='center' style='padding:4px;'><font color='" + ftclr + "'" + nstyle + ">" + (holarray[ha])[2] + "<\/font><\/td><\/tr><\/font><\/table>");
			}
		}
	}

	var vcode = getCode();
	if (vcode == 1) setGif("holimage","..\/Images\/break.gif");
	for(x=0;x<gifarray.length;x++) {
		var hdate = (gifarray[x])[0];
		var numdays = (gifarray[x])[2];
		var hdsplit = hdate.split("/");
		var htime = ((new Date(year,(hdsplit[0]-1),(1*hdsplit[1]),8,0,0)).getTime());
		var ddiff = (htime - ctime)/(24*60*60*1000);
		if (ddiff < 0) {
			ddiff = (-1*ddiff);
			numdays = (gifarray[x])[3];
		}
		if (ddiff < (numdays+1) && year == newyear) {
			var holid = "holimage";
			var holsrc = "";
			if ((gifarray[x])[1] != "") holsrc = ("..\/Images\/" + (gifarray[x])[1]);
			if (theCourse == "Biology 101" || theCourse == "Biology 102") holsrc = holsrc.replace(".gif","1.gif");
			setGif(holid,holsrc);
		}
	}
	
	if(theLoc == tag || adCal == fileStr) {
		cal = (cal + "<\/tr><tr><td height='2'><\/td><\/tr><\/font><\/table>" + note);
	}
	else {
		cal = "";
	}
	// document.write(cal);
	return cal;

}

function setGif(theid,thesrc) {
	if (document.images && document.layers) {
		img.obj = document.images[theid];
	}
	else if (document.getElementById) {
		imgobj = document.getElementById(theid);
	}
	if (imgobj != null && thesrc != "") {
		//imgobj.width = 50;
		//imgobj.height = 50;
		imgobj.src = thesrc;
	}
}

function sortDays(d1,d2) {
	return d1-d2;
}

function getEaster() {
	a = newyear % 19;
	b = div(newyear, 100);
	c = (b - div(b, 4) - div(8 * b + 13, 25) + 19 * a + 15) % 30;
	d = c - div(c, 28) * (1 - div(c, 28) * div(29, c + 1) * div(21 - a, 11));
	e = (newyear + div(newyear, 4) + d + 2 - b + div(b, 4)) % 7;
	f = d - e + 28;
	eday = Math.round(f);
	if(eday > 31) {
		eday = (eday - 31);
		emonth = 3;
	}
	else {
		emonth = 2;
	}
}

function div(nu,di) {
	if(di == 0) {
		return null;
	}
	else {
		if (nu < 0) nu = -nu;
		if (di < 0) di = -di;
		res = ((nu - (nu % di)) / di);
		if(nu * di < 0 ) {
			res = -res;
		}
	return res;
	}
}