Little AI fiddlings

Just fiddling.

by mich

HTML

<form action="." method="post" onsubmit="AI.process(this.ai_input.value); event.preventDefault();">
    <fieldset>
        <label for="ai_input">Input:</label>
        <input type="text" id="ai_input" name="ai_input" />
        <input type="submit" value="Process" />
        <label for="ai_output">Output:</label>
        <textarea id="ai_output" name="ai_output" rows="6" cols="40"></textarea>
        <input type="button" value="Clear output" onclick="AI.clearOutput();" />
    </fieldset>
</form>

CSS

body { font-family: 'Arial', 'Helvetica', 'sans-serif'; font-size: 16px; }
label { display: block; font-weight: bold; margin: 2px 0; }
input[type="text"], textarea { border: solid 1px #777; padding: 2px;  width: 75%; }
textarea { height: 250px; }

JavaScript

var AI = {
    'facts': { },
    'setup': {
        'inputFieldId':  'ai_input',
        'outputFieldId': 'ai_output'
    },
    'process': function ( inputStr ) {
        AI.output('>> ' + inputStr);
        var commandWords = inputStr.replace(/\s{2,}/, '').split(' ');
        
        if(commandWords.length >= 3) {
            commandWords[0] = commandWords[0].toLowerCase();
            commandWords[1] = commandWords[1].toLowerCase();
            if(commandWords[1] == 'is' && inputStr.substr(inputStr.length - 1, 1) != '?') {
                AI.output('<< ' + AI.setDefinition(commandWords));
                //save definition and say ok                
            }
            else if ((commandWords[0] == 'what' || commandWords[0] == 'who') && inputStr.substr(inputStr.length - 1, 1) == '?') {
                //look up definition and output it
                AI.output('<< ' + commandWords[2].substr(0, commandWords[2].length-1) + ' is ' + AI.getDefinition(commandWords[2].substr(0, commandWords[2].length-1).toLowerCase()) + '.');
            }
        }
        
        document.getElementById(AI.setup.inputFieldId).value = '';
    },
    'setDefinition': function ( definitionCommand ) {
        var full_definition = '';
        for(var a = 2; a < definitionCommand.length; a += 1) {
            full_definition += definitionCommand[a] + ' ';
        }
        full_definition = full_definition.substr(0, full_definition.length - 1);
        AI.facts[definitionCommand[0]] = full_definition;
        return 'OK.';            
    },
    'getDefinition': function ( term ) {
        if(typeof(AI.facts[term]) !== 'undefined') {
            return AI.facts[term];
        }
        else {
            return '[not yet defined]';
        }
    },
    'output': function ( outStr ) {
        var ai_output_field = document.getElementById(AI.setup.outputFieldId);
        ai_output_field.value += outStr + "\n";
    },
    'clearOutput': function ( ) {
       ...