<% /*
    $Revision$
    $Id$

    File:           api2_tools.inc

    Description:

    Context:

    Notes:          voorheen mgt/mgt_tools.inc maar de functies zijn essentieel
                    voor vele modellen dus moet het in api2_tools.inc
*/
%>
<%
    function buildKenmerkRoleCodeLOV(params)
    {
        var kenmerkRoleCodeLOV = "";
        switch (params.module)
        {
            case "ALG":  
                kenmerkRoleCodeLOV = "3;"+ L("mgt_kenmerkrolcodealg_3") + ";" // alles
                                   + "2;"+ L("mgt_kenmerkrolcodealg_2") + ";" // ALGUSE
                                   + "1;"+ L("mgt_kenmerkrolcodealg_1");      // ALGMAN
                break;
            case "BES":  
                kenmerkRoleCodeLOV = "5;"+ L("mgt_kenmerkrolcodebes_5") + ";" // alles
                                   + "4;"+ L("mgt_kenmerkrolcodebes_4") + ";" // ORDSUP
                                   + "1;"+ L("mgt_kenmerkrolcodebes_1");      // BES*
                break;
            case "BESI":  
                kenmerkRoleCodeLOV = "1;"+ L("mgt_kenmerkrolcodebes_1");      // geen onderscheid in regels
                break;
            case "BEZ":  
                kenmerkRoleCodeLOV = "7;"+ L("mgt_kenmerkrolcodebez_7") + ";" // alles
                                   + "4;"+ L("mgt_kenmerkrolcodebez_4") + ";" // BEZBOF only
                                   + "2;"+ L("mgt_kenmerkrolcodebez_2") + ";" // BEZFOF only
                                   + "3;"+ L("mgt_kenmerkrolcodebez_3"); // BEZFOF/BEZUSE only
                break;
            case "CNT":  
                kenmerkRoleCodeLOV = "3;"+ L("mgt_kenmerkrolcodecnt_3") + ";" // alles
                                   + "2;"+ L("mgt_kenmerkrolcodecnt_2") + ";" // CNTUSE
                                   + "1;"+ L("mgt_kenmerkrolcodecnt_1");      // CNTMAN
                break;
            case "CTR":  
                kenmerkRoleCodeLOV = "1;"+ L("mgt_kenmerkrolcodectr_1");      // alles (geen onderscheid)
                break;
            case "FAQ":  
                kenmerkRoleCodeLOV = "1;"+ L("mgt_kenmerkrolcodefaq_1");      // alles (geen onderscheid)
                break;
            case "FIN":  
                kenmerkRoleCodeLOV = "1;"+ L("mgt_kenmerkrolcodefin_1");      // alles (geen onderscheid)
                break;
            case "INS":  
                kenmerkRoleCodeLOV = "7;"+ L("mgt_kenmerkrolcodeins_7") + ";" // alles
                                   + "4;"+ L("mgt_kenmerkrolcodeins_4") + ";" // INSFOF (uitlenen)
                                   + "2;"+ L("mgt_kenmerkrolcodeins_2") + ";" // INSUSE
                                   + "1;"+ L("mgt_kenmerkrolcodeins_1");      // INSMAN
                break;
            case "MLD":
                kenmerkRoleCodeLOV = "7;"+ L("mgt_kenmerkrolcodemld_7") + ";"   // alles
                                   + "6;"+ L("mgt_kenmerkrolcodemld_6") + ";"   // MLDBOF+MLDFOF
                                   + "3;"+ L("mgt_kenmerkrolcodemld_3") + ";"   // MLDUSE+MLDBOF
                                   + "4;"+ L("mgt_kenmerkrolcodemld_4") + ";"   // MLDBOF
                                   + "2;"+ L("mgt_kenmerkrolcodemld_2");        // MLDFOF
                break;
            case "OPD": 
                kenmerkRoleCodeLOV = "7;"+ L("mgt_kenmerkrolcodeopd_7") + ";"   // alles
                                   + "5;"+ L("mgt_kenmerkrolcodeopd_5") + ";"
                                   + "4;"+ L("mgt_kenmerkrolcodeopd_4") + ";"   // ORDSUPonly
                                   + "3;"+ L("mgt_kenmerkrolcodeopd_3") + ";"   // beide
                                   + "2;"+ L("mgt_kenmerkrolcodeopd_2") + ";"   // Afmelden? opdrachtnemer
                                   + "1;"+ L("mgt_kenmerkrolcodeopd_1");        // ORDBOF opdrachtgever
                break;
            case "PRS":
                kenmerkRoleCodeLOV = "7;"+ L("mgt_kenmerkrolcodeprs_7") + ";"   // alles 
                                   + "6;"+ L("mgt_kenmerkrolcodeprs_6") + ";"   // PRSUSE+PROFIL
                                   + "3;"+ L("mgt_kenmerkrolcodeprs_3") + ";"   // PRSMAN+PRSUSE
                                   + "2;"+ L("mgt_kenmerkrolcodeprs_2") + ";"   // PRSUSE
                                   + "1;"+ L("mgt_kenmerkrolcodeprs_1");        // PRSMAN
                break;
            case "REL":
                kenmerkRoleCodeLOV = "7;"+ L("mgt_kenmerkrolcoderel_7") + ";"   // alles
                                   + "6;"+ L("mgt_kenmerkrolcoderel_6") + ";"   // RELUSE+EXTREL
                                   + "3;"+ L("mgt_kenmerkrolcoderel_3") + ";"   // RELMAN+RELUSE
                                   + "2;"+ L("mgt_kenmerkrolcoderel_2") + ";"   // RELUSE
                                   + "1;"+ L("mgt_kenmerkrolcoderel_1");        // RELMAN
                break;
            case "RES":  // dit lijkt technisch een grappige volgorde, maar is logischer
                kenmerkRoleCodeLOV = "7;"+ L("mgt_kenmerkrolcoderes_7") + ";"   // iedereen
                                   + "4;"+ L("mgt_kenmerkrolcoderes_4") + ";"   // RESBOF only, afhandelkenmerken
                                   + "2;"+ L("mgt_kenmerkrolcoderes_2") + ";"   // RESFOF ony, professionele kenmerken
                                   + "3;"+ L("mgt_kenmerkrolcoderes_3");        // RESFOF+RESUSE (d.i. geen RESBOF)
                                   //+ "1;"+ L("mgt_kenmerkrolcoderes_1");      // RESUSE, algemene kenmerken
                break;
            default:
                kenmerkRoleCodeLOV = "?";
        }
        return kenmerkRoleCodeLOV;
    }

    function buildKenmerktypeLOV(kenmerktype, params)
    {
        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 "T":
                kenmerktypeLOV = "T;" + L("mgt_srtkenmerk_tijd");
                break;
            case "R":
                kenmerktypeLOV = "R;" + L("mgt_srtkenmerk_referentie_l") + ";"
                               + "r;" + L("mgt_srtkenmerk_referentie_r") + ";"
                               + "S;" + L("mgt_srtkenmerk_referentie_s")
                break;
            case "S":
                kenmerktypeLOV = "S;" + L("mgt_srtkenmerk_referentie_s") + ";"
                               + "R;" + L("mgt_srtkenmerk_referentie_l") + ";"
                               + "r;" + L("mgt_srtkenmerk_referentie_r")
                break;
            case "r":
                kenmerktypeLOV = "r;" + L("mgt_srtkenmerk_referentie_r") + ";"
                               + "R;" + L("mgt_srtkenmerk_referentie_l") + ";"
                               + "S;" + L("mgt_srtkenmerk_referentie_s")
                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")
                               + (params && params.module == "MLD"? ";b;" + L("mgt_srtkenmerk_label_ii") : "")
                break;
            case "l":
                kenmerktypeLOV = "l;" + L("mgt_srtkenmerk_label_i") + ";"
                               + "L;" + L("mgt_srtkenmerk_label")
                               + (params && params.module == "MLD"? ";b;" + L("mgt_srtkenmerk_label_ii") : "")
                break;
            case "b":
                kenmerktypeLOV = "b;" + L("mgt_srtkenmerk_label_ii") + ";"
                               + "L;" + L("mgt_srtkenmerk_label") + ";"
                               + "l;" + L("mgt_srtkenmerk_label_i")
                break;
            case "Q":
                kenmerktypeLOV = "Q;" + L("mgt_srtkenmerk_blanco");
                break;
//            case "B":
//                kenmerktypeLOV = "B;" + L("mgt_srtkenmerk_berekening");
//                break;
            case "V":
                kenmerktypeLOV = "V;" + L("mgt_srtkenmerk_checkbox");
                break;
            default:
                kenmerktypeLOV = (params && params.emptyOption ? params.emptyOption + ";" : "")
                               +  "C;" + L("mgt_srtkenmerk_karakter")
                               + ";N;" + L("mgt_srtkenmerk_numeriek")
                               + ";D;" + L("mgt_srtkenmerk_datum")
                               + ";T;" + L("mgt_srtkenmerk_tijd")
                               + ";R;" + L("mgt_srtkenmerk_referentie_l")
                               + ";r;" + L("mgt_srtkenmerk_referentie_r")
                               + ";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")
                               + (params && params.module == "MLD"? ";b;" + L("mgt_srtkenmerk_label_ii") : "")
                               + ";Q;" + L("mgt_srtkenmerk_blanco")
                               + ";V;" + L("mgt_srtkenmerk_checkbox");
        }
        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("mgt_kenmerk_groep0") ;
        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 == "V")
        {
            // Checkbox; waarde in checked is altijd true of false, dus altijd valid.
            valid = true;
        }
        else if (ktyp == "N" && klen == 1 && kmin == 0 && kmax == 1)
        {
            // Dit is de oude schrijfwijze voor een checkbox.
            valid = true;
        }
        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
            {
                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()
{
    var 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()
{
    var 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(pniveau)
{
    var statusList = "-1;"
                   + ";1;" + L("lcl_mld_afgewezen")
                   + (pniveau == "O"
                     ? ";6;"
                     : ";5;")
                   + L("lcl_mld_afgemeld")
                   + (pniveau == "O"
                     ? ";9;"
                     : ";52;")
                   + L("lcl_mld_afgerond");
    return statusList;
}

function buildHltPropList()
{
    var hltPropList = "0;" + L("mld_kenmerk_onderbreken0")
                    + ";1;" + L("mld_kenmerk_onderbreken1")
                    + ";2;" + L("mld_kenmerk_onderbreken2");
    return hltPropList;
}

function buildStdmeldingObjReqStatusList()
{
    var statusList = "-1;"
                   + ";2;" + L("lcl_mld_altijd_verplicht")
                   + ";21;"+ L("lcl_mld_aanwezig_verplicht")
                   + ";1;" + L("lcl_mld_afgewezen")
                   + ";5;" + L("lcl_mld_afgemeld");
    return statusList;
}

function buildCadPositionLOV()
    {
        return "1;"  + L("cad_label_type_bi_rui")
            + ";9;"  + L("cad_label_type_bi_wp")
            + ";17;" + L("cad_label_type_bi_obj")
            + ";2;"  + L("cad_label_type_bu_ts")
            + ";18;" + L("cad_label_type_bu_obj");
    }

function buildCadSituationLOV()
    {
        return "0;" + L("cad_label_type_si_act")
            + ";4;" + L("cad_label_type_si_sce");
    }

%>