     forceSelectRow: (evt)->
       # forceSelectRow is used to mock the multiple-select key
       @selectRow($.extend({}, evt))
+    deselect_all_rows: () ->
+      @$('.survey__row').removeClass('survey__row--selected')
+
+    deselect_rows: (evt) =>
+      if @is_selecting
+        @is_selecting = false
+      else
+        @deselect_all_rows()
+
     selectRow: (evt)->
+      @is_selecting = true
       $et = $(evt.target)
       if $et.hasClass('js-blur-on-select-row')
         return

      sortable_stop = (evt, ui)=>
        $(ui.item).trigger('survey__row-sortablestop')

      @formEditorEl.sortable({
          # PM: commented out axis, because it's better if cards move horizontally and vertically
          # axis: "y"

      # a way to ensure the event is not run twice when in nested .js-select-row elements
      _isIntendedTarget = $ect.closest('.survey__row').get(0) is $et.closest('.survey__row').get(0)
      if _isIntendedTarget
        $target = $et.closest('.survey__row')
        if !evt.ctrlKey
          selected_rows = $target.siblings('.survey__row--selected')
          if !$target.hasClass('survey__row--selected') || selected_rows.length > 1
            @deselect_all_rows()



        $target.toggleClass("survey__row--selected")
        if $target.hasClass('survey__row--group')
          $target.find('li').toggleClass("survey__row--selected", $target.hasClass("survey__row--selected"))

        $group = $target.parents('.survey__row')
        if $group.length > 0
          @select_group_if_all_items_selected($group)

        @questionSelect()
        @$('.js-blur-on-select-row').blur()

    select_group_if_all_items_selected: ($group) ->
      $rows = $group.find('.survey__row')
      $group.toggleClass('survey__row--selected', $rows.length == $rows.filter('.survey__row--selected').length)

    questionSelect: (evt)->
      @activateGroupButton(@selectedRows().length > 0)
