﻿if(typeof(EdgPage) == 'undefined')
{
    var EdgPage = window.EdgPage = Class.extend({
        // All the components registered with this page.
        components: [],
        // A (possible) list of the events available to be triggered
        triggers: [],
        // A list of listeners registered with the page.
        listeners: [],


        init: function() {
            $(document).data('pageController', this);
        },

        log: function(data) {
            if (typeof (console) != 'undefined') {
                console.log(data);
            }
        },

        Trigger: function(evt, args) {
            this.log(['Triggering: ', evt, args]);
            $(document).trigger(evt, args);
        },

        ComponentAdd: function(obj) {
            this.components[this.components.length] = obj;
        },

        ComponentRemove: function(obj) {
            for (var x = 0, len = this.components.length; x < len; x++) {
                var comp = this.components[x];
                if (comp == obj) {
                    this.components.splice(x, 1);
                    break;
                }
            }
        },

        RegisterListener: function(trigger, data, func) {
            if (typeof (func) == 'function') {
                $(document).bind(trigger, data, func);
            } else if (typeof (data) == 'function') {
                func = data;
                data = {};
                $(document).bind(trigger, data, func);
            } else {
                throw ('Invalid arguments to EdgPage.RegisterListener');
            }

            if (typeof (this.listeners[trigger]) == 'undefined') {
                this.listeners[trigger] = [];
            }

            this.listeners[trigger][this.listeners[trigger].length] = { triggerFunction: func, triggerData: data };
        },

        AddTrigger: function(triggerName) {
            this.triggers[this.triggers.length] = triggerName;
        },

        // Want to know what's paying attention to you? Just ask.
        ShowListeners: function() {
            var list = [];
            for (var i in this.listeners) {
                list[list.length] = this.listeners[i];
            }
            return list;
        },

        // Want to know what's available? Just ask.
        ShowTriggers: function() {
            var list = [];
            for (var i in this.triggers) {
                list[list.length] = this.triggers[i];
            }
            return list;
        },
        IsValid: function() {
            var valid = true;
            if (this.components.length > 0) {
                for (var compidx = 0, complen = this.components.length; compidx < complen; compidx++) {
                    var component = this.components[compidx];
                    if (typeof (component.IsValid) != 'undefined') {
                        if (component.IsValid.apply(component, []) === false) {
                            valid = false;
                            break;
                        }
                    }
                }
            }
            else {
                valid = true;
            }
            return valid;
        },
        SetError: function(msg) {
            var pageErrorDiv = $('div[id$=PageError]');
            if (pageErrorDiv.length > 0) {
                pageErrorDiv.html(msg).addClass('error').show();
            }
        },
        HideError: function() {
            var pageErrorDiv = $('div[id$=PageError]');
            if (pageErrorDiv.length > 0) {
                pageErrorDiv.hide();
            }
        },
        BlockPage: function(wrapMsg) {
            $.blockUI({
                message: wrapMsg,
                css: {
                    'width': '490px',
                    'margin-left': '-20%',
                    'margin-right': 'auto'
                },
                overlayCSS: {
                    backgroundColor: '#ffffff',
                    opacity: 0.6,
                    '-moz-border-radius': '10px',
                    '-webkit-border-radius': '10px'
                }
            });
        },

        // String message to be shown.
        // Boolean, show the okay button to dismiss this dialog.
        Alert: function(msg, showButton) {
            var wrapMsg = $('<div class="help_white blockMsg modalPopup loadingWrapper" />');
            var msgDiv = $('<div />');

            // If we're not showing the dismiss button, show the loading icon
            // so we have some idea that something is happening in the background.
            if (!showButton) {
                msgDiv.addClass("loading");
            }

            var okButton = $('<div class="acenter"><input type="button" id="alertButtonOk" value="Ok" class="slButtonNarrow btn_generic"></div>');
            okButton.click(function(e) { $.unblockUI(); });


            msg.detach().show();
            msgDiv.html(msg);
            wrapMsg.append(msgDiv);

            if (showButton !== false)
                wrapMsg.append(okButton);

            this.BlockPage(wrapMsg);
        }
    });
}
