

function CalendarControl() {

  var calendarId = 'CalendarControl';
  var currentYear = 0;
  var currentMonth = 0;
  var currentDay = 0;

  var selectedYear = 0;
  var selectedMonth = 0;
  var selectedDay = 0;

  var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
  var dateField = null;




  function getDaysInMonth(year, month) {
    return [31,((!(year % 4 ) && ( (year % 100 ) || !( year % 400 ) ))?29:28),31,30,31,30,31,31,30,31,30,31][month-1];
  }

  function getDayOfWeek(year, month, day) {
    var date = new Date(year,month-1,day)
    return date.getDay();
  }


  this.calendarDrawNav = calendarDrawNav;
  function calendarDrawNav(year, month, day) {
	var prevDate;
	var nextDate;
	var prevDateString;
	var nextDateString;
	var currDateString;

	for ( var i=0; i<eventDates.length; i++ ) {
		if ( eventDates[i] == (year + month + day) ) {
			if ( i > 0 ) {
				prevDate = new Date();
			//	prevDate.setMonth( parseInt(eventDates[i-1].substring(4,5)=='0'?eventDates[i-1].substring(5,6) : eventDates[i-1].substring(4,6) ) - 1 );
				//prevDate.setDate(eventDates[i-1].substring(6,8));
				prevDate.setFullYear(eventDates[i-1].substring(0,4),  parseInt(eventDates[i-1].substring(4,5)=='0'?eventDates[i-1].substring(5,6) : eventDates[i-1].substring(4,6) ) - 1 ,eventDates[i-1].substring(6,8) );	
				prevDateString = eventDates[i-1];	
			}
			if ( i < eventDates.length - 1 ) { 
				nextDate = new Date();
				//nextDate.setDate(eventDates[i+1].substring(6,8));
				//nextDate.setMonth( parseInt(eventDates[i+1].substring(4,5)=='0'?eventDates[i+1].substring(5,6) : eventDates[i+1].substring(4,6) ) - 1 );
				nextDate.setFullYear(eventDates[i+1].substring(0,4), parseInt(eventDates[i+1].substring(4,5)=='0'?eventDates[i+1].substring(5,6) : eventDates[i+1].substring(4,6) ) - 1,eventDates[i+1].substring(6,8) );	
				nextDateString = eventDates[i+1];
			}
		break;
		}
	}
	
	var currDate = new Date();
	//currDate.setDate(day);
	//currDate.setMonth(month-1);
	currDate.setFullYear(year, month-1, day);
	
	var retVal = "<table border='0' cellpadding='0' cellspacing='1' class='smtext2' >";
	   retVal += "	<tr valign='top'>";
	   if ( prevDateString != null ) {
			retVal += "		<td><<&nbsp;</td>";
			retVal += "		<td NOWRAP><a href='?Year="+prevDateString.substring(0,4)+"&Period="+prevDateString.substring(4,8)+"&CurrentSeason="+SelectedSeason+"#1'>"+formatDate(prevDate,'E, NNN d')+"</a>&nbsp;&nbsp;</td>";
	   }
	   retVal += "      <td NOWRAP><li><b>"+formatDate(currDate,'E, NNN d')+"&nbsp;&nbsp;</b></li></td>";
	   if ( nextDateString != null ) {
			retVal += "      <td NOWRAP><li><a href='?Year="+nextDateString.substring(0,4)+"&Period="+nextDateString.substring(4,8)+"&CurrentSeason="+SelectedSeason+"#1'>"+formatDate(nextDate,'E, NNN d')+"</a>&nbsp</li></td><td>>></td>";
	   }
	   var dateNow = new Date();
		var currentTimeString = dateNow.getHours() +""+ (dateNow.getMinutes() < 10 ? "0" + dateNow.getMinutes() : dateNow.getMinutes());
	   
	   var homeDate = new Date();
	   currDateString = homeDate.getFullYear() + ( homeDate.getMonth() < 10 ? "0"+ (homeDate.getMonth()+1) : homeDate.getMonth()+1 ) + "" + (homeDate.getDate() < 10 ? "0" + homeDate.getDate() : homeDate.getDate() );
	   if ( currDate.toString() != dateNow.toString() ) { 
			retVal += "      <td NOWRAP>&nbsp;&nbsp;<a href='?Year="+currDateString.substring(0,4)+"&Period="+currDateString.substring(4,8)+"&CurrentSeason="+SelectedSeason+"#1'>Today</a></td>";
	   }
	   
	   retVal += "	</tr>";
	   retVal += "</table>";

	return retVal;
  }


  this.calendarDrawTable = calendarDrawTable;
  function calendarDrawTable(year, month, day, eventDates) {

	var nowDate = new Date();
	nowDateString = nowDate.getFullYear() + ( nowDate.getMonth() < 10 ? "0"+ (nowDate.getMonth()+1) : nowDate.getMonth()+1 ) + "" + (nowDate.getDate() < 10 ? "0" + nowDate.getDate() : nowDate.getDate() );

    currentMonth = month;
    currentDay = day;
    currentYear = year;
    var dayOfMonth = 1;
    var validDay = 0;
    var startDayOfWeek = getDayOfWeek(currentYear, currentMonth, dayOfMonth);
    var daysInMonth = getDaysInMonth(currentYear, currentMonth);
    var css_class = null; //CSS class for each day

	var nextYear = year;
	var prevYear = year;
	var prevMonth = month - 1;
	if ( prevMonth < 1 ) { 
		prevMonth = 12 
		nextYear--;
	} else if ( prevMonth < 10 ) {  
		prevMonth = '0' + prevMonth;
	}
	if ( month.substring(0,1)=="0" ) {
		month = month.substring(1,2);
	}
	var nextMonth = parseInt(month) + 1;
	if ( nextMonth > 12 ) { 
		nextMonth = '01'; 
		prevYear++;
	} else if ( nextMonth < 10 ) {
		nextMonth = '0' + nextMonth;
	}
	
    var table = "<div class='calendar'><table width='100%' cellpadding='1' cellspacing='1' bgcolor='#CCCCCC' class='smtext'  ID='Table1'>";
    table = table + "<tbody><tr class='datahead'>";
    table = table + "  <td colspan='7' align='center'><strong><a href='?Year="+nextYear+"&Period="+prevMonth+"00&CurrentSeason="+SelectedSeason+"#'>&lt;&lt;</a>&nbsp;&nbsp;" + months[currentMonth-1] + " " + currentYear + "&nbsp;&nbsp; <a href='?Year="+prevYear+"&Period="+nextMonth+"00'>&gt;&gt;</a></strong></td>";
    table = table + "</tr>";
    table = table + "<tr bgcolor='#FFFFFF' >"
    table = table + "  <th width='15%'><strong>S</strong></th>"
    table = table + "  <th width='14%'><strong>M</strong></th>"
    table = table + "  <th width='14%'><strong>T</strong></th>"
    table = table + "  <th width='14%'><strong>W</strong></th>"
    table = table + "  <th width='14%'><strong>T</strong></th>"
    table = table + "  <th width='14%'><strong>F</strong></th>"
    table = table + "  <th width='15%'><strong>S</strong></th>"
    table = table + "</tr>"


    for(var week=0; week < 6; week++) {
      table = table + "<tr align='center' bgcolor='#FFFFFF' >";
      for(var dayOfWeek=0; dayOfWeek < 7; dayOfWeek++) {
        if(week == 0 && startDayOfWeek == dayOfWeek) {
          validDay = 1;
        } else if (validDay == 1 && dayOfMonth > daysInMonth) {
          validDay = 0;
        }

        if(validDay) {
          if (dayOfWeek == 0 || dayOfWeek == 6) {
            css_class = 'weekend';
          } else {
            css_class = 'weekday';
          }

			var found = false;
			var currDate = year + (month<10?"0"+month:month) + (dayOfMonth<10?"0"+dayOfMonth:dayOfMonth);
		  	for ( var i=0; i<eventDates.length; i++ ) {
				if ( eventDates[i] == currDate ) {
					found = true;
				break;
				}
			}
			
		  if ( found == false ) {
			table = table + "<td>"+dayOfMonth+"</td>";
		  } else {
			if ( dayOfMonth == Period.substring(2,4) ) {
				table = table + "<td align='center' style='text-align: center' class='datahead'><FONT COLOR='#000000' ><B>"+dayOfMonth+"</B></FONT></td>";
			} else {
				table = table + "<td><a href='?Year="+year+"&Period="+(month<10?"0"+month:month)+(dayOfMonth<10?"0"+dayOfMonth:dayOfMonth)+"&CurrentSeason="+SelectedSeason+"#"+year+"-"+(month<10?"0"+month:month)+"-"+(dayOfMonth<10?"0"+dayOfMonth:dayOfMonth)+"'>"+dayOfMonth+"</a></td>";
			}
		  }
          dayOfMonth++;
        } else {
          table = table + "<td>&nbsp;</td>";
        }
      }
      table = table + "</tr>";
    }

    table = table + "</tbody></table></div>";

    return table;


  }
}

var calendarControl = new CalendarControl();

	var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
	function LZ(x) {return(x<0||x>9?"":"0")+x}


function formatDate(date,format) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
	}


function drawCalendar(year, month, day) {
  return calendarControl.calendarDrawTable(year, month, day, eventDates);
}

function drawCalendarNavigation( year, month, day ) {
	return calendarControl.calendarDrawNav(year, month, day );
}

