<% /*
    $Revision$
    $Id$

    File:           mgt_tools.inc

    Description:

    Context:

    Notes:
*/
%>
<%
    function buildKenmerktypeLOV(kenmerktype, emptyOption)
    {
        var kenmerktypeLOV = "";
        switch (kenmerktype)
        {
            case "C":
                kenmerktypeLOV = "C;" + L("mgt_srtkenmerk_karakter");
                break;
            case "N":
                kenmerktypeLOV = "N;" + L("mgt_srtkenmerk_numeriek");
                break;
            case "D":
                kenmerktypeLOV = "D;" + L("mgt_srtkenmerk_datum");
                break;
            case "R":
                kenmerktypeLOV = "R;" + L("mgt_srtkenmerk_referentie_l") + ";"
                               + "S;" + L("mgt_srtkenmerk_referentie_s")
                break;
            case "S":
                kenmerktypeLOV = "S;" + L("mgt_srtkenmerk_referentie_s") + ";"
                               + "R;" + L("mgt_srtkenmerk_referentie_l")
                break;
            case "X":
                kenmerktypeLOV = "X;" + L("mgt_srtkenmerk_bestandsnaam");
                break;
            case "F":
                kenmerktypeLOV = "F;" + L("mgt_srtkenmerk_bestand");
                break;
            case "E":
                kenmerktypeLOV = "E;" + L("mgt_srtkenmerk_bestand_e");
                break;
            case "M":
                kenmerktypeLOV = "M;" + L("mgt_srtkenmerk_bestand_f");
                break;
            case "L":
                kenmerktypeLOV = "L;" + L("mgt_srtkenmerk_label") + ";"
                               + "l;" + L("mgt_srtkenmerk_label_i")
                break;
            case "l":
                kenmerktypeLOV = "l;" + L("mgt_srtkenmerk_label_i") + ";"
                               + "L;" + L("mgt_srtkenmerk_label")
                break;
            case "Q":
                kenmerktypeLOV = "Q;" + L("mgt_srtkenmerk_blanco");
                break;
//            case "B":
//                kenmerktypeLOV = "B;" + L("mgt_srtkenmerk_berekening");
//                break;
            default:
                kenmerktypeLOV = (emptyOption ? emptyOption + ";" : "")
                               +  "C;" + L("mgt_srtkenmerk_karakter")
                               + ";N;" + L("mgt_srtkenmerk_numeriek")
                               + ";D;" + L("mgt_srtkenmerk_datum")
                               + ";R;" + L("mgt_srtkenmerk_referentie_l")
                               + ";S;" + L("mgt_srtkenmerk_referentie_s")
                               + ";X;" + L("mgt_srtkenmerk_bestandsnaam")
                               + ";F;" + L("mgt_srtkenmerk_bestand")
                               + ";E;" + L("mgt_srtkenmerk_bestand_e")
                               + ";M;" + L("mgt_srtkenmerk_bestand_f")
                               + ";L;" + L("mgt_srtkenmerk_label")
                               + ";l;" + L("mgt_srtkenmerk_label_i")
                               + ";Q;" + L("mgt_srtkenmerk_blanco")
//                               + ";B;" + L("mgt_srtkenmerk_berekening");
        }
        return kenmerktypeLOV;
    }

    function buildVerplichtingList()
    {   // LOV waarden voor xxx_kenmerk_verplicht.
        var s = ";"   + L("mgt_kenmerk_verplicht_0")
              + ";1;" + L("mgt_kenmerk_verplicht_1")
              + ";2;" + L("mgt_kenmerk_verplicht_2");
        return s;
    }

    function buildGroepsverplichtingList()
    {   // LOV waarden voor xxx_kenmerk_groep.
        var s = "0;<" + L("lcl_none") + ">";
        for (var i=1; i<=9; i++)
        {
            s = s + ";" + i + ";" + L("mgt_kenmerk_groep") + " " + i;
        }
        return s;
    }

    function buildKenmerkNiveauList()
    {   // LOV waarde voor xxx_kenmerk_niveau
        var s = "D;"  + L("mgt_srtkenmerk_discipline")
              + ";G;" + L("mgt_srtkenmerk_srtgroep")
              + ";S;" + L("mgt_srtkenmerk_srtdeel");
        return s;
    }

    function buildSrtcontroletypeList()
    {   // LOV waarden voor srtcontrole_type
        var s =  "1;" + L("lcl_ins_srtcontrole_insp")
              + ";2;" + L("lcl_ins_srtcontrole_repl")
              + ";3;" + L("lcl_ins_srtcontrole_cert");
        return s;
    }

    function fac_kenmerkdomein_foreign(module)
    {
        return {
            "tbl": "(select fac_kenmerkdomein_key"
                 + "      , fac_kenmerkdomein_omschrijving"
                 + "   from fac_kenmerkdomein"
                 + "  where fac_kenmerkdomein_verwijder is null"
                 + "    and fac_kenmerkdomein_module = " + safe.quoted_sql(module)
                 + "  order by fac_kenmerkdomein_upper asc)",
            "key": "fac_kenmerkdomein_key",
            "desc": "fac_kenmerkdomein_omschrijving"
        };
    }

function checkSrtkenmerkValue(params)
{
    // params: module      IN      module (ALG, BES, ...).
    //         srtkenmerk  IN      Is het een srtkenmerk (true) of kenmerk (false).
    //         key         IN      (srt)kenmerk_key van de te controleren waarde.
    //         value       IN/OUT  De te controleren waarde. Kan hier gewijzigd worden.
    //         err         OUT     Foutmelding bij ongeldige waarde voor "value", anders lege string.
    //
    var prefix = params.module + "_" + (params.srtkenmerk ? "srt" : "");
    var sql = "SELECT *"
            + "  FROM " + prefix + "kenmerk"
            + " WHERE " + prefix + "kenmerk_key = " + params.key;
    var oRs = Oracle.Execute(sql);
    var ktyp = oRs(prefix + "kenmerk_kenmerktype").Value;
    var klen = oRs(prefix + "kenmerk_lengte").Value;
    var kdec = oRs(prefix + "kenmerk_dec").Value;
    var kmin = oRs(prefix + "kenmerk_nmin").Value;
    var kmax = oRs(prefix + "kenmerk_nmax").Value;
    oRs.Close();

    var valid = true;
    var value = params.value;
    var err = ""; //L("lcl_mld_invalid_kenmerk_format");

    if (value != "")
    {
        if (ktyp == "D")
        {
            // Test of er nu een geldig datumformaat staat.
            var arr = /^(\d{1,2})[-](\d{1,2})[-](\d{1,4})$/.exec(value);
            if (arr)
            {
                var dt = new Date( arr[3], arr[2] -1, arr[1] );
                if ((arr[1] != dt.getDate()) ||
                    (arr[2] != dt.getMonth() + 1) ||
                    (arr[3] != dt.getYear() && arr[3] != dt.getFullYear()))
                {
                    valid = false;
                }
                else
                {
                    value = ("0" + dt.getDate()).slice(-2) + "-"
                          + ("0" + (dt.getMonth()+1)).slice(-2) + "-"
                          + dt.getFullYear();
                }
            }
            else valid = false;

            if (!valid) err = L("mgt_srtkenmerk_err_datum");
        }
        else if (ktyp == "C")
        { // newlines verdubbelen naar %0D%0A dus aantal regels bijtellen
            if (value.length + (value.split("\n").length-1) > klen)
            {
                valid = false;
                err = L("mgt_srtkenmerk_err_string").format(klen)+ "\n";
            }
        }
        else if (ktyp == "N")
        {
            var t;
            if (kdec)
            {
                var l1 = klen-kdec;
                var l2 = kdec;
                // Als een punt én een komma in een getal behouden we alleen de laatste
                if (value.lastIndexOf(".") > value.lastIndexOf(","))
                {
                    value = value.replace(/\,/ig, "");
                }
                if (value.lastIndexOf(",") > value.lastIndexOf("."))
                {
                    value = value.replace(/\./ig, "");
                }
                var s = "^\\-?(\\d{1," + l1 + "}[.,]?|\\d{0," + l1 + "}[.,]\\d{1," + l2 + "})$";
                valid = value.match(new RegExp(s)) && valid;
                if (valid)
                {
                    t = parseFloat(value.replace(",","."));
                }
                else
                {
                    err = L("mgt_srtkenmerk_err_float") + "\n";

                    var aantal_decimalen = value.length - value.replace(",",".").indexOf(".");
                    var aantal_helen = value.slice(0, value.replace(",",".").indexOf("."));
                    if (aantal_decimalen > kdec)
                    {
                        valid = false;
                        err += L("mgt_srtkenmerk_err_fl_dec").format(kdec) + "\n";
                    }
                    if (aantal_helen > (klen - kdec))
                    {
                        valid = false;
                        err += L("mgt_srtkenmerk_err_fl_pre").format(klen - kdec) + "\n";
                    }
                }
            }
            else
            {
                if (klen == 1 && kmin == 0 && kmax == 1)
                {
                    // Checkbox; waarde in checked is altijd true of false, dus altijd valid.
                    valid = true;
                    t = (field.checked?1:0);
                }
                else
                {
                    var s = "^\\-?\\d{1," + klen + "}[.,]?$";
                    valid = value.match(new RegExp(s)) && valid;
                    if (valid)
                    {
                        t = parseInt(value);
                    }
                    else
                    {
                        err = L("mgt_srtkenmerk_err_integer") + "\n";
                        if (value.length > klen)
                        {
                            valid = false;
                            err += L("mgt_srtkenmerk_err_int_len").format(klen) + "\n";
                        }
                    }
                }
            }
            if (valid)
            {
                if ( (kmin !== null) && (kmax !== null))
                {
                    if ( (t < kmin) || (t > kmax))
                    {
                        valid = false;
                        err += L("mgt_srtkenmerk_err_range").format(kmin, kmax) + "\n";
                    }
                }
                else
                {
                    if ((kmin !== null) && (t < kmin))
                    {
                        valid = false;
                        err += L("mgt_srtkenmerk_err_min").format(kmin);
                    }
                    if ((kmax !== null) && (t > kmax))
                    {
                        valid = false;
                        err += L("mgt_srtkenmerk_err_max").format(kmax);
                    }
                }
            }
        }
    }
    params.value = (valid ? value : "");
    params.err = (valid ? "" :err);
}

// Deze functie vertaalt het positie autorisatieniveau naar tekst
function buildAlgLevelLOV()
{
    AlgLevelLOV = "-1;" + L("lcl_all")
                + ";0;" + L("lcl_region")
                + ";1;" + L("lcl_district")
                + ";2;" + L("lcl_location")
                + ";3;" + L("lcl_building")
                + ";4;" + L("lcl_floor")
                + ";5;" + L("lcl_room")
                + ";9;" + L("fac_functie_auth_none");
    return AlgLevelLOV;
}

function buildPrsLevelLOV()
{
    PrsLevelLOV = "-1;" + L("lcl_all")
                + ";0;" + L("lcl_company")
                + ";1;" + L("lcl_dep_name_level1")
                + ";2;" + L("lcl_dep_name_level2")
                + ";3;" + L("lcl_dep_name_level3")
                + ";4;" + L("lcl_dep_name_level4")
                + ";5;" + L("lcl_dep_name_level5")
                + ";9;" + L("fac_functie_auth_none");
    return PrsLevelLOV;
}

function buildStatusList()
{
    var statusList = "-1;"
                   + ";1;" + L("lcl_mld_afgewezen")
                   + ";6;" + L("lcl_mld_afgemeld");
    return statusList;
}

%>