/**
* jCalendar 0.5
*
* Some code based on jQuery Date Picker (http://kelvinluck.com/assets/jquery/datePicker/)
*
* Copyright (c) 2007 Theodore Serbinski (http://tedserbinski.com)
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
*/
jQuery.jcalendar = function() {
var months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
var days = ['В', 'П', 'В', 'С', 'Ч', 'П', 'С'];
var navLinks = {t:'Сегодня'};
var _firstDayOfWeek;
var _firstDate;
var _lastDate;
var _drawCalendar = function(dateIn, a, day, month, year) {
var today = new Date();
var d;
var emptyT = '
';
var emptyTc = ' ';
var emptyTc2 = ' ';
if (dateIn == undefined) {
// start from this month.
d = new Date(today.getFullYear(), today.getMonth(), 1);
}
else {
d = dateIn;
d.setDate(1);
}
// check that date is within allowed limits
if ((d.getMonth() < _firstDate.getMonth() && d.getFullYear() == _firstDate.getFullYear()) || d.getFullYear() < _firstDate.getFullYear()) {
d = new Date(_firstDate.getFullYear(), _firstDate.getMonth(), 1);
}
else if ((d.getMonth() > _lastDate.getMonth() && d.getFullYear() == _lastDate.getFullYear()) || d.getFullYear() > _lastDate.getFullYear()) {
d = new Date(_lastDate.getFullYear(), _lastDate.getMonth(), 1);
}
var firstMonth = true;
var firstDate = _firstDate.getDate();
// create prev and next links
if (!(d.getMonth() == _firstDate.getMonth() && d.getFullYear() == _firstDate.getFullYear())) {
// not in first display month so show a previous link
firstMonth = false;
//var prevMonthLinkVal = d.getMonth() ? d.getMonth() - 1 : 11;
var lastMonth = d.getMonth() == 0 ? new Date(d.getFullYear()-1, 11, 1) : new Date(d.getFullYear(), d.getMonth()-1, 1);
/*var prevLink = jQuery('' + months[prevMonthLinkVal] + ' ').click(function() {
jQuery.jcalendar.changeMonth(lastMonth, this, day, month, year);
return false;
});*/
/*var cPrevYear = prevMonthLinkVal == 11 ? d.getFullYear()-1:d.getFullYear();
if((eventsObj[parseInt(cPrevYear)] == undefined || eventsObj[parseInt(cPrevYear)] != undefined) &&
eventsObj[parseInt(cPrevYear)][parseInt(prevMonthLinkVal+1)] == undefined) {
$('a', prevLink).addClass("notactive");
}*/
} else {
prevLink = emptyTc;
}
var finalMonth = true;
var lastDate = _lastDate.getDate();
if (!(d.getMonth() == _lastDate.getMonth() && d.getFullYear() == _lastDate.getFullYear())) {
// in the last month - no next link
finalMonth = false;
/*var nextMonth = new Date(d.getFullYear(), d.getMonth()+1, 1);
var nextMonthLinkVal = (d.getMonth()+1)%12;
var nextLink = jQuery(''+ months[nextMonthLinkVal] + ' ').click(function() {
jQuery.jcalendar.changeMonth(nextMonth, this, day, month, year);
return false;
});*/
/* var cNextYear = nextMonthLinkVal == 0 ? d.getFullYear()+1:d.getFullYear();
if((eventsObj[parseInt(cNextYear)] == undefined || eventsObj[parseInt(cNextYear)] != undefined) &&
eventsObj[parseInt(cNextYear)][parseInt(nextMonthLinkVal+1)] == undefined) {
$('a', nextLink).addClass("notactive");
}*/
} else {
nextLink = emptyTc2;
}
var headRow = jQuery(" ");
for (var i=_firstDayOfWeek; i<_firstDayOfWeek+7; i++) {
var weekday = i%7;
var wordday = days[weekday];
headRow.append(''+ wordday +' ');
}
headRow.append(" ");
headRow = jQuery(" ").append(headRow);
var tBody = jQuery(" ");
var lastDay = (new Date(d.getFullYear(), d.getMonth()+1, 0)).getDate();
var curDay = _firstDayOfWeek - d.getDay();
if (curDay > 0) curDay -= 7;
var todayDate = today.getDate();
var thisMonth = d.getMonth() == today.getMonth() && d.getFullYear() == today.getFullYear();
do {
var thisRow = jQuery(" ");
thisRow.append(emptyT);
for (var i=0; i<7; i++) {
var weekday = (_firstDayOfWeek + i) % 7;
var atts = {'class':(weekday == 0 || weekday == 6 ? 'weekend ' : 'weekday ')};
/*
if(moonDays[parseInt(d.getFullYear())] != undefined &&
moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined &&
moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
if (thisMonth && curDay+1 != todayDate && eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] == undefined)
atts['class'] +=moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1];
}
*/
if (curDay < 0 || curDay >= lastDay) {
dayStr = ' ';
}
else if (firstMonth && curDay < firstDate-1) {
dayStr = curDay+1;
atts['class'] += 'inactive';
}
else if (finalMonth && curDay > lastDate-1) {
dayStr = curDay+1;
atts['class'] += 'inactive';
}
else {
d.setDate(curDay+1);
if(eventsObj[parseInt(d.getFullYear())] != undefined &&
eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined &&
eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined) {
if(moonDays[parseInt(d.getFullYear())] != undefined &&
moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined &&
moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
span_class=moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1];
dayStr = jQuery(''+ (curDay+1) +' ');
} else {
dayStr = jQuery(''+ (curDay+1) +' ');
}
} else {
if(moonDays[parseInt(d.getFullYear())] != undefined &&
moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] != undefined &&
moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
span_class=moonDays[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1];
dayStr = jQuery(''+ (curDay+1) +' ');
} else {
dayStr = jQuery(''+ (curDay+1) +' ');
}
}
}
if (thisMonth && curDay+1 == todayDate) {
atts['class'] += ' today';
if (eventsObj.__count__ == undefined || eventsObj.__count__==0)
{
dayStr = jQuery('' + (curDay+1) + ' ');
}else{
if (eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)] == undefined){
dayStr = jQuery('' + (curDay+1) + ' ');
}else{
if (eventsObj[parseInt(d.getFullYear())][parseInt(d.getMonth()+1)][curDay+1] != undefined){
dayStr = jQuery('' + (curDay+1) + ' ');
}else{
dayStr = jQuery('' + (curDay+1) + ' ');
}
}
}
}
thisRow.append(jQuery(" ").attr(atts).append(dayStr));
curDay++;
}
thisRow.append(emptyT);
tBody.append(thisRow);
} while (curDay < lastDay);
/*
var todayLinkVal = '' + months[d.getMonth()] +' '+ d.getFullYear();
var tFoot = jQuery(" ");
var tFootRow = jQuery(" ").append(prevLink).append(nextLink);
tFoot.append(tFootRow);*/
/* months list */
//chMonth = new Date(d.getFullYear(), d.getMonth()-1, 1);
//chMonth = new Date(d.getFullYear(), 3, 1);
var mList = jQuery(' ').change(function(){
chDate = new Date(d.getFullYear(), $(this).val(), 1);
jQuery.jcalendar.changeMonth(chDate, this, day, month, year);
return false;
});;
//var mList = jQuery(' ');
var msele = "";
for (var i=0; i' + months[i] + '\n';
}else{
msele += '' + months[i] + ' \n';
}
}
mList.append(msele);
/* months list */
/* years list */
var yList = jQuery(' ').change(function(){
chDate = new Date($(this).val(), d.getMonth(), 1);
jQuery.jcalendar.changeMonth(chDate, this, day, month, year);
return false;
});;
//var yList = jQuery(' ');
var ysele = "";
for (i in eventsObj){
if (d.getFullYear() == i){
ysele += '' + i + ' \n';
}else{
ysele += '' + i + ' \n';
}
}
yList.append(ysele);
/* years list */
jQuery('div.jcalendar').html('');
jQuery('div.jcalendar .jtab .jtabTD').html('');
//jQuery('div.jcalendar').html('
');
jQuery('div.jcalendar .jpick div').append(mList,yList);
jQuery('div.jcalendar .jpick div').append('
');
//jQuery('div.jcalendar .cur-month').append(todayLinkVal);
//jQuery('div.jcalendar table.jcal').append(headRow,tFoot,tBody);
jQuery('div.jcalendar table.jcal').append(headRow,tBody);
};
return {
show: function(a) {
_firstDate = a._startDate;
_lastDate = a._endDate;
_firstDayOfWeek = a._firstDayOfWeek;
// pass in the selected form date if one was set
var selected;
_drawCalendar(selected, a);
},
changeMonth: function(d, e) {
_drawCalendar(d, e);
},
setLanguageStrings: function(aDays, aMonths, aNavLinks) {
days = aDays;
months = aMonths;
navLinks = aNavLinks;
},
setDateWindow: function(i, w) {
if (w == undefined) w = {};
dateParts = w.startDate.split('-');
i._startDate = new Date(dateParts[2], Number(dateParts[1])-1, Number(dateParts[0]));
dateParts = w.endDate.split('-');
i._endDate = new Date(dateParts[2], Number(dateParts[1])-1, Number(dateParts[0]));
i._firstDayOfWeek = w.firstDayOfWeek == undefined ? 1 : w.firstDayOfWeek;
}
};
}();
jQuery.fn.jcalendar = function(a) {
this.each(function() {
$('div.jcalendar-selects').after('
');
jQuery.jcalendar.setDateWindow(this, a);
jQuery.jcalendar.show(this);
});
return this;
};