// Source: http://stackoverflow.com/a/1830844
function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

function AppViewModel() {
    this.statStrength = ko.observable();
    this.statEndurance = ko.observable();
    this.statAgility = ko.observable();
    this.statSpeed = ko.observable();

    this.statWillpower = ko.observable();
    this.statInsight = ko.observable();
    this.statReasoning = ko.observable();
    this.statPerception = ko.observable();

    this.statPresence = ko.observable();
    this.statComposure = ko.observable();
    this.statManipulation = ko.observable();
    this.statBeauty = ko.observable();

    this.statBonusStrength = ko.computed(function() {
        return this.statStrength();
    }, this);
}

// Activate knockout.js
ko.applyBindings(new AppViewModel());

@@ -112,16 +112,778 @@
 (n);%0A%7D%0A%0A
+function statBonus(statValue) %7B%0A    if(!isNumber(statValue)) %7B%0A        return false;%0A    %7D%0A    switch(+statValue) %7B // cast to number%0A        case 0:%0A            return %22%E2%80%93%22;%0A            break;%0A        case 1:%0A            return -5;%0A            break;%0A        case 2:%0A            return -3;%0A            break;%0A        case 3:%0A            return 0;%0A            break;%0A        case 4:%0A            return 1;%0A            break;%0A        case 5:%0A            return 3;%0A            break;%0A        case 6:%0A            return 5;%0A            break;%0A        case 7:%0A            return 9;%0A            break;%0A        case 8:%0A            return 15;%0A            break;%0A        case 9:%0A            return 21;%0A            break;%0A        default:%0A            return false;%0A    %7D%0A%7D%0A%0A
 function

Add function to determine stat bonus from value.