//===== relative URL handling code for js files ================
sWZBaseFolder = "www.smartappoint.com";                          
sWZ = window.location.href;                                     
iWZ = sWZ.indexOf(sWZBaseFolder) + sWZBaseFolder.length + 1;    
sWZBase = sWZ.substring(0,iWZ);                                 
//===== Copyright © 2001 Spidersoft. All rights reserved. ======

/////////////////////////////////////////////////////////////////////////////////////////
// Calendar routines
/////////////////////////////////////////////////////////////////////////////////////////

// Mode of calendar: daily, weekly, or monthly
var mstrCalendarMode;

// Current date of calendar day/month/year
var mintSelectedDay;
var mintSelectedMonth;
var mintSelectedYear;

// Set mode of calendar
function setCalendarMode(strCalendarMode) {
	mstrCalendarMode = strCalendarMode;
}

// Set current day of calendar
function setSelectedDay(intSelectedDay) {
	mintSelectedDay = intSelectedDay;
}

// Set current month of calendar
function setSelectedMonth(intSelectedMonth) {
	mintSelectedMonth = intSelectedMonth;
}

// Set current year of calendar
function setSelectedYear(intSelectedYear) {
	mintSelectedYear = intSelectedYear;
}

// Convert a day of week from an integer (0,1,2, ...) to string (Sun,Mon,Tue, ...)
function DOWToStr(intDayOfWeek) {

	switch(intDayOfWeek) {
		case  0: return "Sun";
		case  1: return "Mon";
		case  2: return "Tue";
		case  3: return "Wed";
		case  4: return "Thu";
		case  5: return "Fri";
		case  6: return "Sat";
	}
	
	return "Unknown";
}

// Convert a month from an integer (1,2,3 ...) to string (Jan,Feb,Mar, ...)
function MonthToStr(intMonth) {

	switch(intMonth) {
		case  1: return "Jan";
		case  2: return "Feb";
		case  3: return "Mar";
		case  4: return "Apr";
		case  5: return "May";
		case  6: return "Jun";
		case  7: return "Jul";
		case  8: return "Aug";
		case  9: return "Sep";
		case 10: return "Oct";
		case 11: return "Nov";
		case 12: return "Dec";
	}
	
	return "Unknown";
}

// Refreshes display of calendar table: cell values and cell classes
function RefreshCalendar() {

	var objDate;
	
	// Display calendar caption: dd-mmm-yyyy (daily, weekly) or mmm-yyyy (monthly)
	with (document.all["calendarCaption"]) {
		if (mstrCalendarMode != "Monthly" && mintSelectedDay > 0) {
			objDate = new Date(String(mintSelectedDay)
				+ MonthToStr(mintSelectedMonth)
				+ String(mintSelectedYear));

			innerHTML = DOWToStr(objDate.getDay()) + " ";
			innerHTML += mintSelectedDay + " ";
		}
		else {
			innerHTML = "";
		}
		innerHTML += MonthToStr(mintSelectedMonth) + " ";
		innerHTML += String(mintSelectedYear);
	}

	// Don't display calendar table if mode = monthly (already done in XSL)
	if (mstrCalendarMode == "Monthly")
		return;
	
	// Determine the 1st Monday which is on or before the 1st day of the selected month
	objDate = new Date("1" + MonthToStr(mintSelectedMonth) + String(mintSelectedYear));
	var intFirstDay = objDate.getDay();
	var intMondayBeforeFirstDay = 2 - (intFirstDay == 0 ? 7 : intFirstDay);
	
	// Determine the number of days in the selected month. Assume that it has 31 days and
	// work backwards
	var intDaysInMonth = 31;
	
	objDate.setDate(intDaysInMonth);
	while (objDate.getMonth() > mintSelectedMonth - 1) {
		intDaysInMonth--;
		objDate.setDate(intDaysInMonth);
		objDate.setMonth(mintSelectedMonth - 1);
	}

	// Starting from the 1st Monday, display 6 weeks worth of calendar entries
	var intDayOfMonth = intMondayBeforeFirstDay;
	
	for (var intWeekNo = 1; intWeekNo <= 6; intWeekNo++) {
		for (var intDayNo = 1; intDayNo <= 7; intDayNo++) {

			var objCalendarEntry = document.all["Entry"
				+ String(intWeekNo)
				+ String(intDayNo)];

			with (objCalendarEntry) {
				if (intDayOfMonth < 1) {
					// ... Entries from previous month are disabled
					innerHTML = "&nbsp;";
					className = "disabledEntry";
				}
				else if (intDayOfMonth > intDaysInMonth) {
					// ... Entries from next month are disabled
					innerHTML = "&nbsp;";
					className = "disabledEntry";
				}
				else if (intDayOfMonth == mintSelectedDay) {
					// ... Selected entry is enabled and bolded
					innerHTML = String(intDayOfMonth);
					className = "selectedEntry";
					onclick = ChangeSelectedDay;
				}
				else  {
					// ... Other entries are only enabled
					innerHTML = String(intDayOfMonth);
					
					switch (mstrCalendarMode) {
					case "Daily":
						className = "enabledEntry";
						onclick = ChangeSelectedDay;
						break;
					case "Weekly":
						if ((intDayOfMonth - intMondayBeforeFirstDay) % 7 == 0) {
							className = "enabledEntry";
							onclick = ChangeSelectedDay;
						}
						else {
							className = "readOnlyEntry";
						}
						break;
					case "Monthly":
						if (intDayOfMonth == 1) {
							className = "enabledEntry";
							onclick = ChangeSelectedDay;
						}
						else {
							className = "readOnlyEntry";
						}
						break;
					}
				}
			}

			intDayOfMonth++;
		}
	}
}


// Refreshes display of calendar table: cell values and cell classes (Read Only)
function RefreshCalendarReadOnly() {

	var objDate;
	
	// Display calendar caption: dd-mmm-yyyy (daily, weekly) or mmm-yyyy (monthly)
	with (document.all["calendarCaption"]) {
		if (mstrCalendarMode != "Monthly" && mintSelectedDay > 0) {
			objDate = new Date(String(mintSelectedDay)
				+ MonthToStr(mintSelectedMonth)
				+ String(mintSelectedYear));

			innerHTML = DOWToStr(objDate.getDay()) + " ";
			innerHTML += mintSelectedDay + " ";
		}
		else {
			innerHTML = "";
		}
		innerHTML += MonthToStr(mintSelectedMonth) + " ";
		innerHTML += String(mintSelectedYear);
	}

	// Don't display calendar table if mode = monthly (already done in XSL)
	if (mstrCalendarMode == "Monthly")
		return;
	
	// Determine the 1st Monday which is on or before the 1st day of the selected month
	objDate = new Date("1" + MonthToStr(mintSelectedMonth) + String(mintSelectedYear));
	var intFirstDay = objDate.getDay();
	var intMondayBeforeFirstDay = 2 - (intFirstDay == 0 ? 7 : intFirstDay);
	
	// Determine the number of days in the selected month. Assume that it has 31 days and
	// work backwards
	var intDaysInMonth = 31;
	
	objDate.setDate(intDaysInMonth);
	while (objDate.getMonth() > mintSelectedMonth - 1) {
		intDaysInMonth--;
		objDate.setDate(intDaysInMonth);
		objDate.setMonth(mintSelectedMonth - 1);
	}

	// Starting from the 1st Monday, display 6 weeks worth of calendar entries
	var intDayOfMonth = intMondayBeforeFirstDay;
	
	for (var intWeekNo = 1; intWeekNo <= 6; intWeekNo++) {
		for (var intDayNo = 1; intDayNo <= 7; intDayNo++) {

			var objCalendarEntry = document.all["Entry"
				+ String(intWeekNo)
				+ String(intDayNo)];

			with (objCalendarEntry) {
				if (intDayOfMonth < 1) {
					// ... Entries from previous month are disabled
					innerHTML = "&nbsp;";
					className = "disabledEntry";
				}
				else if (intDayOfMonth > intDaysInMonth) {
					// ... Entries from next month are disabled
					innerHTML = "&nbsp;";
					className = "disabledEntry";
				}
				else if (intDayOfMonth == mintSelectedDay) {
					// ... Selected entry is enabled and bolded
					innerHTML = String(intDayOfMonth);
					className = "selectedReadOnlyEntry";
				}
				else  {
					// ... Other entries are only enabled
					innerHTML = String(intDayOfMonth);
					
					switch (mstrCalendarMode) {
					case "Daily":
						className = "readOnlyEntry";
						break;
					case "Weekly":
						if ((intDayOfMonth - intMondayBeforeFirstDay) % 7 == 0) {
							className = "enabledEntry";
						}
						else {
							className = "readOnlyEntry";
						}
						break;
					case "Monthly":
						if (intDayOfMonth == 1) {
							className = "enabledEntry";
						}
						else {
							className = "readOnlyEntry";
						}
						break;
					}
				}
			}

			intDayOfMonth++;
		}
	}
}

// Event handler that is activated when the user clicks on a cell in the calendar table -
// changes the current date of the calendar and triggers a server 'SelectDate' event
function ChangeSelectedDay() {
	mintSelectedDay = parseInt(this.innerHTML);

	document.forms[0].SelectedDay.value = String(mintSelectedDay);
	navOnClick("SelectDate");
}

// Event handler that is activated when the user clicks on the 'previous month' button
// of the calendar - subtracts 1 month from the current date of the calendar and triggers
// a server 'SelectMonth' event
function DecrementSelectedMonth() {
	if (mstrCalendarMode == "Weekly")
		mintSelectedDay = 7;
	else
		mintSelectedDay = 1;

	if (--mintSelectedMonth < 1) {
		mintSelectedMonth = 12;
		mintSelectedYear--;
	}
	
	document.forms[0].SelectedDay.value = String(mintSelectedDay);
	document.forms[0].SelectedMonth.value = String(mintSelectedMonth);
	document.forms[0].SelectedYear.value = String(mintSelectedYear);

	navOnClick("SelectMonth");
}

// Event handler that is activated when the user clicks on the 'next month' button
// of the calendar - adds 1 month to the current date of the calendar and triggers a
// server 'SelectMonth' event
function IncrementSelectedMonth() {
	if (mstrCalendarMode == "Weekly")
		mintSelectedDay = 7;
	else
		mintSelectedDay = 1;

	if (++mintSelectedMonth > 12) {
		mintSelectedMonth = 1;
		mintSelectedYear++;
	}

	document.forms[0].SelectedDay.value = String(mintSelectedDay);
	document.forms[0].SelectedMonth.value = String(mintSelectedMonth);
	document.forms[0].SelectedYear.value = String(mintSelectedYear);

	navOnClick("SelectMonth");
}

// Date Script for Calendar
function todayDate() {
	var intDayOfWeek;
	var intMonth;
	var intDayOfMonth;
	var intYear;
													
	var dteToday = new Date();
														
	intDayOfWeek = dteToday.getDay();
	intMonth = dteToday.getMonth();
	intDayOfMonth = dteToday.getDate();
	intYear = dteToday.getYear();
														
	var aryDayNames = new Array("Sunday, ","Monday, ","Tuesday, ","Wednesday, ",
		"Thursday, ","Friday, ","Saturday, ");
	var aryMonthNames = new Array("January ","February ","March ","April ","May ","June ",
		"July ","August ","September ", "October ","November ","December ");

	var date = ( aryDayNames[intDayOfWeek] + " " + aryMonthNames[intMonth] + " " + intDayOfMonth + " "
	+ intYear);
														
	document.write(date);	
}
