
/* Panel JS */
function RunningItem(Signature, Message) {
    this.Signature = Signature;
    this.Message = Message;
    this.Completed = false;
}

ITAPanelBox = function() {
    var PanelController = {
        config: {
            ControllerID: 'ITAPanelBox',
            ButtonContainerID: 'panel_footer_buttons',
            actionsrunning: new Array()
        },
        init: function() {
            try {
                // Initialise the dialog control
                this.dialogPanel = new YAHOO.widget.Panel("PageModalBox", {
                    width: "240px",
                    fixedcenter: true,
                    close: false,
                    draggable: true,
                    zindex: 4,
                    modal: true,
                    visible: false
                });

                this.reset();
            }
            catch (e) {
                SetStatusMessage("A problem occured initialising the PanelController." + e);
            }
        },
        dialogPanel: {},
        actionStart: function(signature, message, bIsDraggable, bHasCloseButton) {
            // DisplayPleaseWait: function(MSG) {
            var _Queue = PanelController.config.actionsrunning.length;
            PanelController.config.actionsrunning[_Queue] = new RunningItem(signature, message);

            //consolewrite("ActionStarted by:" + signature);

            if (_Queue == 0) {
                // only need to show it if it isn't already displayed
                PanelController.dialogPanel.setHeader(message);
                PanelController.updateFooter(" ");

                if (typeof (bHasCloseButton) != "undefined") {
                    PanelController.dialogPanel.cfg.setProperty('close', bHasCloseButton);
                }

                if (typeof (bIsDraggable) != "undefined") {
                    PanelController.dialogPanel.cfg.setProperty('draggable', bIsDraggable);
                }

                PanelController.dialogPanel.show();
            }
        },
        actionComplete: function(signature) {
            var AllComplete = true;
            try {
                //consolewrite("Set complete: '" + signature + "'");
                var Start = PanelController.config.actionsrunning.length - 1
                for (var i = Start; i >= 0; --i) {
                    if (signature == PanelController.config.actionsrunning[i].Signature) {
                        PanelController.config.actionsrunning[i].Completed = true;
                        PanelController.config.actionsrunning.splice(i, 1);
                    }
                }

                AllComplete = PanelController.config.actionsrunning.length == 0;

                //consolewrite("Set complete: '" + signature + "'");
                if (AllComplete) {
                    //consolewrite("All complete by: '" + signature + "'");
                    PanelController.actionCompleteAll();
                }
                else {
                    PanelController.dialogPanel.setHeader(PanelController.config.actionsrunning[PanelController.config.actionsrunning.length - 1].Message);
                }
            }
            catch (e) {
                SetStatusMessage("A problem occured running action complete for the PanelController." + e);
            }

        },
        actionCompleteAll: function() {

            PanelController.dialogPanel.hide();
            //ready for next call
            PanelController.reset();
            PanelController.config.actionsrunning = new Array();
        },

        reset: function() {
            this.dialogPanel.showEvent.unsubscribeAll();
            this.dialogPanel.cfg.setProperty('width', '240px');
            this.dialogPanel._buttons = [];
            this.dialogPanel.setHeader("");
            this.updateFooter("");
            this.dialogPanel.setBody('<img src="http://l.yimg.com/a/i/us/per/gr/gp/rel_interstitial_loading.gif" />');
            this.dialogPanel.render(document.body);
        },
        setProperty: function(Property, Value) { PanelController.dialogPanel.cfg.setProperty(Property, Value); },
        getProperty: function(Property) { return PanelController.dialogPanel.cfg.getProperty(Property); },
        updateFooter: function(MSG) { PanelController.dialogPanel.setFooter('<div class="bl"></div><span id="' + PanelController.config.ButtonContainerID + '" class="button-group">' + MSG + '</span><div class="br"></div>'); }
    }
    return {
        //for unrecomended direct acces you can use the Dialog directly.
        DialogBox: PanelController.dialogPanel,
        Init: function() { PanelController.init(); },
        //Reset the form completely
        Reset: function() { PanelController.reset(); },

        //ActionStart: function(signature, message) { PanelController.actionStart(signature, message); },
        ActionStart: PanelController.actionStart,
        ActionComplete: function(signature) { PanelController.actionComplete(signature); },

        SetProperty: function(Property, Value) { PanelController.setProperty(Property, Value); },
        GetProperty: function(Property) { return PanelController.getProperty(Property); },

        Body: function(HTML) { PanelController.dialogPanel.setBody(HTML); },
        UpdateStatus: function(msg) { PanelController.updateFooter(msg); },

        Buttons: {
            Clear: function() { PanelController.dialogPanel._buttons = []; },
            Add: function(ButtonID, sLabel, onButtonClick) {
                PanelController.dialogPanel._buttons[PanelController.dialogPanel._buttons.length] = new YAHOO.widget.Button({
                    id: ButtonID,
                    type: 'push',
                    label: sLabel,
                    container: PanelController.config.ButtonContainerID
                });
                PanelController.dialogPanel._buttons[PanelController.dialogPanel._buttons.length - 1].on("click", onButtonClick);
            },
            Remove: function(ButtonID) {
                //Call destroy on button that matches id.
                for (var i = 0; i < PanelController.dialogPanel._buttons.length; i++) {
                    if (ButtonID + "-button" == PanelController.dialogPanel._buttons[i]._button.id) {
                        PanelController.dialogPanel._buttons.destroy;
                        PanelController.dialogPanel._buttons.splice(i, 1);
                    }
                }
            }
        }

    }
} ();

