/* SOE Calendar
written by Ben Berlin
inspired by Oreilly
*/



var datePicker = {
/*******************
REFERENCE PROPERTIES
********************/
calendarDiv : null,
calendarForm : null,
destinationForm : null,
dateArray : [],

/**************
UTILITY METHODS
***************/

// day of week of month's first day
getFirstDay : function (theYear, theMonth){
	var firstDate = new Date(theYear, theMonth, 1);
	return firstDate.getDay();
},

//number of days in the month
getMonthLen : function(theYear, theMonth){
	var nextMonth = new Date(theYear, theMonth +1, 1);
	nextMonth.setHours(nextMonth.getHours() - 3);
	return nextMonth.getDate();
},
getElementPosition : function(elemID) {
	var offsetTrail = document.getElementById(elemID);
	var offsetLeft = 0;
	var offsetTop = 0;
	while (offsetTrail) {
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	return {left:offsetLeft, top:offsetTop};
},
//position and show calendar
showCalendar : function(evt) {
	evt = (evt) ? evt : event;
	if(evt){
		if(this.calendarDiv.style.visibility != "visible"){
			var elem = (evt.target) ? evt.target : evt.srcElement;
			var position = this.getElementPosition(elem.id);
			DHTMLAPI.moveTo(this.calendarDiv.id, position.left + elem.offsetWidth, position.top);
			DHTMLAPI.show(this.calendarDiv.id);
		}else{
			DHTMLAPI.hide(this.calendarDiv.id);
		}
	}
},

convertDate : function(date)
{
	
	var month = date.substring(0,2);
	var day = date.substring(3,5);
	var year = date.substring(6);

	var tempDateArray = new Array();

	tempDateArray[0] = parseInt(month,10)-1;

	tempDateArray[1] = day;
	tempDateArray[2] = year;

	return tempDateArray;
},

/*********************
DRAW CALENDAR CONTENTS
*********************/

//clear and re-populate table based on form's selections
populateTable : function(form) {
	//pick up date form choices
	var theMonth = form.chooseMonth.selectedIndex;
	var theYear = parseInt(form.chooseYear.options[form.chooseYear.selectedIndex].text);
	//initialize date-dependent variables
	var firstDay = this.getFirstDay(theYear, theMonth);
	var howMany = this.getMonthLen(theYear, theMonth);
	var today = new Date();

	//fill in month/year in table header
	document.getElementById("tableHeader").innerHTML =
		form.chooseMonth.options[theMonth].text + " "+theYear;

	//initialize vars for table creation
	var dayCounter =1;
	var TBody = document.getElementById("tableBody");
	//clear any existing rows
	while (TBody.rows.length > 0) {
	 TBody.deleteRow(0);
	}
	var newR, newC, dateNum;
	var done = false;
	var isToday = false;
	var ttl = 0;
	while (!done){
		//create new row at end
		newR = TBody.insertRow(TBody.rows.length);
		if(newR) {
			for(var i=0; i<7; i++){
				//create new cell at end of row
				newC = newR.insertCell(newR.cells.length);
				if (TBody.rows.length == 1 && i < firstDay){
					//empty boxes before first day
					newC.innerHTML="&nbsp;";
					continue;
				}
				if(dayCounter == howMany){ 
					//no more rows after this one
					done = true;
				}
						
				//plug in link/date (or empty boxes after last day)
				if(dayCounter <= howMany){
					for(d=0; d < datePicker.dateArray.length; d++) 
					{
						var tempArray = this.convertDate(datePicker.dateArray[d]);
						
						if(tempArray[2] == theYear &&
						tempArray[0] == form.chooseMonth.selectedIndex &&
						tempArray[1] == dayCounter){
							newC.id = "today";
							isToday = true;
							ttl++;
						}
					}
					if(isToday)
					{
						newC.innerHTML = "<a href='#anchor"+ttl+"'>"+ dayCounter + "</a>";
						isToday = false;
					}else{
						newC.innerHTML = dayCounter;
					}
					
					dayCounter++;
				} else {
					newC.innerHTML = "&nbsp;";
				} 
			}
		} else {
			done = true;
		}
	}
},
/*************
POPULATE ARRAY
*************/

addDate : function(date) {

	datePicker.dateArray.push(date);
},

addManyDates : function(dates) {
	for(k=0; k<dates.length; k++) {
		datePicker.dateArray.push(dates[k].innerHTML);
	}
	
},
	
/**************
INITIALIZATIONS
**************/
//init dispatcher
init: function(calendarDiv, calendarForm, destinationForm) {
	this.calendarDiv = calendarDiv;
	this.calendarForm = calendarForm;
	this.destinationForm = destinationForm;
	this.fillYears();
	this.populateTable(calendarForm);
	document.getElementById('clearLater').innerHTML ='';
	if(window.getComputedStyle)
		document.getElementById('clearLater2').innerHTML ='';
	document.getElementById('calendar').style.visibility ='visible';

},
//create dynamic list of year choices
fillYears : function() {
	var today = new Date();
	var thisYear = today.getFullYear();
	var yearChooser = document.getElementById("chooseYear");
	for(i = thisYear; i < thisYear +5; i++){
		yearChooser.options[yearChooser.options.length] = new Option(i,i);
	}
	this.setCurrMonth(today);
},
//set month choice to current month
setCurrMonth : function(today) {
	document.getElementById("chooseMonth").selectedIndex = today.getMonth();
},

fillArray : function() {
	var tempArray = document.getElementsByName("date");
	this.addManyDates(tempArray);

	/*for(k=0; k<tempArray.length; k++){
	 	addDate(tempArray[k]);
	}*/
	
	
}
/***************
PROCESS CHOICE
***************/

}

