VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/tech_preview/hr/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/tech_preview/hr/common_view.js
theme.formSelectPartner = function(params){
    params.inputidboxes = {};
    var valueChecked = (params.value !== undefined)? params.value : 0;
    var randomId = contentModule.generateRandom();
    var inputsearchbox = absol.buildDom({
        tag:'searchcrosstextinput',
        style: {
            display: "block",
            width: "100%",
            marginBottom: "var(--control-verticle-distance-2)"
        },
        props:{
            placeholder: LanguageModule.text("txt_search")
        }
    });
    var itemsList = contentModule.getNationCityDualSelectMenu(params);
    itemsList.forEach(function(nItem){
        nItem.items.unshift({value: 0, text: LanguageModule.text("txt_all_city")});
    });
    itemsList.unshift({
        value: 0,
        text: LanguageModule.text("txt_all_nation"),
        items: [{value: 0, text: LanguageModule.text("txt_all_city")}]
    });
    var nation_cities_select = absol.buildDom({
        tag: "dualselectmenu",
        style: {
            display: "block",
            width: "100%",
            marginBottom: "var(--control-verticle-distance-2)"
        },
        props: {
            items: itemsList,
            enableSearch: true,
            value: [0, 0]
        },
        on: {
            change: function(){
                redrawData();
            }
        }
    });
    var partner_class_select = absol.buildDom({
        tag: "mselectmenu",
        style: {
            display: "block",
            width: "100%",
            marginBottom: "var(--control-verticle-distance-2)"
        },
        props: {
            items: contentModule.getPartnerClassFilterList(params),
            enableSearch: true
        },
        on: {
            change: function(){
                redrawData();
            }
        }
    });
    var redrawData = function(){
        var classid = partner_class_select.value;
        var nation_city = nation_cities_select.value;
        var getCellPartner = function(content){
            var cells = [{
                style: {textAlign: "center"},
                render: function(tdElt){
                    params.inputidboxes[content.id] = absol.buildDom({
                        tag: "radio",
                        props: {
                            name: "radio_" + randomId,
                            checked: content.id == valueChecked
                        },
                        on: {
                            change: function(){
                                valueChecked = content.id;
                            }
                        }
                    });
                    tdElt.addChild(params.inputidboxes[content.id]);
                }
            }];
            cells.push({
                render: function(tdElt){
                    tdElt.appendChild(DOMElement.div({
                        attrs: {
                            onclick: function(){
                                if (params.inputidboxes[content.id]){
                                    params.inputidboxes[content.id].checked = true;
                                    valueChecked = content.id;
                                }
                            }
                        },
                        text: content.name
                    }));
                }
            });
            var row = {
                cells: cells
            };
            return row;
        };
        var data = [];
        if (params.allValue){
            var all_radio_elt = absol.buildDom({
                tag: "radio",
                props: {
                    name: "radio_" + randomId,
                    checked: valueChecked == 0
                },
                on: {
                    change: function(){
                        valueChecked = 0;
                    }
                }
            });
            var cells = [{
                style: {textAlign: "center"},
                render: function(tdElt){
                    tdElt.addChild(all_radio_elt);
                }
            }];
            cells.push({
                render: function(tdElt){
                    tdElt.appendChild(DOMElement.div({
                        attrs: {
                            onclick: function(){
                                all_radio_elt.checked = true;
                                valueChecked = 0;
                            }
                        },
                        text: LanguageModule.text("txt_all_partner")
                    }));
                }
            });
            data.push({
                cells: cells
            });
        }
        else if (params.selectValue){
            var select_radio_elt = absol.buildDom({
                tag: "radio",
                props: {
                    name: "radio_" + randomId,
                    checked: valueChecked == 0
                },
                on: {
                    change: function(){
                        valueChecked = 0;
                    }
                }
            });
            var cells = [{
                style: {textAlign: "center"},
                render: function(tdElt){
                    tdElt.addChild(select_radio_elt);
                }
            }];
            cells.push({
                render: function(tdElt){
                    tdElt.appendChild(DOMElement.div({
                        attrs: {
                            onclick: function(){
                                select_radio_elt.checked = true;
                                valueChecked = 0;
                            }
                        },
                        text: LanguageModule.text("txt_select_value")
                    }));
                }
            });
            data.push({
                cells: cells
            });
        }
        for (var i = 0; i < params.database.partner.items.length; i++){
            if (classid != 0 && params.database.partner.items[i].class.indexOf(classid) < 0) continue;
            if (nation_city[0] != 0){
                if (params.database.partner.items[i].nationid != nation_city[0]) continue;
                if (nation_city[1] != 0) if (params.database.partner.items[i].cityid != nation_city[1]) continue;
            }
            data.push(getCellPartner(params.database.partner.items[i]));
        }
        DOMElement.removeAllChildren(params.data_container);
        var tableView = absol.buildDom({
            tag: "dynamictable",
            props: {
                adapter: {
                   data: {
                       head: {
                           rows: []
                       },
                       body: {
                           rows: data
                       }
                   }
               }
            }
        });
        tableView.attachSearchInput(inputsearchbox);
        params.data_container.appendChild(tableView);
        params.data_container.getValue = function(){
            if (valueChecked == 0){
                if (params.allValue){
                    return {
                        value: 0,
                        text: LanguageModule.text('txt_all_partner')
                    }
                }
                else if (params.selectValue){
                    return {
                        value: 0,
                        text: LanguageModule.text("txt_select_value")
                    };
                }
                else {
                    return {
                        value: 0,
                        text: ""
                    };
                }
            }
            else {
                var pIndex = params.database.partner.getIndex(valueChecked);
                var res = {
                    value: valueChecked,
                    text: params.database.partner.items[pIndex].name
                };
                return res;
            }
        };
        params.data_container.insertData = function(list){
            for (var i = 0; i < list.length; i++){
                if (classid != 0 && list[i].class.indexOf(classid) < 0) continue;
                if (nation_city[0] != 0){
                    if (list[i].nationid != nation_city[0]) continue;
                    if (nation_city[1] != 0) if (list[i].cityid != nation_city[1]) continue;
                }
                tableView.addRow(getCellPartner(list[i]));
            }
            tableView.notifyRowsChange();
        };
    };
    params.data_container.style.maxHeight = "calc(90vh - 250px)";
    params.data_container.style.width = "100%";
    params.data_container.style.auto = "auto";
    ModalElement.showWindow({
        title: LanguageModule.text("txt_partner"),
        bodycontent: DOMElement.div({
            children: [
                DOMElement.div({
                    attrs: {
                        style: {
                            paddingBottom: "10px"
                        }
                    },
                    children: [
                        partner_class_select,
                        nation_cities_select,
                        inputsearchbox
                    ]
                }),
                params.data_container
            ]
        }),
        buttonlist: [
            {
                text: LanguageModule.text("txt_ok"),
                typeColor: "light",
                onclick: function(){
                    var data = params.data_container.getValue();
                    params.func.ok(data);
                    ModalElement.close();
                }
            },
            {
                text: LanguageModule.text("txt_cancel"),
                onclick: function(){
                    ModalElement.close();
                }
            }
        ]
    });
    redrawData();
};

contentModule.reportTimeModule = function(params){
    console.log(params);
    var timeClass = params.class;
    var timeItems = [
        {value: 1, text: LanguageModule.text("txt_yesterday")},
        {value: 2, text: LanguageModule.text("txt_today")},
        {value: 3, text: LanguageModule.text("txt_last_week")},
        {value: 4, text: LanguageModule.text("txt_this_week")},
        {value: 5, text: LanguageModule.text("txt_last_7_days")},
        {value: 13, text: LanguageModule.text("txt_7_days_before_after")},
        {value: 15, text: LanguageModule.text("txt_30_days_before_after")},
        {value: 6, text: LanguageModule.text("txt_last_month")},
        {value: 7, text: LanguageModule.text("txt_this_month")},
        {value: 8, text: LanguageModule.text("txt_last_30_days")},
        {value: 9, text: LanguageModule.text("txt_last_quarter")},
        {value: 10, text: LanguageModule.text("txt_this_quarter")},
        {value: 11, text: LanguageModule.text("txt_last_90_days")},
        {value: 12, text: LanguageModule.text("txt_last_year")},
        {value: 14, text: LanguageModule.text("txt_this_year")},
        {value: 0, text: LanguageModule.text("txt_option")}
    ];
    var props;
    if (params.props) {
        props = params.props;
    }
    else {
        props = {};
    }
    props.items = timeItems;
    props.value = params.value.relativeTime ? params.value.relativeTime: 0;
    var displayFunc = function(value){
        if (value == 0) {
            absol.$("." + timeClass, params.container, function(elt){
                console.log(elt);
                elt.style.display = "inline-block";
            });
        }
        else {
            absol.$("." + timeClass, params.container, function(elt){
                console.log(elt);
                elt.style.display = "none";
            });
        }
    };
    var cbb = absol._({
        tag: "mselectmenu",
        style: {
            display: "block",
            width: "100%"
        },
        props: {
            items: timeItems,
            value: params.value.relativeTime ? params.value.relativeTime: 0
        },
        on: {
            change: function(){
                displayFunc(cbb.value);
                start.disabled = cbb.value != 0;
                end.disabled = cbb.value != 0;
                if (params.change) params.change();
            }
        }
    });

    var start = absol._({
        tag: 'dateinput',
        props: {
            value: params.value.start,
            disabled: cbb.value != 0
        },
        on: {
            change: function(){
                if (params.change) params.change();
            }
        }
    });

    var end = absol._({
        tag: 'dateinput',
        props: {
            value: params.value.end,
            disabled: cbb.value != 0
        },
        on: {
            change: function(){
                if (params.change) params.change();
            }
        }
    });

    var retval = {
        timeElt: cbb,
        startElt: start,
        endElt: end,
        getValue: function(){
            var timeValue, startValue, endValue;
            timeValue = cbb.value;
            startValue = start.value;
            endValue = end.value;
            var rs = contentModule.generateRelativeTime({value: timeValue, from: startValue, to: endValue});
            return {
                originValue: {
                    relativeTime: timeValue,
                    start: startValue,
                    end: endValue
                },
                specificValue: {
                    start: rs.start,
                    end: rs.end
                }
            };
        }
    };

    return retval;

};

theme.checkinProjectForm = function(host){
    var checkin = function(){
        var method = method_select.value;
        if (method == 0){
            ModalElementa.alert({message: "Chưa chọn loại"});
            return;
        }
        var data = list_ctn.getValue();
        if (!data){
            ModalElement.alert({message: "Chưa chọn dự án"});
            return;
        }
        var res = contentModule.getGPSByString(data.projectgps);
        var res1 = contentModule.getGPSByString(data.checkingps);
        var distance = contentModule.calcCrow(res1.lat, res1.lng, res.lat, res.lng);
        if (distance > hr.maximumDistance){
            ModalElement.alert({message: LanguageModule.text2("war_txt_checkin_distance_invalid", [hr.maximumDistance])});
            return;
        }
        ModalElement.show_loading();
        FormClass.api_call({
            url: "project_checkin_save_auto.php",
            params: [
                {name: "data", value: EncodingClass.string.fromVariable(data)}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        ModalElement.close();
                        ModalElement.alert({message: "Checkin thành công"});
                    }
                    else {
                        ModalElement.alert({message: message});
                        return;
                    }
                }
                else {
                    ModalElement.alert({message: message});
                    return;
                }
            }
        });
    };
    var loadProjectByGeoposIdList = function(listGeopos){
        return new Promise(function(rs, rj){
            listGeopos.sort(function(a, b){
                return a - b;
            });
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "load_project_by_geopos_id_list"},
                    {name: "listGeopos", value: EncodingClass.string.fromVariable(listGeopos)}
                ],
                func: function(success, message){
                    if (success){
                        if (message.substr(0, 2) == "ok"){
                            var dic = contentModule.makeDictionaryIndex(host.database.geopos.items);
                            var st = EncodingClass.string.toVariable(message.substr(2));
                            var index;
                            for (var i = 0; i < st.length; i++){
                                index = dic[st[i].geoid];
                                if (index >= 0){
                                    st[i].location = host.database.geopos.items[index].location;
                                }
                            }
                            rs(st);
                        }
                        else {
                            ModalElement.alert({message: message});
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
            });
        });
    };
    var drawList = function(method, type){
        if (!host.load_geopos_done){
            setTimeout(function(){
                drawList(method, type);
                return;
            }, 50);
        }
        else {
            var showLocation = function(position){
                if (absol.$.isRealNumber(position.accuracy) && position.accuracy > hr.maximumAllowableAccuracy){
                    ModalElement.alert({message: LanguageModule.text("war_txt_maximum_allowable_error")});
                    return;
                }
                var listGeopos = [];
                var lat = position.latitude;
                var lng = position.longitude;
                var distance, res;
                for (var i = 0; i < host.database.geopos.items.length; i++){
                    res = contentModule.getGPSByString(host.database.geopos.items[i].location);
                    if (!res) continue;
                    distance = contentModule.calcCrow(lat, lng, res.lat, res.lng);
                    if (isNaN(distance) || distance > hr.maximumDistance) continue;
                    listGeopos.push(host.database.geopos.items[i].id);
                }
                DOMElement.removeAllChildren(list_ctn);
                if (listGeopos.length == 0){
                    ModalElement.close(-1);
                    list_ctn.innerText = LanguageModule.text("war_txt_there_is_no_available_project_to_check_in");
                    return;
                }
                var highlightContent = function(row) {
                    if (row !== undefined) {
                        if (oldHighlightedRow !== row) {
                            for (i = 0; i < oldHighlightedRow.childNodes.length; i++) {
                                oldHighlightedRow.childNodes[i].style.backgroundColor = null;
                            }
                            for (i = 0; i < row.childNodes.length; i++) {
                                row.childNodes[i].style.backgroundColor = "#bfbfbf";
                            }
                            oldHighlightedRow = row;
                        }
                    }
                };
                var oldHighlightedRow = DOMElement.tr({});
                loadProjectByGeoposIdList(listGeopos).then(function(listProject){
                    ModalElement.close(-1);
                    if (listProject.length == 0){
                        list_ctn.innerText = LanguageModule.text("war_txt_there_is_no_available_project_to_check_in");
                        return;
                    }
                    var value = 0;
                    var data = [];
                    listProject.forEach(function(item){
                        data.push([{
                            attrs: {
                                style: {cursor: "pointer"},
                                onclick: function(event, me){
                                    value = {
                                        method: method_select.value,
                                        type: type_select.value,
                                        geoid: item.id,
                                        projectid: item.id,
                                        projectgps: item.location,
                                        checkingps: position.latitude + "," + position.longitude,
                                        checkintime: new Date()
                                    };
                                    var x = me;
                                    while (x.tagName.toLowerCase() !== "tr") x = x.parentElement;
                                    highlightContent(x);
                                    checkinBtn.disabled = false;
                                }
                            },
                            text: item.name
                        }]);
                    });
                    list_ctn.appendChild(DOMElement.div({
                        attrs: {className: "cardsimpletableclass"},
                        children: [DOMElement.table({
                            attrs: {style: {width: "100%"}},
                            data: data
                        })]
                    }));
                    list_ctn.getValue = function(){
                        return value;
                    };
                });
            };
            if (window.isApp){
                var getLocation = function(){
                    mobileHost.getLocation(function(value){
                        if (value == null){
                            ModalElement.alert({message: LanguageModule.text("war_txt_devices_not_supported_gps")});
                            return;
                        }
                        else {
                            showLocation(value);
                        }
                    });
                };
                var isPriv = mobileHost.checkLocationPermission();
                if (isPriv){
                    getLocation();
                }
                else {
                    mobileHost.requestLocationPermission(function(value){
                        if (value) getLocation();
                    });
                }
            }
            else {
                if (navigator.geolocation){
                    navigator.geolocation.getCurrentPosition(function(position){
                        showLocation(position.coords);
                    }, function(err){
                        if (err) ModalElement.alert({message: err.message});
                    });
                }
                else {
                    ModalElement.close(-1);
                    ModalElement.alert({message: "Geolocation is not supported by this browser."});
                }
            }
        }

    };
    var drawListPre = function(){
        checkinBtn.disabled = true;
        list_ctn.getValue = function(){
            return null;
        };
        var method = method_select.value;
        var type = type_select.value;
        if (method == 0){
            DOMElement.removeAllChildren(list_ctn);
            list_ctn.innerText = LanguageModule.text("war_txt_there_is_no_available_project_to_check_in");
            return;
        }
        ModalElement.show_loading();
        drawList(method, type);
    };
    host.database = {};
    host.load_geopos_done = false;
    data_module.loadGeographiesList().then(function(values){
        contentModule.makeDatabaseContent(host, {geopos: values});
        host.load_geopos_done = true;
    });
    var method_select = absol.buildDom({
        tag: "mselectmenu",
        style: {
            display: "block",
            width: "100%"
        },
        props: {
            items: [
                {value: 0, text: LanguageModule.text("txt_select_value")},
                {value: "gps", text: LanguageModule.text("txt_gps")},
                // {value: "wifi", text: LanguageModule.text("txt_wifi")}
            ]
        },
        on: {
            change: function(){
                drawListPre();
            }
        }
    });
    var type_select = absol.buildDom({
        tag: "mselectmenu",
        style: {
            display: "block",
            width: "100%"
        },
        props: {
            items: [
                {value: 0, text: LanguageModule.text("txt_select_value")},
                {value: "in", text: LanguageModule.text("txt_in")},
                {value: "out", text: LanguageModule.text("txt_out")}
            ]
        }
    });
    var list_ctn = DOMElement.div({
        text: LanguageModule.text("war_txt_there_is_no_available_project_to_check_in")
    });
    var params = {
        title: LanguageModule.text("txt_checkin"),
        bodycontent: DOMElement.table({
            attrs: {style: {width: "100%"}},
            data: [
                [method_select],
                [{attrs: {style: {height: "var(--control-verticle-distance-2)"}}}],
                [type_select],
                [{attrs: {style: {height: "var(--control-verticle-distance-2)"}}}],
                [list_ctn]
            ]
        }),
        buttonlist: [
            {
                text: LanguageModule.text("txt_checkin"),
                typeColor: "light",
                onclick: function(){
                    checkin();
                }
            },
            {
                text: LanguageModule.text("txt_cancel"),
                onclick: function(){
                    ModalElement.close();
                }
            }
        ]
    };
    ModalElement.showWindow(params);
    var checkinBtn = params.buttonEltList[0];
    drawListPre();
};

theme.checkinPartnerForm = function(host){
    var drawList = function(){
        DOMElement.removeAllChildren(list_ctn);
        if (!host.load_partner_done){
            setTimeout(function(){
                drawList();
            }, 50);
            return;
        }
        else {
            var showLocation = function(position){
                if (absol.$.isRealNumber(position.accuracy) && position.accuracy > hr.maximumAllowableAccuracy){
                    ModalElement.alert({message: LanguageModule.text("war_txt_maximum_allowable_error")});
                    return;
                }
                var listPartner = [];
                var lat = position.latitude;
                var lng = position.longitude;
                var distance, res;
                for (var i = 0; i < host.database.partner.items.length; i++){
                    res = contentModule.getGPSByString(host.database.partner.items[i].gps);
                    if (!res) continue;
                    distance = contentModule.calcCrow(lat, lng, res.lat, res.lng);
                    if (isNaN(distance) || distance > hr.maximumDistance) continue;
                    listPartner.push(host.database.partner.items[i]);
                }
                ModalElement.close(-1);
                DOMElement.removeAllChildren(list_ctn);
                if (listPartner.length == 0){
                    ModalElement.close(-1);
                    list_ctn.innerText = LanguageModule.text("war_txt_there_is_no_available_partner_or_location_to_check_in");
                    FormClass.api_call({
                        url: "hr_system_debugs_save.php",
                        params: [{name: "data", value: EncodingClass.string.fromVariable({
                            userid: systemconfig.userid,
                            time: new Date(),
                            task: "checkin_partner",
                            content: lat +"," + lng
                        })}],
                        func: function(success, message){
                            if (success){
                                if (message.substr(0, 2) == "ok"){
                                    // TODO:
                                }
                                else {
                                    // ModalElement.alert({message: message});
                                }
                            }
                            else {
                                // ModalElement.alert({message: message});
                            }
                        }
                    });
                    return;
                }
                var value = 0;
                var data = [];
                var highlightContent = function(row) {
                    if (row !== undefined) {
                        if (oldHighlightedRow !== row) {
                            for (i = 0; i < oldHighlightedRow.childNodes.length; i++) {
                                oldHighlightedRow.childNodes[i].style.backgroundColor = null;
                            }
                            for (i = 0; i < row.childNodes.length; i++) {
                                row.childNodes[i].style.backgroundColor = "#bfbfbf";
                            }
                            oldHighlightedRow = row;
                        }
                    }
                };
                var oldHighlightedRow = DOMElement.tr({});
                listPartner.forEach(function(item){
                    data.push([{
                        attrs: {
                            style: {cursor: "pointer"},
                            onclick: function(event, me){
                                value = {
                                    employeeid: data_module.employeeOfMe[0],
                                    partnerid: item.id,
                                    partnergps: item.gps,
                                    checkingps: position.latitude + "," + position.longitude,
                                    checkin_follow_gps: 1,
                                    checkintime: new Date()
                                };
                                var x = me;
                                while (x.tagName.toLowerCase() !== "tr") x = x.parentElement;
                                highlightContent(x);
                                checkinBtn.style.display = "";
                            }
                        },
                        text: item.name
                    }]);
                });
                list_ctn.appendChild(DOMElement.div({
                    attrs: {className: "cardsimpletableclass"},
                    children: [DOMElement.table({
                        attrs: {style: {width: "100%"}},
                        data: data
                    })]
                }));
                list_ctn.getValue = function(){
                    return value;
                };
            };
            if (window.isApp){
                var getLocation = function(){
                    mobileHost.getLocation(function(value){
                        if (value == null){
                            ModalElement.alert({message: LanguageModule.text("war_txt_devices_not_supported_gps")});
                            return;
                        }
                        else {
                            showLocation(value);
                        }
                    });
                };
                var isPriv = mobileHost.checkLocationPermission();
                if (isPriv){
                    getLocation();
                }
                else {
                    mobileHost.requestLocationPermission(function(value){
                        if (value) getLocation();
                    });
                }
            }
            else {
                if (navigator.geolocation){
                    navigator.geolocation.getCurrentPosition(function(position){
                        showLocation(position.coords);
                    }, function(err){
                        if (err) ModalElement.alert({message: err.message});
                    });
                }
                else {
                    ModalElement.close(-1);
                    ModalElement.alert({message: "Geolocation is not supported by this browser."});
                }
            }
        }
    };
    var drawListPre = function(){
        checkinBtn.style.display = "none";
        list_ctn.getValue = function(){
            return null;
        };
        ModalElement.show_loading();
        drawList();
    };
    var checkin = function(){
        var data = list_ctn.getValue();
        if (!data){
            ModalElement.alert({message: "Chưa chọn đối tác"});
            return;
        }
        var res = contentModule.getGPSByString(data.partnergps);
        var res1 = contentModule.getGPSByString(data.checkingps);
        var distance = contentModule.calcCrow(res1.lat, res1.lng, res.lat, res.lng);
        if (distance > hr.maximumDistance){
            ModalElement.alert({message: LanguageModule.text2("war_txt_checkin_distance_invalid", [hr.maximumDistance])});
            return;
        }
        ModalElement.show_loading();
        FormClass.api_call({
            url: "partner_checkin_save_auto.php",
            params: [
                {name: "data", value: EncodingClass.string.fromVariable(data)}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        ModalElement.close();
                        ModalElement.alert({message: "Checkin thành công"});
                    }
                    else {
                        ModalElement.alert({message: message});
                        return;
                    }
                }
                else {
                    ModalElement.alert({message: message});
                    return;
                }
            }
        });
    };
    host.database = {};
    host.load_partner_done = false;
    data_module.loadPartnerGPSList(host).then(function(values){
        console.log(host.database.partner.items);
        host.load_partner_done = true;
    });
    var list_ctn = DOMElement.div({});
    var params = {
        title: LanguageModule.text("txt_partner_checkin"),
        bodycontent: list_ctn,
        buttonlist: [
            {
                text: LanguageModule.text("txt_checkin"),
                typeColor: "light",
                onclick: function(){
                    checkin();
                }
            },
            {
                text: LanguageModule.text("txt_cancel"),
                onclick: function(){
                    ModalElement.close();
                }
            }
        ]
    };
    ModalElement.showWindow(params);
    var checkinBtn = params.buttonEltList[0];
    drawListPre();
};

contentModule.drawComment = function (params){
    var drawCommentEdit = function(){
        ModalElement.show_loading();
        contentModule.drawCommentInside(params).then(function(cBox){
            ModalElement.close(-1);
            var header = absol.buildDom({
                tag: 'mheaderbar',
                props: {
                    actionIcon: DOMElement.i({
                        attrs: {
                            className: "material-icons"
                        },
                        text: "arrow_back_ios"
                    }),
                    title: LanguageModule.text("txt_comment")
                },
                on: {
                    action: function(){
                        params.frameList.removeLast();
                    },
                    command: function(event){
                        event.commandItem.cmd();
                    }
                }
            });
            var singlePage = absol.buildDom({
                tag: 'tabframe',
                child: [
                    header,
                    DOMElement.div({
                        attrs: {
                            className: "card-mobile-content",
                            style: {
                                padding: 0
                            }
                        },
                        children: [cBox.getView()]
                    })
                ]
            });
            params.frameList.addChild(singlePage);
            singlePage.requestActive();
        });
    };
    var comment_ctn = DOMElement.div({});
    var child = [
        {
            class: 'm-mk-section-header-name',
            child: { text: LanguageModule.text("txt_comment") }
        }
    ];
    var add_elt = absol.buildDom({
        class: 'm-mk-section-header-right',
        child: [
            DOMElement.a({
                attrs: {
                    onclick: function(){
                        drawCommentEdit();
                    }
                },
                text: LanguageModule.text("txt_add")
            })
        ]
    });
    if (!params.disabled) child.push(add_elt);
    var res = absol.buildDom({
        attr: {
            "data-sectionid": "comment"
        },
        child: [
            absol.buildDom({
                class: 'm-mk-section-header',
                child: child
            }),
            DOMElement.div({
                attrs: {style: {paddingTop: "var(--control-verticle-distance-2)"}},
                children: [comment_ctn]
            })
        ]
    });
    res.setDisabled = function(type){
        add_elt.style.display = "none";
    };
    contentModule.drawCommentInside({taskid: params.taskid, tablename: params.tablename, disabled: true}).then(function(chatBox){
        var x = chatBox.getView();
        var y = absol.$('.card-chat-box-messages-container', x);
        y.addStyle({
            position: "relative",
            left: "unset",
            top: "unset",
            right: "unset",
            bottom: "unset",
            overflowY: "visible"
        });
        comment_ctn.appendChild(y);
    });
    return res;
};

contentModule.questionChange = function (params) {
    var message = params.message, title = params.title, func = params.onclick;
    if (message === undefined) message = LanguageModule.text("war_close_not_save");
    if (title === undefined) title = "Question";
    if (func === undefined) func = function (){};
    theme.showForm({
        message: message,
        buttonList: [
            {
                text: LanguageModule.text("txt_yes")
            },
            {
                text: LanguageModule.text("txt_no")
            },
            {
                text: LanguageModule.text("txt_cancel")
            }
        ],
        func: func
    });
};

theme.HeaderBarWithSearh = (function(){
    var _ = absol._;
    var $ = absol.$;
    function HeaderBarWithSearch(){
        this.$disableSearchBtn = _({
            tag: 'button',
            class: ['am-header-bar-left-btn', 'am-header-bar-disable-search-btn'],
            child:{ tag:'i', class: 'material-icons', child:{text:'keyboard_backspace'}},
            on:{
                click: this.eventHandler.clickDisableSearchBtn
            }
        });
        this.addChildBefore(this.$disableSearchBtn, this.firstChild);
    }

    HeaderBarWithSearch.tag = 'headerbarwithsearch';

    HeaderBarWithSearch.render = function(data){
        var searchInput = data.searchInput;
        var res =  _('mheaderbar');
        searchInput.attr('style', undefined);
        res.$searchInput = searchInput;
        res.addChildBefore(searchInput, res.$right);
        return res;
    };

    HeaderBarWithSearch.prototype.searchMode = function(flag){
        if (this.containsClass('am-search-mode') == flag) return;
        if (flag){
            this.addClass('am-search-mode');
            this.$searchInput.focus();
            this._prevActionIcon = this.actionIcon;
        }
        else {
            this.removeClass('am-search-mode');
            this.$searchInput.blur();
            this.$searchInput.value = "";
        }
    };

    HeaderBarWithSearch.eventHandler = {};

    HeaderBarWithSearch.eventHandler.clickDisableSearchBtn = function(event){
        this.searchMode(false);
    };

    absol.coreDom.install(HeaderBarWithSearch);
    return HeaderBarWithSearch;
})();

theme.modalFormMobile = function(params){
    if (params.title === undefined) params.title = "";
    var formcontent;
    var h = DOMElement.div({
        attrs: {
            className: "card-modal-mobile-body-content-ctn"
        }
    });
    if (params.bodycontent !== undefined) h.appendChild(params.bodycontent);
    var buttonElt = DOMElement.div({
        attrs: {
            align: "right",
            style: {
                paddingTop: "20px"
            }
        }
    });
    if (params.buttonList === undefined) params.buttonList = [];
    var color;
    for (var i = 0; i < params.buttonList.length; i++){
        switch (params.buttonList[i].typeColor) {
            case "light":
                color = "var(--a-color)";
                break;
            case "dark":
            default:
                color = "#aaaaaa";
        }
        buttonElt.appendChild(DOMElement.span({
            attrs: {
                style: {
                    color: color,
                    fontWeight: "bold",
                    marginLeft: "20px"
                },
                onclick: function(i) {
                    return function (event, me) {
                        formcontent.remove();
                        params.func(i);
                    }
                } (i)
            },
            text: params.buttonList[i].text.toUpperCase()
        }));
    }
    if (params.buttonList.length > 0) h.appendChild(buttonElt);
    formcontent = DOMElement.div({
        attrs: {
            style: {
                width: "100vw",
                height: "100vh",
                top: 0,
                position: "fixed",
                background: "#0000001a",
                zIndex: 88888
            }
        },
        children: [DOMElement.div({
            attrs: {
                className: "card-modal-mobile-ctn"
            },
            children: [
                DOMElement.div({
                    attrs: {
                        className: "card-modal-mobile-header-ctn"
                    },
                    children: [
                        DOMElement.div({
                            attrs: {
                                className: "card-modal-mobile-header-title"
                            },
                            text: params.title
                        }),
                        DOMElement.div({
                            attrs: {
                                className: "card-modal-mobile-close-btn",
                                onclick: function(){
                                    formcontent.remove();
                                }
                            },
                            children: [DOMElement.i({
                                attrs: {
                                    className: "material-icons card-modal-mobile-close-icon"
                                },
                                text: "clear"
                            })]
                        })
                    ]
                }),
                h
            ]
        })]
    });
    document.body.appendChild(formcontent);
};

theme.showForm = function(params){
    var bodycontent;
    var h = DOMElement.div({});
    if (params.title !== undefined){
        h.appendChild(DOMElement.div({
            attrs: {
                style: {
                    textAlign: "center",
                    fontWeight: "bold",
                    paddingBottom: "20px"
                }
            },
            text: params.title
        }));
    }
    if (params.message !== undefined){
        h.appendChild(DOMElement.div({
            attrs: {
                style: {
                    textAlign: "center"
                }
            },
            text: params.message
        }));
    }
    else if (params.bodycontent !== undefined){
        h.appendChild(params.bodycontent);
    }
    var buttonElt = DOMElement.div({
        attrs: {
            align: "right",
            style: {
                paddingTop: "20px"
            }
        }
    });
    if (params.buttonList === undefined) params.buttonList = [];
    for (var i = 0; i < params.buttonList.length; i++){
        buttonElt.appendChild(DOMElement.span({
            attrs: {
                style: {
                    color: params.buttonList[i].color,
                    fontWeight: "bold",
                    marginLeft: "20px"
                },
                onclick: function(i) {
                    return function (event, me) {
                        bodycontent.remove();
                        params.func(i);
                    }
                } (i)
            },
            text: params.buttonList[i].text.toUpperCase()
        }));
    }
    if (params.buttonList.length > 0) h.appendChild(buttonElt);
    bodycontent = DOMElement.div({
        attrs: {
            style: {
                width: "100vw",
                height: "100vh",
                top: 0,
                position: "fixed",
                background: "#0000001a",
                zIndex: 888888
            }
        },
        children: [DOMElement.div({
            attrs: {
                style: {
                    width: "calc(100vw - 60px)",
                    maxWidth: "400px",
                    paddingTop: "20px",
                    paddingBottom: "10px",
                    backgroundColor: "white",
                    padding: "30px",
                    borderRadius: "15px",
                    margin: "50% auto",
                    boxShadow: "2px 2px 2px 0px #908787"
                }
            },
            children: [h]
        })]
    });
    document.body.appendChild(bodycontent);
};

ModalElement.alertNoLanguage = function (params) {
    var message, func;
    if (typeof params === 'string'){
        message = params;
    }
    else {
        message = params.message;
        func = params.func;
    }
    if (message === undefined) message = "";
    if (func === undefined) func = function () {};
    theme.showForm({
        message: message,
        buttonList: [
            {
                text: "OK",
                color: "var(--a-color)"
            }
        ],
        func: func
    });
};

ModalElement.alert = function (params) {
    ModalElement.close(-1);
    var message, func;
    if (typeof params === 'string'){
        message = params;
    }
    else {
        message = params.message;
        func = params.func;
    }
    if (message === undefined) message = "";
    if (func === undefined) func = function () {};
    theme.showForm({
        message: message,
        buttonList: [
            {
                text: (LanguageModule.defaultcode === undefined)? "OK" : LanguageModule.text("txt_ok"),
                color: "var(--a-color)"
            }
        ],
        func: func
    });
};

ModalElement.show_loading = function(){
    ModalElement.show({
       index: -1,
       bodycontent: absol.buildDom({
           tag: "spinnerico",
           style: {
               width: "100px",
               height: "100px"
           }
       }),
       overflow: "visible"
   });
};

ModalElement.question = function (params) {
    var message = params.message,title = params.title, h, func = params.onclick;
    if (message === undefined) message = "";
    if (title === undefined) title = "Question";
    if (func === undefined) func = function(){};
    theme.showForm({
        title: title,
        message: message,
        buttonList: [
            {
                text: LanguageModule.text("txt_yes"),
                color: "var(--a-color)"
            },
            {
                text: LanguageModule.text("txt_no"),
                color: "#aaaaaa"
            }
        ],
        func: func
    });
};

ModalElement.question2 = function (params) {
    var message = params.message,title = params.title, h, func = params.onclick;
    if (message === undefined) message = "";
    if (title === undefined) title = "Question";
    if (func === undefined) func = function(){};
    theme.showForm({
        title: title,
        message: message,
        buttonList: [
            {
                text: LanguageModule.text("txt_ok"),
                color: "var(--a-color)"
            },
            {
                text: LanguageModule.text("txt_cancel"),
                color: "#aaaaaa"
            }
        ],
        func: func
    });
};

theme.quickmenu = function(menuItems){
    var trigger = DOMElement.i({
        attrs: {
            className: "material-icons " +  DOMElement.dropdownclass.button,
            style: {
                fontSize: "20px",
                cursor: "pointer",
                color: "#929292"
            },
            onmouseout: function(event, me){
                me.style.color = "#929292";
            },
            onmouseover: function(event, me){
                me.style.color = "black";
            }
        },
        text: "more_vert"
    });
    absol.QuickMenu.showWhenClick(trigger, {items: menuItems}, 'auto', function (menuItem) {
        if (menuItem.cmd) menuItem.cmd();
    });
    return trigger;
};

theme.layoutInit = function(params){
    return absol.buildDom({
        class: 'am-application',
        child: [
            params.tabPanel,
            params.tabBar
        ]
    });
};

theme.menuHeader = function(params){
    var systemMenu = [
        {
            text: LanguageModule.text("txt_personal_profile"),
            icon: {
                tag: 'mmdirect',
                props: {
                    iconName: 'file-account-outline'
                }
            },
            cmd: params.cmd.personal_profile
        }
    ];
    systemMenu.push({
        text: LanguageModule.text("txt_log_out"),
        icon: {
            tag: "mmdirect",
            props: {
                iconName: "logout"
            }
        },
        cmd: params.cmd.logout
    });
    var listmenuhorizontal = [
        {
            text: LanguageModule.text("txt_activities"),
            items: [
                {
                    text: LanguageModule.text("txt_to_do"),
                    hidden: !params.cmd.activities,
                    icon: {
                        tag: "mmdirect",
                        props: {
                            iconName: "format-list-checks"
                        }
                    },
                    cmd: params.cmd.activities
                },
                {
                    text: LanguageModule.text("txt_partner_checkin"),
                    hidden: !params.cmd.checkin,
                    icon: {
                        tag: "mmdirect",
                        props: {
                            iconName: "map-marker-check"
                        }
                    },
                    cmd: params.cmd.checkin
                },
                {
                    text: LanguageModule.text("txt_project_checkin"),
                    hidden: !params.cmd.project_checkin,
                    icon: {
                        tag: "mmdirect",
                        props: {
                            iconName: "map-marker-check"
                        }
                    },
                    cmd: params.cmd.project_checkin
                }
            ]
        },
        // {
        //     text: LanguageModule.text("txt_human_resource"),
        //     icon: {
        //         tag: 'mmdirect',
        //         style: {
        //             backgroundColor: 'rgb(62, 153, 194)'
        //         },
        //         props: {
        //             iconName: 'view-list'
        //         }
        //     },
        //     items: [
        //         {
        //             text: LanguageModule.text("txt_organization_chart"),
        //             icon: 'span.mdi.mdi-department',
        //             cmd: params.cmd.orgs
        //         }
        //     ]
        // },
        {
            text: LanguageModule.text("txt_work_flows_and_crm"),
            icon: {
                tag: 'mmdirect',
                props: {
                    iconName: 'alpha-w-circle-outline'
                }
            },
            items: [
                {
                    text: LanguageModule.text("txt_work_flows"),
                    icon: {
                        tag: "mmdirect",
                        props: {
                            iconName: "stack-overflow"
                        }
                    },
                    cmd: params.cmd.work_flows
                },
                {
                    text: LanguageModule.text("txt_partner"),
                    icon: {
                        tag: "mmdirect",
                        props: {
                            iconName: "store"
                        }
                    },
                    cmd: params.cmd.partner
                },
                {
                    text: LanguageModule.text("txt_partner_checkin"),
                    icon: {
                        tag: "mmdirect",
                        props: {
                            iconName: "store-marker-outline"
                        }
                    },
                    cmd: params.cmd.partner_checkin
                },
                {
                    text: LanguageModule.text("txt_contact"),
                    icon: {
                        tag: "mmdirect",
                        props: {
                            iconName: "card-account-phone-outline"
                        }
                    },
                    cmd: params.cmd.contact
                }
            ]
        },
        {
            text: LanguageModule.text("txt_document_manager"),
            icon: {
                tag: 'mmdirect',
                props: {
                    iconName: 'text-box'
                }
            },
            cmd: params.cmd.document_manager
        },
        {
            text: LanguageModule.text("txt_training"),
            icon: {
                tag: 'mmdirect',
                props: {
                    iconName: 'school-outline'
                }
            },
            items: [
                {
                    text: LanguageModule.text("txt_lesson"),
                    icon: {
                        tag: 'mmdirect',
                        props: {
                            iconName: 'book-open-blank-variant'
                        }
                    },
                    cmd: params.cmd.lesson
                },
                {
                    text: LanguageModule.text("txt_exercise"),
                    icon: {
                        tag: 'mmdirect',
                        props: {
                            iconName: 'format-list-checks'
                        }
                    },
                    cmd: params.cmd.exercise
                }
            ]
        },
        {
            text: LanguageModule.text("txt_system"),
            icon: {
                tag: 'mmdirect',
                props: {
                    iconName: 'cog-outline'
                }
            },
            items: systemMenu
        }
    ];
    var horizontalMenu = absol.buildDom({
        tag:'mmatmenu',
        props:{
            items: listmenuhorizontal
        },
        on:{
            press:function(event){
                var item = event.menuItem;
                if (item.cmd){
                    item.cmd();
                }
                this.activeTab = -1;
            }
        }
    });
    return horizontalMenu;
};

theme.formPersonalProfile = function(params){
    var header = absol.buildDom({
        tag: 'mheaderbar',
        props: {
            actionIcon: DOMElement.i({
                attrs: {
                    className:"material-icons"
                },
                text: "arrow_back_ios"
            }),
            title: LanguageModule.text("txt_personal_profile"),
            commands: [
                {
                    icon:  DOMElement.i({
                        attrs: {
                            className:"material-icons"
                        },
                        text: "save"
                    })
                }
            ]
        },
        on: {
            action: params.cmdbutton.close,
            command: params.cmdbutton.save
        }
    });
    console.log(header);
    var fullname = theme.input({
        style: {
            width: "100%"
        },
        value: params.data.fullname
    });
    var username = theme.input({
        style: {
            width: "100%"
        },
        disabled: true,
        value: params.data.username
    });

    var language = absol.buildDom({
        tag: 'selectmenu',
        style: {
            display: "block",
            width: "100%"
        },
        props:{
            value: params.data.language,
            items: params.data.languageList
        }
    });
    var font_level_select = absol.buildDom({
        tag: 'selectmenu',
        style: {
            display: "block",
            width: "100%"
        },
        props:{
            value: params.data.font_level,
            items: contentModule.getFontLevelList()
        }
    });
    var email = theme.input({
        style: {
            width: "100%"
        },
        value: params.data.email
    });
    var comment = DOMElement.textarea({
        attrs: {
            className: "cardSimpleTextarea",
            style: {
                width: "100%",
                height: "100px"
            },
            value: params.data.comment
        }
    });
    var celloldpasswordlabel = DOMElement.div({
        attrs: {
            className: "card-mobile-label-form-edit",
            style: {
                display: "none"
            }
        },
        text: LanguageModule.text("txt_old_password")
    });
    var oldpassword = theme.input({
        style: {
            width: "100%",
            display: "none"
        }
    });
    var celloldpasswordinput = oldpassword;
    var cellnewpasswordlabel = DOMElement.div({
        attrs: {
            className: "card-mobile-label-form-edit",
            style: {
                display: "none"
            }
        },
        text: LanguageModule.text("txt_new_password")
    });
    var newpassword = theme.input({
        style: {
            width: "100%",
            display: "none"
        }
    });
    var cellnewpasswordinput = newpassword;
    var cellrepasswordlabel = DOMElement.div({
        attrs: {
            className: "card-mobile-label-form-edit",
            style: {
                display: "none"
            }
        },
        text: LanguageModule.text("txt_reinput_password_new")
    });
    var repassword = theme.input({
        style: {
            width: "100%",
            display: "none"
        }
    });
    var cellrepasswordinput = repassword;
    var logo_img = DOMElement.img({
        attrs: {
            style: {
                maxHeight: "128px",
                maxWidth: "128px",
                cursor: "pointer",
                display: "inline-block"
            },
            src: 'https://avatars1.githubusercontent.com/u/32388488?s=400&v=4'//params.data.user_avatars
        }
    });
    var logo_cell = DOMElement.div({
        attrs: {
            align: "center",
            style: {
                height: "130px",
                backgroundColor: "#ffffff",
                textAlign: "center",
                cursor: "pointer",
                verticalAlign: "middle",
                display: "table-cell"
            },
            onclick: function(event, me){
            //     pizo.xmlModalDragImage.createModal(document.body,function(){
            //        var src = pizo.xmlModalDragImage.imgUrl.src;
            //        params.user_avatars = src;
            //        logo_img.src = src;
            //    });
            }
        },
        children: [logo_img]
    });
    var change = 0;
    var singlePage = DOMElement.div({
        attrs: {style: {height: "100%"}},
        children: [
            header,
            DOMElement.div({
                attrs: {
                    className: "card-mobile-content"
                },
                children: [
                    DOMElement.div({
                        attrs: {
                            className: "card-mobile-label-form-edit-first"
                        },
                        text: LanguageModule.text("txt_account")
                    }),
                    username,
                    DOMElement.div({
                        attrs: {
                            className: "card-mobile-label-form-edit"
                        },
                        text: LanguageModule.text("txt_fullname")
                    }),
                    fullname,
                    DOMElement.div({
                        attrs: {style: {paddingTop: "var(--control-verticle-distance-2)"}},
                        children: [DOMElement.a({
                            attrs:{
                                style: {
                                    cursor: "pointer",
                                    color: "var(--a-color)"
                                },
                                onclick:  function(event,me){
                                    if (change == 0){
                                        change = 1;
                                        me.text = LanguageModule.text("txt_hide_change_password");
                                        celloldpasswordlabel.style.display = "";
                                        celloldpasswordinput.style.display = "";
                                        cellnewpasswordlabel.style.display = "";
                                        cellnewpasswordinput.style.display = "";
                                        cellrepasswordlabel.style.display = "";
                                        cellrepasswordinput.style.display = "";
                                        oldpassword.setAttribute('type', "password");
                                        oldpassword.focus();
                                        newpassword.setAttribute('type', "password");
                                        repassword.setAttribute('type', "password");
                                    }
                                    else {
                                        change = 0;
                                        me.text = LanguageModule.text("txt_change_password");
                                        celloldpasswordlabel.style.display = "none";
                                        celloldpasswordinput.style.display = "none";
                                        cellnewpasswordlabel.style.display = "none";
                                        cellnewpasswordinput.style.display = "none";
                                        cellrepasswordlabel.style.display = "none";
                                        cellrepasswordinput.style.display = "none";
                                        oldpassword.setAttribute('type', "text");
                                        newpassword.setAttribute('type', "text");
                                        repassword.setAttribute('type', "text");
                                        oldpassword.value = "";
                                        newpassword.value = "";
                                        repassword.value = "";
                                    }
                                }
                            },
                            text: LanguageModule.text("txt_change_password")
                        })]
                    }),
                    celloldpasswordlabel,
                    celloldpasswordinput,
                    cellnewpasswordlabel,
                    cellnewpasswordinput,
                    cellrepasswordlabel,
                    cellrepasswordinput,
                    DOMElement.div({
                        attrs: {
                            className: "card-mobile-label-form-edit"
                        },
                        text: LanguageModule.text("txt_email")
                    }),
                    email,
                    DOMElement.div({
                        attrs: {
                            className: "card-mobile-label-form-edit"
                        },
                        text: LanguageModule.text("txt_language")
                    }),
                    language,
                    // DOMElement.div({
                    //     attrs: {
                    //         className: "card-mobile-label-form-edit"
                    //     },
                    //     text: LanguageModule.text("txt_font_level")
                    // }),
                    // font_level_select,
                    DOMElement.div({
                        attrs: {
                            className: "card-mobile-label-form-edit"
                        },
                        text: LanguageModule.text("txt_avatar")
                    }),
                    DOMElement.div({
                        attrs: {
                            align: "center",
                            style: {
                                border: "1px solid #d6d6d6",
                                width: "130px",
                                borderRadius: "3px"
                            }
                        },
                        children: [
                            DOMElement.div({
                                attrs: {
                                    style: {
                                        display: "table-cell"
                                    }
                                },
                                children: [logo_cell]
                            })
                        ]
                    }),
                    DOMElement.div({
                        attrs: {
                            className: "card-mobile-label-form-edit"
                        },
                        text: LanguageModule.text("txt_comment")
                    }),
                    comment
                ]
            })
        ]
    });
    singlePage.getValue = function(){
        var emailadd = email.value.trim();
        if (!contentModule.filterEmail.test(emailadd)){
            ModalElement.alert({
                message: LanguageModule.text("war_txt_email_invalid"),
                func: function(){
                    email.focus();
                }
            });
            return;
        }
        if (fullname.value.trim() == ""){
            ModalElement.alert({
                message: LanguageModule.text("war_no_fullname"),
                func: function(){
                   fullname.focus();
                }
            });
            return;
        }
        var data = {
            fullname: fullname.value.trim(),
            email: emailadd,
            comment: comment.value.trim(),
            language: language.value,
            font_level: font_level_select.value,
            user_avatars: params.user_avatars
        };
        if (change == 1) {
            if (oldpassword.value.trim() == ""){
                ModalElement.alert({
                    message: LanguageModule.text("txt_old_password_is_null"),
                    func: function(){
                        oldpassword.focus();
                    }
                });
                return;
            }
            if (newpassword.value.trim() == ""){
                ModalElement.alert({
                    message: LanguageModule.text("txt_password_is_null"),
                    func: function(){
                        newpassword.focus();
                    }
                });
                return;
            }
            if (newpassword.value != repassword.value) {
                ModalElement.alert({
                    message: LanguageModule.text("war_password_nomatch"),
                    func: function(){
                        repassword.focus();
                    }
                });
                return;
            }
            data.newpassword = newpassword.value.trim();
            data.oldpassword = oldpassword.value.trim();
        }
        return data;
    };
    return singlePage;
};

theme.formConfirmPassword = function(params){
    ModalElement.showWindow({
        index: 1,
        closebutton: false,
        title: LanguageModule.text("txt_confirm_password"),
        bodycontent: DOMElement.table({
            data: [
                [
                    {},{},params.notification
                ],
                [
                    {
                        attrs: {style: {whiteSpace: "nowrap"}},
                        text: LanguageModule.text("txt_password")
                    },
                    {attrs: {style: {width: "10px"}}},
                    params.password_confirm
                ],
                [{attrs: {style: {height: "20px"}}}],
                [{
                    attrs :{
                        colSpan: 3,
                        align: "center"
                    },
                    children: [DOMElement.table({
                        data: [[
                            {
                                children: [theme.noneIconButton({
                                    onclick: params.func.ok,
                                    text: LanguageModule.text("txt_ok")
                                })]
                            },
                            {
                                attrs: {style: {width: carddone.menu.distanceButtonForm}}
                            },
                            {
                                children: [theme.noneIconButton({
                                    onclick: params.func.close,
                                    text: LanguageModule.text("txt_close")
                                })]
                            }
                        ]]
                    })]
                }]
            ]
        })
    });
};

theme.checkbox = function(params){
   var res = {
       tag: "checkbox",
       props: {},
       on: {}
   };
   if (params.class !== undefined) res.class = params.class;
   if (params.checked !== undefined) res.props.checked = params.checked;
   if (params.disabled !== undefined) res.props.disabled = params.disabled;
   if (params.text !== undefined) res.props.text = params.text;
   if (params.cursor !== undefined) res.props.cursor = params.cursor;
   if (params.onchange !== undefined) res.on.change = params.onchange;
   return absol.buildDom(res);
};

theme.input = function(params){
    var res = {
        attrs: {
            className: "cardsimpleInput",
            type: "text"
        }
    };
    if (params.style !== undefined) res.attrs.style = params.style;
    if (params.value !== undefined) res.attrs.value = params.value;
    if (params.disabled !== undefined) res.attrs.disabled = params.disabled;
    if (params.onkeyup !== undefined) res.attrs.onkeyup = params.onkeyup;
    if (params.onkeydown !== undefined) res.attrs.onkeydown = params.onkeydown;
    if (params.onchange !== undefined) res.attrs.onchange = params.onchange;
    if (params.align !== undefined) res.attrs.align = params.align;
    if (params.placeholder !== undefined) res.attrs.placeholder = params.placeholder;
    if (params.type !== undefined) res.attrs.type = params.type;
    if (params.autocomplete !== undefined) res.attrs.autocomplete = params.autocomplete;
    return DOMElement.input(res);
};

ModalElement.showWindow = function (params) {
    var childs = [];
    if (params.title) childs.push(DOMElement.div({
        attrs: {
            align: "left",
            style: {
                minWidth: "200px",
                height: "40px",
                color: "black",
                font: "16px Helvetica, Arial, sans-serif",
                fontWeight: "bold"
            }
        },
        text: params.title
    }));
    if (params.bodycontent){
        childs.push(DOMElement.div({
            attrs: {
                style: {
                    maxWidth: "90vw",
                    maxHeight: "calc(90vh - 160px)",
                    overflow: "auto"
                }
            },
            children: [params.bodycontent]
        }));
    }
    params.buttonEltList = [];
    if (params.buttonlist && params.buttonlist.length > 0){
        var buttonList = [], color, btn;
        for (var i = 0; i < params.buttonlist.length; i++){
            switch (params.buttonlist[i].typeColor) {
                case "light":
                    color = "var(--a-color)";
                    break;
                case "dark":
                default:
                    color = "#aaaaaa";
            }
            btn = DOMElement.span({
                attrs: {
                    style: {
                        fontWeight: "bold",
                        marginLeft: "20px",
                        color: color
                    },
                    onclick: params.buttonlist[i].onclick
                },
                text: params.buttonlist[i].text.toUpperCase()
            });
            params.buttonEltList.push(btn);
            buttonList.push(btn);
        }
        childs.push(DOMElement.div({
            attrs: {
                align: "right",
                style: {
                    paddingTop: "20px",
                    marginBottom: "var(--control-verticle-distance-2)"
                }
            },
            children: buttonList
        }));
    }
    ModalElement.show({
        index: params.index,
        bodycontent: DOMElement.div({children: childs})
    });
};

ModuleManagerClass.register({
    name: "Common_view",
    prerequisites: ["ModalElement"]
});

VaKeR 2022