/* +-------------------------------------------------------------------+ | H T M L - C A L E N D A R (v2.5) | | | | Copyright Gerd Tentler www.gerd-tentler.de/tools | | Created: May 27, 2003 Last modified: Dec. 22, 2006 | +-------------------------------------------------------------------+ | This program may be used and hosted free of charge by anyone for | | personal purpose as long as this copyright notice remains intact. | | | | Obtain permission before selling the code for this program or | | hosting this software on a commercial website or redistributing | | this software over the Internet or in any other medium. In all | | cases copyright must remain intact. | +-------------------------------------------------------------------+ EXAMPLE #1: myCal = new CALENDAR(); document.write(myCal.create()); EXAMPLE #2: myCal = new CALENDAR(2004, 12); document.write(myCal.create()); EXAMPLE #3: myCal = new CALENDAR(); myCal.year = 2004; myCal.month = 12; document.write(myCal.create()); Returns HTML code ========================================================================================================== */ var cal_ID = 0; function CALENDAR(year, month) { //======================================================================================================== // Configuration //======================================================================================================== this.tFontFace = 'Arial, Helvetica'; // title: font family (CSS-spec, e.g. "Arial, Helvetica") this.tFontSize = 14; // title: font size (pixels) this.tFontColor = '#362f2d'; // title: font color this.tBGColor = '#c6b9a4'; // title: background color this.hFontFace = 'Arial, Helvetica'; // heading: font family (CSS-spec, e.g. "Arial, Helvetica") this.hFontSize = 12; // heading: font size (pixels) this.hFontColor = '#362f2d'; // heading: font color this.hBGColor = '#c6b9a4'; // heading: background color this.dFontFace = 'Arial, Helvetica'; // days: font family (CSS-spec, e.g. "Arial, Helvetica") this.dFontSize = 14; // days: font size (pixels) this.dFontColor = '#FFFFFF'; // days: font color this.dBGColor = '#9d0a0e'; // days: background color this.wFontFace = 'Arial, Helvetica'; // weeks: font family (CSS-spec, e.g. "Arial, Helvetica") this.wFontSize = 12; // weeks: font size (pixels) this.wFontColor = '#FFFFFF'; // weeks: font color this.wBGColor = '#304B90'; // weeks: background color this.saFontColor = '#FFFFFF'; // Saturdays: font color this.saBGColor = '#9d0a0e'; // Saturdays: background color this.suFontColor = '#FFFFFF'; // Sundays: font color this.suBGColor = '#9d0a0e'; // Sundays: background color this.tdFontColor = '#FFFFFF'; // today: font color this.tdBGColor = '#f7941d'; // today: background color this.borderColor = ''; // border color this.hilightColor = '#f7941d'; // hilight color (works only in combination with link) this.link = ''; // page to link to when day is clicked this.offset = 1; // week start: 0 - 6 (0 = Saturday, 1 = Sunday, 2 = Monday ...) this.weekNumbers = false; // view week numbers: true = yes, false = no //-------------------------------------------------------------------------------------------------------- // You should change these variables only if you want to translate them into your language: //-------------------------------------------------------------------------------------------------------- // weekdays: must start with Saturday because January 1st of year 1 was a Saturday this.weekdays = new Array('Sa', 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr'); // months: must start with January this.months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); // error messages this.error = new Array('Year must be 1 - 3999!', 'Month must be 1 - 12!'); //-------------------------------------------------------------------------------------------------------- // Don't change from here: //-------------------------------------------------------------------------------------------------------- this.size = 0; this.mDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if(year == null && month == null) { var obj = new Date(); year = obj.getYear(); if(year < 1900) year += 1900; month = obj.getMonth() + 1; } else if(year != null && month == null) month = 1; this.year = year; this.month = month; //======================================================================================================== // Functions //======================================================================================================== this.set_styles = function() { cal_ID++; var html = ''; return html; } this.leap_year = function(year) { return (!(year % 4) && (year < 1582 || year % 100 || !(year % 400))) ? true : false; } this.get_weekday = function(year, days) { var a = days; if(year) a += (year - 1) * 365; for(var i = 1; i < year; i++) if(this.leap_year(i)) a++; if(year > 1582 || (year == 1582 && days >= 277)) a -= 10; if(a) a = (a - this.offset) % 7; else if(this.offset) a += 7 - this.offset; return a; } this.get_week = function(year, days) { var firstWDay = this.get_weekday(year, 0); return Math.floor((days + firstWDay) / 7) + (firstWDay <= 3); } this.table_cell = function(content, cls, date) { var size = Math.round(this.size * 1.5); var html = ''; return html; } this.table_head = function(content) { var html, ind, wDay, i; var cols = this.weekNumbers ? 8 : 7; html = ''; for(i = 0; i < this.weekdays.length; i++) { ind = (i + this.offset) % 7; wDay = this.weekdays[ind]; html += this.table_cell(wDay, 'cssHeading' + cal_ID); } if(this.weekNumbers) html += this.table_cell(' ', 'cssHeading' + cal_ID); html += ''; return html; } this.create = function() { var obj, html, curYear, curMonth, curDay, start, stop, title, daycount, inThisMonth, weekNr, wdays, days, ind, cls, content, date, i; this.size = (this.hFontSize > this.dFontSize) ? this.hFontSize : this.dFontSize; if(this.wFontSize > this.size) this.size = this.wFontSize; obj = new Date(); curYear = obj.getYear(); if(curYear < 1900) curYear += 1900; curMonth = obj.getMonth() + 1; //EDit DAYEEEEEEEEEEEE curDay = 23; if(this.year < 1 || this.year > 3999) html = '' + this.error[0] + ''; else if(this.month < 1 || this.month > 12) html = '' + this.error[1] + ''; else { if(this.leap_year(this.year)) this.mDays[1] = 29; for(i = days = 0; i < this.month - 1; i++) days += this.mDays[i]; start = this.get_weekday(this.year, days); stop = this.mDays[this.month-1]; html = this.set_styles(); html += ''; html += ''; html += '
'; title = this.months[this.month-1] + ' ' + this.year; html += this.table_head(title); daycount = 1; if((this.year == curYear) && (this.month == curMonth)) inThisMonth = true; else inThisMonth = false; if(this.weekNumbers) weekNr = this.get_week(this.year, days); while(daycount <= stop) { html += ''; for(i = wdays = 0; i <= 6; i++) { ind = (i + this.offset) % 7; if(ind == 0) cls = 'cssSaturdays'; else if(ind == 1) cls = 'cssSundays'; else cls = 'cssDays'; date = this.year + '-' + this.month + '-' + daycount; if((daycount == 1 && i < start) || daycount > stop) content = ' '; else { content = daycount; if(inThisMonth && daycount == curDay) cls = 'cssToday'; else if(this.year == 1582 && this.month == 10 && daycount == 4) daycount = 14; daycount++; wdays++; } html += this.table_cell(content, cls + cal_ID, date); } if(this.weekNumbers) { if(!weekNr) { if(this.year == 1) content = ' '; else if(this.year == 1583) content = 52; else content = this.get_week(this.year - 1, 365); } else if(this.month == 12 && weekNr >= 52 && wdays < 4) content = 1; else content = weekNr; html += this.table_cell(content, 'cssWeeks' + cal_ID); weekNr++; } html += ''; } html += '
'; } return html; } }