var content = '';
var monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var windowCalendar;

/* Certain Netscape browsers seem to dynamically
 * write to a window better using the
 * location.href technique rather than the
 * standard document.write way. * Last (Recorded) Update: Keoki 7/25/2002
 */

function mirrorDates(formObj){
	formObj.eventEndMonth.selectedIndex = formObj.eventStartMonth.selectedIndex;
	formObj.eventEndYear.selectedIndex = formObj.eventStartYear.selectedIndex;
	drawDay(formObj.eventEndMonth);
	formObj.eventEndDay.selectedIndex = formObj.eventStartDay.selectedIndex;
}

function drawWindow(windowObj){
	if(navigator.appName == 'Netscape'){
		windowObj.location.href = 'javascript:opener.top.content';
	}
	else{
		windowObj.document.open();
		windowObj.document.write(content);
		windowObj.document.close();
	}
}

function drawYear(yearObj){
	var today = new Date();
	var todayYear = today.getYear();
	var year = yearObj.options[yearObj.selectedIndex].value;
	if(todayYear < 1000) todayYear += 1900;
	if(year != todayYear){
		yearObj.options.length = 0;
		for(var i = 0; i < 4; i++){
			yearObj.options[i] = new Option(todayYear + i, todayYear + i);
		}
	}
}

function drawDay(unknownObj){
	var formName = unknownObj.form.name;
	var unknownObjName = unknownObj.name;
	var unknownObjNameLower = unknownObjName.toLowerCase();
	var tempIndex = -1;
	var commonNameStart = '';
	var commonNameEnd = '';
	var yearString = '';
	var yearString = '';
	var monthString = '';
	var dayString = '';
	var testObj;
	var yearObj;
	var monthObj;
	var dayObj;
	var offset = 0;
	if((tempIndex = unknownObjNameLower.indexOf('month')) >= 0){
		commonNameStart = unknownObjName.substring(0, tempIndex);
		commonNameEnd = unknownObjName.substring(tempIndex + 5);
		if(unknownObjName.charAt(tempIndex) == 'm'){
			testString = 'month';
			yearString = 'year';
			monthString = 'month';
			dayString = 'day';
		}
		else if(unknownObjName.charAt(tempIndex + 1) == 'o'){
			testString = 'Month';
			yearString = 'Year';
			monthString = 'Month';
			dayString = 'Day';
		}
		else{
			testString = 'MONTH';
			yearString = 'YEAR';
			monthString = 'MONTH';
			dayString = 'DAY';
		}
	}
	else if((tempIndex = unknownObjNameLower.indexOf('year')) >= 0){
		commonNameStart = unknownObjName.substring(0, tempIndex);
		commonNameEnd = unknownObjName.substring(tempIndex + 4);
		if(unknownObjName.charAt(tempIndex) == 'y'){
			testString = 'year';
			yearString = 'year';
			monthString = 'month';
			dayString = 'day';
		}
		else if(unknownObjName.charAt(tempIndex + 1) == 'e'){
			testString = 'Year';
			yearString = 'Year';
			monthString = 'Month';
			dayString = 'Day';
		}
		else{
			testString = 'YEAR';
			yearString = 'YEAR';
			monthString = 'MONTH';
			dayString = 'DAY';
		}
	}
	else{
		commonNameStart = unknownObjName.substring(0, unknownObjName.length - 1);
		if(unknownObjName.charAt(unknownObjName.length - 1) == 'm'){
			testString = 'm';
			yearString = 'y';
			monthString = 'm';
			dayString = 'd';
		}
		else if(unknownObjNameLower.charAt(unknownObjNameLower.length - 1) == 'y'){
			testString = 'M';
			yearString = 'y';
			monthString = 'm';
			dayString = 'd';
		}
		else if(unknownObjName.charAt(unknownObjName.length - 1) == 'M'){
			testString = 'M';
			yearString = 'Y';
			monthString = 'M';
			dayString = 'D';
		}
		else if(unknownObjName.charAt(unknownObjName.length - 1) == 'Y'){
			testString = 'Y';
			yearString = 'Y';
			monthString = 'M';
			dayString = 'D';
		}
	}
	testObj = unknownObj.form[commonNameStart + testString + commonNameEnd];
	yearObj = unknownObj.form[commonNameStart + yearString + commonNameEnd];
	monthObj = unknownObj.form[commonNameStart + monthString + commonNameEnd];
	dayObj = unknownObj.form[commonNameStart + dayString + commonNameEnd];
	if(testObj[0][0]){
		for(var i = 0; i < testObj.length; i++){
			if(testObj[i] == unknownObj){
				yearObj = yearObj[i];
				monthObj = monthObj[i];
				dayObj = dayObj[i];
			}
		}
	}
	var numDays = 30;
	var year = yearObj.options[yearObj.selectedIndex].value;
	var month = monthObj.options[monthObj.selectedIndex].value;
	if(month == '01' || month == '03' || month == '05' || month == '07' || month == '08' || month == '10' || month == '12' || month == ''){
		numDays = 31;
	}
	else if(month == '02'){
		if(year == '' || (year % 4 != 0)){
			numDays = 28;
		}
		else{
			numDays = 29;
		}
	}
	if(dayObj.options[0].value == '') offset = 1;
	if(numDays + offset < dayObj.options.length){
		dayObj.options.length = numDays + offset;
	}
	else if(numDays + offset > dayObj.options.length){
		for(var i = dayObj.options.length; numDays + offset > i; i++){
			dayObj.options[i] = new Option(i + 1 - offset, i + 1 - offset);
		}
	}
}

function popCalendar(yearMonth, openerBefore, openerAfter, yearString, monthString, dayString, duplicateIndex){
	var msPerDay = 1000 * 60 * 60 * 24;
	windowCalendar = window.open('', 'windowCalendar', 'scrollbars=no,width=300,height=220');
	var now = new Date();
	var nowDay = now.getDate();
	var nowMonth = now.getMonth();
	var nowYear = now.getYear();
	if(nowYear < 1000) nowYear += 1900;
	var currentDate = new Date(yearMonth.substring(0, 4), yearMonth.substring(4, 6) - 1, 1);
	var activeMonth = currentDate.getMonth();
	var nextMonth = (activeMonth + 1) % 12;
	var prevMonth = (activeMonth - 1) % 12;
	var activeYear = currentDate.getYear();
	if(activeYear < 1000) activeYear += 1900;
	var nextYearMonth = '' + (nextMonth + 1);
	var prevYearMonth = '' + (prevMonth + 1);
	var popArgument = '';
	if(nextYearMonth.length == 1) nextYearMonth = '0' + nextYearMonth;
	if(prevYearMonth.length == 1) prevYearMonth = '0' + prevYearMonth;
	nextYearMonth = (nextMonth == 0) ? '' + (activeYear + 1) + nextYearMonth : '' + activeYear + nextYearMonth;
	prevYearMonth = (prevMonth == 11) ? '' + (activeYear - 1) + prevYearMonth : '' + activeYear + prevYearMonth;
	var currentDay;
	var currentMonth;
	var currentYear;
	content = '<HTML><HEAD><TITLE>Calendar</TITLE><BASE HREF="http://' + location.host + '/">';
	content += '<LINK REL="stylesheet" TYPE="text/css" HREF="http://' + location.host + '/style/calendar.css">';
	content += '<SCRIPT LANGUAGE="JavaScript">';
	if(duplicateIndex != null){
		content += 'var yearObj = opener.document.' + openerBefore + yearString + openerAfter + '[' + duplicateIndex + '];';
		content += 'var monthObj = opener.document.' + openerBefore + monthString + openerAfter + '[' + duplicateIndex + '];';
		content += 'var dayObj = opener.document.' + openerBefore + dayString + openerAfter + '[' + duplicateIndex + '];';
		popArgument = ', ' + duplicateIndex;
	}
	else{
		content += 'var yearObj = opener.document.' + openerBefore + yearString + openerAfter + ';';
		content += 'var monthObj = opener.document.' + openerBefore + monthString + openerAfter + ';';
		content += 'var dayObj = opener.document.' + openerBefore + dayString + openerAfter + ';';
	}
	content += '</SCRIPT>';
	content += '</HEAD>';
	content += '<BODY MARGINWIDTH="0" MARGINHEIGHT="0" LEFTMARGIN="0" TOPMARGIN="0" CLASS="calTitle"><CENTER>';
	content += '&nbsp;<BR>';
	content += '<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="220"><TR>';
	content += '<TD WIDTH="14" CLASS="calTitle">';
	content += '<A HREF="javascript:opener.popCalendar(\'' + prevYearMonth + '\', \'' + openerBefore + '\', \'' + openerAfter + '\', \'' + yearString + '\', \'' + monthString + '\', \'' + dayString + '\'' + popArgument + ');"><IMG SRC="/images/arrowLeft.gif" WIDTH="14" HEIGHT="10" BORDER="0"></A>';
	content += '</TD>';
	content += '<TD WIDTH="192" ALIGN="center" CLASS="calTitle">' + monthArray[activeMonth] + ' ' + activeYear + '</TD>';
	content += '<TD WIDTH="14" CLASS="calTitle">';
	content += '<A HREF="javascript:opener.popCalendar(\'' + nextYearMonth + '\', \'' + openerBefore + '\', \'' + openerAfter + '\', \'' + yearString + '\', \'' + monthString + '\', \'' + dayString + '\'' + popArgument + ');"><IMG SRC="/images/arrowRight.gif" WIDTH="14" HEIGHT="10" BORDER="0"></A>';
	content += '</TD>';
	content += '</TR><TR><TD COLSPAN="3"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="4"></TD></TR></TABLE>';
	content += '<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR><TD CLASS="calBorder" COLSPAN="15"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD></TR>';
	content += '<TR><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="14"></TD><TD ALIGN="center" WIDTH="32" CLASS="calHeading">S</TD><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD><TD ALIGN="center" WIDTH="32" CLASS="calHeading">M</TD><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD><TD ALIGN="center" WIDTH="32" CLASS="calHeading">T</TD><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD><TD ALIGN="center" WIDTH="32" CLASS="calHeading">W</TD><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD><TD ALIGN="center" WIDTH="32" CLASS="calHeading">T</TD><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD><TD ALIGN="center" WIDTH="32" CLASS="calHeading">F</TD><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD><TD ALIGN="center" WIDTH="32" CLASS="calHeading">S</TD><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD></TR>';
	currentDate = new Date(currentDate.getTime() - currentDate.getDay() * msPerDay);
	for(var row = 0; currentDate.getMonth() != nextMonth; row++){
		content += '<TR><TD CLASS="calBorder" COLSPAN="15"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD></TR>';
		content += '<TR><TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="22"></TD>';
		for(var col = 0; col < 7; col++){
			currentDay = currentDate.getDate();
			currentMonth = currentDate.getMonth();
			currentYear = currentDate.getYear();
			if(currentYear < 1000) currentYear += 1900;
			if(activeMonth == currentMonth){
				content += '<TD ALIGN="center" WIDTH="32" CLASS="';
				content += (currentDay == nowDay && currentMonth == nowMonth && currentYear == nowYear) ? 'calHighlight"><A CLASS="calHighlight' : 'calActive"><A CLASS="calActive';
				content += '" HREF="javascript:opener.selectDate(' + activeYear + ', ' + activeMonth + ', ' + currentDay + ', yearObj, monthObj, dayObj);">' + currentDay + '</A></TD>';
			}
			else{
				content += '<TD ALIGN="center" WIDTH="32" CLASS="calDisable">' + currentDay + '</TD>';
			}
			content += '<TD CLASS="calBorder"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD>';
			currentDate = new Date(currentDate.getTime() + msPerDay);
		}
		content += '</TR>';
	}
	content += '<TR><TD CLASS="calBorder" COLSPAN="15"><IMG SRC="/images/spacer.gif" WIDTH="2" HEIGHT="2"></TD></TR></TABLE>';
	content += '</CENTER></BODY></HTML>';
	drawWindow(windowCalendar);
	windowCalendar.focus();
}

function valueFromQueryName(queryString, queryName){
	var startIndex = queryString.lastIndexOf('&' + queryName + '=');
	var endIndex = -1;
	if(startIndex == -1)  queryString.lastIndexOf('?' + queryName + '=');
	if(startIndex == -1){
		return null;
	}
	else{
		startIndex = startIndex + queryName.length + 2;
		endIndex = queryString.indexOf('&', startIndex);
		if(endIndex == -1) endIndex = queryString.length;
		return queryString.substring(startIndex, endIndex);
	}
}

/* There must be 3 drop down menus, one for year,
 * one for month, and one for day.  They must have
 * the word year, month, or day in their name (that
 * or their names should end with a y m or d).  Any
 * optional text that goes before or after must be
 * identical for all 3.  Can be all caps, all lower
 * case, or leading caps.
 */

function setCalendar(monthObj, duplicateIndex){
	if(duplicateIndex != null) monthObj = monthObj[duplicateIndex];
	var formName = monthObj.form.name;
	var monthObjName = monthObj.name;
	var monthObjNameLower = monthObjName.toLowerCase();
	var tempIndex = monthObjNameLower.indexOf('month');
	var commonNameStart = '';
	var commonNameEnd = '';
	var yearMonthStr = '';
	var yearTxt = '';
	var monthTxt = '';
	var dayTxt = '';
	if(tempIndex >= 0){	
		commonNameStart = monthObjName.substring(0, tempIndex);
		commonNameEnd = monthObjName.substring(tempIndex + 5);
		if(monthObjName.charAt(tempIndex) == 'm'){
			yearTxt = 'year';
			monthTxt = 'month';
			dayTxt = 'day';
		}
		else if(monthObjName.charAt(tempIndex + 1) == 'o'){
			yearTxt = 'Year';
			monthTxt = 'Month';
			dayTxt = 'Day';
		}
		else{
			yearTxt = 'YEAR';
			monthTxt = 'MONTH';
			dayTxt = 'DAY';
		}
	}
	else if(monthObjNameLower.charAt(monthObjNameLower.length - 1) == 'm'){
		commonNameStart = monthObjName.substring(0, monthObjName.length - 1);
		if(monthObjName.charAt(monthObjName.length - 1) == 'm'){
			yearTxt = 'y';
			monthTxt = 'm';
			dayTxt = 'd';
		}
		else{
			yearTxt = 'Y';
			monthTxt = 'M';
			dayTxt = 'D';
		}
	}
	var yearObj = monthObj.form[commonNameStart + yearTxt + commonNameEnd];
	var dayObj = monthObj.form[commonNameStart + dayTxt + commonNameEnd];
	if(duplicateIndex != null){
		yearObj = yearObj[duplicateIndex];
		dayObj = dayObj[duplicateIndex];
	}
	if(yearObj.options[yearObj.selectedIndex].value != ''){
		yearMonthStr = yearObj.options[yearObj.selectedIndex].value;
	}
	else{
		yearMonthStr = yearObj.options[1].value;
	}
	if(monthObj.options[monthObj.selectedIndex].value != ''){
		yearMonthStr += monthObj.options[monthObj.selectedIndex].value;
	}
	else{
		yearMonthStr += monthObj.options[1].value;
	}
	popCalendar(yearMonthStr, formName + '.' + commonNameStart, commonNameEnd, yearTxt, monthTxt, dayTxt, duplicateIndex);
}

function selectDate(numYear, numMonth, numDay, yearObj, monthObj, dayObj){
	var stringYear = '' + numYear;
	var stringMonth = '' + (numMonth + 1);
	var stringDay = '' + numDay;
	var formObj = monthObj.form;
	if(stringMonth.length == 1) stringMonth = '0' + stringMonth;
	if(stringDay.length == 1) stringDay = '0' + stringDay;
	setDropdown(stringYear, '', yearObj);
	setDropdown(stringMonth, '', monthObj);
	drawDay(monthObj);
	setDropdown(stringDay, '', dayObj);
	if(monthObj.name.indexOf('Start') != -1){
		var tempIndex = yearObj.name.indexOf('Start');
		setDropdown(stringYear, '', formObj[yearObj.name.substring(0, tempIndex) + 'End' + yearObj.name.substring(tempIndex + 5)]);
		setDropdown(stringMonth, '', formObj[monthObj.name.substring(0, tempIndex) + 'End' + monthObj.name.substring(tempIndex + 5)]);
		drawDay(formObj[monthObj.name.substring(0, tempIndex) + 'End' + monthObj.name.substring(tempIndex + 5)]);
		setDropdown(stringDay, '', formObj[dayObj.name.substring(0, tempIndex) + 'End' + dayObj.name.substring(tempIndex + 5)]);
	}
	if(formObj.eventDatesDescription) buildEventDateDescription();
	windowCalendar.close();
}

