         alert("should print #{labels.length} label(s) - NOT YET IMPLEMENTED")
         location.replace('/checkin')
 
+
 class CheckinPerson
 
   constructor: (@elm) ->
     @id = @elm.data('id')
     @button = $(".checkin-select-person[data-id='#{@id}']")
-    @times = for time in @elm.find('.checkin-time')
-      new CheckinTime($(time), this)
+    @times = {}
+    for time in @elm.find('.checkin-time')
+      @times[$(time).data('id')] = new CheckinTime($(time), this)
     @elm.find('.same-as-last-week').click(@sameAsLastWeek)
+
+  load: (data) =>
+    for checkin_time_id, records of data
+      @times[checkin_time_id]?.load(records)
 
   show: =>
     @elm.show()
     @button.addClass('active')
-    t.show() for t in @times
+    t.show() for _, t of @times
 
   hide: =>
     @elm.hide()
-    t.hide() for t in @times
+    t.hide() for _, t of @times
     @button.removeClass('active')
 
   sameAsLastWeek: (e) =>
     e.preventDefault()
-    alert('NOT YET IMPLEMENTED')
+    elm = $(e.delegateTarget)
+    for id in elm.data('ids').split(',')
+      [time_id, group_id] = id.split('-')
+      @times[time_id]?.load([{group_id: group_id}])
 
   classSelected: (id) =>
     @elm.find('.checkin-same').hide()
     @selected = true
     @button.find('.status').removeClass('fa-chevron-right').addClass('fa-check text-green')
-    checkin.personCheckedIn(@id, (t.selected for t in @times))
+    checkin.personCheckedIn(@id, @selections())
 
   classUnselected: (id) =>
-    count = (t for t in @times when t.selected).length
+    count = (t for _, t of @times when t.selected).length
     if count == 0
       @elm.find('.checkin-same').show()
       @selected = false
       @button.find('.status').removeClass('fa-check text-green').addClass('fa-chevron-right')
-    checkin.personCheckedIn(@id, (t.selected for t in @times))
+    checkin.personCheckedIn(@id, @selections())
+
+  selections: =>
+    obj = {}
+    for id, time of @times
+      obj[id] = time.selected
+    obj
 
 
 class CheckinTime

    @elm.find('.checkin-open').on 'click', @openTime
    @elm.find('.checkin-change').on 'click', @clearClassAndOpenTime
    @

  show: =>
    @elm.show()

    @elm.find('.checkin-not-attending-header').hide()

class SonicProtocol

  constructor: () ->
    @audioContext = new webkitAudioContext();
    @alpha = '0123456789.';
    @

  listen: =>
    console.log 'listen'
    @sserver = new SonicServer(alphabet: @alpha)
    @sserver.on 'message', (message) ->
      alert 'Not implimented: Print tags for ' + message.replace(/\./g,'')
    @sserver.start()

  send: (message) =>
    ssocket = new SonicSocket(
      alphabet: @alpha
