/* 
Version 2.0 - Modified  for use on Phenology
============================================
(C)2006 Internova UK Ltd
Author: Jamie Sanders 
*/
function showCalendar(Month, Year, Initialise, Target, DateStart, DateEnd, CalendarID){

	//get calendarDIV element
	var calendarDIV = document.getElementById(CalendarID);
	

	//all this to create a javascript valid start, end and today date
	var arrDateStart = DateStart.split('/');
	var arrDateEnd = DateEnd.split('/');
	var monthMin = (arrDateStart[1]-1);
	var monthMax = (arrDateEnd[1]-1);
	var yearMin = arrDateStart[2];
	var yearMax = arrDateEnd[2];
	var dayStart = arrDateStart[3];
	var dayEnd = arrDateEnd[3];

	var dateDateStart = new Date(parseInt(arrDateStart[2],10),(parseInt(arrDateStart[1],10)-1),parseInt(arrDateStart[0],10));
	var dateDateEnd = new Date(parseInt(arrDateEnd[2],10),(parseInt(arrDateEnd[1],10)-1),parseInt(arrDateEnd[0],10));
	var dateDateToday = new Date();
	if (DateTimeNow)
	{
		dateDateToday = DateTimeNow;
	}

	var strShowCalendarConstants = ', \'' + Target + '\', \'' + DateStart + '\', \'' + DateEnd + '\', \'' + CalendarID + '\'';

	//set day and month arrays
	var arrDays = new Array('M','T','W','T','F','S','S');
	var arrMonths = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

	if(Initialise == true){
		if((dateDateToday > dateDateStart) && (dateDateToday < dateDateEnd)){
			Month = dateDateToday.getMonth();
			Year = dateDateToday.getFullYear();
		}
		else
		{
			Month = dateDateStart.getMonth();
			Year = dateDateStart.getFullYear();
		}
	}
	var Calendar = new Date(Year, Month, 1);
	var daysWeek = 7;    // "constant" for number of days in a week
	var daysMonth = 31;    // "constant" for number of days in a month
	var calendarHTML;
	//calendar customisation
	var trStart = '<tr>';
	var trEnd = '</tr>';
	var tdStart = '<td align="center">';
	var tdEnd = '</td>';
	calendarHTML = '<table border="0" cellspacing="0" cellpadding="2" align="center"><tr class="calHead">';
	calendarHTML += '<td align="left" colspan="2">';
	//back month button
	if(Year > yearMin){
		if(Month == 0){
			calendarHTML += '<a href="javascript:showCalendar(11,' + (Year - 1) + ', false' + strShowCalendarConstants + ');" class="monthSelector"><img src="images/record/calendar/back_on.gif" alt="Previous Month" /></a>';
		}else{
			calendarHTML += '<a href="javascript:showCalendar(' + (Month - 1) + ',' + Year + ', false' + strShowCalendarConstants + ');" class="monthSelector"><img src="images/record/calendar/back_on.gif" alt="Previous Month" /></a>';
		}		
	}
	else if((Year == yearMin) && (Month > monthMin)){
		calendarHTML += '<a href="javascript:showCalendar(' + (Month - 1) + ',' + Year + ', false' + strShowCalendarConstants + ');" class="monthSelector"><img src="images/record/calendar/back_on.gif" alt="Previous Month" /></a>';
	}
	else {
		calendarHTML += '<img src="images/record/calendar/back_off.gif" alt="" />';
	}
	calendarHTML += '<td colspan="' + (daysWeek -4) + '" align="center"><strong>';
	calendarHTML += arrMonths[Month]  + '&nbsp;' + Year + '</strong>' + tdEnd + '<td align="right" colspan="2">';
	//forward month button
	if(Year < yearMax) {
		if(Month == 11){
			calendarHTML += '<a href="javascript:showCalendar(0,' + (Year + 1) + ', false' + strShowCalendarConstants + ');" class="monthSelector"><img src="images/record/calendar/forward_on.gif" alt="Next Month" /></a>';
		}else{
			calendarHTML += '<a href="javascript:showCalendar(' + (Month + 1) + ',' + Year + ', false' + strShowCalendarConstants + ');" class="monthSelector"><img src="images/record/calendar/forward_on.gif" alt="Next Month" /></a>';
		}		
	}	
	else if((Year == yearMax) && (Month < monthMax)){
		calendarHTML += '<a href="javascript:showCalendar(' + (Month + 1) + ',' + Year + ', false' + strShowCalendarConstants + ');" class="monthSelector"><img src="images/record/calendar/forward_on.gif" alt="Next Month" /></a>';
	}
	else{
		calendarHTML += '<img src="images/record/calendar/forward_off.gif" alt="" />';
	}
	calendarHTML += '</td>' + trEnd + trStart;

	//loop to print each day of the week
	for(i=0; i < daysWeek; i++){
		calendarHTML += '<td style="text-align:center;border-bottom:1px solid #ddd;">' + arrDays[i] + tdEnd;
	}
	calendarHTML += tdEnd + trEnd;
	calendarHTML += trStart;

	// fills in empty table cells until first of month
	for(i=1; i < Calendar.getDay(); i++){
		calendarHTML += tdStart + '&nbsp;' + tdEnd;
	}

	// loop for each day in month
	for(i=0; i < daysMonth; i++){
		if( Calendar.getDate() > i ){
			week_day=Calendar.getDay();
			if(week_day == 1) {
				calendarHTML += trStart;
			}
			if(week_day != daysWeek){
				var day  = Calendar.getDate();
				if(day < 10){
					var insertDay = '0' + day;
				}else{
					var insertDay = day;
				}
				if(Month < 9){
					var insertMonth = '0' + (Month + 1);
				}else{
					var insertMonth = (Month + 1);
				}
				// show link or static date		
				if((Calendar < dateDateStart || Calendar > dateDateEnd) || (Calendar > dateDateToday)){
					calendarHTML += tdStart + '<span style="color:#ccc">' + day + '</span>' + tdEnd;
				}else{
					calendarHTML += tdStart + '<a href="javascript:insertDate(\'' + insertDay + '/' + insertMonth + '/' + Year + '\', \'' + Target + '\', \'' + CalendarID + '\')">' + day + '</a>' + tdEnd;
				}
			}
			if(week_day == daysWeek){
				calendarHTML += trEnd;
			}
		}
		Calendar.setDate(Calendar.getDate()+1);
	}
	calendarHTML += '</td></tr></table>';
	calendarDIV.style.visibility = 'visible';
	calendarDIV.innerHTML = calendarHTML;
}

function insertDate(SelectedDate, Target, CalendarID){
	document.getElementById(Target).value = SelectedDate;
	//hideCalendar(CalendarID);
}

function hideCalendar(CalendarID)
{
	document.getElementById(CalendarID).style.visibility = 'hidden';
}


//Returns a JS date from a UK date string (dd/MM/yyyy)
function jsDate(DateString)
{
	var arrDatePart = DateString.split('/');	
	var dateReturn = new Date(parseInt(arrDatePart[2],10),(parseInt(arrDatePart[1],10)-1),parseInt(arrDatePart[0],10));
	return dateReturn;
}
