Awesomeness Calc

by longmatthewh

HTML

<form id="awesome-form">
    <label for="first-name">First Name:</label>
    <input name="firstName" id="first-name" />
    <fieldset>
        <legend>Are you a developer?</legend>
        <input name="developer" id="developer-yes" type="radio" value="true" />
        <label for="developer-yes">Yes</label>
        <input name="developer" id="developer-no" type="radio" value="false" />
        <label for="developer-no">No</label>
    </fieldset>
    <fieldset>
        <legend>Do you own a guitar?</legend>
        <input name="guitar" id="guitar-yes" type="radio" value="true" />
        <label for="guitar-yes">Yes</label>
        <input name="guitar" id="guitar-no" type="radio" value="false" />
        <label for="guitar-no">No</label>
    </fieldset>
    <fieldset>
        <legend>What's your favorite browser?</legend>
        <input name="browser" id="browser-ie" type="radio" value="ie" />
        <label for="browser-ie">Internet Explorer</label>
        <br>
        <input name="browser" id="browser-chrome" type="radio" value="chrome" />
        <label for="browser-chrome">Chrome</label>
        <br>
        <input name="browser" id="browser-firefox" type="radio" value="firefox" />
        <label for="browser-firefox">Firefox</label>
    </fieldset>
    <input type="submit" value="How awesome am I?">
</form>
<div id="score" aria-live="polite"></div>

JavaScript

$('#awesome-form').submit(function (e) {
    e.preventDefault();
    var awesomeData = {
        firstName: $('#first-name').val(),
        favoriteBrowser: $('[name="browser"]:checked').val(),
        ownsGuitar: $('[name="guitar"]:checked').val(),
        isDeveloper: $('[name="developer"]:checked').val()
    };

    var awesomenessCalc = new AwesomenessCalc(awesomeData);
    $('#score').html('Your awesomeness score is ' + awesomenessCalc.getScore() + '!');
});

function AwesomenessCalc(data) {
    this.firstName = data.firstName;
    this.ownsGuitar = data.ownsGuitar;
    this.isDeveloper = data.isDeveloper;
    this.favoriteBrowser = data.favoriteBrowser;

    this.getScore = function () {
        var score = 0;
        score += calcItemScore(this.firstName, ['matt'], 50);
        score += calcItemScore(this.favoriteBrowser, ['ie', 'internet explorer'], -60);
        score += calcItemScore(this.favoriteBrowser, ['firefox', 'chrome'], 30);
        score += (this.isDeveloper) ? 10 : 0;
        score += (this.ownsGuitar) ? 10 : 0;
        return score;
    };

    function calcItemScore(dataItem, matches, score) {
        if (dataItem && isMatch(dataItem, matches)) {
            return score;
        }
        return 0;
    }

    function isMatch(dataItem, matches) {
        var isMatch = false;
        var lowerCaseDataItem = dataItem.toLowerCase();
        $.each(matches, function (index, value) {
            if (lowerCaseDataItem.indexOf(value) > -1) {
                isMatch = true;
            }
        });
        return isMatch;
    }
}