﻿//Constructor
function calendar(id,d,p){
	this.id = id;
	this.dateObject = d;
	this.pix = p;
	this.write = writeCalendar;
	this.length = getLength;
	this.month = d.getMonth();
	this.date = d.getDate();
	this.day = d.getDay();
	this.year = d.getFullYear();
	this.getFormattedDate = getFormattedDate;
	//get the first day of the month's day
	d.setDate(1);
	this.firstDay = d.getDay();
	//then reset the date object to the correct date
	d.setDate(this.date);
	//
	this.dateAry = new Array();
	var tmp;
	for (var i=0; i < dateStrAry.length; i++) {
		tmp = dateStrAry[i].split("/");
		this.dateAry[i] = new Array();
		this.dateAry[i][0] = new Date(tmp[2], parseInt(tmp[1],10)-1, tmp[0]);
		this.dateAry[i][1] = tmp[3];
	}
}
//var days = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var days = new Array('SUN','MON','TUE','WED','THU','FRI','SAT');
var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var cmonths = new Array('一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月');
var cnt = 0;
var tour = 0;
//
function getFormattedDate(){
	return days[this.day] + ', ' + months[this.month] + ' ' + this.date + ', ' + this.year;
	//return this.month + '/' + this.date + '/' + this.year;
}
//
function writeCalendar(){
	var calString = '<div id="calContainer">';
	//write month and year at top of table
	calString += '<table width="240" border="1" cellpadding="0" cellspacing="1" bordercolor="#CCCCCC" id="cal' + this.id + '">';
	//write the months button
	calString += '<tr><td width="58" rowspan="4"><table width="58" border="0" cellpadding="0" cellspacing="2" bordercolor="#CCCCCC">';
	calString += '  <tr><td width="12" align="right"><a href="javascript:chgMonth(-12,\'' + this.id + '\')"><img src="pic/arrowLeft.gif" name="arrowLeft" width="7" height="7" border="0" id="arrowLeft" onMouseOver="MM_swapImage(\'arrowLeft\',\'\',\'pic/arrowLeft-over.gif\',1)" onMouseOut="MM_swapImgRestore()"></a></td>';
	calString += '      <td align="center">' + this.year + '</td>';
	calString += '      <td width="12"><a href="javascript:chgMonth(12,\'' + this.id + '\')"><img src="pic/arrowRight.gif" name="arrowRight" width="7" height="7" border="0" id="arrowRight" onMouseOver="MM_swapImage(\'arrowRight\',\'\',\'pic/arrowRight-over.gif\',1)" onMouseOut="MM_swapImgRestore()"></a></td>';
	calString += '  </tr>';
	for(i=0;i<months.length;i++){
		var m = months[i].substring(0, 3).toLowerCase();
		if (i==this.month) {
			calString += '  <tr><td colspan="3"><a href="javascript:changeMonth(' + (i-this.month) + ',\'' + this.id + '\')"><img src="pic/' + m + '-over.gif" name="' + m + '" width="58" height="14" border="0" id="' + m + '" onMouseOver="MM_swapImage(\'' + m + '\',\'\',\'pic/' + m + '-over.gif\',1)" onMouseOut="MM_swapImgRestore()"></a></td></tr>';
		} else {
			calString += '  <tr><td colspan="3"><a href="javascript:changeMonth(' + (i-this.month) + ',\'' + this.id + '\')"><img src="pic/' + m + '.gif" name="' + m + '" width="58" height="14" border="0" id="' + m + '" onMouseOver="MM_swapImage(\'' + m + '\',\'\',\'pic/' + m + '-over.gif\',1)" onMouseOut="MM_swapImgRestore()"></a></td></tr>';
		}
	}
	calString += '      </table></td>';
	//write the year & month
	calString += '      <td height="20" align="center" class="year">' + this.year + '</td>';
	calString += '      </tr>';
	calString += '      <tr><td height="25" align="center" valign="middle" class="month">' + months[this.month] + ' ' + cmonths[this.month] + '</td>';
	calString += '      </tr>';
	//write a row containing days of the week
	calString += '      <tr>';
	calString += '          <td align="center" valign="middle"><table width="164" height="12" border="0" cellpadding="0" cellspacing="0">';
	calString += '          <tr align="center" valign="middle"><td width="24">S</td><td width="24">M</td><td width="24">T</td><td width="24">W</td><td width="24">T</td><td width="24">F</td><td width="24">S</td></tr>';
	calString += '          </table></td>';
	calString += '      </tr>';
	//write the body of the calendar
	calString += '      <tr>';
	calString += '          <td width="100%" valign="top"><table width="100%" height="150" border="1" cellpadding="0" cellspacing="2" bordercolor="#CCCCCC">';
	calString += '            <tr align="center" valign="middle">';
	//create 6 rows so that the calendar doesn't resize
	cnt = 0;
	tour = 0;
	var bg = '';
	var href = '';
	var bhref = '';
	for(j=0;j<42;j++){
		var displayNum = (j-this.firstDay+1);
		if (inDateAry(this.year, this.month, displayNum, this.dateAry)) {
			bg = ' bgcolor="' + tourAry[tour-1] + '"';
			href = '<A href="javascript:location.href=\'hikingtours.php?y=' + this.year + '&m=' + this.month + '&c=' + tour + '\';"><font class="link">';
			bhref = '</font></A>';
		} else {
			bg = '';
			href = '';
			bhref = '';
		}
		if(j<this.firstDay){
			//write the leading empty cells
			calString += '              <td>&nbsp;</td>';
		}else if(displayNum==this.date){
			calString += '              <td id="' + this.id +'selected"' + bg +'>' + href + displayNum + bhref + '</td>';
		}else if(displayNum > this.length()){
			//Empty cells at bottom of calendar
			calString += '              <td>&nbsp;</td>';
		}else if(j%7==0) {
			//the rest of the numbered cells - sunday
			//calString += '<td id="" onClick="javascript:changeDate(this,\'' + this.id + '\')">' + displayNum + '</td>';
			calString += '              <td' + bg + '>' + href + displayNum + bhref + '</td>';
		}else{
			//the rest of the numbered cells
			//calString += '<td id="" onClick="javascript:changeDate(this,\'' + this.id + '\')">' + displayNum + '</td>';
			calString += '              <td' + bg + '>' + href + displayNum + bhref + '</td>';
		}
		if(j%7==6){
			calString += '            </tr><tr align="center" valign="middle">';
		}
	}
	//close the last number row
	calString += '            </tr>';
	calString += '          </table></td>';
	calString += '      </tr>';
/*
	//write the nav row
	calString += '<tr>';
	calString += '<td class="nav" style="text-decoration:underline;" onClick="changeMonth(-12,\'' + this.id + '\')">&lt;</td>';
	calString += '<td class="nav" onClick="changeMonth(-1,\'' + this.id + '\')">&lt;</td>';
	calString += '<td class="month" colspan="3">&nbsp;</td>';
	calString += '<td class="nav" onClick="changeMonth(1,\'' + this.id + '\')">&gt;</td>';
	calString += '<td class="nav" style="text-decoration:underline;text-align:right;" onClick="changeMonth(12,\'' + this.id + '\')">&gt;</td>';
	calString += '</tr>';
*/	
	calString += '</td>';
	calString += '</tr>';	
	calString += '</table>';
	
	calString += '</div>';
	return calString;
}
//
function getLength(){
	//thirty days has September...
	switch(this.month){
		case 1:
			if((this.dateObject.getFullYear()%4==0&&this.dateObject.getFullYear()%100!=0)||this.dateObject.getFullYear()%400==0)
				return 29; //leap year
			else
				return 28;
		case 3:
			return 30;
		case 5:
			return 30;
		case 8:
			return 30;
		case 10:
			return 30
		default:
			return 31;
	}
}
//
function changeDate(td,cal){
	//Some JavaScript trickery
	//Change the cal argument to the existing calendar object
	//This is why the first argument in the constructor must match the variable name
	//The cal reference also allows for multiple calendars on a page
	cal = eval(cal);
	document.getElementById(cal.id + "selected").className = "days";
	document.getElementById(cal.id + "selected").id = "";
	td.className = "date";
	td.id = cal.id + "selected";
	//set the calendar object to the new date
	cal.dateObject.setDate(td.firstChild.nodeValue);
	cal = new calendar(cal.id,cal.dateObject,cal.pix);
	//here is where you could react to a date change - I'll just display the formatted date
	alert(cal.getFormattedDate());
}
//
function changeMonth(mo,cal){
	//more trickery!
	cal = eval(cal);
	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	cal.dateObject.setMonth(cal.dateObject.getMonth() + mo);
	cal = new calendar(cal.id,cal.dateObject,cal.pix);
	cal.formattedDate = cal.getFormattedDate();
	document.getElementById('calContainer').innerHTML = cal.write();
}
//
function inDateAry(y, m ,d, dateAry) {
	var theDate = new Date(y, m, d);
	for (var i=cnt; i < dateAry.length; i++) {
		if(theDate.getTime()==dateAry[i][0].getTime()) {
			tour = dateAry[i][1];
			return true;
			break;
		}
	}
	return false;
}
//
function chgMonth(mo,cal){
	//more trickery!
	cal = eval(cal);
	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	//cal.dateObject.setMonth(cal.dateObject.getMonth() + mo);
	
	tmp = Math.floor((cal.dateObject.getMonth() + mo) / 12);
	tmp1 = (cal.dateObject.getMonth() + mo) % 12;
	if (tmp1<0) { tmp1 += 12; }
	cal.dateObject.setYear(cal.dateObject.getFullYear() + tmp);
	cal.dateObject.setMonth(tmp1);
	
	cal = new calendar(cal.id,cal.dateObject,cal.pix);
	cal.formattedDate = cal.getFormattedDate();
	location.href='index.php?y=' + cal.year + '&m=' + cal.month;
}