﻿(function() {
    window.ConfigUserListDialog = function(dialogId) {

        window.ConfigUserListDialog[dialogId] = this;

        window.ConfigUserListDialog[dialogId].allItems = [];

        window.ConfigUserListDialog[dialogId].config = function() {

            RegisterNamespace("Controls.Dialogs.UserList");
            window.getArray = function(svalue) {
                return (svalue || '').trim() ? svalue.split(',') : [];
            };
            window.getStringArray = function(arr) {
                return arr.length ? arr.join(',') : '';
            };
            var getDialog = function() {
                return $(dialogId);
            };
            var getAllItems = function() {

                return window.ConfigUserListDialog[dialogId].allItems;
            };
            var getSelectedItem = function() {
                return getDialog().getElement('input[type=hidden][id$=hdSelected]');
            };

            var getState = function() {
                return getDialog().getElement('div[object_type=states] input[id$=hdCurrentTab]').value == 'result';
            };
            var setState = function(tab) {
                getDialog().getElement('div[object_type=states] input[id$=hdCurrentTab]').value = tab;
            };

            window.__search = function(sender, evt) {
                var enter = (evt.keyCode || evt.which) == 13;
                if (enter) {
                    (function() {
                        eval(ConfigUserListDialog[dialogId].viewTab);
                    }).delay(100);
                    return false;
                }
                return true;
            };

            window.ConfigUserListDialog[dialogId].selectAllOnPage = function(select) {

                var cells = getDialog().getElements('div[object_type=userListCell]');
                if (cells.length) {
                    cells.each(function(c) {
                        if (select) {
                            if (!c.hasClass('active'))
                                c.addClass('active');
                        }
                        else {
                            if (c.hasClass('active'))
                                c.removeClass('active');
                        }
                    });
                }
            };

            window.updateSelect = function(type, state, userlistid) {

                var state = ((typeof state == 'undefined') ? getState() : state);

                var dialog = getDialog();
                switch (type) {
                    case 'all':
                        {
                            if (state) {
                                var current = getArray(getSelectedItem().value);
                                var allItems = getAllItems();
                                for (var i = 0; i < allItems.length; i++)
                                    current.include(allItems[i]);
                                getSelectedItem().value = getStringArray(current);

                            }
                            else {
                                getSelectedItem().value = '';
                            }
                        }
                        break;
                    case 'page':
                        {
                            var page = [];
                            getDialog().getElements('div[object_type=userListCell]').each(function(i) {
                                page.push(i.getSource().userlistid);
                            });
                            var current = getArray(getSelectedItem().value);
                            if (state) {
                                for (var i = 0; i < page.length; i++)
                                    current.include(page[i]);
                                getSelectedItem().value = getStringArray(current);
                            }
                            else {
                                for (var i = 0; i < page.length; i++) {
                                    for (var j = 0; j < current.length; j++) {
                                        if (current[j] == page[i]) delete current[j];
                                    }
                                }
                                current = current.clean();
                                getSelectedItem().value = getStringArray(current);
                            }
                        }
                        break;
                    case 'one':
                        {
                            if (userlistid) {
                                var current = getArray(getSelectedItem().value);
                                if (state) {

                                    current.include(userlistid);
                                    getSelectedItem().value = getStringArray(current);
                                }
                                else {
                                    for (var i = 0; i < current.length; i++) {
                                        if (current[i] == userlistid) {
                                            delete current[i];
                                            break;
                                        }
                                    }
                                    current = current.clean();
                                    getSelectedItem().value = getStringArray(current);
                                }
                            }
                        }
                        break;
                }
            };

            window.Controls.Dialogs.UserList.OnSelect = function(sender, args) {
                updateSelect('one', true, sender.dom.getSource().userlistid);
            };

            window.Controls.Dialogs.UserList.OnUnselect = function(sender, args) {
                updateSelect('one', false, sender.dom.getSource().userlistid);
            };

            window.Controls.Dialogs.UserList.show = function(userListId, cell) {
                var controlContainer = getDialog().getElement('div[object_type=states]');
                var hdCurrentSelectedList = controlContainer.getElement('input[id$=hdCurrentSelectedList]');
                hdCurrentSelectedList.value = userListId;
                hdCurrentSelectedList.selectedCell = cell;
                Cookie.write('__currentSelectedListItem', userListId);
                eval(ConfigUserListDialog[dialogId].editCell);
                return;
            };

            window.Controls.Dialogs.UserList.OnAfterSelect = function() {
                eval(ConfigUserListDialog[dialogId].viewTab);
                return;
            };

            RegisterObject('Controls.Dialogs.UserList.Show', function() {
                getDialog().showCentered();
            });
        };
    };
} ());