/**
 * 
 */
(function(factory) {
    if (typeof define === "function" && define.amd) {
        // AMD. Register as an anonymous module.
        define([], factory);
    } else {
        // Browser globals
        factory(jQuery);
    }
}(function(arg) {

    fgCommand = {
        oneArg : function(t1, p1) {
            return {
                name : '',
                children : [
                    {
                        name : t1,
                        index : 0,
                        value : p1
                    }
                ]
            };
        },
        twoArgs : function(t1, p1, t2, p2) {
            return {
                name : '',
                children : [
                        {
                            name : t1,
                            index : 0,
                            value : p1
                        }, {
                            name : t2,
                            index : (t1 == t2 ? 1 : 0),
                            value : p2
                        }
                ]
            };
        },

        twoPropsArgs : function(p1, p2) {
            return this.twoArgs("property", p1, "property", p2);
        },

        propValueArgs : function(p, v) {
            return this.twoArgs("property", p, "value", v);
        },

        sendCommand : function(name, args) {
            if (typeof (args) == 'undefined ')
                $.post("/run.cgi?value=" + name);
            else
                $.post("/run.cgi?value=" + name, JSON.stringify(args));

        },

        propertySwap : function(p1, p2) {
            this.sendCommand("property-swap", this.twoPropsArgs(p1, p2));
        },

        propertyAssign : function(p1, value) {
            this.sendCommand("property-assign", this.propValueArgs(p1, value));
        },

        pause : function() {
            $.post("/run.cgi?value=pause");
        },
        
        reset : function() {
            $.post("/run.cgi?value=reset");
        },
        
        exit : function() {
            $.post("/run.cgi?value=exit");
        },

        dialogShow : function(dlg) {
            this.sendCommand("dialog-show", this.oneArg("dialog-name", dlg));
        },
        dialogClose : function(dlg) {
            this.sendCommand("dialog-close", this.oneArg("dialog-name", dlg));
        },
        reposition : function() {
            $.post("/run.cgi?value=reposition");
        },
        timeofday : function(type, offset) {
            this.sendCommand("timeofday", this.twoArgs("timeofday", type, "offset", null != offset ? offset : 0));
        },
        switchAircraft : function(id) {
            this.sendCommand("switch-aircraft", this.oneArg("aircraft", id));
        },
    };

    return fgCommand;
}));