/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 *
 * The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 * The Original Code is JSIRC Library
 *
 * The Initial Developer of the Original Code is New Dimensions Consulting,
 * Inc. Portions created by New Dimensions Consulting, Inc. are
 * Copyright (C) 1999 New Dimenstions Consulting, Inc. All
 * Rights Reserved.
 *
 * Contributor(s): 
 *
 *
 * Contributor(s):
 *  Robert Ginda, rginda@ndcico.com, original author
 */

function CCommandManager ()
{

    this.commands = new Array();

}

CCommandManager.prototype.add =
function cmgr_add (name, func, usage, help)
{
    function compare (a, b)
    {
        if (a.name == b.name)
            return 0;
        else
            if (a.name > b.name)
                return 1;
            else
                return -1;
    }
    
    this.commands.push ({name: name, func: func, usage: usage, help: help});
    this.commands = this.commands.sort(compare);
    
}

CCommandManager.prototype.list =
function cmgr_list (partialName)
{
    /* returns array of command objects which look like |partialName|, or
     * all commands if |partialName| is not specified */

    if ((typeof partialName == "undefined") ||
        (String(partialName) == ""))
        return this.commands;

    var ary = new Array();

    for (var i in this.commands)
    {
        if (this.commands[i].name.indexOf(partialName) == 0)
            if (partialName.length == this.commands[i].name.length)
                /* exact match */
                return [this.commands[i]];
            else
                ary.push (this.commands[i]);
    }

    return ary;

}

CCommandManager.prototype.listNames =
function cmgr_listnames (partialName)
{
    var cmds = this.list(partialName);
    var cmdNames = new Array();
    
    for (var c in cmds)
        cmdNames.push (cmds[c].name);

    return cmdNames.sort();
}
