function isBrowserSupp()
{ /* Description: Checks if browser is Netscape 2.0 since the options array
     properties don't work with Netscape 2.0x */

    // Get the version of the browser
    version =  parseFloat(navigator.appVersion);

    if ((version >= 2.0) && (version < 2.1) && (navigator.appName.indexOf( "Netscape" ) != -1)) {
        return false;
    } else {
        return true;
    }
}

function isLeapYear(yrStr)
{ /* Checks if Year selected is a leap year */

	var leapYear=false;
	// every fourth year is a leap year
	if ((parseInt(yrStr, 10) % 4) == 0) {
		leapYear = true;
	}
	return leapYear;
}

function getDaysInMonth(mthIdx, YrStr)
{ /* Retrieves the number of days in a given month */

	//Default number of days in a month is 31
	var maxDays = 31;
	
	// except Feb. 
	if (mthIdx == 2) {
		if (isLeapYear(YrStr)) {
			maxDays = 29;
		} else {
			maxDays = 28;
		}
	}

	// All the rest of the months have 30 days
	if (mthIdx == 4 || mthIdx == 6 || mthIdx == 9 || mthIdx == 11) {
		maxDays=30;
	}
	
	return maxDays;
}


function adjustDate(mthIdx, Dt, Yr) 
{ /* Adjusts the format of the Date */
	
	var value = 0;            
	var numDays = getDaysInMonth(mthIdx, Yr.options[Yr.options.selectedIndex].value);
	
	if (mthIdx == 2) {
		if (Dt.options.selectedIndex < numDays) {
			return 0;
		} else {
			// check for leap year
			Dt.options.selectedIndex = numDays;
			if (numDays == 29) {
				return 99;
			} else {
				return 1;
			}
		}
	}
	
	if (Dt.options.selectedIndex < numDays) {
		value = 0;
	} else {
		if (Dt.options.selectedIndex > numDays) {
			Dt.options.selectedIndex;
			value = 3;
		} else {
			// index is 31 or 30
			value = 2;
		}
	}
	
	return value;
}

function parseMonth(mth, inM)
{ /* Parses a string and returns a month value */

	var i = 1;
	var retval = 1;
	
	for (i = 1; i <= 12; i++) {
		if (mth == inM.options[i].value) {
			retval = i;
			break;
		}       
	}
	
	return retval;
}

function parseDay(day, inD)
{ /* Parses a string and returns a day value */

	var i = 1;
	var retval = 1;
	for (i = 1; i <= 31; i++) {
		if (day == inD.options[i].value) {
			retval=i;
			break;
		}       
	}
	
	return retval;
}

function parseYear(year, inY)
{ /* Parses a string and returns a year value */

	var retval = 0;
	var i = 0;
	
	for (i = 0; i <= 5; i++) {
		if (year == inY.options[i].value) {
			retval = i;
			break;
		}
	}
	
	return retval;
}

/* ********** Calendar Section ********** */

// calculation functions

function nextMonth(month)
{ /* Retrieves the next Month's value */

	month = parseInt(month);

	if (month == 12) {
		return 1;
	} else {
		return (month + 1);
	}
}

function prevMonth(month) 
{ /* Retrieves the previous Month's value */

	month = parseInt(month);

	var prevMonth = (month - 1);
	if (month == 1) {
		prevMonth = 12;
	}
	
	return prevMonth;
}

function changeYear(direction, month, year)
{ /* Increments or decrements month when it goes past Jan or Dec */

	year = parseInt(year);
	var theYear = year;
	
	if (direction == "next") {
		if (month == 12) {
			theYear = (year + 1);
		}
	}
	
	if (direction == "prev") {
		if (month == 1)	{
			theYear = (year - 1);
		}
	}
	
	return theYear;
}

function createCalendar(form, objMonth, objDay) 
{ /* opens a new window for the calendar */

	if (!isBrowserSupp()) {
		alert("Your browser is outdated and does not support this feature");
		return;
	}
	
	if (navigator.appVersion.indexOf("Mac", 0) != -1) {
		calendarWindow = window.open("","Calendar","width=210, height=200, resizable=no, scrollbars=no");
	} else {
		var left = (screen.width / 2);
		var top = (screen.height / 2);
		
		if (document.all) { // IE
			calendarWindow = window.open("","Calendar","width=206, height=191, resizable=no, scrollbars=no, top="+top+", left="+left);
		} else if ((document.layers) || (document.getElementById)) { // Netscape
			calendarWindow = window.open("","Calendar","width=202, height=190, resizable=no, scrollbars=no, screenY="+top+", screenX="+left);
		} else { // others
			calendarWindow = window.open("","Calendar","width=206, height=195, resizable=no, scrollbars=no");
		}
	}
	
	// probably not needed
	// var dayIdx = objDay.options.selectedIndex;
	var dayName = objDay.name;
	
	var mthIdx = objMonth.options.selectedIndex;
	var mthVal = objMonth.options[mthIdx].value;
	var mthName = objMonth.name;
	
	// alert("dayName: "+dayName+"\n"+"mthName: "+mthName);
	
	var now = new Date();
	var yearVal = now.getFullYear();
	
	// call the function to populate the window
	generateCalendar(calendarWindow, form, dayName, mthName, mthVal, yearVal);
}

function generateCalendar(target, form, objDayName, objMonthName, month, year)
{ /* generates the contents of the calender window */

	if (!isBrowserSupp()) {
		return;
	}
	
	var monthName = new Array ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	
	// begin table for calendar
	target.document.open();
	calendar = "<html>\n<head>\n<title>Calendar</title>\n<link rel=\"stylesheet\" href=\"http://www.cheepparking.com/corestyle.css\" type=\"text/css\">\n</head>\n<body bgcolor=\"#FFFFFF\" link=\"#000080\" leftmargin=\"0\" topmargin=\"2\" rightmargin=\"0\" marginwidth=\"0\" marginheight=\"2\">\n";
	calendar += "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"200\" align=\"center\" style=\"border-top: 2px solid #000000; border-left: 2px solid #000000; border-right: 1px solid #000000; border-bottom: 1px solid #000000\">\n";
	
	// The parseInt function parses the string argument as a signed decimal integer. 
	var mthIdx = parseInt(month);
	var endday = getDaysInMonth(mthIdx, year);
	var index = (mthIdx - 1);
	
	// next month and previous month buttons
	var goPrevMonth = prevMonth(month);
	var goNextMonth = nextMonth(month);
	var nextYear = changeYear("next", parseInt(month), parseInt(year));
	var prevYear = changeYear("prev", parseInt(month), parseInt(year));
	
	var objNameDay = "opener.document."+form+"."+objDayName;
	var objNameMth = "opener.document."+form+"."+objMonthName;
	
	// alert("objNameDay: "+objNameDay+"\n"+"objNameMth: "+objNameMth);
	
	if(navigator.userAgent.indexOf('MSIE', 0) != -1) {
		var prevCode = "<a href=\"javascript:opener.generateCalendar(self, '"+form+"', '"+objDayName+"', '"+objMonthName+"', "+goPrevMonth+", "+prevYear+")\"><img src=\"http://www.cheepparking.com/images/cal_prev.gif\" width=\"18\" height=\"18\" border=\"0\" alt=\"Previous Month\"></a>";
		var nextCode = "<a href=\"javascript:opener.generateCalendar(self, '"+form+"', '"+objDayName+"', '"+objMonthName+"', "+goNextMonth+", "+nextYear+")\"><img src=\"http://www.cheepparking.com/images/cal_next.gif\" width=\"18\" height=\"18\" border=\"0\" alt=\"Next Month\"></a>";
	} else {
		var prevCode = "<a href=\"javascript://\" onClick=\"document.clear();opener.generateCalendar(opener.calendarWindow, '"+form+"', '"+objDayName+"', '"+objMonthName+"', "+goPrevMonth+", "+prevYear+")\"><img src=\"http://www.cheepparking.com/images/cal_prev.gif\" width=\"18\" height=\"18\" border=\"0\" alt=\"Previous Month\"></a>";
		var nextCode = "<a href=\"javascript://\" onClick=\"document.clear();opener.generateCalendar(opener.calendarWindow, '"+form+"', '"+objDayName+"', '"+objMonthName+"', "+goNextMonth+", "+nextYear+")\"><img src=\"http://www.cheepparking.com/images/cal_next.gif\" width=\"18\" height=\"18\" border=\"0\" alt=\"Next Month\"></a>";
	}
	
	// month header
	calendar += "<tr>\n<td colspan=\"2\" class=\"calTitle\">"+prevCode+"</td>\n";
	calendar += "<td colspan=\"3\" align=\"center\" class=\"calTitle\">"+monthName[index]+" "+year+"</td>\n";
	calendar += "<td align=\"right\" colspan=\"2\" class=\"calTitle\" style=\"border-right: 1px solid #000000\">"+nextCode+"</td>\n</tr>";
	
	// writes in the day of the week labels
	calendar += "<tr bgcolor=\"#FFFFCC\">\n";
	calendar += "<td align=\"center\" class=\"calDay\">S</td>\n";
	calendar += "<td align=\"center\" class=\"calDay\">M</td>\n";
	calendar += "<td align=\"center\" class=\"calDay\">T</td>\n";
	calendar += "<td align=\"center\" class=\"calDay\">W</td>\n";
	calendar += "<td align=\"center\" class=\"calDay\">T</td>\n";
	calendar += "<td align=\"center\" class=\"calDay\">F</td>\n";
	calendar += "<td align=\"center\" class=\"calDay\">S</td>\n";
	calendar += "</tr>";
	
	wholeDate = month + "/01/" + year;
	thedate = new Date(wholeDate);
	firstDay = thedate.getDay();
	
	selectedmonth = mthIdx;
	var today = new Date();
	var thisyear = today.getYear() + 1900;
	selectedyear = year;
	
	var lastDay = (endday + firstDay + 1);
	calendar += "<tr>\n";
	
	for (var i = 1; i <= 42; i++) {
		if ((i <= firstDay) || (i >= lastDay)) {
			// 'empty' boxes
			calendar += "<td align=\"center\" class=\"calBlank\">&nbsp;</td>\n";
		} else {
			// enter date number
			calendar += "<td align=\"center\" class=\"calDate\"><a href=\"javascript:self.close();opener.closeCalendar("+objNameDay+", "+objNameMth+", "+(i - firstDay)+", "+selectedmonth+")\">"+(i - firstDay)+"</a></td>\n";
		}
		
		// must start new row after each week
		if (i % 7 == 0 && i != 42)	{
			calendar += "</tr><tr>\n";
		}
	}
	
	calendar += "</tr>\n</table>\n</body>\n</html>";
	
	target.document.write(calendar);
	target.document.close();
}

function closeCalendar(objDay, objMth, day, month)
{
	/* Have to find index and not just pass month because months are
	   removed dynamically by PHP script. Just pass month on static pages */
	
	x = 0;
	mthIdx = 0;
	xMax = 12 - objMth.options[0].value;
	while (x < xMax) {
		if (objMth.options[x].value == month) {
			mthIdx = x;
		}
		x++;
	}
	
	// decrement by 1 coz selectedIndex starts at 0
	day--;
	
	objMth.options.selectedIndex = parseInt(mthIdx);
	objDay.options.selectedIndex = parseInt(day);
}