|
| 1 | +function decCellValue(cell) { |
| 2 | + var obj = cell.children('.num').children()[0]; |
| 3 | + obj.innerHTML = parseInt(obj.innerHTML) - 1; |
| 4 | +}; |
| 5 | + |
| 6 | +function parseDate(dateString){ |
| 7 | +//why the fck cant we have normal datestrings |
| 8 | + var d = new Date(dateString); |
| 9 | + var string = d.toISOString(); |
| 10 | + return string.substring(5,7) + "/" + string.substring(8,10) + '/' + string.substring(0,4); |
| 11 | +} |
| 12 | +function dateToRubyString(date) { |
| 13 | + return date.toISOString().substring(0,10); |
| 14 | +}; |
| 15 | + |
| 16 | +function dateToHeading(date) { |
| 17 | + var days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat','Sun']; |
| 18 | + return ' ' + days[date.getUTCDay()]; |
| 19 | +}; |
| 20 | + |
| 21 | +function renderCalendar(reservations, week_start, max, blackouts) { |
| 22 | + //set initial values and date ids |
| 23 | + var date = new Date(week_start.getTime()); |
| 24 | + $('.calendar_cell').each(function() { |
| 25 | + $(this).children('.head').children()[0].innerHTML = date.getUTCDate().toString(); |
| 26 | + $(this).children('.head').children()[1].innerHTML = dateToHeading(date); |
| 27 | + $(this).children('.num').children()[0].innerHTML = max.toString(); |
| 28 | + $(this).attr('id',dateToRubyString(date)); |
| 29 | + date.setDate(date.getDate()+1); |
| 30 | + }); |
| 31 | + var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; |
| 32 | + |
| 33 | + $('.month').children()[0].innerHTML = months[week_start.getMonth()] + " " + date.getFullYear().toString(); |
| 34 | + |
| 35 | + //set cell values based on reservations |
| 36 | + for(var d = 0; d < reservations.length; d++) { |
| 37 | + var end = new Date (reservations[d].end); |
| 38 | + var start = new Date (reservations[d].start); |
| 39 | + var week_end = new Date(); |
| 40 | + week_end.setDate(week_start.getDate() + 7); |
| 41 | + if ((start < week_end) && (end >= week_start)) { |
| 42 | + //for each reservation, decrement availability per day |
| 43 | + var begin_date = ((week_start > start) ? week_start : start); |
| 44 | + var end_date = ((week_end < end) ? week_end : end); |
| 45 | + for (var date = new Date(begin_date.getTime()); |
| 46 | + date <= end_date; |
| 47 | + date.setDate(date.getDate()+1)) { |
| 48 | + decCellValue($('#'+dateToRubyString(date))); |
| 49 | + } |
| 50 | + } |
| 51 | + } |
| 52 | + |
| 53 | + //color cells appropriately |
| 54 | + $('.calendar_cell').each(function() { |
| 55 | + var blacked = false; |
| 56 | + for(var b = 0; b < blackouts.length; b++) { |
| 57 | + date = new Date($(this).attr('id')); |
| 58 | + if ((new Date(blackouts[b].start) <= date) && (new Date(blackouts[b].end) >= date)) { |
| 59 | + blacked = true; |
| 60 | + break; |
| 61 | + } |
| 62 | + } |
| 63 | + if (blacked) { |
| 64 | + var color = '#999999'; |
| 65 | + } else { |
| 66 | + var val = parseInt($(this).children('.num').children()[0].innerHTML); |
| 67 | + var red = Math.min(Math.floor(510 - val*510/max),255).toString(); |
| 68 | + var green = Math.min(Math.floor(val*510/max),255).toString(); |
| 69 | + var color = 'rgba(' + red + ',' + green + ',0,0.5)'; |
| 70 | + } |
| 71 | + $(this).css("background-color",color); |
| 72 | + |
| 73 | + }); |
| 74 | + |
| 75 | +}; |
| 76 | + |
| 77 | +function shiftCalendar(offset) { |
| 78 | + var reservations = $('#res-data').data('url'); |
| 79 | + var blackouts = $('#res-data').data('blackouts'); |
| 80 | + var week_start = new Date($('.calendar_cell').first().attr('id')); |
| 81 | + var today = new Date($('#res-data').data('today')); |
| 82 | + var date_max = new Date($('#res-data').data('dateMax')); |
| 83 | + var max = $('#res-data').data('max'); |
| 84 | + week_start.setDate(week_start.getDate() + offset); |
| 85 | + if (week_start < today) { |
| 86 | + week_start.setTime(today.getTime()); |
| 87 | + } |
| 88 | + if (week_start > date_max) { |
| 89 | + week_start.setTime(date_max.getTime()); |
| 90 | + } |
| 91 | + renderCalendar(reservations,week_start,max,blackouts); |
| 92 | +}; |
| 93 | + |
| 94 | + |
| 95 | +$('#reservation-calendar').ready(function() { |
| 96 | + |
| 97 | + //quit if no reservation calendar present |
| 98 | + //there's probably a better way to do this? |
| 99 | + |
| 100 | + if ($('#reservation-calendar').size() == 0) { |
| 101 | + return false; |
| 102 | + } |
| 103 | + |
| 104 | + shiftCalendar(0); |
| 105 | + |
| 106 | + $('.calendar_cell').click(function() { |
| 107 | + //set cart dates to day clicked |
| 108 | + $('#cart_start_date_cart').attr('value', parseDate($(this).attr('id'))).trigger('change'); |
| 109 | + }); |
| 110 | + |
| 111 | + $('.control').click(function() { |
| 112 | + shiftCalendar(parseInt($(this).attr('change'))); |
| 113 | + }); |
| 114 | + |
| 115 | +}); |
0 commit comments