// JavaScript Document

	// javascript calendar by colin
	
	var dateSelected;
	
	var lastYear;
	var lastMonth;
	var nextYear;
	var nextMonth;
	
	var daDate;
	var year;
	var month;
	var date;
	var day;
	var firstDay;
	
	var dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
	var monthNames = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	var monthLengths = new Array(31,28,31,30,31,30,31,31,30,31,31,31);
	
	
	function setupSelectedDaysCalendar () {
		var eleID = 'selectedDaysCalendar';
		var index = (setupSelectedDaysCalendar.arguments.length && setupSelectedDaysCalendar.arguments[0]) ? '-'+setupSelectedDaysCalendar.arguments[0] : '';
		var ele = document.getElementById('selectedDaysCalendar'+index);
		var dateString = (setupSelectedDaysCalendar.arguments.length>1 && setupSelectedDaysCalendar.arguments[1]) ? setupSelectedDaysCalendar.arguments[1] : false;//daDate.getFullYear()+'-'+daDate.getMonth()+'-'+daDate.getDate();
		if (dateString) var daDate = new Date(daDate);
		else {
			var daDate = new Date();
			dateString = daDate.getFullYear()+'-'+(daDate.getMonth()+1)+'-'+daDate.getDate();
		}
		var formObj = (setupSelectedDaysCalendar.arguments.length>2 && setupSelectedDaysCalendar.arguments[2]) ? setupSelectedDaysCalendar.arguments[2] : document.eventForm.eoStartDate;
		// calView: [single] multiple range week
		var calView = (setupSelectedDaysCalendar.arguments.length>3 && setupSelectedDaysCalendar.arguments[3]) ? setupSelectedDaysCalendar.arguments[3] : 'single';
		
		var innerString = '<p id="monthName'+index+'"><a href="javascript:writeCalendar(lastYear+\'-\'+lastMonth+\'-01\''
		+ ',\''+index+"',document.forms['"+formObj.form.name+"']['"+formObj.name+"'],'"+calView+'\');">&lt;&lt;</a> &nbsp; <select id="monthNameSelector'+index+'"'
		+ " onChange=\"writeCalendar(document.getElementById('yearSelector"+index+"').options[document.getElementById('yearSelector"+index
		+ "').selectedIndex].value+'-'+this.options[this.selectedIndex].value+'-01','"+index+"',document.forms['"+formObj.form.name+"']['"+formObj.name+"'],'"
		+ calView+'\');">';
		for (var m in monthNames) {
			innerString += '<option value="'+(parseInt(m)+1)+'"';
			if (daDate.getMonth()==parseInt(m)) innerString += ' selected';
			innerString += '>'+monthNames[m]+'</option>';
		}
		innerString += '</select> <select id="yearSelector'+index+'" onChange="';
		innerString += "writeCalendar(this.options[this.selectedIndex].value+'-'+document.getElementById('monthNameSelector"+index+"').options[document.";
		innerString += "getElementById('monthNameSelector"+index+"').selectedIndex].value+'-01','"+index+"',document.forms['"+formObj.form.name+"']['"+formObj.name+"'],'"+calView+"');\">";
		var currYear = new Date();
		currYear = currYear.getFullYear();
		for (var i=currYear; i<=(currYear+4); i++) {
			innerString += '<option value="'+i+'"';
			if (i==currYear) innerString += ' selected';
			innerString += '>'+i+'</option>';
		}
		innerString += '</select> &nbsp; <a href="javascript:writeCalendar(nextYear+\'-\'+nextMonth+\'-01\',\''+index+"',document.forms['"+formObj.form.name+"']['"
		+ formObj.name+"'],'"+calView+'\');">&gt;&gt;</a></p>'
		+ "\n" + '	<table align="center" border="1" cellspacing="1" cellpadding="2">'
		+ "\n" + '	<tbody id="calTable'+index+'">'
		+ "\n" + '	<tr valign="top">'
		+ "\n" + '		<td colspan="7">&nbsp;</td>'
		+ "\n" + '	</tbody>'
		+ "\n" + '	<thead>'
		+ "\n" + '	<tr valign="middle">'
		+ "\n" + '		<th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th>'
		+ "\n" + '	</tr>'
		+ "\n" + '	</thead></table>';
		
		ele.innerHTML = innerString;

		writeCalendar(dateString,index,formObj,calView);
	}
	
	function writeCalendar () {
		var selectedDays = new Array();
		var daDate;
		var dateString;
		var index;
		var indexUse;
		var formEle;
		var calView;
		var clickFunction = '';
		
		if (!writeCalendar.arguments.length) {
			daDate = new Date();
			year = daDate.getFullYear();
			month = daDate.getMonth();
			date = 1;
			daDate.setDate(date);
			day = daDate.getDay();
			firstDay = day;
			
			index = false;
			formEle = false;
		}
		else {
			dateString = writeCalendar.arguments[0].toString().split("-");
			index = (writeCalendar.arguments.length>1 && writeCalendar.arguments[1]) ? writeCalendar.arguments[1] : '';
			formEle = (writeCalendar.arguments.length>2 && writeCalendar.arguments[2]) ? writeCalendar.arguments[2] : false;
			calView = (writeCalendar.arguments.length>3 && writeCalendar.arguments[3]) ? writeCalendar.arguments[3] : 'single';
			
			if (calView=='single') clickFunction = 'addRemoveCalDay';
			else if (calView=='multiple') clickFunction = 'addRemoveMultipleDays';
			else if (calView=='week') clickFunction = 'setWeekRange';
			else if (calView=='range') clickFunction = 'setDateRange';

			year = parseInt(dateString[0]);
			month = parseInt(dateString[1]);
			var monthString = month;
			if (monthString.length==1) monthString = '0'+monthString;
			
			//if (writeCalendar.arguments.length==1) {
				month--;
				date = parseInt(dateString[2]);
			//}
			
			daDate = new Date(year,month,date);
			day = daDate.getDay();
			daDate.setDate(1);
			firstDay = daDate.getDay();
			daDate.setDate(date);
		}
		if ((year%4)==0 && ((year%100)>0 || ((year%100)==0 && (year%400)==0))) monthLengths[1] = 29;
		
		// show month/year
		//document.getElementById("monthName"+index).innerHTML = monthNames[month]+" "+year;
		var monthSelector = document.getElementById('monthNameSelector'+index);
		if (!monthSelector) return false;
		var yearSelector = document.getElementById('yearSelector'+index);
		if (!yearSelector) return false;
		for (var m=0; m<monthSelector.options.length; m++) {
			if (monthSelector.options[m].value==(month+1)) monthSelector.options[m].selected = true;
		}
		for (var y=0; y<yearSelector.options.length; y++) {
			if (yearSelector.options[y].value==year) yearSelector.options[y].selected = true;
		}
		
		// get last and next values
		var lastDate = new Date(year,month-1,date);
		lastMonth = lastDate.getMonth()+1;
		lastYear = lastDate.getFullYear();
		
		var nextDate = new Date(year,month+1,date);
		nextMonth = nextDate.getMonth()+1;
		nextYear = nextDate.getFullYear();
		
		var d = document.getElementById("calTable"+index);
		var dayCounter = 0;
		var tr;
		
		// kill the calendar if it's already been written
		var trTest = d.getElementsByTagName("tr");
		if (trTest.length>0) {
			for (var i=(trTest.length-1); i>=0; i--) {
				d.removeChild(trTest.item(i));
			}
		}
		
		// if 1st is not a sunday
		if (firstDay) {
			tr = document.createElement("tr");
			d.appendChild(tr);
			while (dayCounter<firstDay) {
				var td = document.createElement("td");
				tr.appendChild(td);
				td.innerHTML = "&nbsp;";
				dayCounter++;
			}
		}
		
		var monthSearchString = (month+1).toString();
		if (monthSearchString.length==1) monthSearchString = "0"+monthSearchString;
		for (var i=1; i<=monthLengths[month]; i++) {
			if (!dayCounter) {
				tr = document.createElement("tr");
				d.appendChild(tr);
			}
			var td = document.createElement("td");
			var div = document.createElement("div");
			/*var divText = document.createTextNode(i);
			div.appendChild(divText);*/
			var dateString = i.toString();
			if (dateString.length==1) dateString = '0'+dateString;
			if (formEle && formEle.value.indexOf(year+'-'+monthSearchString+'-'+dateString)>-1) div.className = 'selectedDay';
			div.setAttribute("id","day"+i+index);
			div.setAttribute('day',dayCounter);
			div.style.cursor = "pointer";
			//div.setAttribute("onClick",clickFunction+"('"+year+'-'+monthSearchString+'-'+dateString+"',this,document.forms['"+formEle.form.name+"']['"+formEle.name+"']);");
			//td.setAttribute("onClick",clickFunction+"('"+year+'-'+monthSearchString+'-'+dateString+"',document.getElementById('day"+i+"'),document.forms['"+formEle.form.name+"']['"+formEle.name+"']);");
			div.innerHTML = "<span onClick=\""+clickFunction+"('"+year+'-'+monthSearchString+'-'+dateString+"',document.getElementById('day"+i+index+"'),document.forms['"+formEle.form.name+"']['"+formEle.name+"']);\">"+i+"</span>";
			td.appendChild(div);
			tr.appendChild(td);
			
			if (dayCounter==6) dayCounter = 0;
			else dayCounter++;
		}
		
		if (dayCounter<7 && dayCounter) {
			while (dayCounter<7) {
				var td = document.createElement("td");
				var div = document.createElement("div");
				td.appendChild(div);
				div.innerHTML = "&nbsp;";
				tr.appendChild(td);
				dayCounter++;
			}
		}
		tr = null;
	}
	
	var selectedEle = new Array();
	function addRemoveCalDay (dateString,ele,formEle) {
		// text node, so use parent
		if (ele.nodeType==3 && ele.parentNode.nodeType==1) ele.parentNode.className = (ele.parentNode.className) ? '' : 'selectedDay';
		// element node
		else if (ele.nodeType==1) ele.className = (ele.className) ? '' : 'selectedDay';
		else return false;
		
		if (typeof(selectedEle[formEle.name])!='undefined') selectedEle[formEle.name].className = '';
		selectedEle[formEle.name] = (ele.nodeType==3 && ele.parentNode.nodeType==1) ? ele.parentNode : ele;
		
		if (formEle) {
			var val = formEle.value.substr(0,10);
			if (ele.className) val = dateString;
			else val = '0000-00-00';
			formEle.value = val+(formEle.value.substr(10));
			var endDateObj = document.getElementById(formEle.name.replace(/StartDate/,'EndDate'));
			if (endDateObj && endDateObj.name!=formEle.name) endDateObj.value = val+(endDateObj.value.substr(10));
		}
		else alert("JavaScript error: Please reload the page and try again.");
	}
	
	// if doing a "weekly" POD calendar: takes Sunday of week selected and selects up to the Saturday, populating the form ele with the Sunday date
	function setWeekRange (dateString,ele,formEle) {
		if (!formEle) return false;
		
		// get parent tr
		var tr;
			// text node got the click
		if (ele.nodeType==3 && ele.parentNode.nodeType==1) tr = ele.parentNode.parentNode.parentNode;
			// element node got the click
		else if (ele.nodeType==1) tr = ele.parentNode.parentNode;
		else return false;
		
		tr.className = 'selectedWeek';
		/*var tds = tr.childNodes;
		for (var i=0; i<tds.length; i++) {
			if (tds[i].tagName.toLowerCase()=='td') tds[i].style.backgroundColor = '#FFFFCC';
		}*/
		if (typeof(selectedEle[formEle.name])!='undefined') selectedEle[formEle.name].className = '';
		selectedEle[formEle.name] = tr;
		if (tr.firstChild.tagName.toLowerCase()!='td' || tr.firstChild.firstChild.tagName.toLowerCase()!='div') return false;
		var useID = tr.firstChild.firstChild.id;
		formEle.value = dateString.substr(0,8)+useID.substr(3,(useID.lastIndexOf('-')-3));
		//alert(formEle.value);
	}
	
	var dateRangeStart;
	var dateRangeEnd;
	function setDateRange (dateString,ele,formEle) {
		var rangeStartString,rangeEndString,rangeTotalDays,startPoint,rangeInfo;
		
		// text node, so use parent
		if (ele.nodeType==3 && ele.parentNode.nodeType==1) ele = ele.parentNode;
		else if (ele.nodeType!=1) return false;
		
		var index = (formEle.name.indexOf('-')) ? formEle.name.substr(formEle.name.lastIndexOf('-')+1) : '';
		var indexUse = (ele.id.indexOf('-')) ? ele.id.substr(ele.id.lastIndexOf('-')) : '';
		
		// remove previous range
		if (dateRangeEnd) {
			dateRangeStart.className = '';
			dateRangeEnd.className = '';
			formEle.value = '';
			// clear selectedRange
			var endDay = parseInt(dateRangeEnd.id.substr(3));
			var startDay = parseInt(dateRangeStart.id.substr(3));
			for (var i=(startDay+1); i<endDay; i++) {
				document.getElementById('day'+i+indexUse).className = '';
			}
			if (ele==dateRangeStart) {
				dateRangeStart = null;
				dateRangeEnd = null;
				ele.className = '';
				return false;
			}
			else {
				dateRangeStart = null;
				dateRangeEnd = null;
			}
		}
		
		if (dateRangeStart) {
			var y = document.getElementById('yearSelector'+indexUse);
			/*var selects = document.getElementsByTagName('select');
			for (var i in selects) {
				alert(selects[i].id);
			}*/
			var endYear = parseInt(y.options[y.selectedIndex].value);
			var m = document.getElementById('monthNameSelector'+indexUse);
			var endMonth = parseInt(m.options[m.selectedIndex].value);
			var endDay = parseInt(ele.id.substr(3));
			var startYear = parseInt(formEle.value.substr(0,4));
			var startMonth = parseInt(formEle.value.substr(5,2));
			var startDay = parseInt(dateRangeStart.id.substr(3));
			
			if (endMonth!=startMonth) {
				if (Math.abs(endMonth-startMonth)>1) {
					rangeInfo = document.getElementById('podRangeInfo'+index);
					if (rangeInfo) rangeInfo.innerHTML = '<span style="color:#CC0000; font-weight:bold;">Ranges cannot be longer than 30 days. Please select again.</span>';
					dateRangeStart = null;
					dateRangeEnd = null;
					formEle.value = '';
					return false;
				}
			}
			
			if (endYear==startYear && endMonth==startMonth && endDay==startDay) {
				dateRangeStart = null;
				dateRangeEnd = null;
				formEle.value = '';
				document.getElementById('day'+startDay+indexUse).className = '';
					// if it exists populate the range specification
				rangeInfo = document.getElementById('podRangeInfo'+index);
				if (rangeInfo) rangeInfo.innerHTML = 'Please select a start date';
				//alert('1a');
				return false;
			}
			else if (endYear>startYear || (endYear==startYear && endMonth>startMonth) || (endYear==startYear && endMonth==startMonth && endDay>startDay)) {
				startPoint = startDay+1;
				if (endMonth!=startMonth) startPoint = 1;
				for (var i=startPoint; i<endDay; i++) {
					document.getElementById('day'+i+indexUse).className = 'selectedRange';
				}
				formEle.value += ':'+dateString;
				dateRangeEnd = ele;
				//alert(endYear+'-'+endMonth+'-'+endDay+'::'+startYear+'-'+startMonth+'-'+startDay);
				//alert('1b');
				rangeStartString = startMonth+'-'+startDay+'-'+startYear;
				rangeEndString = endMonth+'-'+endDay+'-'+endYear;
				rangeTotalDays = 0;
				if (endMonth!=startMonth) rangeTotalDays += ((monthLengths[(startMonth+1)]-startDay)+endDay)+1;
				else rangeTotalDays += (endDay-startDay)+1;
			}
			else {
				for (var i=(endDay+1); i<startDay; i++) {
					document.getElementById('day'+i+indexUse).className = 'selectedRange';
				}
				formEle.value = dateString+':'+formEle.value;
				dateRangeEnd = dateRangeStart;
				dateRangeStart = ele;
				//alert('1c');
				rangeEndString = startMonth+'-'+startDay+'-'+startYear;
				rangeStartString = endMonth+'-'+endDay+'-'+endYear;
				rangeTotalDays = 0;
				if (endMonth!=startMonth) rangeTotalDays += ((monthLengths[(endMonth+1)]-endDay)+startDay);
				else rangeTotalDays += (startDay-endDay);
			}
			ele.className = 'selectedDay';
			
			// if it exists populate the range specification
			rangeInfo = document.getElementById('podRangeInfo'+index);
			if (rangeInfo) rangeInfo.innerHTML = 'Start: '+rangeStartString+' &nbsp; End: '+rangeEndString+'<br/>'+rangeTotalDays+' days';
		}
		else {
			formEle.value = dateString;
			dateRangeStart = ele;
			ele.className = 'selectedDay';
			//alert(2);
			// if it exists populate the range specification
			rangeInfo = document.getElementById('podRangeInfo'+index);
			if (rangeInfo) rangeInfo.innerHTML = 'Please select an end date';
		}
		//alert(formEle.value);
	}
	
	function getCalSelectedEle (calEle) {
		if (!calEle) return false;
		if (typeof(calEle)=='string') calEle = document.getElementById(calEle);
		var divs = calEle.getElementsByTagName('div');
		for (var i=0; i<divs.length; i++) {
			if (divs[i].className=='selectedDay') return divs[i];
		}
		return null;
	}
	
	/*function addRemoveCalDay (dateString) {
		var selectedDays = document.eventForm.selectedDays.value.split(";");
		var dayIndex = selectedDays.indexOf(dateString);
		
		var eleDate = dateString.substr(-2);
		if (eleDate.charAt(0)=='0') eleDate = eleDate.substr(1);
		
		if (dayIndex>-1) {
			selectedDays.splice(dayIndex,1);
			document.getElementById("day"+eleDate).parentNode.className = "";
		}
		else {
			selectedDays.push(dateString);
			document.getElementById("day"+eleDate).parentNode.className = "selectedDay";
		}
		document.eventForm.selectedDays.value = selectedDays.join(";");
		document.getElementById("selectedDaysList").innerHTML = '';
		for (var i in selectedDays) {
			document.getElementById("selectedDaysList").innerHTML += selectedDays[i]+"<br/>";
		}
	}*/
	