﻿var ControlManagerType = function() {
    this.addEvents({
        "append": true,
        "add": true,
        "update": true,
        "updateGroup":true,
        "remove": true,
        "alert": true
    });
};

Ext.extend(ControlManagerType, Ext.util.Observable,{
        controls_: {},
        Alert: function(html) {
            Ext.MessageBox.alert('Alert', html);
            this.fireEvent("alert", null);
        },

        Append: function(/*id, */html) {
            var wnd = new Ext.Window({
                html: html,
                draggable: false,
                hideBorders: true,
                resizable: false,
                shadow: false,
                modal: true,
                closable: false,
                border: false,
                bodyBorder: false
            });
            if (Ext.isIE6) {
                var el = Ext.DomHelper.append(document.body, html, true);
                var ctrl = el.dom;
                wnd.setWidth(ctrl.offsetWidth);
                el.remove();
            }
            Ext.getBody().unmask();
            wnd.show();
            Utils.InitializeControls(wnd.el);
            var ctrlEl = Utils.GetChildControl(wnd.el);
            var ctrl = ControlManager.Get(ctrlEl.id);
            ctrl.extWindow = wnd;
            this.fireEvent("append", ctrlEl.id);
        },

        Add: function(id, ctrl) {
            if (ControlManager.Exists(id)) {
                alert("Control " + id + " already exists!!!");
            }
            else {
                ControlManager.controls_[id] = ctrl;
            }
            this.fireEvent("add", id);
        },

        Get: function(id) {
            if (ControlManager.Exists(id)) {
                return ControlManager.controls_[id];
            }
            else {
                return null;
            }
        },

        Exists: function(id) {
            if (ControlManager.controls_[id] != null) {
                return true;
            }
            else {
                return false;
            }
        },

        Update: function(id, html,javascript) {
            if (ControlManager.controls_[id] != null) {
                var ctrl = ControlManager.Get(id);
                //find child cotrols
                var controls = ctrl.controlEl.select("." + Utils.ControlContainerClassName, true);
                if (controls.elements.length != 0) {
                    for (var i = 0; i < controls.elements.length; i++) {
                        var controlId = controls.elements[i].id;
                        if (ControlManager.Exists(controlId)) {
                            ControlManager.Remove(controlId);
                        }
                    }
                }
                temp = document.createElement('div');
                var el = Ext.DomHelper.append(temp, html, true);
                var inner_html = el.dom.innerHTML;
                el.remove();
                delete temp;

                //update control with new html
                ctrl.controlEl.update(inner_html);
                //var a = Ext.get(document.createElement('div'));
                //a.innerHTML = inner_html;
                //var b = Exp.get(document.dom);
                //b.appendChild(a);

                //initialize children controls and current control
                Utils.InitializeControls(ctrl.controlEl, javascript);
                this.fireEvent("update", id);
            }
        },
        UpdateGroup: function(className, controlName, parentNames, repeaterIndex, html) {
            var q = "*";
            if (className) {
                q += "[class*=" + Utils.ControlContainerClassName + "][class*=cls" + className + "]";
            }

            if (controlName) {
                q += "[class*=ctrl" + controlName + "]";
            }

            if (parentNames) {
                q += "[class*=parent" + parentNames + "]";
            }

            if (repeaterIndex) {
                q += "[class*=repeaterIndex" + repeaterIndex + "]";
            }
            var result = Ext.query(q);
            var i;
            for (i = 0; i < result.length; i++) {
                var ctrl = result[i];
                ControlManager.Update(ctrl.id, html);
            }
            this.fireEvent("updateGroup", id);
            return result;
        },

        Remove: function(id) {
            //alert("Remove control " + id + " from ControlManager");
            if (ControlManager.Exists(id)) {
                var ctrl = ControlManager.Get(id);
                ctrl.destroy();
                delete ControlManager.controls_[id];
            }
            this.fireEvent("remove", id);
        }

    });

ControlManager = new ControlManagerType();