CURRENT PROJECTS
loading
<html> <head> <script language="JavaScript" type="text/javascript" src="calendar.js"></script> <script> var __calendars = new Array(); __calendars.push( new Calendar( 0, '_calendar0', new Date( (new Date()).getMonth() + '/' + (new Date()).getDate() + '/' + (new Date()).getFullYear() ), new Date( ((new Date()).getMonth() + 2) + '/' + (new Date()).getDate() + '/' + (new Date()).getFullYear() ) ) ); __calendars.push( new Calendar( 1, '_calendar1', new Date( (new Date()).getMonth() + '/' + (new Date()).getDate() + '/' + (new Date()).getFullYear() ), new Date( ((new Date()).getMonth() + 2) + '/' + (new Date()).getDate() + '/' + (new Date()).getFullYear() ) ) ); function initCal() { // draw the current month's calendar document.getElementById('calContainer1').innerHTML = __calendars[0].drawCal(0); document.getElementById('calContainer2').innerHTML = __calendars[1].drawCal(0); } </script> </head> <body style="background:#ff9900;" onLoad="initCal();" topmargin=0 bottommargin=0 leftmargin=0 rightmargin=0 marginheight=0 marginwidth=0> <span id="calContainer1">Loading...</span><span id="calContainer2">Loading...</span> </body> </html>
var __monthslong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var __monthsshort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; function Calendar (arrayID, uniqueName, dateFrom, dateTo) { this.currDate = new Date(); this.uniqueName = uniqueName; this.arrayID = arrayID; this.products = new Array(); this.selectedDays = new Array(); this.prodDesc = ''; this.dateFrom = dateFrom; this.dateTo = dateTo; this.startTally = new Array(); this.maxDays = 10; } Calendar.prototype.drawCal = function (nudgeMonth, alreadyLoaded) { this.currDate.setMonth((this.currDate.getMonth() + nudgeMonth)); var tmpNextMo = new Date(); tmpNextMo.setDate(1); tmpNextMo.setFullYear(this.currDate.getFullYear()); tmpNextMo.setMonth(parseInt(this.currDate.getMonth()) + 1); /* flawed next month display above calendar - * if next month has less days than first month, * it'll skip the correct month */ // var tmpNextMo = new Date(this.currDate.getFullYear(), (this.currDate.getMonth() + 1), this.currDate.getDate()); var _currDate = new Date(); _currDate.setFullYear(this.currDate.getFullYear()); _currDate.setMonth(this.currDate.getMonth()); var calStr = '<table cellpadding=0 cellspacing=0 border=0>' + '<tr>' + '<td style="background:url(ul.gif) no-repeat; height:6px;"><img width="1" height="6" border=0 src="_blank.gif"></td>' + '<td style="background:url(ur.gif) right top no-repeat; height:6px; width:6px;"><img width="6" height="6" border=0 src="_blank.gif"></td>' + '</tr>' + '<tr>' + '<td style="background:url(ml.gif) left top repeat-y; text-align:center; font-family:Tahoma; font-size:8pt; color:#808080; overflow:auto; padding-left:6px;" id="__calMessage">' + '<table cellpadding=0 cellspacing=0 border=0>' + '<tr>' + '<td width="100%" colspan=2 align=middle style="padding-bottom:5px;">' + '<table cellpadding=0 cellspacing=0 border=0 width="100%">' + '<tr>' + '<td align=left style="font-size:8pt; color:#000000; text-align:left; cursor:pointer;" ' + 'onClick="__calendars[' + this.arrayID + '].drawCal((-1), true);">' + '<img border=0 src="_left.gif">' + '</td>' + '<td width="50%" align=left style="padding:0px 16px 0px 0px; font-size:8pt; color:#000000; text-align:center; cursor:default;">' + '<nobr>' + __monthslong[this.currDate.getMonth()] + ' ' + this.currDate.getFullYear() + '</nobr>' + '</td>' + '<td width="50%" align=right style="padding:0px 0px 0px 16px; font-size:8pt; color:#000000; text-align:center; cursor:default;">' + '<nobr>' + __monthslong[tmpNextMo.getMonth()] + ' ' + tmpNextMo.getFullYear() + '</nobr>' + '</td>' + '<td align=right style="font-size:8pt; color:#000000; text-align:right; cursor:pointer;" ' + 'onClick="__calendars[' + this.arrayID + '].drawCal(1, true);">' + '<img border=0 src="_right.gif">' + '</td>' + '</tr>' + '</table>' + '</td>' + '</tr>' + '<tr>' + '<td valign=top>' + '<table cellpadding=0 cellspacing=0 border=0>' + '<tr>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">S</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">M</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">T</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">W</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">T</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">F</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">S</td>' + '</tr>' + '<tr>'; // set to the first day this.currDate.setDate(1); var pMonth = new Date(); pMonth.setFullYear(this.currDate.getFullYear()); pMonth.setMonth(this.currDate.getMonth()); pMonth.setDate((this.currDate.getDate() - 1)); // get current month days count var dCount = new Date(); dCount.setDate(1); dCount.setFullYear(this.currDate.getFullYear()); dCount.setMonth((this.currDate.getMonth() + 1)); dCount.setDate(dCount.getDate() - 1); /* FLAWED var dCount = new Date(); dCount.setFullYear(this.currDate.getFullYear()); dCount.setMonth((this.currDate.getMonth() + 1)); dCount.setDate((this.currDate.getDate() - 1)); */ var dayCounter = 0; // perform the previous months last days for (var pMo=1; pMo <= this.currDate.getDay(); pMo++) { calStr += '<td align=middle style="padding:2px; font-family:Tahoma; font-size:8pt; color:#AAAAAA; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; text-align:center; cursor:default;">' + (pMonth.getDate() - this.currDate.getDay() + pMo) + '</td>'; dayCounter++; } // now display all days in current month for (var cMD=0; cMD < dCount.getDate(); cMD++) { var validFrom = true; // find if this is a valid day or not if (typeof(this.dateFrom) != 'undefined') { if (this.dateFrom.getTime() > (new Date((this.currDate.getMonth() + 1) + '/' + (this.currDate.getDate() + cMD) + '/' + this.currDate.getFullYear())).getTime()) { validFrom = false; } } var validTo = true; // find if this is a valid day or not if (typeof(this.dateTo) != 'undefined') { if (this.dateTo.getTime() < (new Date((this.currDate.getMonth() + 1) + '/' + (this.currDate.getDate() + cMD) + '/' + this.currDate.getFullYear())).getTime()) { validTo = false; } } var dayInList = false; for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == this.currDate.getFullYear() && this.selectedDays[dInd][1] == this.currDate.getMonth() && this.selectedDays[dInd][2] == (this.currDate.getDate() + cMD)) { dayInList = true; } } if (validFrom == false || validTo == false) { calStr += '<td align=middle style="padding:2px; font-family:Tahoma; background:#EFEFEF; font-size:8pt; color:#808080; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; text-align:center; cursor:default;'; } else { calStr += '<td id="__cal' + this.arrayID + '__' + this.currDate.getFullYear() + '-' + this.currDate.getMonth() + '-' + (this.currDate.getDate() + cMD) + '" ' + 'align=middle style="padding:2px; font-family:Tahoma; font-size:8pt; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; text-align:center; cursor:pointer;'; if (dayInList) { calStr += ' background:#006699; color:#FFFFFF;'; } else { calStr += ' background:#FFFFFF; color:#808080;'; } } if (validFrom == false || validTo == false) { calStr += ' text-decoration:line-through;'; } if (validFrom == true && validTo == true) { calStr += '" ' + 'onMouseOver="__calendars[' + this.arrayID + '].toggleDayHilight([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, true);" '; } if (validFrom == true && validTo == true) { // 'onClick="__calendars[' + this.arrayID + '].toggleDay([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, \'up\');">' + calStr += '" ' + 'onMouseOut="__calendars[' + this.arrayID + '].toggleDayHilight([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, false);" ' + 'onMouseDown="__calendars[' + this.arrayID + '].toggleDay([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, \'down\');" ' + 'onMouseUp="__calendars[' + this.arrayID + '].toggleDay([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, \'up\');">' + (this.currDate.getDate() + cMD) + '</td>'; } else { calStr += '">' + (this.currDate.getDate() + cMD) + '</td>'; } dayCounter++; if ((dayCounter % 7) == 0) { calStr += '</tr>'; if (cMD != dCount.getDate()) { '<tr>'; } } } // display the tail end of the month for (var eMo=1; eMo <= (6 - dCount.getDay()); eMo++) { calStr += '<td align=middle style="padding:2px; font-family:Tahoma; font-size:8pt; color:#AAAAAA; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #FFFFFF; text-align:center; cursor:default;">' + eMo + '</td>'; dayCounter++; } calStr += '</table>' + '</td>' + '<td valign=top style="padding-left:5px;">' + '<table cellpadding=0 cellspacing=0 border=0>' + '<tr>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">S</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">M</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">T</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">W</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">T</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">F</td>' + '<td align=middle style="background:#EEEEEE url(lightgray-gradient-ee.gif) bottom repeat-x; padding:1px; font-family:Tahoma; font-size:7pt; color:#000000; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; border-top:1px solid #EEEEEE; text-align:center; cursor:default;">S</td>' + '</tr>' + '<tr>'; // set to the first day this.currDate.setMonth((this.currDate.getMonth() + 1)); this.currDate.setDate(1); var pMonth = new Date(); pMonth.setFullYear(this.currDate.getFullYear()); pMonth.setMonth(this.currDate.getMonth()); pMonth.setDate((this.currDate.getDate() - 1)); // get current month days count var dCount = new Date(); dCount.setDate(1); dCount.setFullYear(this.currDate.getFullYear()); dCount.setMonth((this.currDate.getMonth() + 1)); dCount.setDate(dCount.getDate() - 1); /* FLAWED var dCount = new Date(); dCount.setFullYear(this.currDate.getFullYear()); dCount.setMonth((this.currDate.getMonth() + 1)); dCount.setDate((this.currDate.getDate() - 1)); */ var dayCounter = 0; // perform the previous months last days for (var pMo=1; pMo <= this.currDate.getDay(); pMo++) { calStr += '<td align=middle style="padding:2px; font-family:Tahoma; font-size:8pt; color:#AAAAAA; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; text-align:center; cursor:default;">' + (pMonth.getDate() - this.currDate.getDay() + pMo) + '</td>'; dayCounter++; } // now display all days in current month for (var cMD=0; cMD < dCount.getDate(); cMD++) { var validFrom = true; // find if this is a valid day or not if (typeof(this.dateFrom) != 'undefined') { if (this.dateFrom.getTime() > (new Date((this.currDate.getMonth() + 1) + '/' + (this.currDate.getDate() + cMD) + '/' + this.currDate.getFullYear())).getTime()) { validFrom = false; } } var validTo = true; // find if this is a valid day or not if (typeof(this.dateTo) != 'undefined') { if (this.dateTo.getTime() < (new Date((this.currDate.getMonth() + 1) + '/' + (this.currDate.getDate() + cMD) + '/' + this.currDate.getFullYear())).getTime()) { validTo = false; } } var dayInList = false; for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == this.currDate.getFullYear() && this.selectedDays[dInd][1] == this.currDate.getMonth() && this.selectedDays[dInd][2] == (this.currDate.getDate() + cMD)) { dayInList = true; } } if (validFrom == false || validTo == false) { calStr += '<td align=middle style="padding:2px; font-family:Tahoma; background:#EFEFEF; font-size:8pt; color:#808080; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; text-align:center; cursor:default;'; } else { calStr += '<td id="__cal' + this.arrayID + '__' + this.currDate.getFullYear() + '-' + this.currDate.getMonth() + '-' + (this.currDate.getDate() + cMD) + '" ' + 'align=middle style="padding:2px; font-family:Tahoma; font-size:8pt; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #EEEEEE; text-align:center; cursor:pointer;'; if (dayInList) { calStr += ' background:#006699; color:#FFFFFF;'; } else { calStr += ' background:#FFFFFF; color:#808080;'; } } if (validFrom == false || validTo == false) { calStr += ' text-decoration:line-through;'; } if (validFrom == true && validTo == true) { calStr += '" ' + 'onMouseOver="__calendars[' + this.arrayID + '].toggleDayHilight([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, true);" '; } if (validFrom == true && validTo == true) { // 'onClick="__calendars[' + this.arrayID + '].toggleDay([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, \'up\');">' + calStr += '" ' + 'onMouseOut="__calendars[' + this.arrayID + '].toggleDayHilight([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, false);" ' + 'onMouseDown="__calendars[' + this.arrayID + '].toggleDay([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, \'down\');" ' + 'onMouseUp="__calendars[' + this.arrayID + '].toggleDay([' + this.currDate.getFullYear() + ',' + this.currDate.getMonth() + ',' + (this.currDate.getDate() + cMD) + '], this, \'up\');">' + (this.currDate.getDate() + cMD) + '</td>'; } else { calStr += '">' + (this.currDate.getDate() + cMD) + '</td>'; } dayCounter++; if ((dayCounter % 7) == 0) { calStr += '</tr>'; if (cMD != dCount.getDate()) { '<tr>'; } } } // display the tail end of the month for (var eMo=1; eMo <= (6 - dCount.getDay()); eMo++) { calStr += '<td align=middle style="padding:2px; font-family:Tahoma; font-size:8pt; color:#AAAAAA; border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; border-left:1px solid #FFFFFF; text-align:center; cursor:default;">' + eMo + '</td>'; dayCounter++; } calStr += '</table>' + '</td>' + '</tr>' + '<tr>' + '<td colspan=2 id="__cal' + this.arrayID + '__message" align="left" style="font-family:Tahoma; font-size:7pt; padding:2px;">' + 'Select a date from the calendar above' + '</td>' + '</tr>' + '</table>' + '</td>' + '<td style="background:url(mr.gif) right top repeat-y; height:6px;"><img width="1" height="6" border=0 src="_blank.gif"></td>' + '</tr>' + '<tr>' + '<td style="background:url(bl.gif) no-repeat; height:6px;"><img width="1" height="6" border=0 src="_blank.gif"></td>' + '<td style="background:url(br.gif) right top no-repeat; height:6px; width:6px;"><img width="6" height="6" border=0 src="_blank.gif"></td>' + '</tr>' + '</table>'; this.currDate.setMonth((this.currDate.getMonth() - 1)); if (typeof(alreadyLoaded) != 'undefined' && alreadyLoaded == true) { document.getElementById(this.uniqueName).innerHTML = calStr; } else { return '<div id="' + this.uniqueName + '">' + calStr + '</div>'; } } Calendar.prototype.toggleDay = function (day, divBlock, buttonEvent) { var dayInList = (-1); for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == day[0] && this.selectedDays[dInd][1] == day[1] && this.selectedDays[dInd][2] == day[2]) { dayInList = dInd; } } if (dayInList == (-1) && this.startTally.length == 0 && buttonEvent == 'down') { divBlock.style.background='#006699'; divBlock.style.color='#FFFFFF'; this.selectedDays.push(day); this.startTally = day; this.toggleDayHilight(day, divBlock, true); this.selectedDays.sort(function(a, b) { return (new Date(a[0], a[1], a[2])).getTime() - (new Date(b[0], b[1], b[2])).getTime() }) } else if (this.startTally.length > 0 && buttonEvent == 'up') { var countDays = 1; var tallyDest = new Date(day[0], (parseInt(day[1]) + 0), day[2]); var tallyNew = new Date(this.startTally[0], (parseInt(this.startTally[1]) + 0), this.startTally[2]); var tallyPivot = new Date(this.startTally[0], (parseInt(this.startTally[1]) + 0), this.startTally[2]); while (tallyNew.getFullYear() != tallyDest.getFullYear() || tallyNew.getMonth() != tallyDest.getMonth() || tallyNew.getDate() != tallyDest.getDate()) { countDays++; if (tallyNew.getTime() < tallyDest.getTime()) { tallyNew.setDate(tallyNew.getDate() + 1); } else { tallyNew.setDate(tallyNew.getDate() - 1); } var newDayInList = false; for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == tallyNew.getFullYear() && this.selectedDays[dInd][1] == tallyNew.getMonth() && this.selectedDays[dInd][2] == tallyNew.getDate()) { newDayInList = true; } } var newDivBlock = document.getElementById('__cal' + this.arrayID + '__' + tallyNew.getFullYear() + '-' + tallyNew.getMonth() + '-' + tallyNew.getDate()); if (!newDayInList && countDays <= this.maxDays && newDivBlock) { this.selectedDays.push([tallyNew.getFullYear(), tallyNew.getMonth(), tallyNew.getDate()]); this.selectedDays.sort(function(a, b) { return (new Date(a[0], a[1], a[2])).getTime() - (new Date(b[0], b[1], b[2])).getTime() }) newDivBlock.style.background='#006699'; newDivBlock.style.color='#FFFFFF'; } else if (!newDayInList && newDivBlock) { newDivBlock.style.background='#FFFFFF'; newDivBlock.style.color='#808080'; } } this.startTally = new Array(); } else if (buttonEvent == 'up') { // if first day - remove whole block... var tallyNew = new Date(day[0], (parseInt(day[1]) + 0), day[2]); var tallyPrev = new Date(day[0], (parseInt(day[1]) + 0), day[2]); tallyPrev.setDate(tallyPrev.getDate() - 1); var prevDayInList = false; var remDayInList = true; var remDayInListInd = (-1); for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == tallyPrev.getFullYear() && this.selectedDays[dInd][1] == tallyPrev.getMonth() && this.selectedDays[dInd][2] == tallyPrev.getDate()) { prevDayInList = true; } } if (!prevDayInList) { while (remDayInList) { tallyNew.setDate(tallyNew.getDate() + 1); var newDivBlock = document.getElementById('__cal' + this.arrayID + '__' + tallyNew.getFullYear() + '-' + tallyNew.getMonth() + '-' + tallyNew.getDate()); remDayInList = false; for (var rdInd=0; rdInd < this.selectedDays.length; rdInd++) { if (this.selectedDays[rdInd][0] == tallyNew.getFullYear() && this.selectedDays[rdInd][1] == tallyNew.getMonth() && this.selectedDays[rdInd][2] == tallyNew.getDate()) { remDayInListInd = rdInd; remDayInList = true; } } if (remDayInList) { this.selectedDays.splice(remDayInListInd, 1); this.selectedDays.sort(function(a, b) { return (new Date(a[0], a[1], a[2])).getTime() - (new Date(b[0], b[1], b[2])).getTime() }) this.toggleDayHilight([tallyNew.getFullYear(), tallyNew.getMonth(), tallyNew.getDate()], newDivBlock, false); } } } if (dayInList != (-1)) { this.selectedDays.splice(dayInList, 1); this.selectedDays.sort(function(a, b) { return (new Date(a[0], a[1], a[2])).getTime() - (new Date(b[0], b[1], b[2])).getTime() }) this.toggleDayHilight(day, divBlock, false); } this.startTally = new Array(); } } Calendar.prototype.toggleDayHilight = function (day, divBlock, toggle) { // clear selection (document.selection) ? document.selection.empty() : window.getSelection().removeAllRanges(); var userMsg = ' '; var dayInList = false; for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == day[0] && this.selectedDays[dInd][1] == day[1] && this.selectedDays[dInd][2] == day[2]) { dayInList = true; } } if (!dayInList && toggle) { if (this.startTally.length > 0) { // overflow highlighting divBlock.style.background = '#E3E3E3'; divBlock.style.color = '#FFFFFF'; } else { divBlock.style.background = '#008FD6'; divBlock.style.color = '#FFFFFF'; userMsg = 'Add ' + __monthsshort[day[1]] + ' ' + day[2] + ', ' + day[0]; } } else if (dayInList && this.startTally.length > 0) { userMsg = 'Click Again to add ' + __monthsshort[day[1]] + ' ' + day[2] + ', ' + day[0]; } else if (dayInList && this.startTally.length == 0) { if (toggle) { divBlock.style.background = 'red'; divBlock.style.color = '#FFFFFF'; // if first day - remove whole block... var tallyNew = new Date(day[0], (parseInt(day[1]) + 0), day[2]); var tallyPrev = new Date(day[0], (parseInt(day[1]) + 0), day[2]); tallyPrev.setDate(tallyPrev.getDate() - 1); var prevDayInList = false; var remDayInList = true; var countDays = 1; for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == tallyPrev.getFullYear() && this.selectedDays[dInd][1] == tallyPrev.getMonth() && this.selectedDays[dInd][2] == tallyPrev.getDate()) { prevDayInList = true; } } if (!prevDayInList) { while (remDayInList) { tallyNew.setDate(tallyNew.getDate() + 1); var newDivBlock = document.getElementById('__cal' + this.arrayID + '__' + tallyNew.getFullYear() + '-' + tallyNew.getMonth() + '-' + tallyNew.getDate()); remDayInList = false; for (var rdInd=0; rdInd < this.selectedDays.length; rdInd++) { if (this.selectedDays[rdInd][0] == tallyNew.getFullYear() && this.selectedDays[rdInd][1] == tallyNew.getMonth() && this.selectedDays[rdInd][2] == tallyNew.getDate()) { remDayInList = true; } } if (remDayInList) { newDivBlock.style.background = 'red'; newDivBlock.style.color = '#FFFFFF'; countDays++; } } } if (countDays > 1) { // nudge the tally check date back one since the iterrator will be on the day that failed to be in the cart tallyNew.setDate(tallyNew.getDate() - 1); var startDate = new Date(day[0], (parseInt(day[1]) + 0), day[2]); userMsg = 'Click to remove ' + countDays + ' days from ' + __monthsshort[startDate.getMonth()] + ' ' + startDate.getDate() + ', ' + startDate.getFullYear() + ' to ' + __monthsshort[tallyNew.getMonth()] + ' ' + tallyNew.getDate() + ', ' + tallyNew.getFullYear(); } else { userMsg = 'Click to remove ' + __monthsshort[day[1]] + ' ' + day[2] + ', ' + day[0]; } } else { divBlock.style.background = '#006699'; divBlock.style.color = '#FFFFFF'; // clear the sequence that was queued for deletion var tallyNew = new Date(day[0], (parseInt(day[1]) + 0), day[2]); var tallyPrev = new Date(day[0], (parseInt(day[1]) + 0), day[2]); tallyPrev.setDate(tallyPrev.getDate() - 1); var prevDayInList = false; var remDayInList = true; for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == tallyPrev.getFullYear() && this.selectedDays[dInd][1] == tallyPrev.getMonth() && this.selectedDays[dInd][2] == tallyPrev.getDate()) { prevDayInList = true; } } if (!prevDayInList) { while (remDayInList) { tallyNew.setDate(tallyNew.getDate() + 1); var newDivBlock = document.getElementById('__cal' + this.arrayID + '__' + tallyNew.getFullYear() + '-' + tallyNew.getMonth() + '-' + tallyNew.getDate()); remDayInList = false; for (var rdInd=0; rdInd < this.selectedDays.length; rdInd++) { if (this.selectedDays[rdInd][0] == tallyNew.getFullYear() && this.selectedDays[rdInd][1] == tallyNew.getMonth() && this.selectedDays[rdInd][2] == tallyNew.getDate()) { remDayInList = true; } } if (remDayInList) { newDivBlock.style.background = '#006699'; newDivBlock.style.color = '#FFFFFF'; } } } } } else if (!dayInList && !toggle) { divBlock.style.background = '#FFFFFF'; divBlock.style.color = '#808080'; } var countDays = 1; var maxWarning = false; if (this.startTally.length > 0) { var tallyDest = new Date(day[0], (parseInt(day[1]) + 0), day[2]); var tallyNew = new Date(this.startTally[0], (parseInt(this.startTally[1]) + 0), this.startTally[2]); var tallyPivot = new Date(this.startTally[0], (parseInt(this.startTally[1]) + 0), this.startTally[2]); while (tallyNew.getFullYear() != tallyDest.getFullYear() || tallyNew.getMonth() != tallyDest.getMonth() || tallyNew.getDate() != tallyDest.getDate()) { countDays++; if (tallyNew.getTime() < tallyDest.getTime()) { tallyNew.setDate(tallyNew.getDate() + 1); } else { tallyNew.setDate(tallyNew.getDate() - 1); } var newDivBlock = document.getElementById('__cal' + this.arrayID + '__' + tallyNew.getFullYear() + '-' + tallyNew.getMonth() + '-' + tallyNew.getDate()); dayInList = false; for (var dInd=0; dInd < this.selectedDays.length; dInd++) { if (this.selectedDays[dInd][0] == tallyNew.getFullYear() && this.selectedDays[dInd][1] == tallyNew.getMonth() && this.selectedDays[dInd][2] == tallyNew.getDate()) { dayInList = true; } } if (countDays <= this.maxDays) { if (newDivBlock) { if (!dayInList && toggle) { newDivBlock.style.background='#008FD6'; newDivBlock.style.color='#FFFFFF'; } else if (!dayInList && !toggle) { newDivBlock.style.background='#FFFFFF'; newDivBlock.style.color='#808080'; } } if ((new Date(day[0], (parseInt(day[1]) + 0), day[2])).getTime() < tallyPivot.getTime()) { userMsg = 'Click to add ' + countDays + ' days from ' + __monthsshort[tallyNew.getMonth()] + ' ' + tallyNew.getDate() + ', ' + tallyNew.getFullYear() + ' to ' + __monthsshort[tallyPivot.getMonth()] + ' ' + tallyPivot.getDate() + ', ' + tallyPivot.getFullYear(); } else { userMsg = 'Click to add ' + countDays + ' days from ' + __monthsshort[tallyPivot.getMonth()] + ' ' + tallyPivot.getDate() + ', ' + tallyPivot.getFullYear() + ' to ' + __monthsshort[tallyNew.getMonth()] + ' ' + tallyNew.getDate() + ', ' + tallyNew.getFullYear(); } } else if (newDivBlock) { if (!dayInList && toggle) { // overflow highlighting newDivBlock.style.background='#EEEEEE'; newDivBlock.style.color='#808080'; if (!maxWarning) { userMsg += '<BR>Cannot choose more than ' + this.maxDays + ' days.' maxWarning = true; } } else if (!dayInList && !toggle) { newDivBlock.style.background='#FFFFFF'; newDivBlock.style.color='#808080'; } } } } document.getElementById('__cal' + this.arrayID + '__message').innerHTML = userMsg; }