var AudioletGroup = new Class({
    initialize: function(audiolet, numberOfInputs, numberOfOutputs) {
        this.audiolet = audiolet;
        this.numberOfInputs = numberOfInputs;
        this.numberOfOutputs = numberOfOutputs;

        this.inputs = [];
        for (var i = 0; i < numberOfInputs; i++) {
            this.inputs.push(new PassThroughNode(this.audiolet, 1, 1));
        }

        this.outputs = [];
        for (var i = 0; i < numberOfOutputs; i++) {
            this.outputs.push(new PassThroughNode(this.audiolet, 1, 1));
        }
    },

    connect: function(node, output, input) {
        this.outputs[output || 0].connect(node, 0, input);
    },

    disconnect: function(node, output, input) {
        this.outputs[output || 0].disconnect(node, 0, input);
    },

    remove: function() {
        var numberOfInputs = this.inputs.length;
        for (var i = 0; i < numberOfInputs; i++) {
            this.inputs[i].remove();
        }

        var numberOfOutputs = this.outputs.length;
        for (var i = 0; i < numberOfOutputs; i++) {
            this.outputs[i].remove();
        }
    }
});

@@ -1,794 +1,2100 @@
-var AudioletGroup = new Class(%7B%0A    initialize: function(audiolet, numberOfInputs, numberOfOutputs) %7B%0A        this.audiolet = audiolet;%0A        this.numberOfInputs = numberOfInputs;%0A        this.numberOfOutputs = numberOfOutputs;%0A%0A        this.inputs = %5B%5D;%0A        for (var i = 0; i %3C numberOfInputs; i++) %7B%0A            this.inputs.push(new PassThroughNode(this.audiolet, 1, 1));%0A        %7D%0A%0A        this.outputs = %5B%5D;%0A        for (var i = 0; i %3C numberOfOutputs; i++) %7B%0A            this.outputs.push(new PassThroughNode(this.audiolet, 1, 1));%0A        %7D%0A    %7D,%0A%0A    connect: function(node, output, input) %7B%0A        this.outputs%5Boutput %7C%7C 0%5D.connect(node, 0, input);%0A    %7D,%0A%0A    disconnect: function(node, output, input) %7B%0A        this.outputs%5Boutput %7C%7C 0%5D.disconnect(node, 0, input);%0A    %7D,%0A
+/**%0A * A container for collections of connected AudioletNodes.  Groups make it%0A * possible to create multiple copies of predefined networks of nodes,%0A * without having to manually create and connect up each individual node.%0A *%0A * From the outside groups look and behave exactly the same as nodes.%0A * Internally you can connect nodes directly to the group's inputs and%0A * outputs, allowing connection to nodes outside of the group.%0A */%0Avar AudioletGroup = new Class(%7B%0A    /**%0A     * Constructor%0A     *%0A     * @param %7BAudiolet%7D audiolet The audiolet object%0A     * @param %7BNumber%7D numberOfInputs%0A     * @param %7BNumber%7D numberOfOutputs%0A     */%0A    initialize: function(audiolet, numberOfInputs, numberOfOutputs) %7B%0A        this.audiolet = audiolet;%0A        this.numberOfInputs = numberOfInputs;%0A        this.numberOfOutputs = numberOfOutputs;%0A%0A        this.inputs = %5B%5D;%0A        for (var i = 0; i %3C numberOfInputs; i++) %7B%0A            this.inputs.push(new PassThroughNode(this.audiolet, 1, 1));%0A        %7D%0A%0A        this.outputs = %5B%5D;%0A        for (var i = 0; i %3C numberOfOutputs; i++) %7B%0A            this.outputs.push(new PassThroughNode(this.audiolet, 1, 1));%0A        %7D%0A    %7D,%0A%0A    /**%0A     * Connect the group to another node or group%0A     *%0A     * @param %7BAudioletNode%7CAudioletGroup%7D node The node to connect to%0A     * @param %7BNumber%7D output The index of the output to connect from%0A     * @param %7BNumber%7D input The index of the input to connect to%0A     */%0A    connect: function(node, output, input) %7B%0A        this.outputs%5Boutput %7C%7C 0%5D.connect(node, 0, input);%0A    %7D,%0A%0A    /**%0A     * Disconnect the group from another node or group%0A     *%0A     * @param %7BAudioletNode%7CAudioletGroup%7D node The node to disconnect from%0A     * @param %7BNumber%7D output The index of the output to disconnect%0A     * @param %7BNumber%7D input The index of the input to disconnect%0A     */%0A%0A    disconnect: function(node, output, input) %7B%0A        this.outputs%5Boutput %7C%7C 0%5D.disconnect(node, 0, input);%0A    %7D,%0A%0A    /**%0A     * Remove the group completely from the processing graph, disconnecting all%0A     * of its inputs and outputs%0A     */
 %0A   

Add docs for AudioletGroup