// html code for the beginning setup of the calendar
//var begTags = "<center><H2><font size=\"2\" face=\"Verdana\">";
var begTags = "<table width=\"150\" border=\"0\" style=\"border-collapse: collapse;\">\
	<tr>\
		<td style=\"Padding: 2px; vertical-align: middle; text-align: center; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid;\">\
		<u><a onClick=\"calendarOffset = calendarOffset - 1; showCalendar('calander1', calendarOffset);\"  style=\"cursor:pointer\">&lt;</a></u></td>\
		<td style=\"Padding: 2px; vertical-align: middle; text-align: center; BORDER-TOP: #ccc 1px solid;\"><div align=\"center\"><font size=\"2\" face=\"Verdana\">";		
		
var begTags2 = "</font></div></td>\
		<td style=\"Padding: 2px; vertical-align: middle; text-align: center; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid;\">\
		<u><a onClick=\"calendarOffset = calendarOffset + 1; showCalendar('calander1', calendarOffset);\" style=\"cursor:pointer\">&gt;</a></u></td>\
	</tr>\
	<tr>\
		<td colspan=\"3\" style=\"Padding: 2px; BORDER: #ccc 1px solid;\"><div align=\"center\">";
	
var weekHead2 = "<TABLE id=\"tblCalander\" width=\"50px\" border=1 bordercolordark=\"#000000\" bordercolorlight=\"#FFFFFF\" cellpadding=\"2\">" + "\n" +
"<TBODY><TR><TH vAlign=center align=middle width=\"14%\" bgcolor=\"#000000\"><font size=\"1\" color=\"#FFFFFF\" face=\"Verdana\">"+"\n" +
"S</font></TH><TH vAlign=center align=middle width=\"14%\" bgcolor=\"#000000\"><font size=\"1\" color=\"#FFFFFF\" face=\"Verdana\">"+"\n" +
"M</font></TH><TH vAlign=center align=middle width=\"14%\" bgcolor=#000000><font size=\"1\" color=\"#FFFFFF\" face=\"Verdana\">"+"\n" +
"T</font></TH><TH vAlign=center align=middle width=\"14%\" bgcolor=\"#000000\"><font size=\"1\" color=\"#FFFFFF\" face=\"Verdana\">"+"\n" +
"W</font></TH><TH vAlign=center align=middle width=\"14%\" bgcolor=#000000><font size=\"1\" color=\"#FFFFFF\" face=\"Verdana\">"+"\n" +
"T</font></TH><TH vAlign=center align=middle width=\"14%\" bgcolor=\"#000000\"><font size=\"1\" color=\"#FFFFFF\" face=\"Verdana\">"+"\n" +
"F</font></TH><TH vAlign=center align=middle width=\"14%\" bgcolor=\"#000000\"><font size=\"1\" color=\"#FFFFFF\" face=\"Verdana\">"+"\n" +
"S</font></TH></TR>";

// onClick=\"selectRow(this, 1);\" onFocus=\"selectRow(this, 0);\"

// html code for end of the month
//var endTags = "</TR></TBODY></TABLE><br><p>";
var endTags = "</TR></TBODY></TABLE>\
		</div></td>\
	</tr>\
</table>";

/*
<table width="150" border="0" style="border-collapse: collapse;">
	<tr> 
		<td style="Padding: 2px; vertical-align: middle; text-align: center; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid;"><a href="#">&lt;</a></td>
		<td style="Padding: 2px; vertical-align: middle; text-align: center; BORDER-TOP: #ccc 1px solid;"><div align="center">January 2007</div></td>
		<td style="Padding: 2px; vertical-align: middle; text-align: center; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid;"><a href="#">&gt;</a></td>
	</tr>
	<tr> 
		<td colspan="3" style="Padding: 2px; BORDER: #ccc 1px solid;"><div align="center"></div></td>
	</tr>
</table> 
*/

var monthName = "somemonth";
var yearName = "someyear";
var numberOfDays = 0;       // days in the month
var endDay = 0;             // day of the week the last day of the month falls on 
var numBlankDays = 0;       // number of "blank" days at the start of the month
var cellsHTML = "";         // HTML string

// Constant array of month names
var months=new Array;
months[0] = "January";
months[1] = "February";
months[2] = "March";
months[3] = "April";
months[4] = "May";
months[5] = "June";
months[6] = "July";
months[7] = "August";
months[8] = "September";
months[9] = "October";
months[10] = "November";
months[11] = "December";

function colorPicker(offset, days, rowSelected)
{		
	var now = new Date();

	var currentDay = now.getDay();
	var currentDate = now.getDate();
		 
	var avbDate = (currentDate + (6 - currentDay)) + 8; // sets avb time to 1 week ahead of current week
		
	var colorAvailable = '#FFFFCC';
	var colorUnavailable = '#CCCCCC';
	var colorSelected = 'red';
	
	var color;

	var rowSelected2 = document.getElementById('divStartWeek').value;
	var isRowSelected = 0;
	
	if(rowSelected2 == rowSelected)
	{
		isRowSelected = 1;
	}
	
	if(offset < 0)
	{
		color = colorUnavailable;
	} else if(offset > 0)
	{
		if(isRowSelected)
		{
			color = colorSelected;
		} else {
			color = colorAvailable;
		}
	} 
	else
	{//we are in the current month
		if(days < avbDate)
		{
			color = colorUnavailable;
		} else 
		{	
			if(isRowSelected)
			{
				color = colorSelected;
			} else
			{
				color = colorAvailable;
			}
		}
	}
	return color;
}

function selectRow(row, offset)
{
	var cellCounter;
	var rowCounter;
	
	var currentCell;
	var currentRow;

	document.getElementById('divStartWeek').value = row.id;
	
	var arryRows = document.getElementById('tblCalander').rows;
	var arryCells = new Array;
	
	//Loop through all weeks (not including the header)
	for (rowCounter = 1; rowCounter <= (arryRows.length - 1); rowCounter++)	
	{		
		currentRow = arryRows[rowCounter]; 
		arryCells = arryRows[rowCounter].cells;
		
		//All 7 days
		for (cellCounter = 0; cellCounter <= 6; cellCounter++)	
		{			
			currentCell = arryCells[cellCounter];

			if(currentCell.id != "")
			{
				currentCell.style.backgroundColor = colorPicker(offset, currentCell.id, currentRow.id);
			}
		}
	}
}

// Determine the number of days in the month and the starting/ending dates
function createMonth(inputMonth, inputYear, inputDay)
{
        var leapYear = false;   
		monthName = months[inputMonth];
        yearName = inputYear.toString();
		cellsHTML = "";
		numBlankDays = inputDay - 1;
		
		//figure out if the year is a leap year
		if(inputYear%4 == 0)
		{
			leapYear = true;
		}
		else
		{
			leapYear = false;
		}
		
		//figure out the number of days in the month
		//if month is NOT february, april, june, september, nor november then it has 31 days
		if(inputMonth != 1 && inputMonth  != 3 && inputMonth != 5 && inputMonth != 8 && inputMonth != 10)
		{
			numberOfDays = 31;
		}
		else
		{
			//if month is NOT february, then it has 30 days
			if(inputMonth != 1)
			{
				numberOfDays = 30;
			}
			else
			{
				//if month is a leap year, then it has 29 days. if not, it has 28
				if(leapYear)
				{
					numberOfDays = 29;
				}
				else
				{
					numberOfDays = 28;
				}				
			}
		}
		
		endDay = (numberOfDays + numBlankDays) % 7;
}

// produce the HTML code for a month calendar	
function getMonth(offset)
{
        // determine which font size to use for dates. 
        var fontsize=1;

		var cellStyle = "style=\"vertical-align: middle; text-align: center; padding: 2px; BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: 0px;\"";
		var newRowId = "weekOf"+1+monthName+yearName;

		cellsHTML = "<tr id = \""+ newRowId + "\" onClick=\"selectRow(this, calendarOffset);\">"; //don't forget the other tr below
		
		//integer to keep track of how many days were added to the month in the html string
		cellCount = 0;
		
		//prints out blank cells needed to start off month calendar
		for(var blanks = 0; blanks < numBlankDays; blanks++)
		{
				cellsHTML = cellsHTML + "<TD width=\"14%\" "+cellStyle+">&nbsp;</TD>";
                cellsHTML += "\n";
				cellCount++;
		}
		
		//prints out cells for each day of the month
		for(var days = 1; days <= numberOfDays; days++)
		{
			color = colorPicker(offset, days, newRowId);
					
			cellsHTML = cellsHTML + "<TD id = \""+days+"\"width=\"14%\" "+cellStyle+" BGCOLOR=\""+ color + "\"><font size=\""+fontsize+"\" face=\"Verdana\">" +days + "</font></TD>";
            cellsHTML += "\n";
    		cellCount++;
			
			if(cellCount % 7 == 0)
			{
				newRowId = "weekOf"+(days+1)+monthName+yearName;
				cellsHTML = cellsHTML + "</tr><tr id = \""+ newRowId +"\" onClick=\"selectRow(this, calendarOffset);\">";
                cellsHTML += "\n";
			}
		}
		
		//prints out blank cells needed to end off month calendar
		while (cellCount % 7 != 0)
		{
			cellsHTML = cellsHTML + "<TD width=\"14%\" "+cellStyle+"><font size=\""+fontsize+"\" face=\"Verdana\">&nbsp;</TD>";
            cellsHTML += "\n";
    		cellCount++;
		}
		
		var weekHead = weekHead2;

		return begTags + monthName + " " + yearName + "\n" + begTags2 + weekHead + "\n" + cellsHTML + endTags;
}

// Show the complete calendar in a popup window
function showCalendar(element, offset)
{
		var now = new Date();

		var currentMonth = now.getMonth();
		var currentYear = now.getFullYear();
 
		if(offset > 0)
		{
			currentYear = currentYear + Math.floor((currentMonth + offset) / 12);
			currentMonth += (offset % 12);
			
			if(currentMonth > 11)
			{
				currentMonth = currentMonth - 12;
			}
		} else if(offset < 0)
		{
			currentYear = currentYear + Math.floor((currentMonth + offset) / 12);
			currentMonth += (offset % 12);
			
			if(currentMonth < 0)
			{
				currentMonth += 12;
			}
		}
		
       // See if user provided a custom year input
        /*if (document.CalendarSettings.SpecialYear.value != "")
        {
            special = document.CalendarSettings.SpecialYear.value;
            if (special < 1 || special > 9999)
            {
                alert ("Year not in range 1 - 9999, using year 2000.");
                special = 2000;
            }
            currentYear = special.toString();
        }*/

      // Use Date function to return starting day of week for the month
      // Note that Date uses base zero numbering for month and day.
      //var startDate = new Date(currentYear, currentMonth-1, 1);
      var startDate = new Date(currentYear, currentMonth, 1);
      var startDay = startDate.getDay() + 1;
	  		
      // Obsolete: get start day from user input
		// var startDay = document.CalendarSettings.Day.value;
		var monthLimit = 1;

        //Iterate for as many months as user desires. 
		var calanderBody = "";
		
		for(var index = 0; index < monthLimit; index++)
		{
            createMonth( currentMonth, currentYear, startDay);
            calanderBody += getMonth(offset);
            //calanderBody = calanderBody + "\n";

            // Increment year if it's December
    		if(currentMonth == 12)
			{
				currentYear++;
			}
			currentMonth = currentMonth % 12 + 1;
            // end day of this month becomes start day of next month
            startDay = endDay + 1;
		}

		document.getElementById(element).innerHTML = calanderBody;
}

function referenceCalendar() 
{
	var now = new Date();

	document.write(dayNames[now.getDay()] + ", " + 
	monthNames[now.getMonth()] + " " + 
	now.getDate() + ", " + now.getFullYear());
}
