
window.onscroll = new Function('document.getElementById("hidScrollY").value = document.documentElement.scrollTop;');

var weekday = new Array("Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat");		
function Weekday(month, day, year)
{
	var aDate = month + "/" + day + "/"+ year
	var date = new Date(aDate);
	/* date.setMonth(8); // Month is 0 based (0-11)
	date.setDate(day);
	date.setYear(year); */
	/*alert(month + "/" + day + "/"+ year + " " + date);*/
	return weekday[date.getDay()]; // getDay() is 0 based (0-6)
}

function loadImage()
{
	var ddl = document.getElementById('ddlOffice');
	var officeID = ddl.options[ddl.selectedIndex].value;
	var ddlGroup = document.getElementById('ddlAudience');
	var groupID = ddlGroup.value;
	if(officeID == 1)
		{
			switch(groupID)
			{
			case '1':
			 	document.getElementById('image1').src='images/kcStudents.gif'; 
			  	break;    
			case '2':
			  	document.getElementById('image1').src='images/kcEducators.gif'; 
			  	break;
			case '3':
			  	document.getElementById('image1').src='images/kcGroups.gif'; 
				break;
			default:
			  	document.getElementById('image1').src='images/kcStudents.gif'; 
			}
		}
	else
		{
			switch(groupID)
			{
			case '1':
			 	document.getElementById('image1').src='images/DenStudents.gif'; 
			  	break;    
			case '2':
			  	document.getElementById('image1').src='images/denEducators.gif'; 
			  	break;
			case '3':
			  	document.getElementById('image1').src='images/denGroups.gif'; 
				break;
			default:
			  	document.getElementById('image1').src='images/denStudents.gif'; 
			}
		}
}



function ddlOffice_OnChange()
{
	loadImage();
		//document.frmTourRequest.submit();
}

/* BEGINNING OF NEW STUFF */
function ddlAudience_OnChange()
{
	loadImage();

	//document.frmTourRequest.submit();
}




/* END OF NEW STUFF */

var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
function ddlMonth_OnChange(ddlMonth)
{
	if(ddlMonth.selectedIndex == 0) return;
	
	var index = ddlMonth.name.substr(ddlMonth.name.length - 1, 1);
	var ddlDay = document.getElementById('ddlDay' + index);
	var ddlYear = document.getElementById('ddlYear' + index);
	
	if(ddlYear.selectedIndex == 0) 
		if(ddlMonth.selectedIndex < (new Date()).getMonth() + 1) ddlYear.options[2].selected = true;
		else ddlYear.options[1].selected = true;
	
	var month = ddlMonth.selectedIndex;
	var year = ddlYear.options[ddlYear.selectedIndex].value;
	
	var maxDay = daysInMonth[month - 1]; // daysInMonth is 0 based (0-11)
	if(month == 2) maxDay = (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) ? 29 : 28; // Calculate Leap Year
	for(; ddlDay.options.length > maxDay + 1 ;) ddlDay.options[ddlDay.options.length - 1] = null;
	for(; ddlDay.options.length < maxDay + 1 ;) ddlDay.options[ddlDay.options.length] = new Option(ddlDay.options.length, ddlDay.options.length);
	
	updateDateLabel(index);
}

function ddlDay_OnChange(ddl)
{
	var index = ddl.name.substr(ddl.name.length - 1, 1);
	updateDateLabel(index);
}

function ddlYear_OnChange(ddl)
{
	var index = ddl.name.substr(ddl.name.length - 1, 1);
	ddlMonth_OnChange(document.getElementById('ddlMonth' + index));
}

function updateDateLabel(index)
{
	var ddlMonth = document.getElementById('ddlMonth' + index);
	var ddlDay = document.getElementById('ddlDay' + index);
	var ddlYear = document.getElementById('ddlYear' + index);
	var lblDate = document.getElementById('lblDate' + index);
	lblDate.style.color = '';
	
	loadSessionTimes();
	if(ddlMonth.selectedIndex > 0 && ddlDay.selectedIndex > 0 && ddlYear.selectedIndex > 0)
	{
		var month = ddlMonth.selectedIndex;
		var day = ddlDay.selectedIndex;
		var year = ddlYear.options[ddlYear.selectedIndex].value;
		var msg = validTourDay(month, day, year);
		if(msg.length == 0) lblDate.innerHTML = Weekday(month, day, year) + ', ' + ddlMonth.options[month].text + ' ' + day + ', ' + year;
		else
		{
			lblDate.innerHTML = msg;
			lblDate.style.color = 'red';
		}
	}
	else if(lblDate.innerHTML.length > 0) lblDate.innerHTML = '';
	updateSession(index);
}

function checkSize(obj, minSize, maxSize) {
	var groupSize = obj.txtGrpSize.value;
	if((groupSize < minSize || groupSize > maxSize) && groupSize != "") {
		document.getElementById("divGroupSize").style.color = 'red';
	}
	else {
		document.getElementById("divGroupSize").style.color = '';
		loadDiv(obj);
	}
}

function validTourDay(month, day, year)
{
	// Make sure the selected date is 2 weeks out (default is 14 days)
	var daysNotice = parseInt(document.getElementById('hidAdvNoticeReq').value);
	var aDate = month + "/" + day + "/"+ year
	var date = new Date(aDate);
	/*date.setMonth(month - 1); // Month is 0 based (0-11)
	date.setDate(day);
	date.setYear(year);*/
	var minDate = new Date();
	minDate.setDate(minDate.getDate() + daysNotice); // Add 2 weeks to current date (default)
	if(date < minDate) return 'Tours require ' + (daysNotice % 7 == 0 ? (daysNotice / 7) + ' weeks' : daysNotice + ' days') + ' notice.';
	
	// Exclude the weekday if no sessions are allowed that day (e.g. Sun, Sat)
	var validWeekday = false;
	var weekday = Weekday(month, day, year);

	for(var i = 0; i < session.length; i++) if(session[i][weekday]) validWeekday = true;
	if(!validWeekday) return weekday + ': No sessions available';
	
	// Exclude the day, if all available sessions are blocked
	var validDate = true;
	var strDate = month + '/' + day + '/' + year;
	for(var i = 0; i < blocked.length; i++) // Loop through blocked dates
		if(blocked[i].date == strDate) // If date is found, Sessions are blocked
		{
			validDate = false;
			var sessionAvailable;
			for(var k = 0; k < session.length; k++) // Loop through the sessions
			{
				if(!session[k][weekday]) continue; // If the session is not available for this weekday, skip it (not available)
				sessionAvailable = true;
				for(var j = 0; j < blocked[i].sessions.length; j++) // Loop through blocked sessions for the date
					if(blocked[i].sessions[j] == session[k].id) sessionAvailable = false; // If this session is in the blocked list, it is not available
				if(sessionAvailable) validDate = true; // If any session is available, the date is valid
			}
			break; // break out of loop
		}
	if(!validDate) return weekday + ': No sessions available';
	
	// New Year's Day 
	if(month == 1 && day == 1) return 'Bank Holiday: New Year\'s Day';
	if(month == 1 && day == 2 && weekday == 'Mon') return 'Bank Holiday: New Year\'s Day'; // Holiday fell on Sunday 
	
	// Birthday of Martin Luther King Jr. 
	if(month == 1 && (day >= 15 && day <= 21) && weekday == 'Mon') return 'Bank Holiday: MLK Jr. Birthday'; // 3rd Monday in January
	
	// Washington's Birthday 
	if(month == 2 && (day >= 15 && day <= 21) && weekday == 'Mon') return 'Bank Holiday: President\'s Day'; // 3rd Monday in February
	
	// Memorial Day
	if(month == 5 && (day >= 25 && day <= 31) && weekday == 'Mon') return 'Bank Holiday: Memorial Day'; // Last Monday in May
	
	// Independence Day
	if(month == 7 && day == 4) return 'Bank Holiday: Independence Day';
	if(month == 7 && day == 5 && weekday == 'Mon') return 'Bank Holiday: Independence Day'; // Holiday fell on Sunday
	
	// Labor Day
	if(month == 9 && (day >= 1 && day <= 7) && weekday == 'Mon') return 'Bank Holiday: Labor Day'; // First Monday in September
	
	// Columbus Day
	if(month == 10 && (day >= 8 && day <= 14) && weekday == 'Mon') return 'Bank Holiday: Columbus Day'; // 2nd Monday in October
	
	// Veteran's Day
	if(month == 11 && day == 11) return 'Bank Holiday: Veteran\'s Day';
	if(month == 11 && day == 12 && weekday == 'Mon') return 'Bank Holiday: Veteran\'s Day'; // Holiday fell on Sunday
	
	// Thanksgiving Day
	if(month == 11 && (day >= 22 && day <= 28) && weekday == 'Thr') return 'Bank Holiday: Thanksgiving Day'; // 4th Thursday in November
	
	// Chistmas Day
	if(month == 12 && day == 25) return 'Bank Holiday: Chistmas Day';
	if(month == 12 && day == 26 && weekday == 'Mon') return 'Bank Holiday: Chistmas Day'; // Holiday fell on Sunday
	
	return ''; // Valid Tour Day
}

function updateSession(index)
{
	var ddlTime = document.getElementById('ddlTime' + index);
	var lblDate = document.getElementById('lblDate' + index);
	var day;

	if(lblDate.innerText) {
		if(lblDate.innerText.length == 0) return; // No date selected; do nothing.
		day = lblDate.innerText.substr(0, 3);
	}
	else if(lblDate.textContent) {
		if(lblDate.textContent.length == 0) return; // No date selected; do nothing.
		day = lblDate.textContent.substr(0, 3);
	}
	
	var ddlMonth = document.getElementById('ddlMonth' + index);
	var ddlDay = document.getElementById('ddlDay' + index);
	var ddlYear = document.getElementById('ddlYear' + index);
	var date = ddlMonth.selectedIndex + '/' + ddlDay.selectedIndex + '/' + ddlYear.options[ddlYear.selectedIndex].value;
	
	// Save the current selected value.
	var selected = ddlTime.options[ddlTime.selectedIndex].value;
	
	// Clear the options for the session.
	while(ddlTime.options.length > 1) ddlTime.options[1] = null;
	
	// Determine if any sessions are blocked for this date.
	var dateBlocked = new Array();
	for(var i = 0; i < blocked.length; i++)
		if(date == blocked[i].date) {dateBlocked = blocked[i].sessions; break;}
	var sessionBlocked = false;
	
	// Populate with the sessions available for the selected day.
	for(var i = 0; i < session.length; i++)
	{
		// Is the session available for this weekday...
		if(!session[i][day]) continue; // not available
		
		// Is the session blocked for this date...
		sessionBlocked = false;
		if(dateBlocked.length > 0)
			for(var j = 0; j < dateBlocked.length; j++)
				if(dateBlocked[j] == session[i].id) sessionBlocked = true;
		if(sessionBlocked) continue; // blocked
		
		// Add session to options.
		ddlTime.options[ddlTime.options.length] = new Option(session[i].name, session[i].name);
		if(session[i].name == selected) ddlTime.options[ddlTime.options.length - 1].selected = true;
	}
	if(ddlTime.options.length == 1) ddlTime.options[0].text = '(None available)';
	else ddlTime.options[0].text = '(Anytime)';
	if(ddlTime.options.length == 2) ddlTime.options[1].selected = true; // If only one selection is available (besides the default), select it.
}

function loadSessionTimes() {
	session = new Array();
	hidSession = document.getElementById('hidSession').value;
	var sessionList = hidSession.split("|");
	for(var i = 0; i < sessionList.length; i++) {
		var sessionComponents = sessionList[i].split(",");
		session[i] = new Object();
		session[i].id = sessionComponents[0];
		session[i].name = sessionComponents[1];
		session[i].Sun = (sessionComponents[2] == "Y");
		session[i].Mon = (sessionComponents[3] == "Y");
		session[i].Tue = (sessionComponents[4] == "Y");
		session[i].Wed = (sessionComponents[5] == "Y");
		session[i].Thr = (sessionComponents[6] == "Y");
		session[i].Fri = (sessionComponents[7] == "Y");
		session[i].Sat = (sessionComponents[8] == "Y");
	}

	blocked = new Array();
	hidBlocked = document.getElementById('hidBlocked').value;
	var blockedList = hidBlocked.split("|");
	
	for(var i = 0; i < blockedList.length; i++) {
		var blockedComponents = blockedList[i].split(",");
		blocked[i] = new Object();
		blocked[i].date = blockedComponents[0];
		blocked[i].sessions = new Array();
		if(blockedComponents[1]) {
			var blockedSessionList = blockedComponents[1].split(";");
			for(var j = 0; j < blockedSessionList.length; j++) {
				blocked[i].sessions[j] = blockedSessionList[j];
			}
		}
	}
}

function ValidateRequired()
{
	var msg = '';
	
	var txtContact = document.getElementById('txtContact');
	var txtPhone = document.getElementById('txtPhone');
	var txtGrpName = document.getElementById('txtGrpName');
	var ddlCategory = document.getElementById('ddlCategory');
	var txtOther = document.getElementById('txtOther');
	var txtGrpSize = document.getElementById('txtGrpSize');
	var ddlTrans = document.getElementById('ddlTrans');
	var ddlMonth1 = document.getElementById('ddlMonth1');
	var ddlDay1 = document.getElementById('ddlDay1');
	var ddlYear1 = document.getElementById('ddlYear1');
	var chkAccess = document.getElementById('chkAccess');
	var chkMailList = document.getElementById('chkMailList');
	
	if(chkMailList.checked)
	{
		if(document.getElementById('txtAddress1').value == "" ||
		   document.getElementById('txtCity').value == "" ||
		   document.getElementById('ddlState').value == "" ||
		   document.getElementById('txtZip').value == "")
		{
			msg = "Mailing List Address\n" + msg;
			document.getElementById('txtAddress1').focus();
		}
	}
	if(chkAccess.checked)
	{
		if(document.getElementById('txtSpecialNeeds').value == "")
		{
			msg = "Group's special needs\n" + msg;
			document.getElementById('txtSpecialNeeds').focus();
		}
	}
	if(ddlYear1.options[ddlYear1.selectedIndex].value.length == 0 || ddlDay1.options[ddlDay1.selectedIndex].value.length == 0 || ddlMonth1.options[ddlMonth1.selectedIndex].value.length == 0)
	{
		msg = "First Date\n" + msg;
		ddlMonth1.focus();
	}
	if(ddlTrans.selectedIndex == 0) 
	{
		msg = "Transportation\n" + msg;
		ddlTrans.focus();
	}
	if(txtGrpSize.value.length == 0)
	{
		msg = "Group Size\n" + msg;
		txtGrpSize.focus();
	}
	if(ddlCategory.options[ddlCategory.selectedIndex].value == "Other" && txtOther.value.length == 0) 
	{
		msg = "(Describe your group) Other\n" + msg;
		txtOther.focus();
	}
	if(ddlCategory.selectedIndex == 0)
	{
		msg = "Describe your group\n" + msg;
		ddlCategory.focus();
	}
	if(txtGrpName.value.length == 0)
	{
		msg = "Group Name\n" + msg;
		txtGrpName.focus();
	}
	if(txtPhone.value.length == 0)
	{
		msg = "Phone Number\n" + msg;
		txtPhone.focus();
	}
	if(txtContact.value.length == 0)
	{
		msg = "Contact Name\n" + msg;
		txtContact.focus();
	}
	
	if(msg.length > 0)
	{
		msg = msg.replace(/\n$/, '');
		alert("The following information is required:\n\n" + msg);
		//alert("The following " + (msg.search(/\n/) > -1 ? "fields are" : "field is") + " required:\n\n" + msg);
		return false;
	}
	else return true;
}

function ValidateFormats()
{
	var msg = '';
	
	var txtPhone = document.getElementById('txtPhone');
	var txtAltPhone = document.getElementById('txtAltPhone');
	var txtFax = document.getElementById('txtFax');
	var txtEmail = document.getElementById('txtEmail');
	var txtGrpSize = document.getElementById('txtGrpSize');
	
	if(document.getElementById('lblDate3').style.color == 'red')
	{
		msg = "There are no Sessions available on the Third Date you have chosen.\n" + msg;
		document.getElementById('ddlMonth3').focus();
	}
	if(document.getElementById('lblDate2').style.color == 'red')
	{
		msg = "There are no Sessions available on the Second Date you have chosen.\n" + msg;
		document.getElementById('ddlMonth2').focus();
	}
	if(document.getElementById('lblDate1').style.color == 'red')
	{
		msg = "There are no Sessions available on the First Date you have chosen.\n" + msg;
		document.getElementById('ddlMonth1').focus();
	}
	if(txtGrpSize.value.length > 0)
	{
		if(document.getElementById('lblMaxSize').innerText && document.getElementById('lblMinSize').innerText) {
			var maxSize = parseInt(document.getElementById('lblMaxSize').innerText);
			var minSize = parseInt(document.getElementById('lblMinSize').innerText);
		}
		else if(document.getElementById('lblMaxSize').textContent && document.getElementById('lblMinSize').textContent) {
			var maxSize = parseInt(document.getElementById('lblMaxSize').textContent);
			var minSize = parseInt(document.getElementById('lblMinSize').textContent);
		}
		if(parseInt(txtGrpSize.value) > maxSize)
		{
			msg = "The maximum group size is " + maxSize + ".\n" + msg;
			txtGrpSize.focus();
		}
		if(parseInt(txtGrpSize.value) < minSize)
		{
			msg = "The minimum group size is " + minSize + ", smaller groups may be added to existing larger groups by calling the number at the bottom of the page.\n" + msg;
			txtGrpSize.focus();
		}
	}
	if(txtEmail.value.length > 0)
	{
		var arr = txtEmail.value.split('@');
		if(arr.length == 2)
		{
			txtEmail.valid = true;
			var tmp = null;
			for(var j = 0; j < arr.length; j++)
			{
				tmp = arr[0].split('.');
				for(var i = 0; i < tmp.length; i++)
				{
					if(tmp[i].length == 0) txtEmail.valid = false;
				}
			}
			if(!txtEmail.valid)
			{
				msg = "The Email is in an invalid format.\n" + msg;
				txtEmail.focus();
			}
		}
		else
		{
			msg = "The Email must have one '@'.\n" + msg;
			txtEmail.focus();
		}
	}
	if(txtFax.value.length > 0 && txtFax.style.color == 'red')
	{
		msg = "The Fax Number is in an invalid format.\n" + msg;
		txtFax.focus();
	}
	if(txtAltPhone.value.length > 0 && txtAltPhone.style.color == 'red')
	{
		msg = "The Alternate Number is in an invalid format.\n" + msg;
		txtAltPhone.focus();
	}
	if(txtPhone.style.color == 'red')
	{
		msg = "The Phone Number is in an invalid format.\n" + msg;
		txtPhone.focus();
	}
	
	if(msg.length > 0)
	{
		msg = msg.replace(/\n$/, '');
		alert("The following needs to be fixed before the request can be completed:\n\n" + msg);
		return false;
	}
	else return true;
}

function chk_OnClick(chk, divName)
{
	document.getElementById(divName).style.display = (chk.checked ? '' : 'none');
	//if(chk.checked) window.scroll(0, chk.offsetTop);
}

function btnRequest_OnClick()
{
	if(!ValidateRequired()) return 0;
	if(!ValidateFormats()) return 0;
	
	document.frmTourRequest.action = '/tours/TourRequest.cfm';
	document.frmTourRequest.submit();
}

function Body_OnLoad()
{
	// If "Other" is selected for any option, display text box for further specification.
	document.getElementById('ddlCategory').onchange();
	/*document.getElementById('ddlSubject').onchange();
	document.getElementById('ddlGrade').onchange();*/
	
	// If any dates have been selected, update the Date Label and the session dropdowns.
	//updateDateLabel(1);
	//updateDateLabel(2);
	//updateDateLabel(3);
	
	// If any of these options are selected, show their cooresponding input fields.
	document.getElementById('chkAccess').onclick();
	//document.getElementById('chkEduField').onclick();
	document.getElementById('chkMailList').onclick();
	
	// Scroll back to the last position, prior to the re-load (if any).
	window.scrollTo(0, document.getElementById('hidScrollY').value);
}



		


