/* * Date picker plugin for jQuery * http://kelvinluck.com/assets/jquery/datePicker * * Copyright (c) 2006 Kelvin Luck (kelvinluck.com) * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php * * $LastChangedDate: 2007-03-23 01:10:50 +0000 (Fri, 23 Mar 2007) $ * $Rev: 1566 $ */ jQuery.datePicker = function() { // so that firebug console.log statements don't break IE if (window.console == undefined) { window.console = {log:function(){}}; } // var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; // var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; // var navLinks = {p:'Prev', n:'Next', c:'Close', b:'Choose date'}; var months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь']; var days = ['Воскрессенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота']; var daysShort = ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб']; var navLinks = {p:'Пред', n:'След', c:'Закрыть', b:'Выбрать дату'}; var dateFormat = 'dmy'; var dateSeparator = "/"; var _drawingMonth = true; var _firstDayOfWeek = 1; var firstDayOfWeek = 1; var _firstDate = "01/01/2000"; var startDate = "01/01/2000"; var _lastDate; var _selectedDate; var _openCal; var _zeroPad = function(num) { var s = '0'+num; return s.substring(s.length-2) //return ('0'+num).substring(-2); // doesn't work on IE :( }; var _strToDate = function(dIn) { switch (dateFormat) { case 'ymd': dParts = dIn.split(dateSeparator); return new Date(dParts[0], Number(dParts[1])-1, dParts[2]); case 'dmy': dParts = dIn.split(dateSeparator); return new Date(dParts[2], Number(dParts[1])-1, Number(dParts[0])); case 'dmmy': dParts = dIn.split(dateSeparator); for (var m=0; m<12; m++) { if (dParts[1].toLowerCase() == months[m].substr(0,3).toLowerCase()) { return new Date(Number(dParts[2]), m, Number(dParts[0])); } } return undefined; case 'mdy': default: var parts = parts ? parts : [2, 1, 0]; dParts = dIn.split(dateSeparator); return new Date(dParts[2], Number(dParts[0])-1, Number(dParts[1])); } }; var _dateToStr = function(d) { var dY = d.getFullYear(); var dM = _zeroPad(d.getMonth()+1); var dD = _zeroPad(d.getDate()); switch (dateFormat) { case 'ymd': return dY + dateSeparator + dM + dateSeparator + dD; case 'dmy': return dD + dateSeparator + dM + dateSeparator + dY; case 'dmmy': return dD + dateSeparator + months[d.getMonth()].substr(0,3) + dateSeparator + dY; case 'mdy': default: return dM + dateSeparator + dD + dateSeparator + dY; } }; var _getCalendarDiv = function(dIn) { var today = new Date(); if (dIn == undefined) { // start from this month. d = new Date(today.getFullYear(), today.getMonth(), 1); } else { // start from the passed in date d = dIn; 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 jCalDiv = jQuery("
").attr('class','popup-calendar'); var firstMonth = true; var firstDate = _firstDate.getDate(); // create prev and next links var prevLinkDiv = ''; if (!(d.getMonth() == _firstDate.getMonth() && d.getFullYear() == _firstDate.getFullYear())) { // not in first display month so show a previous link firstMonth = false; var lastMonth = d.getMonth() == 0 ? new Date(d.getFullYear()-1, 11, 1) : new Date(d.getFullYear(), d.getMonth()-1, 1); var prevLink = jQuery("").attr('href', 'javascript:;').html(navLinks.p).click(function() { jQuery.datePicker.changeMonth(lastMonth, this); return false; }); prevLinkDiv = jQuery("
").attr('class','link-prev').html('<').append(prevLink); } var finalMonth = true; var lastDate = _lastDate.getDate(); nextLinkDiv = ''; 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 nextLink = jQuery("").attr('href', 'javascript:;').html(navLinks.n).click(function() { jQuery.datePicker.changeMonth(nextMonth, this); return false; }); nextLinkDiv = jQuery("
").attr('class','link-next').html('>').prepend(nextLink); } var closeLink = jQuery("").attr('href','javascript:;').html(navLinks.c).click(function() { jQuery.datePicker.closeCalendar(); }); jCalDiv.append( jQuery("
").attr('class', 'link-close').append(closeLink), jQuery("

").html(months[d.getMonth()] + ' ' + d.getFullYear()) ); var headRow = jQuery(""); for (var i=_firstDayOfWeek; i<_firstDayOfWeek+7; i++) { var weekday = i%7; var day = days[weekday]; var dayShort = daysShort[weekday]; headRow.append( jQuery("").attr({'scope':'col', 'abbr':day, 'title':day, 'class':(weekday == 0 || weekday == 6 ? 'weekend' : 'weekday')}).html(dayShort) ); } 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 = (new Date()).getDate(); var thisMonth = d.getMonth() == today.getMonth() && d.getFullYear() == today.getFullYear(); var w = 0; while (w++<6) { var thisRow = jQuery(""); for (var i=0; i<7; i++) { var weekday = (_firstDayOfWeek + i) % 7; var atts = {'class':(weekday == 0 || weekday == 6 ? 'weekend ' : 'weekday ')}; 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); var dStr = _dateToStr(d); dayStr = jQuery("").attr({'href':'javascript:;', 'rel':dStr}).html(curDay+1).click(function(e) { jQuery.datePicker.selectDate(jQuery.attr(this, 'rel'), this); return false; })[0]; if (_selectedDate && _selectedDate==dStr) { jQuery(dayStr).attr('class','selected'); } } if (thisMonth && curDay+1 == todayDate) { atts['class'] += 'today'; } thisRow.append(jQuery("").attr(atts).append(dayStr)); curDay++; } tBody.append(thisRow); } jCalDiv.append( jQuery("
").attr('cellspacing',2).append("") .find("thead").append(headRow).parent().append(tBody.children()) ).append(prevLinkDiv).append(nextLinkDiv); /* if (jQuery.browser.msie) { // we put a styled iframe behind the calendar so HTML SELECT elements don't show through var iframe = [ '