// Generated by CoffeeScript 1.3.3
(function() {
  var ENTER_KEY;

  ENTER_KEY = 13;

  window.AppViewModel = function() {
    var filter_fn, router,
      _this = this;
    this.collections = {
      todos: new TodoCollection()
    };
    this.collections.todos.fetch();
    this.list_filter_mode = ko.observable('');
    filter_fn = ko.computed(function() {
      switch (_this.list_filter_mode()) {
        case 'active':
          return function(model) {
            return model.completed();
          };
        case 'completed':
          return function(model) {
            return !model.completed();
          };
        default:
          return function() {
            return false;
          };
      }
    });
    this.todos = kb.collectionObservable(this.collections.todos, {
      view_model: TodoViewModel,
      filters: filter_fn
    });
    this.todos_changed = kb.triggeredObservable(this.collections.todos, 'change add remove');
    this.tasks_exist = ko.computed(function() {
      _this.todos_changed();
      return !!_this.collections.todos.length;
    });
    this.title = ko.observable('');
    this.onAddTodo = function(view_model, event) {
      if (!$.trim(_this.title()) || (event.keyCode !== ENTER_KEY)) {
        return true;
      }
      _this.collections.todos.create({
        title: $.trim(_this.title())
      });
      return _this.title('');
    };
    this.remaining_count = ko.computed(function() {
      _this.todos_changed();
      return _this.collections.todos.remainingCount();
    });
    this.completed_count = ko.computed(function() {
      _this.todos_changed();
      return _this.collections.todos.completedCount();
    });
    this.all_completed = ko.computed({
      read: function() {
        return !_this.remaining_count();
      },
      write: function(completed) {
        return _this.collections.todos.completeAll(completed);
      }
    });
    this.onDestroyCompleted = function() {
      return _this.collections.todos.destroyCompleted();
    };
    this.loc = {
      remaining_message: ko.computed(function() {
        return "<strong>" + (_this.remaining_count()) + "</strong> " + (_this.remaining_count() === 1 ? 'item' : 'items') + " left";
      }),
      clear_message: ko.computed(function() {
        var count;
        if ((count = _this.completed_count())) {
          return "Clear completed (" + count + ")";
        } else {
          return '';
        }
      })
    };
    router = new Backbone.Router;
    router.route('', null, function() {
      return _this.list_filter_mode('');
    });
    router.route('active', null, function() {
      return _this.list_filter_mode('active');
    });
    router.route('completed', null, function() {
      return _this.list_filter_mode('completed');
    });
    Backbone.history.start();
  };

}).call(this);
