<%@ Page Title="" Language="C#" MasterPageFile="~/Security/Security.master" AutoEventWireup="true" CodeFile="UserGroup.aspx.cs" Inherits="Security_UserGroup" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <link href="<%=Common.GenerateUrl("../fic/fic/css/tabcontrol.css") %>" rel="stylesheet" />
    <style type="text/css">
        .main_group {
            table-layout: fixed;
        }

            .main_group td {
                overflow: hidden;
                text-overflow: ellipsis;
            }

        .group_table {
            width: 100%;
            border-collapse: collapse;
        }

            .group_table tr {
                height: 24px;
                line-height: 24px;
            }

            .group_table td {
                padding: 0;
                vertical-align: top;
            }

        td.label {
            width: 160px;
        }

        .ctl_button {
            font-family: 'CalciteWebCoreIcons';
            display: block;
            margin: 6px auto;
            width: 60px;
            height: 22px;
            line-height: 21px;
            padding: 0;
        }

        #dialog_user_group {
            z-index: 500;
            top: 60px;
            left: 150px;
        }

        .inputbox {
            width: 500px;
            padding: 1px;
        }

        #dialog_group_description {
            padding: 2px;
            height: 60px;
        }

        .group_table .main_table thead tr {
            display: block;
        }

        .group_table .main_table tbody {
            height: 280px;
            display: block;
            overflow-y: auto;
        }

        .group_table .main_table th {
            width: 165px;
            padding: 0;
        }

        .group_table .main_table td {
            width: 170px;
        }

            .group_table .main_table td div {
                width: 170px;
                overflow: hidden;
                text-overflow: ellipsis;
            }

        .div_module {
            font-weight: 700;
        }

        .table_module {
            line-height: 30px;
            margin-left: 20px;
            margin-bottom: 15px;
        }

        .td_module {
            width: 200px;
        }

        .label { /*cover tab.css*/
            display: table-cell;
        }
    </style>
    <%--<script src="<%=GetFileUrlWithVersion("js/controls.js")%>" type="text/javascript"></script>--%>
    <script src="<%=GetFileUrlWithVersion("../js/controls.js")%>" type="text/javascript"></script>
    <script src="<%=GetFileUrlWithVersion("../js/modulelang.js")%>" type="text/javascript"></script>
    <script type="text/javascript">
        var groups;
        var featuresloaded = false;
        _network.groupquery = function (method, param, callback, error) {
            _network.request("Security/UserGroup.aspx", -1, method, param, callback, error);
        }

        function userrequest(method, param, callback, error) {
            _network.request("Security/AddUser.aspx", -1, method, param, callback, error || function (e) {
                console.log(e);
                showmaskbg(false, true);
                showAlert(GetTextByKey('P_UG_PAGEERROR', 'An unknown error occurred.  Please refresh page.'), GetTextByKey('P_UG_QUERY', 'Query'));
            });
        }

        var uiid;

        function OnAdd() {
            $('#tab_header_info').click();
            $('#tab_header_security').hide();
            uiid = undefined;
            $('#dialog_group_name').val('');
            $('#dialog_group_description').val('');
            $('#dialog_user_group .dialog-title span.title').text(GetTextByKey("P_UG_ADDGROUP", 'Add Group'));

            showmaskbg(true);
            $('#dialog_user_group')
                .attr('act', 'add')
                .css({
                    'top': (document.documentElement.clientHeight - $('#dialog_user_group').height()) / 3,
                    'left': (document.documentElement.clientWidth - $('#dialog_user_group').width()) / 2
                })
                .showDialog();

            $('#dialog_group_name').focus();
            $('#dialog_user_group .maskbg').css('display', '');
            getGroupInfo();
        }

        function OnEdit() {
            var u = grid_dt.source[grid_dt.selectedIndex].Values;
            if (!u) {
                uiid = undefined;
                return;
            }
            $('#tab_header_info').click();
            $('#tab_header_security').show();

            uiid = u.ID;

            showmaskbg(true);
            $('#dialog_user_group')
                .attr('act', !uiid ? 'edit' : 'add')
                .css({
                    'top': ($('#content').height() - $('#dialog_user_group').height()) / 3,
                    'left': ($('#content').width() - $('#dialog_user_group').width()) / 2
                })
                .showDialog();

            $('#dialog_group_name').focus();
            $('#dialog_user_group .maskbg').css('display', '');
            getGroupInfo();
        }

        function OnDblClick(e) {
            OnEdit();
        }

        function OnDelete(u) {
            if (!u) {
                return;
            }
            showConfirm(GetTextByKey("P_UG_DOYOUWANTTODELETE", 'Do you want to delete {0} ?').replace('{0}', u.Name), GetTextByKey("P_UG_DELETEGROUP", 'Delete group'), function () {
                _network.groupquery('DeleteGroup', u.ID, function (data) {
                    if (data && data.length > 0) {
                        if (data === "There are one or more users in this user group,so it cannot be deleted.")
                            data = GetTextByKey("P_UG_USERSINTHISUSERGROUP", "There are one or more users in this user group,so it cannot be deleted.");
                        showAlert(data, GetTextByKey("P_UG_FAILEDTODELETETHISGROUP", 'Failed to delete this group'));
                    } else {
                        OnRefresh();
                    }
                }, function (err) {
                    showAlert(GetTextByKey("P_UG_FAILEDTODELETETHISGROUP", 'Failed to delete this group.'), GetTextByKey("P_UG_DELETEGROUP", 'Delete group'));
                });
            });
        }

        function OnRefresh() {
            showloading(true);
            _network.groupquery('GetGroups', '', function (data) {
                showloading(false);
                groups = data;
                showGroupList(data);
            }, function (err) {
                showloading(false);
            });
        }

        function showGroupList(data) {
            var rows = [];
            for (var i = 0; i < data.length; i++) {
                var r = data[i];
                var fr = { Values: r };
                rows.push(fr);
            }

            grid_dt.setData(rows);
        }

        var grid_dt;
        function InitGridData() {
            grid_dt = new GridView('#grouplist');
            grid_dt.lang = {
                all: GetTextByKey("P_GRID_ALL", "(All)"),
                ok: GetTextByKey("P_GRID_OK", "OK"),
                reset: GetTextByKey("P_GRID_RESET", "Reset")
            };
            var list_columns = [
                { name: 'Name', caption: GetTextByKey("P_UG_USERGROUPNAME", "User Group Name"), valueIndex: 'Name', css: { 'width': 500, 'text-align': 'left' } },
                { name: 'Notes', caption: GetTextByKey("P_UG_DESCRIPTION", "Description"), valueIndex: 'Notes', css: { 'width': 500, 'text-align': 'left' } },
                { name: 'Edit', caption: "", css: { 'width': 30, 'text-align': 'center' } },
                { name: 'Delete', caption: "", css: { 'width': 30, 'text-align': 'center' } }
            ];
            var columns = [];
            // head
            for (var hd in list_columns) {
                var col = {};
                col.name = list_columns[hd].name;
                col.caption = list_columns[hd].caption;
                col.visible = true;
                col.sortable = true;
                col.width = list_columns[hd].css.width;
                col.align = list_columns[hd].css["text-align"]
                col.key = list_columns[hd].valueIndex;
                if (col.name === "Edit") {
                    col.isurl = true;
                    col.text = "\uf044";
                    col.events = {
                        onclick: function () {
                            OnEdit();
                        }
                    };
                    col.classFilter = function (e) {
                        return "icon-col";
                    }
                    col.attrs = { 'title': GetTextByKey("P_UG_EDIT", 'Edit') };
                }
                else if (col.name === "Delete") {
                    col.isurl = true;
                    col.text = "\uf00d";
                    col.events = {
                        onclick: function () {
                            OnDelete(this);
                        }
                    };
                    col.classFilter = function (e) {
                        return "icon-col";
                    };
                    col.attrs = { 'title': GetTextByKey("P_UG_DELETE", 'Delete') };
                }
                columns.push(col);
            }
            grid_dt.canMultiSelect = false;
            grid_dt.columns = columns;
            grid_dt.init();
            grid_dt.rowdblclick = OnEdit;

            grid_dt.selectedrowchanged = function (rowindex) {
                var rowdata = grid_dt.source[rowindex];
                if (rowdata) {
                    uiid = rowdata.Values.ID;
                }
            }
        }



        /************************** User********************************/
        /*************************************************************************/

        var allMachines;

        function getGroupInfo() {
            _network.groupquery('GetGroupInfo', uiid, function (data) {
                var grp = data.GroupInfo;
                allMachines = data.Users;
                showSelectedMachine(!grp.Users ? [] : grp.Users);
                getMatchAvailableMachines();

                $('#dialog_group_name').val(grp.Name);
                $('#dialog_group_description').val(grp.Notes);
                $('#dialog_user_group .dialog-title span.title').text(GetTextByKey("P_UG_EDITGROUP", 'Edit Group'));
                $('#dialog_user_group .maskbg').css('display', 'none');
                $('#dialog_group_name').focus();
            }, function (err) {
                showAlert(GetTextByKey("P_UG_FAILEDTOLOADUSERS", 'Failed to load users.'), GetTextByKey("P_UG_LOADUSERS", 'Load users'));
            });
        }

        function getMatchAvailableMachines() {
            var selected = [];
            for (var i = 0; i < grid_dtsm.source.length; i++) {
                var m = grid_dtsm.source[i].Values;
                selected.push(m.IID);
            }

            _availableMachines = [];
            for (var i = 0; i < allMachines.length; i++) {
                var m = allMachines[i];
                if ($.inArray(m.IID, selected) < 0) {
                    _availableMachines.push(m);
                }
            }
            showAvailableMachine(_availableMachines);
        }

        function showAvailableMachine(data) {
            var rows = [];
            for (var i = 0; i < data.length; i++) {
                var r = data[i];
                var fr = { Values: r };
                rows.push(fr);
            }

            grid_dtam.setData(rows);
        }

        function showSelectedMachine(data) {
            var rows = [];
            for (var i = 0; i < data.length; i++) {
                var r = data[i];
                var fr = { Values: r };
                rows.push(fr);
            }

            grid_dtsm.setData(rows);
        }

        var grid_dtam;
        function InitGridAvailableMachines() {
            grid_dtam = new GridView('#availablemachinelist');
            grid_dtam.lang = {
                all: GetTextByKey("P_GRID_ALL", "(All)"),
                ok: GetTextByKey("P_GRID_OK", "OK"),
                reset: GetTextByKey("P_GRID_RESET", "Reset")
            };
            var list_columns = [
                { name: 'ID', caption: GetTextByKey("P_UG_USERID", "User ID"), valueIndex: 'ID', css: { 'width': 170, 'text-align': 'left' } },
                { name: 'DisplayName', caption: GetTextByKey("P_UG_USERNAME", "User Name"), valueIndex: 'DisplayName', css: { 'width': 160, 'text-align': 'left' } }
            ];
            var columns = [];
            // head
            for (var hd in list_columns) {
                var col = {};
                col.name = list_columns[hd].name;
                col.caption = list_columns[hd].caption;
                col.visible = true;
                col.sortable = true;
                col.width = list_columns[hd].css.width;
                col.align = list_columns[hd].css["text-align"]
                col.key = list_columns[hd].valueIndex;
                columns.push(col);
            }
            grid_dtam.canMultiSelect = true;
            grid_dtam.columns = columns;
            grid_dtam.init();
            grid_dtam.rowdblclick = function (rowindex) {
                var rowdata = grid_dtam.source[rowindex];
                if (rowdata) {
                    grid_dtam.source.splice(rowindex, 1);
                    grid_dtam.setData(grid_dtam.source);

                    grid_dtsm.source.push(rowdata);
                    grid_dtsm.setData(grid_dtsm.source);
                }
            };

            grid_dtam.selectedrowchanged = function (rowindex) {
                var rowdata = grid_dtam.source[rowindex];
                if (rowdata) {
                }
            }
        }


        var grid_dtsm;
        function InitGridSelectedMachines() {
            grid_dtsm = new GridView('#selectedmachinelist');
            var list_columns = [
                { name: 'ID', caption: GetTextByKey("P_UG_USERID", "User ID"), valueIndex: 'ID', css: { 'width': 170, 'text-align': 'left' } },
                { name: 'DisplayName', caption: GetTextByKey("P_UG_USERNAME", "User Name"), valueIndex: 'DisplayName', css: { 'width': 160, 'text-align': 'left' } }
            ];
            var columns = [];
            // head
            for (var hd in list_columns) {
                var col = {};
                col.name = list_columns[hd].name;
                col.caption = list_columns[hd].caption;
                col.visible = true;
                col.sortable = true;
                col.width = list_columns[hd].css.width;
                col.align = list_columns[hd].css["text-align"]
                col.key = list_columns[hd].valueIndex;
                columns.push(col);
            }
            grid_dtsm.canMultiSelect = true;
            grid_dtsm.columns = columns;
            grid_dtsm.init();
            grid_dtsm.rowdblclick = function (rowindex) {
                var rowdata = grid_dtsm.source[rowindex];
                if (rowdata) {
                    grid_dtsm.source.splice(rowindex, 1);
                    grid_dtsm.setData(grid_dtsm.source);

                    grid_dtam.source.push(rowdata);
                    grid_dtam.setData(grid_dtam.source);
                }
            };

            grid_dtsm.selectedrowchanged = function (rowindex) {
                var rowdata = grid_dtsm.source[rowindex];
                if (rowdata) {
                }
            }
        }
        function OnEditorAdd() {
            var indexs = grid_dtam.selectedIndexes;
            if (indexs.length <= 0)
                return;

            var rowstemp = [];
            for (var i = 0; i < indexs.length; i++) {
                var rowindex = indexs[i];
                var rowdata = grid_dtam.source[rowindex];
                rowstemp.push(rowdata);
            }
            var index = grid_dtsm.source.length;
            for (var i = 0; i < rowstemp.length; i++) {
                var rowdata = rowstemp[i];
                grid_dtam.source.splice(grid_dtam.source.indexOf(rowdata), 1);
                grid_dtsm.source.splice(index, 0, rowdata);
                index++;
            }
            grid_dtam.setData(grid_dtam.source);
            grid_dtsm.setData(grid_dtsm.source);
        }

        function OnEditorAddAll() {
            for (var i = 0; i < grid_dtam.source.length; i++) {
                var rowindex = grid_dtam.source[i];
                var rowdata = grid_dtam.source[i];
                grid_dtsm.source.push(rowdata);
            }
            grid_dtsm.setData(grid_dtsm.source);
            grid_dtam.source = [];
            grid_dtam.setData(grid_dtam.source);
        }
        function OnEditorRemove() {
            var indexs = grid_dtsm.selectedIndexes;
            if (indexs.length <= 0)
                return;

            var rowstemp = [];
            for (var i = 0; i < indexs.length; i++) {
                var rowindex = indexs[i];
                var rowdata = grid_dtsm.source[rowindex];
                rowstemp.push(rowdata);
            }
            var index = grid_dtam.source.length;
            for (var i = 0; i < rowstemp.length; i++) {
                var rowdata = rowstemp[i];
                grid_dtsm.source.splice(grid_dtsm.source.indexOf(rowdata), 1);
                grid_dtam.source.splice(index, 0, rowdata);
                index++;
            }
            grid_dtsm.setData(grid_dtsm.source);
            grid_dtam.setData(grid_dtam.source);
        }
        function OnEditorRemoveAll() {
            for (var i = 0; i < grid_dtsm.source.length; i++) {
                var rowindex = grid_dtsm.source[i];
                var rowdata = grid_dtsm.source[i];
                grid_dtam.source.push(rowdata);
            }
            grid_dtam.setData(grid_dtam.source);
            grid_dtsm.source = [];
            grid_dtsm.setData(grid_dtsm.source);
        }


        /**************************End User********************************/
        /*****************************************************************************/



        function OnDialogOK() {
            var item = {
                'Name': $('#dialog_group_name').val(),
                'Notes': $('#dialog_group_description').val()
            };
            if (uiid) {
                item.ID = uiid;
            }
            var alerttitle = GetTextByKey("P_UG_SAVEGROUP", 'Save group');
            if (!item.Name || item.Name.trim().length == 0) {
                showAlert(GetTextByKey("P_UG_GROUPNAMECANNOTBEEMPTYORWHITESPACE", 'Group Name cannot be empty or whitespace.'), alerttitle);
                $('#dialog_group_name').focus();
                return;
            }
            if (item.Name.length > 100) {
                showAlert(GetTextByKey("P_UG_GROUPNAMEISTOOLONG", 'Group Name is too long (> 100 characters).'), alerttitle);
                $('#dialog_group_name').focus();
                return;
            }
            if (item.Notes.length > 200) {
                showAlert(GetTextByKey("P_UG_NOTESISTOOLONG", 'Notes is too long (> 200 characters).'), alerttitle);
                $('#dialog_group_description').focus();
                return;
            }

            item.Users = [];
            for (var i = 0; i < grid_dtsm.source.length; i++) {
                var m = grid_dtsm.source[i].Values;
                var iid = m.IID;
                item.Users.push({
                    'IID': iid
                });
            }

            var features = [];
            if (uiid && featuresloaded) {
                var ipts = $('#security_message').find('input[type=radio]:checked');
                for (var i = 0; i < ipts.length; i++) {
                    var ipt = ipts[i];
                    var id = $(ipt).data('featureid');
                    var pm = $(ipt).val();
                    if (!pm)
                        continue;
                    var permissions = [];
                    permissions.push(pm)
                    var ftitem = { 'Key': id, 'Value': permissions };
                    features.push(ftitem);
                }
            }


            $('#dialog_user_group .maskbg').css('display', '');
            var param = JSON.stringify({
                'GroupInfo': item,
                'Features': features
            });
            param = htmlencode(param);
            _network.groupquery('SaveGroup', param, function (data) {
                //alert('Save user info successfully.');
                if (data && data.length > 0) {
                    showAlert(data, alerttitle);
                    $('#dialog_user_group .maskbg').css('display', 'none');
                } else {
                    $('#dialog_user_group').hideDialog();
                    OnRefresh();
                }
            }, function (err) {
                showAlert(GetTextByKey("P_UG_FAILEDTOSAVEGROUP", 'Failed to save group.'), alerttitle);
                $('#dialog_user_group .maskbg').css('display', 'none');
            });
        }

        /************************** Security********************************/
        /*************************************************************************/


        var featuresloaded = false;
        function onsecurityclick() {
            if (!featuresloaded) {
                featuresloaded = true;;
            }
            $(".featureradio").prop("checked", false);
            GetFeaturesDefinedOnUser()
        }


        function GetFeaturesDefinedOnUser() {
            userrequest('GetFeaturesDefinedOnUser', uiid, function (data) {
                if (typeof (data) === "string") {
                    showAlert(data, GetTextByKey("P_UG_ERROR", 'Error'));
                    return;
                }
                getFeaturesDefinedLang(data);
                createFeatureModule(data);
            }, function (err) {
                console.log(err);
            });
        }

        function getFeaturesDefinedLang(data) {
            for (var i = 0; i < data.length; i++) {
                var m = data[i].Module;
                var f = data[i].Features;
                setMoudulesLang(m);
                setFeaturesLang(f);
            }
        }

        function setFeaturesLang(features) {
            for (var i = 0; i < features.length; i++) {
                var f = features[i].Item1;
                if (f.Id === 1)
                    f.CurrentName = GetTextByKey("P_FEATURE_MAPVIEW", f.Name);
                else if (f.Id === 100)
                    f.CurrentName = GetTextByKey("P_FEATURE_JOBSITES", f.Name);
                else if (f.Id === 110)
                    f.CurrentName = GetTextByKey("P_FEATURE_AUTOCREATIONCONFIG", f.Name);
                else if (f.Id === 120)
                    f.CurrentName = GetTextByKey("P_FEATURE_JOBSITEREQUIREMENTS", f.Name);
                else if (f.Id === 130)
                    f.CurrentName = GetTextByKey("P_FEATURE_DISPATCHREQUESTS", f.Name);
                else if (f.Id === 140)
                    f.CurrentName = GetTextByKey("P_FEATURE_SCHEDULER", f.Name);
                else if (f.Id === 200)
                    f.CurrentName = GetTextByKey("P_FEATURE_ALERTSMANAGEMENT", f.Name);
                else if (f.Id === 210)
                    f.CurrentName = GetTextByKey("P_FEATURE_WORKORDER", f.Name);
                else if (f.Id === 220)
                    f.CurrentName = GetTextByKey("P_FEATURE_PREVENTATIVEMAINTENANCEPLAN", f.Name);
                else if (f.Id === 230)
                    f.CurrentName = GetTextByKey("P_FEATURE_FUELRECORDS", f.Name);
                else if (f.Id === 235)
                    f.CurrentName = GetTextByKey("P_FEATURE_CUSTOMERRECORD", f.Name);
                else if (f.Id === 237)
                    f.CurrentName = GetTextByKey("P_FEATURE_WORKORDERCONFIGURATION", f.Name);
                else if (f.Id === 239)
                    f.CurrentName = GetTextByKey("P_FEATURE_REOPENWORKORDERS", f.Name);
                else if (f.Id === 245)
                    f.CurrentName = GetTextByKey("P_FEATURE_COMMUNICATEWITHCUSTOMER", f.Name);
                else if (f.Id === 248)
                    f.CurrentName = GetTextByKey("P_FEATURE_WORKORDERSURVEYS", f.Name);
                else if (f.Id === 249)
                    f.CurrentName = GetTextByKey("P_FEATURE_WORKORDERGENERATOR", f.Name);
                else if (f.Id === 250)
                    f.CurrentName = GetTextByKey("P_FEATURE_XXXXXX", f.Name);
                else if (f.Id === 252)
                    f.CurrentName = GetTextByKey("P_FEATURE_XXXXXX", f.Name);
                else if (f.Id === 300)
                    f.CurrentName = GetTextByKey("P_FEATURE_FILTERQ", f.Name);
                else if (f.Id === 400)
                    f.CurrentName = GetTextByKey("P_FEATURE_CREDENTIALS", f.Name);
                else if (f.Id === 401)
                    f.CurrentName = GetTextByKey("P_FEATURE_JDLINK", f.Name);
                else if (f.Id === 402)
                    f.CurrentName = GetTextByKey("P_FEATURE_JOHNDEERENOTIFICATIONS", f.Name);
                else if (f.Id === 500)
                    f.CurrentName = GetTextByKey("P_FEATURE_USERS", f.Name);
                else if (f.Id === 510)
                    f.CurrentName = GetTextByKey("P_FEATURE_CURFEWCONFIGURATION", f.Name);
                else if (f.Id === 600)
                    f.CurrentName = GetTextByKey("P_FEATURE_MANAGEASSETS", f.Name);
                else if (f.Id === 601)
                    f.CurrentName = GetTextByKey("P_FEATURE_ASSETPAIRING", f.Name);
                else if (f.Id === 602)
                    f.CurrentName = GetTextByKey("P_FEATURE_ASSETATTRIBUTEADJUSTMENTS", f.Name);
                else if (f.Id === 603)
                    f.CurrentName = GetTextByKey("P_FEATURE_ASSETGROUPS", f.Name);
                else if (f.Id === 700)
                    f.CurrentName = GetTextByKey("P_FEATURE_FICMANAGEMENT", f.Name);
                else if (f.Id === 800)
                    f.CurrentName = GetTextByKey("P_FEATURE_M3", f.Name);
                else if (f.Id === 900)
                    f.CurrentName = GetTextByKey("P_FEATURE_OVERUNDERTRUCKINGALERTS", f.Name);
                else if (f.Id === 1000)
                    f.CurrentName = GetTextByKey("P_FEATURE_MANAGEHARSHDRIVING", f.Name);
                else if (f.Id === 1000)
                    f.CurrentName = GetTextByKey("P_FEATURE_MANAGEHARSHDRIVING", f.Name);
                else if (f.Id === 1100)
                    f.CurrentName = GetTextByKey("P_FEATURE_MANAGETEMPLATES", f.Name);
                else if (f.Id === 1101)
                    f.CurrentName = GetTextByKey("P_FEATURE_INSPECTIONREPORTS", f.Name);
                else if (f.Id === 1110)
                    f.CurrentName = GetTextByKey("P_FEATURE_REASSIGNWORKORDERS", f.Name);
                else if (f.Id === 1200)
                    f.CurrentName = GetTextByKey("P_FEATURE_MANAGETEMPLATES", f.Name);
                else if (f.Id === 1201)
                    f.CurrentName = GetTextByKey("P_FEATURE_INSPECTIONREPORTS", f.Name);
                else
                    f.CurrentName = f.Name;
            }
        }

        function createFeatureModule(data) {
            $('#security_message').empty();
            if (!data)
                return;
            for (var i = 0; i < data.length; i++) {
                var ft = data[i];
                var div = $('<div class="div_module"></div>').text(ft.Module.CurrentName);
                $('#security_message').append(div);
                createFeatures(ft.Features);
            }
        }

        function createFeatures(features) {
            var nonetext = GetTextByKey("P_UM_NONE", "None");
            var readonlytext = GetTextByKey("P_UM_READONLY", "Read Only");
            var fullcontroltext = GetTextByKey("P_UM_FULLCONTROL", "Full Control");
            var requestonlytext = GetTextByKey("P_UM_REQUESTONLY", "Request Only");
            var tb = $('<table class="table_module" style="width:640px;"></table>');
            $('#security_message').append(tb);
            for (var i = 0; i < features.length; i++) {
                var feature = features[i].Item1;
                var tr = $('<tr></tr>');
                tb.append(tr);
                var td = $('<td class="td_module"></td>').text(feature.CurrentName);
                tr.append(td);

                for (var j = 0; j < feature.AvailablePermissions.length; j++) {
                    var pm = feature.AvailablePermissions[j];
                    td = $('<td style="width: 100px;"></td>');
                    tr.append(td);
                    var name = "";
                    if (pm === 0)
                        name = nonetext;
                    else if (pm === 1)
                        name = readonlytext;
                    else if (pm === 10)
                        name = requestonlytext;
                    else if (pm === 99999)
                        name = fullcontroltext;
                    var lab = $('<label></label>').text(name);
                    td.append(lab);
                    var ipt = $('<input type="radio" class="featureradio" />').attr('name', 'feature_' + feature.Id).val(pm).data('featureid', feature.Id);
                    td.append(ipt);
                }
                $("input:radio[name='feature_" + feature.Id + "'][value='" + features[i].Item2[0] + "']").prop("checked", true);
                td = $('<td></td>');
                tr.append(td);
            }
        }


        /**************************End Security********************************/
        /*****************************************************************************/

        $(function () {
            setPageTitle(GetTextByKey("P_USERSGROUPS", 'User Groups'), true);
            InitGridData();
            InitGridAvailableMachines();
            InitGridSelectedMachines();
            $("#div_container").tab();
            $('#dialog_user_group').prop('iframe', true).dialog(function () {
                showmaskbg(false);
            });

            OnRefresh();

            $(window).resize(function () {
                $("#grouplist").css("height", $(window).height() - $("#grouplist").offset().top - 4);
                grid_dt && grid_dt.resize();
            }).resize();

        })
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <div style="min-width: 400px;">
        <div class="page_title" data-lgid="P_USERSGROUPS">User Groups</div>
        <div class="function_title">
            <span class="sbutton iconadd" onclick="OnAdd();" data-lgid="P_UG_ADD">Add</span>
            <span class="sbutton iconrefresh" onclick="OnRefresh();" data-lgid="P_UG_REFRESH">Refresh</span>
        </div>
        <div class="clear"></div>
        <div id="grouplist"></div>
        <div id="mask_bg" style="display: none;">
            <div class="loading c-spin"></div>
        </div>
        <div class="dialog" id="dialog_user_group" style="display: none; z-index: 500; width: 840px;">
            <div class="dialog-title"><span class="title" data-lgid="P_UG_ADDUSERGROUP">Add User Group</span><em class="dialog-close"></em></div>
            <div class="dialog-content">
                <div id="div_container">
                    <ul id="ul_container" class="tab_header" style="padding-top: 5px;">
                        <li id="tab_header_info" data-href="tab_groupinfo" class="selected" data-lgid="P_UG_GROUPINFORMATION">Group Information</li>
                        <li id="tab_header_security" data-href="tab_security" onclick="onsecurityclick()" data-lgid="P_UG_SECURITY">Security</li>
                    </ul>
                    <div id="tab_groupinfo" data-page="tab_groupinfo">
                        <div class="dialog-subheader" data-lgid="P_UG_USERGROUPPROPERTIES">User Group Properties</div>
                        <table class="group_table">
                            <tr style="height: 27px;">
                                <td class="label" data-lgid="P_UG_USERGROUPNAME_COLON">User Group Name:</td>
                                <td>
                                    <input type="text" class="inputbox" id="dialog_group_name" tabindex="1" maxlength="100" /></td>
                            </tr>
                            <tr>
                                <td class="label" data-lgid="P_UG_DESCRIPTION_COLON">Description:</td>
                                <td>
                                    <textarea class="inputbox" id="dialog_group_description" tabindex="2" maxlength="200"></textarea></td>
                            </tr>
                        </table>
                        <div class="dialog-subheader" data-lgid="P_UG_GROUPMEMBERS">Group Members</div>
                        <table class="group_table" style="min-height: 300px;">
                            <thead>
                                <tr>
                                    <td data-lgid="P_UG_AVAILABLEUSERS">Available Users</td>
                                    <td></td>
                                    <td data-lgid="P_UG_ASSIGNEDGROUPMEMBERS">Assigned Group Members</td>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td style="width: 400px;">
                                        <div id="availablemachinelist" style="height: 300px;"></div>
                                    </td>
                                    <td style="text-align: center; vertical-align: middle; width: 80px;">
                                        <input class="ctl_button" type="button" value="&#xe62b;" tabindex="3" onclick="OnEditorAdd();" />
                                        <input class="ctl_button" type="button" value="&#xe632;" tabindex="4" onclick="OnEditorAddAll();" />
                                        <input class="ctl_button" type="button" value="&#xe62a;" tabindex="5" onclick="OnEditorRemove();" />
                                        <input class="ctl_button" type="button" value="&#xe631;" tabindex="6" onclick="OnEditorRemoveAll();" />
                                    </td>
                                    <td style="width: 400px;">
                                        <div id="selectedmachinelist" style="height: 300px;"></div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                    <div id="tab_security" data-page="tab_security" style="display: none">
                        <div id="security_message" style="padding-left: 50px; height: 440px; overflow: auto;">
                        </div>
                    </div>
                    <div class="mask_loading dialog" style="display: none;"></div>
                </div>
            </div>
            <div class="dialog-func">
                <input type="button" value="Cancel" data-lgid="P_UG_CANCEL" class="dialog-close" tabindex="8" />
                <input type="button" onclick="OnDialogOK();" value="OK" data-lgid="P_UG_OK" tabindex="7" />
                <div class="clear"></div>
            </div>
            <div class="maskbg" style="display: none;"></div>
        </div>
    </div>
</asp:Content>