Multiple Filter on ng-repeat

Set multiple parallel filter on ng-repeat and order the result by column. More information in my blog http://andreaskarz.blogspot.com/2014/03/mehrere-filter-auf-ng-repeat-anwenden.html

HTML

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.js"></script>

<div ng-app="app" ng-cloak>
  <section layout="row" flex="">
    <div ng-controller="mainController" style="margin: 0 20px;">
      <label>Search:
        <input ng-model="filter.searchText">
      </label>
      <h2>Course Type</h2>
      <label>Public</label>
      <input type="checkbox" ng-model="filter.courseType.public" ng-true-value="'public'" ng-false-value="'!public'" />&nbsp;
      <label>Private</label>
      <input type="checkbox" ng-model="filter.courseType.private" ng-true-value="'private'" ng-false-value="'!private'" />&nbsp;
      <label>Military</label>
      <input type="checkbox" ng-model="filter.courseType.military" ng-true-value="'military'" ng-false-value="'!military'" />&nbsp;
      <label>Resort</label>
      <input type="checkbox" ng-model="filter.courseType.resort" ng-true-value="'resort'" ng-false-value="'!resort'" />&nbsp;
      <hr />
      <h2>Region</h2>
      <label>Northern</label>
      <input type="checkbox" ng-model="filter.region.northern" ng-true-value="'northern'" ng-false-value="'!northern'" />&nbsp;
      <label>Central</label>
      <input type="checkbox" ng-model="filter.region.central" ng-true-value="'central'" ng-false-value="'!southern'" />
      <label>Southwestern</label>
      <input type="checkbox" ng-model="filter.region.southwestern" ng-true-value="'southwestern'" ng-false-value="'!southwestern'" />
     ...

CSS

body {
  font-family: calibri, arial;
}

h2 {
  font-size: 14pt;
  font-weight: bold;
}

li {
  font-family: courier;
}

th {
  font-weight: bold;
  cursor: pointer;
}

JavaScript

var app = angular.module('app', ['ngMaterial']);

app.controller('mainController', function($scope, filterSettings) {

  $scope.filter = filterSettings; // retrieve settings object from service method and bring into scope    
  $scope.OrderFilter = 'name'; // Default sort order

  // Data object
  $scope.courses = [{
    name: 'Course 1',
    courseType: 'Public',
    region: 'Northern'
  }, {
    name: 'Course 2',
    courseType: 'Public',
    region: 'Northern'
  }, {
    name: 'Course 3',
    courseType: 'Private',
    region: 'Northern'
  }, {
    name: 'Links 4',
    courseType: 'Private',
    region: 'Northern'
  }, {
    name: 'Links 5',
    courseType: 'Private',
    region: 'Northern'
  }, {
    name: 'Links 6',
    courseType: 'Public',
    region: 'Southeastern'
  }, {
    name: 'Links 7',
    courseType: 'Public',
    region: 'Southeastern'
  }, {
    name: 'Links 8',
    courseType: 'Military',
    region: 'Southeastern'
  }, {
    name: 'Course 9',
    courseType: 'Private',
    region: 'Southeastern'
  }, {
    name: 'Course 10',
    courseType: 'Private',
    region: 'Southeastern'
  }];
});

app.controller('secondController', function($scope, filterSettings) {
  $scope.filter = filterSettings; // retrieve settings object from service method and bring into scope
});

app.factory('filterSettings', function() {

  // Filter defaults
  var settings = {};
  settings.searchText = '';
  settings.courseType = {
    'public': 'public',
    'private': 'private',
    'military': 'military',
    'resort': 'resort'
  };
  settings.region = {
    'northern': 'northern',
    'central': 'central',
    'southwestern': 'southwestern',
    'southeastern': 'southeastern'
  };

  return settings;
});

// Global search filter
app.filter('searchFilter', function($filter) {
  return function(items, searchfilter) {
    var isSearchFilterEmpty = true;
    angular.forEach(searchfilter, function(searchstring) {
      if (searchstring != null && searchstring != "") {
       ...