function filterDates(lowerLimit, calendarObject) {
	lowerLimit.setHours(0,0,0,0);
		
	//Disable dates before today
	var allVisibleDays = calendarObject[0].component.days;
	for (var index = 0; index < allVisibleDays.length; ++index) {
		var daydata = allVisibleDays[index];
		var daydataId = $(daydata.elementId);
		if (daydata.date < lowerLimit) {
			daydata.enabled = false;
			daydataId.addClassName("rich-calendar-disabled-date");
			daydataId.removeClassName("rich-calendar-btn");
		} else {
			daydata.enabled = true;
			daydataId.removeClassName("rich-calendar-disabled-date");
			daydataId.addClassName("rich-calendar-btn");				
		}
	}
}

//If a date is not in inclusive range of (lowerLimit - upperLimt) then disable it otherwise enable it
function filterRangeDates(lowerLimit, upperLimit, calendarObject) {	
	// If no upper limit specified then use date in future as upper limit
	if(upperLimit == null) {
		upperLimit = new Date()
		upperLimit.setYear(9999);		
	}
	upperLimit.setHours(0,0,0,0);
	lowerLimit.setHours(0,0,0,0);
	
	var allVisibleDays = calendarObject[0].component.days;
	for (var index = 0; index < allVisibleDays.length; ++index) {
		var daydata = allVisibleDays[index];
		var daydataId = $(daydata.elementId);
		if ((daydata.date < lowerLimit) || (daydata.date > upperLimit)) {
			daydata.enabled = false;
			daydataId.addClassName("rich-calendar-disabled-date");
			daydataId.removeClassName("rich-calendar-btn");
		} else {
			daydata.enabled = true;
			daydataId.removeClassName("rich-calendar-disabled-date");
			daydataId.addClassName("rich-calendar-btn");				
		}
	}	
}

document.observe('classStartDate:expanded', function() {
	var lowerLimit = new Date();
	lowerLimit.setDate(lowerLimit.getDate()-14);
	filterRangeDates(lowerLimit, $$('.comprehensive-end-dates-calendar')[0].component.getSelectedDate(), $$('.comprehensive-start-dates-calendar'));						
});

// End date >= start date. If no start date is selected then end date >= today
document.observe('classEndDate:expanded', function() {
	var lowerLimit = $$('.comprehensive-start-dates-calendar')[0].component.getSelectedDate();
	var today = new Date();	
	if((lowerLimit == null) || (lowerLimit < today)) {
		lowerLimit = today;		
	}	
	filterDates(lowerLimit, $$('.comprehensive-end-dates-calendar'));			
});

document.observe('comprehensiveTestDate:expanded', function() {	
	filterDates(new Date(), $$('.comprehensive-test-dates-calendar'));							
});

document.observe('eventsTestDate:expanded', function() {	
	filterDates(new Date(), $$('.events-test-dates-calendar'));							
});

document.observe('eventsStartDate:expanded', function() {	
	filterRangeDates(new Date(), $$('.events-end-dates-calendar')[0].component.getSelectedDate(), $$('.events-start-dates-calendar'));							
});

// End date >= start date. If no start date is selected then end date >= today
document.observe('eventsEndDate:expanded', function() {
	var lowerLimit = $$('.events-start-dates-calendar')[0].component.getSelectedDate();
	var today = new Date();	
	if((lowerLimit == null) || (lowerLimit < today)) {
		lowerLimit = today;		
	}	
	filterDates(lowerLimit, $$('.events-end-dates-calendar'));			
});

document.observe('enrollTabClassStartDate:expanded', function() {
	var lowerLimit = new Date();
	lowerLimit.setDate(lowerLimit.getDate()-14);
	filterRangeDates(lowerLimit, $$('.enroll-tab-end-dates-calendar')[0].component.getSelectedDate(), $$('.enroll-tab-start-dates-calendar'));						
});

// End date >= start date. If no start date is selected then end date >= today
document.observe('enrollTabClassEndDate:expanded', function() {
	var lowerLimit = $$('.enroll-tab-start-dates-calendar')[0].component.getSelectedDate();
	var today = new Date();	
	if((lowerLimit == null) || (lowerLimit < today)) {
		lowerLimit = today;		
	}	
	filterDates(lowerLimit, $$('.enroll-tab-end-dates-calendar'));			
});

document.observe('enrollTabTestDate:expanded', function() {	
	filterDates(new Date(), $$('.enroll-tab-test-dates-calendar'));							
});
