Kræver core extensions du kan finde her.
function createCalendar(element, monthChangeCallback, dateClickCallback) {
var _element = element;
var _selectedDates = [];
var _currentMonth = new Date().getMonth();
var _currentYear = new Date().getFullYear();
var _initContainer = function() {
var html = "<table cellspacing='0' class='RadCalendar RadCalendar_Sunset'><tr class='rcTitlebar'><th><a class='rcPrev' title='<'></a></th><th colspan='6'>{0} {1}</th><th><a class='rcNext' title='>'></a></th></tr>".format(Globals.monthNames()[_currentMonth].capitalize(), _currentYear);
html += "<tr class='rcWeek'><th> </th><th>M</th><th>T</th><th>O</th><th>T</th><th>F</th><th>L</th><th>S</th></tr></table>";
var $container = $(html);
$container.find("a:first").click(function() { _obj.movePrevious(); });
$container.find("a:last").click(function() { _obj.moveNext(); });
return $container;
};
var _isSelectedDate = function(date) {
var found = false;
for (var i = 0; i < _selectedDates.length; i++) {
if (date.getFullYear() == _selectedDates[i][0] && date.getMonth() == _selectedDates[i][1] && date.getDate() == _selectedDates[i][2])
found = true;
}
return found;
};
var _getWeight = function(date) {
var weight = 0;
for (var i = 0; i < _selectedDates.length; i++) {
if (date.getFullYear() == _selectedDates[i][0] && date.getMonth() == _selectedDates[i][1] && date.getDate() == _selectedDates[i][2])
weight = _selectedDates[i][3];
}
return weight;
}
var _render = function() {
$container = _initContainer();
var $tbody = $container.find("tbody");
var startOfMonth = new Date(_currentYear, _currentMonth, 1);
var $tr = $("<tr class='rcRow'></tr>");
$tr.append("<th>{0}</th>".format(startOfMonth.getWeek()));
var dayNr = (startOfMonth.getDay() + 6) % 7;
if (dayNr > 0)
$tr.append("<td colspan='{0}'> </td>".format(dayNr));
for (var d = startOfMonth; d.getMonth() == _currentMonth; d = d.addDays(1)) {
if (d.getDay() == 1 && d.getDate() != 1)
$tr.append("<th>{0}</th>".format(d.getWeek()));
var $td = $("<td>{0}</td>".format(d.getDate()));
if (_isSelectedDate(d)) {
if (_getWeight(d) > 1)
$td.addClass("rcSelectedExt");
else
$td.addClass("rcSelected");
$td.attr("data", d.getTime());
if (dateClickCallback)
$td.click(function() {
$("td").removeClass("rcActive");
$(this).addClass("rcActive");
dateClickCallback($(this).attr("data"));
});
}
if (d.isToday())
$td.css("border", "solid 1px gray");
$tr.append($td);
if (d.getDay() == 0) {
$tbody.append($tr);
$tr = $("<tr class='rcRow'></tr>");
}
}
if ($tr.html())
$tbody.append($tr);
$(_element).empty();
$(_element).append($container);
};
var _raiseMonthChagedAndClickOnFirst = function() {
if (monthChangeCallback)
monthChangeCallback(_currentYear, _currentMonth);
var firstDay = new Date(_currentYear, _currentMonth, 1);
if (firstDay.isPast())
firstDay.setDate(new Date().getDate());
if (dateClickCallback)
dateClickCallback(firstDay.getTime());
};
var _obj = {
addDate: function(date, count) {
_selectedDates.push([date.getFullYear(), date.getMonth(), date.getDate(), count || 1]);
},
refresh: function() {
_render();
},
clearSelected: function() {
_selectedDates = [];
},
setMonth: function(month, year) {
_currentMonth = month;
_currentYear = year || new Date().getFullYear();
_raiseMonthChagedAndClickOnFirst();
_render();
},
moveNext: function() {
if (_currentMonth > 10) {
_currentYear++;
_currentMonth = 0;
}
else
_currentMonth++;
_raiseMonthChagedAndClickOnFirst();
_render();
},
movePrevious: function() {
if (_currentMonth < 1) {
_currentYear--;
_currentMonth = 11;
}
else
_currentMonth--;
_raiseMonthChagedAndClickOnFirst();
_render();
}
};
return _obj;
}