From ef21b88a4ea5a4d0aa7c4d4778606e04095e811c Mon Sep 17 00:00:00 2001
From: Tyler Lemburg <trlemburg@gmail.com>
Date: Wed, 10 Aug 2016 15:52:48 -0500
Subject: [PATCH] Add recurring reservations to the system

---
 public/css/resource_scheduler.css |   2 +-
 routes/resources.rb               | 174 ++++++++++++++++++++++++++++++
 src/less/resource_scheduler.less  |   4 +-
 utils/language.rb                 |  13 +++
 views/reserve.erb                 | 113 ++++++++++++++++++-
 views/resource_calendar.erb       |   7 ++
 6 files changed, 309 insertions(+), 4 deletions(-)

diff --git a/public/css/resource_scheduler.css b/public/css/resource_scheduler.css
index 9062819..37d93f9 100644
--- a/public/css/resource_scheduler.css
+++ b/public/css/resource_scheduler.css
@@ -1 +1 @@
-@charset "UTF-8";@font-face{font-family:'eventicon';src:url('font/eventicon.eot?22213170');src:url('font/eventicon.eot?22213170#iefix') format('embedded-opentype'),url('font/eventicon.svg?22213170#eventicon') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'eventicon';src:url('data:application/octet-stream;base64,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') format('woff'),url('data:application/octet-stream;base64,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') format('truetype')}[class^="eventicon-"]:before,[class*=" eventicon-"]:before{font-family:"eventicon";font-style:normal;font-weight:normal;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.eventicon-plus-circled:before{content:'\e800'}.eventicon-search:before{content:'\e801'}.eventicon-angle-circled-left:before{content:'\e802'}.eventicon-angle-circled-right:before{content:'\e803'}.eventicon-rss:before{content:'\e804'}.eventicon-calendar-empty:before{content:'\e805'}.eventicon-link:before{content:'\e806'}.eventicon-location:before{content:'\e807'}.eventicon-clock:before{content:'\e808'}.eventicon-vcard:before{content:'\e809'}.clearfix:after{content:" ";visibility:hidden;display:block;height:0;clear:both}.wdn-grid-set.reverse>[class*=wdn-col]{float:right}.wdn-band{position:relative}#pagetitle h3{margin-top:0}#maincontent form{padding:1em}#maincontent form fieldset{margin:0;margin-bottom:1em}#maincontent form legend{font-size:1.5em;margin-top:0.5em;margin-bottom:1em;padding-bottom:0}#maincontent form.delete-form,#maincontent form.inline-form{display:inline;padding:0}#maincontent form input{word-wrap:normal}#maincontent form input[disabled]{background:#CCCCCC}#maincontent form textarea{resize:vertical}#maincontent form .helper{font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif}#maincontent form .offset-field-group{background:#41708d;border-radius:.5em;padding:1em}#maincontent form .offset-field-group label{color:#fefdfa}.table-actions a,.table-actions button{vertical-align:middle}.space-image{background:#78c3f1;border-radius:1em;border:1px solid #41708d;padding:1em}#notice .message-content a{text-decoration:underline}.calendar-container{font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif;width:100%;text-align:center}.calendar-container .time-labels{font-size:80%;text-align:right;display:inline-block;border-right:1px solid #C9C9C9;width:9%;margin:0}.calendar-container .time-labels .calendar-half-hour{padding-right:3px}.calendar-container .calendar-day{vertical-align:bottom;text-align:center;border-left:1px solid #C9C9C9;border-right:1px solid #C9C9C9;display:inline-block;width:12%;margin:0}.calendar-container .calendar-day .day-chart{position:relative}.calendar-container .calendar-half-hour{height:20px;border-top:1px solid #C9C9C9}.calendar-container .calendar-half-hour:last-child{border-bottom:1px solid #C9C9C9}.calendar-container .calendar-half-hour:nth-child(2n){background-color:#EEEEEE}.calendar-container .event,.calendar-container .reservation{position:absolute;overflow-y:scroll;background:#78c3f1;border:1px solid #137cbd;border-radius:3px;width:80%;font-size:60%;text-align:left;padding:3px;word-wrap:break-word}.calendar-container .event.new-member-orientation,.calendar-container .reservation.new-member-orientation{background:#FFFFB8;border-color:#b8b800}.calendar-container .event.free-event,.calendar-container .reservation.free-event{background:#F8F8F8;border-color:#797979}.calendar-container .event.machine-training,.calendar-container .reservation.machine-training{background:#58CC2F;border-color:#34791c}.calendar-container .event.rsvp-only-event,.calendar-container .reservation.rsvp-only-event{background:#FFA6F5;border-color:#a60093}.calendar-container .event.top-overflow,.calendar-container .reservation.top-overflow{border-top:none;border-top-left-radius:0px;border-top-right-radius:0px}.calendar-container .event.bottom-overflow,.calendar-container .reservation.bottom-overflow{border-bottom:none;border-bottom-left-radius:0px;border-bottom-right-radius:0px}.calendar-container .event.editing,.calendar-container .reservation.editing{border-style:dashed;opacity:.7}.calendar-container .event a,.calendar-container .reservation a{color:initial}.calendar-container .event a:hover,.calendar-container .reservation a:hover{text-decoration:underline}.calendar-container .status{position:absolute;background:gray;width:100%;opacity:.5}.calendar-container .status.closed{background-color:#444}.calendar-container .status.open-without-reservations{background-color:#78c3f1}.calendar-container.individual-day{background-color:#f9f8f5;border:1px solid #d5d5d2}.calendar-container.individual-day .time-labels{width:25%}.calendar-container.individual-day .calendar-day{width:70%}.event-details{margin-bottom:1em;padding:0 23px 1.777em;padding:0 1.425rem 1.777em;border-top:5px solid #D00000;background-color:#fff;box-shadow:0 0 0 1px rgba(20,20,20,0.1)}.event-details .date-wrapper,.event-details .time-wrapper,.event-details .location,.event-details .contact{display:block;font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif;font-weight:400;font-style:normal;font-size:13px;font-size:0.802rem}.event-details .date-wrapper:before,.event-details .time-wrapper:before,.event-details .location:before,.event-details .contact:before{color:#c1c0be}.event-details .description{margin:1em 0 0;padding-top:1em;border-top:1px solid #c1c0be}.toolbox,.visual-island{background:#f9f8f5;margin-bottom:1em;word-wrap:break-word;padding:0 !important}.toolbox .tools,.visual-island .tools,.toolbox .details,.visual-island .details{padding:1em;border-left:1px solid #d5d5d2;border-right:1px solid #d5d5d2;border-bottom:1px solid #d5d5d2}.toolbox .tools.top-border,.visual-island .tools.top-border,.toolbox .details.top-border,.visual-island .details.top-border{border-top:1px solid #d5d5d2}.toolbox h1,.visual-island h1,.toolbox h2,.visual-island h2,.toolbox h3,.visual-island h3,.toolbox h4,.visual-island h4,.toolbox h5,.visual-island h5,.toolbox h6,.visual-island h6,.toolbox .vi-header,.visual-island .vi-header{display:block;font-size:.802em !important;margin:0;border-bottom:1px solid #474746;font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif;width:100%;background-color:#474746;padding:1em;text-transform:uppercase;color:#fff;font-weight:400;font-style:normal;text-align:center}.toolbox p,.visual-island p{padding:0 1em 1em 1em}.toolbox ul,.visual-island ul{padding:0;padding-left:1em;margin:0}.toolbox ul a,.visual-island ul a{border-bottom:none;font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif}.event-list{background-color:#eae9e6;font-size:80%;line-height:1.4}.event-list .center{text-align:center}.event-list tbody tr{min-height:30px}.event-list ul{padding-left:0;list-style-type:none}.event-list li{padding:5px 0}.event-list li:not(:last-child){border-bottom:1px solid #999999}.date-time-select{padding:1em;background-color:#f9f8f5;border:1px solid #d5d5d2;margin-bottom:0.75em;text-align:center}.date-time-select.hours{text-align:left}.date-time-select .wdn-icon-calendar{margin-right:-2.3em;position:relative;z-index:2;margin-left:0.8em}.date-time-select .am_pm{display:inline-block;font-family:"Gotham";font-size:.75em;margin-left:.75em}.date-time-select input{padding-left:2.3em;width:40%;position:relative;text-align:center}.date-time-select select{width:14%;text-align:center;padding:0}.date-time-select>*{vertical-align:middle}@media (max-width:767px){.medium-hidden{display:none}.medium-block{display:block !important}.date-time-select input{width:100%}.date-time-select select{width:30%;text-align:center}}
\ No newline at end of file
+@charset "UTF-8";@font-face{font-family:'eventicon';src:url('font/eventicon.eot?22213170');src:url('font/eventicon.eot?22213170#iefix') format('embedded-opentype'),url('font/eventicon.svg?22213170#eventicon') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'eventicon';src:url('data:application/octet-stream;base64,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') format('woff'),url('data:application/octet-stream;base64,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') format('truetype')}[class^="eventicon-"]:before,[class*=" eventicon-"]:before{font-family:"eventicon";font-style:normal;font-weight:normal;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.eventicon-plus-circled:before{content:'\e800'}.eventicon-search:before{content:'\e801'}.eventicon-angle-circled-left:before{content:'\e802'}.eventicon-angle-circled-right:before{content:'\e803'}.eventicon-rss:before{content:'\e804'}.eventicon-calendar-empty:before{content:'\e805'}.eventicon-link:before{content:'\e806'}.eventicon-location:before{content:'\e807'}.eventicon-clock:before{content:'\e808'}.eventicon-vcard:before{content:'\e809'}.clearfix:after{content:" ";visibility:hidden;display:block;height:0;clear:both}.wdn-grid-set.reverse>[class*=wdn-col]{float:right}.wdn-band{position:relative}#pagetitle h3{margin-top:0}#maincontent form{padding:1em}#maincontent form fieldset{margin:0;margin-bottom:1em}#maincontent form legend{font-size:1.5em;margin-top:0.5em;margin-bottom:1em;padding-bottom:0}#maincontent form.delete-form,#maincontent form.inline-form{display:inline;padding:0}#maincontent form input{word-wrap:normal}#maincontent form input[disabled]{background:#CCCCCC}#maincontent form textarea{resize:vertical}#maincontent form .helper{font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif}#maincontent form .offset-field-group{background:#41708d;border-radius:.5em;padding:1em}#maincontent form .offset-field-group label{color:#fefdfa}.table-actions a,.table-actions button{vertical-align:middle}.space-image{background:#78c3f1;border-radius:1em;border:1px solid #41708d;padding:1em}#notice .message-content a{text-decoration:underline}.calendar-container{font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif;width:100%;text-align:center}.calendar-container .time-labels{font-size:80%;text-align:right;display:inline-block;border-right:1px solid #C9C9C9;width:9%;margin:0}.calendar-container .time-labels .calendar-half-hour{padding-right:3px}.calendar-container .calendar-day{vertical-align:bottom;text-align:center;border-left:1px solid #C9C9C9;border-right:1px solid #C9C9C9;display:inline-block;width:12%;margin:0}.calendar-container .calendar-day .day-chart{position:relative}.calendar-container .calendar-half-hour{height:20px;border-top:1px solid #C9C9C9}.calendar-container .calendar-half-hour:last-child{border-bottom:1px solid #C9C9C9}.calendar-container .calendar-half-hour:nth-child(2n){background-color:#EEEEEE}.calendar-container .event,.calendar-container .reservation{position:absolute;overflow-y:scroll;background:#78c3f1;border:1px solid #137cbd;border-radius:3px;width:80%;font-size:60%;text-align:left;padding:3px;word-wrap:break-word}.calendar-container .event.new-member-orientation,.calendar-container .reservation.new-member-orientation{background:#FFFFB8;border-color:#b8b800}.calendar-container .event.free-event,.calendar-container .reservation.free-event{background:#F8F8F8;border-color:#797979}.calendar-container .event.machine-training,.calendar-container .reservation.machine-training{background:#58CC2F;border-color:#34791c}.calendar-container .event.rsvp-only-event,.calendar-container .reservation.rsvp-only-event{background:#FFA6F5;border-color:#a60093}.calendar-container .event.top-overflow,.calendar-container .reservation.top-overflow{border-top:none;border-top-left-radius:0px;border-top-right-radius:0px}.calendar-container .event.bottom-overflow,.calendar-container .reservation.bottom-overflow{border-bottom:none;border-bottom-left-radius:0px;border-bottom-right-radius:0px}.calendar-container .event.editing,.calendar-container .reservation.editing{border-style:dashed;opacity:.7}.calendar-container .event a,.calendar-container .reservation a{color:initial}.calendar-container .event a:hover,.calendar-container .reservation a:hover{text-decoration:underline}.calendar-container .status{position:absolute;background:gray;width:100%;opacity:.5}.calendar-container .status.closed{background-color:#444}.calendar-container .status.open-without-reservations{background-color:#78c3f1}.calendar-container.individual-day{background-color:#f9f8f5;border:1px solid #d5d5d2}.calendar-container.individual-day .time-labels{width:25%}.calendar-container.individual-day .calendar-day{width:70%}.event-details{margin-bottom:1em;padding:0 23px 1.777em;padding:0 1.425rem 1.777em;border-top:5px solid #D00000;background-color:#fff;box-shadow:0 0 0 1px rgba(20,20,20,0.1)}.event-details .date-wrapper,.event-details .time-wrapper,.event-details .location,.event-details .contact{display:block;font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif;font-weight:400;font-style:normal;font-size:13px;font-size:0.802rem}.event-details .date-wrapper:before,.event-details .time-wrapper:before,.event-details .location:before,.event-details .contact:before{color:#c1c0be}.event-details .description{margin:1em 0 0;padding-top:1em;border-top:1px solid #c1c0be}.toolbox,.visual-island{background:#f9f8f5;margin-bottom:1em;word-wrap:break-word;padding:0 !important}.toolbox .tools,.visual-island .tools,.toolbox .details,.visual-island .details{padding:1em;border-left:1px solid #d5d5d2;border-right:1px solid #d5d5d2;border-bottom:1px solid #d5d5d2}.toolbox .tools.top-border,.visual-island .tools.top-border,.toolbox .details.top-border,.visual-island .details.top-border{border-top:1px solid #d5d5d2}.toolbox h1,.visual-island h1,.toolbox h2,.visual-island h2,.toolbox h3,.visual-island h3,.toolbox h4,.visual-island h4,.toolbox h5,.visual-island h5,.toolbox h6,.visual-island h6,.toolbox .vi-header,.visual-island .vi-header{display:block;font-size:.802em !important;margin:0;border-bottom:1px solid #474746;font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif;width:100%;background-color:#474746;padding:1em;text-transform:uppercase;color:#fff;font-weight:400;font-style:normal;text-align:center}.toolbox p,.visual-island p{padding:0 1em 1em 1em}.toolbox ul,.visual-island ul{padding:0;padding-left:1em;margin:0}.toolbox ul a,.visual-island ul a{border-bottom:none;font-family:"Gotham SSm A","Gotham SSm B",Verdana,"Verdana Ref",Geneva,Tahoma,"Lucida Grande","Lucida Sans Unicode","Lucida Sans","DejaVu Sans","Bitstream Vera Sans","Liberation Sans",sans-serif}.event-list{background-color:#eae9e6;font-size:80%;line-height:1.4}.event-list .center{text-align:center}.event-list tbody tr{min-height:30px}.event-list ul{padding-left:0;list-style-type:none}.event-list li{padding:5px 0}.event-list li:not(:last-child){border-bottom:1px solid #999999}.date-time-select{padding:1em;background-color:#f9f8f5;border:1px solid #d5d5d2;margin-bottom:0.75em;text-align:center}.date-time-select.hours{text-align:left}.date-time-select .wdn-icon-calendar{margin-right:-2.3em;position:relative;z-index:2;margin-left:0.8em}.date-time-select .am_pm{display:inline-block;font-family:"Gotham";font-size:.75em;margin-left:.75em}.date-time-select input{padding-left:2.3em;width:90%;position:relative;text-align:center}.date-time-select select{width:90%;text-align:center;padding:0}.date-time-select>*{vertical-align:middle}@media (max-width:767px){.medium-hidden{display:none}.medium-block{display:block !important}.date-time-select input{width:100%}.date-time-select select{width:30%;text-align:center}}
\ No newline at end of file
diff --git a/routes/resources.rb b/routes/resources.rb
index f93f48f..798bc7f 100644
--- a/routes/resources.rb
+++ b/routes/resources.rb
@@ -219,6 +219,180 @@ post '/:service_space_url_name/resources/:resource_id/reserve/?' do
 		end
 	end
 
+	if params.checked?('recurring')
+		recurs_until_date = Time.strptime(params[:recurs_until_date], '%m/%d/%Y').midnight.in_time_zone
+
+		# use the recurring type to increment the date here
+		starts = []
+		if params[:recurring_type] == 'weekly' || params[:recurring_type] == 'biweeekly'
+			inc = 7.days
+			inc = 14.days if params[:recurring_type] == 'biweeekly'
+			new_start = start_time
+			while (new_start = new_start + inc) <= recurs_until_date + 1.day
+				starts << new_start
+			end
+		elsif %w(1st 2nd 3rd 4th).include?(params[:recurring_type])
+			day_of_week = start_time.wday
+
+			new_start = start_time
+			while (new_start <= recurs_until_date + 1.day)
+				# calculate when this is next month
+				year = new_start.year
+				month = new_start.month + 1
+				month = 1 and year += 1 if month == 13
+				start_day = Time.new(year, month, 1).midnight.in_time_zone
+				while (start_day.wday != day_of_week)
+					start_day = start_day + 1.day
+				end
+
+				# now add weeks
+				start_day += (params[:recurring_type][0].to_i - 1).weeks
+				# and set the start time
+				start_day += start_time.hour.hours + start_time.min.minutes
+
+				if start_day <= recurs_until_date + 1.day
+					starts << start_day
+				end
+				new_start = start_day
+			end
+		elsif params[:recurring_type] == 'last'
+			day_of_week = start_time.wday
+			new_start = start_time
+			while (new_start <= recurs_until_date + 1.day)
+				# calculate when this is next month
+				year = new_start.year
+				month = new_start.month + 1
+				month = 1 and year += 1 if month == 13
+				start_day = Time.new(year, month, 1).midnight.in_time_zone
+				while (start_day.wday != day_of_week)
+					start_day = start_day + 1.day
+				end
+
+				# now add weeks (go until end of month)
+				while (start_day + 1.week).month == month
+					start_day += 1.week
+				end
+				# and set the start time
+				start_day += start_time.hour.hours + start_time.min.minutes
+
+				if start_day <= recurs_until_date + 1.day
+					starts << start_day
+				end
+				new_start = start_day
+			end
+		elsif params[:recurring_type] == 'day'
+			new_start = start_time
+			while (new_start <= recurs_until_date + 1.day)
+				# calculate when this is next month
+				year = new_start.year
+				month = new_start.month + 1
+				month = 1 and year += 1 if month == 13
+				start_day = Time.new(year, month, [start_time.day, Time.days_in_month(month, year)].min).midnight.in_time_zone
+
+				# and set the start time
+				start_day += start_time.hour.hours + start_time.min.minutes
+
+				if start_day <= recurs_until_date + 1.day
+					starts << start_day
+				end
+				new_start = start_day
+			end
+		else
+			flash :error, 'Invalid Recurring Type', 'Please select a recurrence frequency below.'
+			redirect back
+		end
+
+		messages = []
+		successful = 0
+		starts.each do |new_start|
+			invalid = false
+			new_end = new_start + params[:length].to_i.minutes
+
+			date = new_start.midnight
+			# validate that the requested time slot falls within the open hours of the day
+			# get the studio's hours for this day
+			# is there a one_off
+			space_hour = SpaceHour.where(:service_space_id => @space.id)
+				.where('effective_date = ?', date.utc.strftime('%Y-%m-%d %H:%M:%S'))
+				.where(:day_of_week => date.wday).where(:one_off => true).first
+			if space_hour.nil?
+				space_hour = SpaceHour.where(:service_space_id => @space.id)
+					.where('effective_date <= ?', date.utc.strftime('%Y-%m-%d %H:%M:%S'))
+					.where(:day_of_week => date.wday).where(:one_off => false)
+					.order(:effective_date => :desc, :id => :desc).first
+			end
+
+			unless space_hour.nil?
+				# figure out where the closed sections need to be
+		        # we can assume that all records in this space_hour are non-intertwined
+		        closed_start = 0
+		        closed_end = 0
+		        starts = space_hour.hours.map{|record| record[:start]}
+		        ends = space_hour.hours.map{|record| record[:end]}
+		        closeds = []
+		        (0..1439).each do |j|
+		            if starts.include?(j)
+		                closed_end = j
+		                closeds << {:status => 'closed', :start => closed_start, :end => closed_end}
+		                closed_start = 0
+		                closed_end = 0
+		            end
+		            if ends.include?(j)
+		                closed_start = j
+		            end
+		        end 
+		        closed_end = 1440
+		        closeds << {:status => 'closed', :start => closed_start, :end => closed_end}
+
+				# for each record, ensure that the time does not overlap if the record is not "open"
+				(space_hour.hours + closeds).each do |record|
+					if record[:status] != 'open'
+						start_time_minutes = 60 * new_start.hour + new_start.min
+						end_time_minutes = 60 * new_end.hour + new_end.min
+						if (record[:start]+1..record[:end]-1).include?(start_time_minutes) || (record[:start]+1..record[:end]-1).include?(end_time_minutes) ||
+								(start_time_minutes < record[:start] && end_time_minutes > record[:end])
+							# there is an overlap, this time is invalid
+							messages << "Sorry, the time slot at #{new_start.strftime('%A, %B %d at %l:%M %P')} is invalid for reservations."
+							invalid = true
+						end
+					end
+				end
+			end
+			# if no record studio is open
+			next if invalid
+
+			# check for possible other reservations during this time period
+			other_reservations = Reservation.where(:resource_id => params[:resource_id]).in_day(date).all
+			other_reservations.each do |reservation|
+				if (new_start >= reservation.start_time && new_start < reservation.end_time) ||
+						(new_end > reservation.start_time && new_end <= reservation.end_time) ||
+						(new_start < reservation.start_time && new_end > reservation.end_time)
+					messages << "Sorry, that resource is reserved for the #{new_start.strftime('%A, %B %d at %l:%M %P')} attempt."
+					invalid = true
+				end
+			end
+
+			next if invalid
+
+			Reservation.create(
+				:resource_id => resource.id,
+				:event_id => nil,
+				:start_time => new_start,
+				:end_time => new_end,
+				:is_training => false,
+				:user_id => @user.id,
+				:title => params[:title]
+			)
+			successful += 1
+		end
+		if successful > 0
+			flash :success, 'Recurring Reservations Created', "You have created #{successful+1} total reservations."
+		end
+		unless messages.empty?
+			flash :alert, 'Some recurring reservations were not created', "<ul><li>#{messages.join('</li><li>')}</li></ul>"
+		end
+	end
+
 	Reservation.create(
 		:resource_id => resource.id,
 		:event_id => nil,
diff --git a/src/less/resource_scheduler.less b/src/less/resource_scheduler.less
index f4ee47f..5b980e3 100644
--- a/src/less/resource_scheduler.less
+++ b/src/less/resource_scheduler.less
@@ -316,12 +316,12 @@
 	}
 	input {
 	    padding-left: 2.3em;
-	    width: 40%;
+	    width: 90%;
 	    position: relative;
 	    text-align: center;
 	}
 	select {
-	    width: 14%;
+	    width: 90%;
 	    text-align: center;
 	    padding: 0;
 	}
diff --git a/utils/language.rb b/utils/language.rb
index c267ce1..42a6867 100644
--- a/utils/language.rb
+++ b/utils/language.rb
@@ -38,6 +38,13 @@ class Integer
     end
   end
 
+  def leap_year?
+    if (self%4 != 0 || (self%100 == 0 && self%400 != 0))
+        return false;
+    end
+    return true
+  end
+
   alias_method :second, :seconds
   alias_method :minute, :minutes
   alias_method :hour, :hours
@@ -86,4 +93,10 @@ class Time
   def self.from_minutes(minutes)
     Time.now.midnight + minutes.minutes
   end
+
+  def self.days_in_month(month, year)
+    days = [31,28,31,20,31,30,31,31,30,31,30,31]
+    return 29 if month == 2 && year.leap_year?
+    return days[month-1]
+  end
 end
\ No newline at end of file
diff --git a/views/reserve.erb b/views/reserve.erb
index c7e35a6..11a1af7 100644
--- a/views/reserve.erb
+++ b/views/reserve.erb
@@ -179,23 +179,134 @@ end %>
         <label for="title">Name of Reservation: (e.g. "Group Meeting")</label>
         <input type="text" name="title" id="title" value="<%= reservation.title unless reservation.nil? %>">
         <br><br>
+        <% if reservation.nil? # this is a new reservation, we can make it recurring %>
+        <input type="checkbox" name="recurring" id="recurring"> 
+        <label for="recurring">Make this reservation recur</label>
+        <div id="recurring-container" class="date-time-select" style="display: none;">                        
+            <select id="recurring-type" name="recurring_type">
+                <option value="weekly">Weekly</option>
+                <option value="biweekly">Biweekly</option>
+                <optgroup label="Monthly" id="monthly-group">
+                </optgroup>
+            </select>
+            <label for="recurs-until-date">until </label><br>
+            <span class="wdn-icon-calendar"></span>
+            <input id="recurs-until-date" name="recurs_until_date" type="text" class="datepicker" value="<%= day.strftime('%m/%d/%Y') %>" />
+        </div>
+        <br><br>
+        <% end %>
+
         <button type="submit" class="wdn-button wdn-button-brand"><%= reservation.nil? ? 'Reserve' : 'Update' %></button>
     </div>
 </section>
 </form>
 
 <script type="text/javascript">
+var ordinal = function(number) {
+    var mod = number % 100;
+    if (mod >= 11 && mod <= 13) {
+        return number + 'th';
+    } else if (mod % 10 == 1) {
+        return number + 'st';
+    } else if (mod % 10 == 2) {
+        return number + 'nd';
+    } else if (mod % 10 == 3) {
+        return number + 'rd';
+    } else {
+        return number + 'th';
+    }
+};
+
+// this needs to be global as it gets tapped by the page js
+var setRecurringOptions = function(start_elem, month_group_elem) {
+    // get startdate info
+    var weekdays = [
+        "Sunday", 
+        "Monday", 
+        "Tuesday",
+        "Wednesday", 
+        "Thursday", 
+        "Friday", 
+        "Saturday"
+    ];
+
+    var start_year = start_elem.val().substring(6, 10);
+    var start_month = start_elem.val().substring(0, 2);
+    var start_day = parseInt(start_elem.val().substring(3, 5));
+    var start_date = new Date(start_year, start_month - 1, start_day);
+    var start_weekday = weekdays[start_date.getDay()];
+
+    // get week in month
+    var nth = {
+        "1": "First",
+        "2": "Second",
+        "3": "Third",
+        "4": "Fourth",
+        "5": "Last",
+        1: "First",
+        2: "Second",
+        3: "Third",
+        4: "Fourth",
+        5: "Last"
+    };
+
+    // get number of days (28, 29, 30, 31) in month
+    var days_in_month = 28;
+    d = new Date(start_year, start_month - 1, 28);
+    while (days_in_month == d.getDate()) {
+        d = new Date(start_year, start_month - 1, ++days_in_month);
+    }
+    days_in_month--;
+
+    var week = 0; // the week of the start day
+    var total_weeks = 0; // total weeks in the month
+    for (var i = 1; i <= days_in_month; i++) {
+        var d = new Date(start_year, start_month - 1, i);
+        if (weekdays[d.getDay()] == start_weekday && i <= start_day) {
+            week++;
+        }
+        if (weekdays[d.getDay()] == start_weekday) {
+            total_weeks++;
+        }
+    }
+
+    // remove options, if any
+    month_group_elem.children(".dynamic-recurring").remove();
+    // populate rectypemonth with appropriate options
+
+    if (nth[week] != undefined) {
+        month_group_elem.prepend("<option class='dynamic-recurring' value='" + nth[week].toLowerCase() + "'>" + nth[week] + " " + start_weekday + " of every month</option>")
+    }
+
+    if (week == 4 && total_weeks == 4) {
+        month_group_elem.prepend("<option class='dynamic-recurring' value='last'>" + "Last " + start_weekday + " of every month</option>")
+    }
+
+    var text = ordinal(start_day) + ' of every month';
+    month_group_elem.prepend("<option class='dynamic-recurring' value='day'>" + text + "</option>");
+};
+
 WDN.initializePlugin('jqueryui', [function() {  
     $ = require('jquery');
     $('.datepicker').datepicker();
     $("LINK[href^='//unlcms.unl.edu/wdn/templates_4.0/scripts/plugins/ui/css/jquery-ui.min.css']").remove();
 
     // kiosk mode?
-    var kiosk_mode = <%= defined?(kiosk_mode) && kiosk_mode == 'true' ? 'true' : 'false' %>
+    var kiosk_mode = <%= defined?(kiosk_mode) && kiosk_mode == 'true' ? 'true' : 'false' %>;
+
+    $('#recurring').change(function (change) {
+        if ($(this).is(':checked')) {
+            $('#recurring-container').show();
+        } else {
+            $('#recurring-container').hide();
+        }
+    }).change();
 
     $('#date').change(function () {
         var date = $('#date').val().split('/');
         window.location = window.location.href.split('?')[0] + '?date=' + date[2] + '-' + date[0] + '-' + date[1] + (kiosk_mode ? '&kiosk_mode=true' : '');
     });
+
+    setRecurringOptions($('#date'), $('#monthly-group'));
 }]);
 </script>
\ No newline at end of file
diff --git a/views/resource_calendar.erb b/views/resource_calendar.erb
index 5b961f9..414af81 100644
--- a/views/resource_calendar.erb
+++ b/views/resource_calendar.erb
@@ -17,6 +17,12 @@ end %>
 	</h3>
 </div>
 
+<% unless kiosk_mode %>
+<div>
+<a class="wdn-button wdn-button-brand" href="/<%= @space.url_name %>/resources/<%= resource.id %>/reserve/">Reserve This Resource</a>
+</div>
+<% end %>
+
 <div style="margin-bottom: 16px;">
 <h4 style="text-align: center; margin: 0;">
 <%= month = sunday.strftime('%B %Y') %><%= (month2 = (sunday+6.days).strftime('%B %Y')) == month ? '' : " - #{month2}" %>
@@ -163,6 +169,7 @@ end %>
 </div>
 
 <script type="text/javascript">
+
 require(['jquery'], function ($) {
 	var max_z = 5;
 	$(document).ready(function () {
-- 
GitLab