<%@language = "javascript" %>
<% /*
    $Revision$
    $Id$

    File:               mld_edit_melding.asp
    Description:        Bekijk/wijzig melding (Mobile version)
    Parameters:         mld_key voor bestaande melding
                        mld_key=-1 voor nieuwe melding, en dan
                            stdm_key
                            ins_key
                            ruimte_key
                            -
                            rest optioneel
    Note:
    Je kunt en moet een kostenplaats invullen:
            - als bij vakgroeptype Defaultwaarde kosten klant "Standaard Aan" is
            - als bij Vakgroep Kostenplaats verplicht aangevinkt is
*/
var mld_key = getQParamInt("mld_key",-1);
var verynew = (getQParamInt("verynew",-1) == 1);
var autobutton = getQParamSafe("autobutton", "");
var LOCKED_USER_OK = { "xmlnode": "melding", "key": mld_key };
var multi = 0,  maybeDouble = 0, autoConfirm = 0;
var zoom = getQParamFloat("zoom", 2);
var isvervolg = getQParamInt("mld_continue", 0) == 1;
var mld_start_key = getQParamInt("start_key", -1);
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/adresselector.inc" -->
<!-- #include file="../Shared/afdelingselector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/stdmeldingselector.inc" -->
<!-- #include file="../Shared/disciplineselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/get_objecten_sql.inc" -->
<!-- #include file="../Shared/status.inc" -->
<!-- #include file="../mld/mld.inc" -->
<!-- #include file="../ins/ins.inc" -->
<!-- #include file="../mld/mld_flexkenmerk.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->

<%
FCLTHeader.Requires({ js: [ rooturl+"/appl/Localscripts/jquery.timepicker-table.js"
                          , rooturl+"/appl/mld/mld_edit_melding.js"
                          ] });
FCLTHeader.Requires({ plugins: ["suggest"] });

var quicknoteSetting = S("pda_melding_quick_note");
var action = getQParam("action", "");
var qrc = getQParamInt("qrc", 0) != 0;
var meldbron_key = getQParamInt("meldbronkey", 7);    // 7 = mobile
var deelsrtcont_key = getQParamInt("deelsrtcont_key", -1);
var urole = getQParamSafe("urole", "");
var caddwgx = getQParamFloat("caddwgx", null); // x coördinaat van een specifieke plek in de ruimte die gehighlight moet worden.
var caddwgy = getQParamFloat("caddwgy", null); // y coördinaat van een specifieke plek in de ruimte die gehighlight moet worden.

var opdr_opm = getFParam("opdr_opm", "");

var mld_info = {};
var plaats_key = -1;
var plaats_niveau = "";
var ins_keys_arr = [];
var ins_name_arr = [];
var addSubheader = false;
var addObjectDesc = false;
var lastopdr = (getQParamInt("lastopdr", 0) == 1);
var transitParam = buildTransitParam(["mld_key", "verynew", "lastopdr", "stdmgroepkey", "srtdisc", "disc", "zoom", "start_key"]);
var controleModeArray = [-1, -1, -1]; // De drie controlemoden zijn niet aanwezig (-1);
var remark = "";

urole = autoUrole(urole, { bo: "WEB_MLDBOF", fo: "WEB_MLDFOF", fe: "WEB_MLDUSE" });

var autfunction = (urole=="fe" ? "WEB_MLDUSE" : (urole=="fo" ? "WEB_MLDFOF" : "WEB_MLDBOF"));

var fronto = (urole=="fo");
var frontend = (urole=="fe");
var backo = (urole=="bo");

var tobeclosed = 0;
var ingesloten = [];
var canCloseOpdr = [];
var mldRequireCnt = 0; // Aantal meldingen waarvan minstens één verplicht kenmerk en/of object niet is ingevuld.
var reqStatusEmptyMelding = [];
var reqStatusEmptyMeldingkey = -1;
var reqStatusEmptyMeldingnr = "";
var futureOpdr = false;
var start_key = -1;
var closeCheckDone = false;
var element_description = ( S("ins_element_description") == ""
                          ? "d.ins_deel_omschrijving || ' (' || " + lcl.xsql("s.ins_srtdeel_omschrijving", "s.ins_srtdeel_key") + " || ')' "
                          : S("ins_element_description")
                          );

function getAlgKeys(alg_keys)
{
    var all_keys = {};
    if (alg_keys.roo_key > 0)
    {   // Bepaald bovenliggende waarden
        var sql = "SELECT alg_locatie_key"
                + "     , alg_gebouw_key"
                + "     , alg_verdieping_key"
                + "  FROM alg_v_allonroerendgoed aog"
                + " WHERE aog.alg_onroerendgoed_keys = " + alg_keys.roo_key
                + "   AND aog.alg_type = 'R'";
        var oRs = Oracle.Execute(sql);
        all_keys.loc_key = oRs("alg_locatie_key").Value;
        all_keys.bld_key = oRs("alg_gebouw_key").Value;
        all_keys.flr_key = oRs("alg_verdieping_key").Value;
        all_keys.roo_key = alg_keys.roo_key;
        oRs.Close();
    }
    else if (alg_keys.flr_key > 0)
    {   // Bepaald bovenliggende waarden
        var sql = "SELECT alg_locatie_key"
                + "     , alg_gebouw_key"
                + "  FROM alg_v_allonroerendgoed aog"
                + " WHERE aog.alg_onroerendgoed_keys = " + alg_keys.flr_key
                + "   AND aog.alg_type = 'V'";
        var oRs = Oracle.Execute(sql);
        all_keys.loc_key = oRs("alg_locatie_key").Value;
        all_keys.bld_key = oRs("alg_gebouw_key").Value;
        all_keys.flr_key = alg_keys.flr_key;
        all_keys.roo_key = -1;
        oRs.Close();
    }
    else if (alg_keys.bld_key > 0)
    {   // Bepaald bovenliggende waarden
        var sql = "SELECT alg_locatie_key"
                + "  FROM alg_v_allonroerendgoed aog"
                + " WHERE aog.alg_onroerendgoed_keys = " + alg_keys.bld_key
                + "   AND aog.alg_type IN ('G','T')";
        var oRs = Oracle.Execute(sql);
        all_keys.loc_key = oRs("alg_locatie_key").Value;
        all_keys.bld_key = alg_keys.bld_key;
        all_keys.flr_key = -1;
        all_keys.roo_key = -1;
        oRs.Close();
    }
    else if (alg_keys.loc_key > 0)
    {
        all_keys.loc_key = alg_keys.loc_key;
        all_keys.bld_key = -1;
        all_keys.flr_key = -1;
        all_keys.roo_key = -1;
    }
    else
    {
        all_keys.loc_key = -1;
        all_keys.bld_key = -1;
        all_keys.flr_key = -1;
        all_keys.roo_key = -1;
    }
    return all_keys;
}

function check_alg_level(alg_keys, stdm)
{
    var url = "";
    if (!stdm.ins_srtdiscipline_alg ||                              // We horen hier niet
        stdm.alg_onrgoed_niveau == "L" && alg_keys.loc_key > -1 ||  // We zijn al compleet, laad de rest vd pagina
        stdm.alg_onrgoed_niveau == "G" && alg_keys.bld_key > -1 ||
        stdm.alg_onrgoed_niveau == "V" && alg_keys.flr_key > -1 ||
        stdm.alg_onrgoed_niveau == "R" && alg_keys.roo_key > -1 ||
        stdm.alg_onrgoed_niveau == "H" || !stdm.alg_onrgoed_niveau) // Een plaats is niet nodig.
    {
      // geen actie
    }
    else
    { // Zoek eerst de plaats op t/m het verplichte niveau
        var url = "melding_new.asp?stdm=" + stdm.mld_stdmelding_key;
        if (alg_keys.loc_key > -1) {
            url += "&loc_key=" + alg_keys.loc_key;
        }
        if (alg_keys.bld_key > -1) {
            url += "&bld_key=" + alg_keys.bld_key;
        }
        if (alg_keys.flr_key > -1) {
            url += "&flr_key=" + alg_keys.flr_key;
        }
        if (alg_keys.roo_key > -1) {
            url += "&roo_key=" + alg_keys.roo_key;
        }
    }
    return url;
}


// Mogelijke parameters voor toevoegen only
if (mld_key == -1)
{
    // Verplicht:
    var stdm_key = getQParamInt("stdm_key", -1);
    if (stdm_key == -1) {
        Server.Transfer("melding_new.asp"); // Ga maar eerst stdmelding kiezen
    }
    var stdm_info = mld.mld_stdmeldinginfo(stdm_key);

    // Optioneel:
    var ins_key =    getQParamInt("ins_key", -1)                              // test 5009 Het kan zijn dat ik vanuit de lijst deze meekrijg om een nieuwe aan te maken
    var ruimte_key = getQParamInt("ruimte_key", getQParamInt("roo_key", -1))  // Het kan zijn dat ik vanuit de lijst deze meekrijg om een nieuwe aan te maken
    addSubheader  = ((ruimte_key > -1) || (getQParamInt("loc_key", -1) > -1));
    addObjectDesc = (ins_key > -1);

    if (ruimte_key == -1 && ins_key > -1)
    {
        // Als ik een object heb kan ik zelf de plaats precies bepalen (ruimte; TODO of terrein)
        var sql = "SELECT alg_ruimte_key"
                + "     , alg_ruimte_nr"
                + "     , d.alg_verdieping_key"
                + "     , d.alg_verdieping_code"
                + "     , v.alg_verdieping_code verdieping_code"
                + "     , d.alg_gebouw_key"
                + "     , alg_terreinsector_key"  // doen we nog niets mee
                + "     , alg_locatie_key"
                + "     , " + element_description + " deel"
                + "     , " + lcl.xsqla("s.ins_srtdeel_omschrijving", "s.ins_srtdeel_key")
                + "  FROM ins_v_deelenonderdeel_gegevens d"
                + "     , ins_srtdeel s"
                + "     , ins_srtgroep g"
                + "     , ins_tab_discipline dis"
                + "     , alg_verdieping v"
                + " WHERE d.ins_srtdeel_key = s.ins_srtdeel_key"
                + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
                + "   AND g.ins_discipline_key = dis.ins_discipline_key"
                + "   AND d.alg_verdieping_key = v.alg_verdieping_key(+)"
                + "   AND d.ins_deel_key = " + ins_key;

        var oRs = Oracle.Execute(sql);
        var alg_params = { loc_key: oRs("alg_locatie_key").Value
                         , bld_key: oRs("alg_gebouw_key").Value
                         , flr_key: (oRs("verdieping_code").Value == null || oRs("verdieping_code").Value.substring(0, 1) == "_" ? -1 : oRs("alg_verdieping_key").Value)
                         , roo_key: (oRs("alg_ruimte_nr").Value == null || oRs("alg_ruimte_nr").Value.substring(0, 1) == "_" ? -1 : oRs("alg_ruimte_key").Value)
                         };
        var ins_name = oRs("deel").Value;
        oRs.Close();
    }
    else
    {
        // Deze zijn niet waarschijnlijk meegegeven, maar de defaultwaarde is ook al handig
        var alg_params = { loc_key: getQParamInt("locatie_key",    getQParamInt("loc_key", -1))
                         , bld_key: getQParamInt("gebouw_key",     getQParamInt("bld_key", -1))
                         , flr_key: getQParamInt("verdieping_key", getQParamInt("flr_key", -1))
                         , roo_key: getQParamInt("ruimte_key",     getQParamInt("roo_key", -1))
                         };
        alg_params = getAlgKeys(alg_params);
        var redirect_url = check_alg_level(alg_params, stdm_info);
        if (redirect_url)
        {
            ASPPAGE_END();
            Response.Redirect(redirect_url);
        }
    }
}

if (mld_key > -1)
{
    //Bepaal of melding ook echt afgemeld mag worden
    var this_mld = mld.func_enabled_melding(mld_key);
    var mld_info = mld.mld_melding_info(mld_key);

    if (this_mld.canClose) // Als je mag accepteren mag je ook rejecten <- Dit is dus niet zo (08-2021)
    {
        // Zijn er nog kenmerken die nu wel verplicht zijn of een object?
        var afwezig = mld.hasRequiredStatusEmptyMelding(mld_key, 5); // Melding status "Afgemeld(5)"
        if (afwezig.kenm_ontbreekt.length || afwezig.obj_ontbreekt)
        {
            mldRequireCnt++;
            var mldnr = mld.mld_prefix(mld_key) + mld_key;
            if (afwezig.kenm_ontbreekt.length)
                reqStatusEmptyMelding.push(L("lcl_mld_req_status_empty").format(afwezig.kenm_ontbreekt.join(", "), mldnr) );
            if (afwezig.obj_ontbreekt)
                reqStatusEmptyMelding.push(L("lcl_mld_req_obj").format(mldnr) );
            reqStatusEmptyMeldingkey = mld_key;
            reqStatusEmptyMeldingnr = mldnr;
        }
        // Zijn er nog lopende opdrachten?
        var canCloseOpdrOfMld = [];
        var sql = "SELECT o.mld_opdr_key"
                + "  FROM mld_opdr o"
                + " WHERE o.mld_melding_key IN (" + mld_key + ")"
                + "   AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)";
        var oRsOM = Oracle.Execute(sql);
        var noOpdrCloseAtAll = false;
        futureOpdr = false;
        closeCheckDone = true;
        while (!oRsOM.eof)
        { // Voor elke opdracht van een melding controleren of deze afgemeld mag worden
            var this_opdr = mld.func_enabled_opdracht(oRsOM("mld_opdr_key").Value);
            var mld_opdr = this_opdr.mld_opdr;
            sql = "SELECT mld_opdr_einddatum"
                + " FROM mld_opdr o"
                + " WHERE o.mld_opdr_key = " + oRsOM("mld_opdr_key").Value;
            var oRs = Oracle.Execute(sql);

            var mld_opdr_einddatum = oRs("mld_opdr_einddatum").Value != null? new Date(oRs("mld_opdr_einddatum").Value) : null;
            var kosten_verplicht_afm = mld_opdr.tonen_totaal && (mld_opdr.typeopdr_kosten_verplicht & 2 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 2));
            var opdr_kosten = mld_opdr.t_cost;

            // Als Setting S("mld_ord_afmeld_future") niet is gezet (0): Opdrachten waarvan de einddatum in de toekomst ligt mogen niet worden afgemeld.
            if (!this_opdr.canClose || (S("mld_ord_afmeld_future") != 1 && (mld_opdr_einddatum && (mld_opdr_einddatum > new Date()))) || (kosten_verplicht_afm && opdr_kosten == 0))
            { // Geen autorisatie om alle opdrachten van een melding af te melden of opdrachten in de toekomst met setting S("mld_ord_afmeld_future") niet gezet-->dan geen enkele van die melding
              noOpdrCloseAtAll = true;
              if (S("mld_ord_afmeld_future") != 1 && (mld_opdr_einddatum && (mld_opdr_einddatum > new Date())))
                futureOpdr = true; // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
            }
            oRs.Close();
            canCloseOpdrOfMld.push(oRsOM("mld_opdr_key").Value);
            oRsOM.MoveNext();
        }
        oRsOM.Close();
        // Geen autorisatie om alle opdrachten van een melding af te melden of opdrachten in de toekomst met setting S("mld_ord_afmeld_future") niet gezet (0)
        // --> dan geen enkele van die melding
        if (!noOpdrCloseAtAll)
        {
            for (var j = 0; j < canCloseOpdrOfMld.length; j++)
            {
                canCloseOpdr.push(canCloseOpdrOfMld[j]);
            }
        }

        if (!futureOpdr)
        {   // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
            ingesloten.push(mld_key);
            tobeclosed++;
        }
    }

    // Als er meerder meldingen zijn waarvan een verplicht kenmerk niet is ingevuld, dan abort en melding.
    // Als er 1 melding is waarvan een verplicht kenmerk niet is ingevuld, dan wordt er verderop alleen een melding met twee buttons getoond.
    user.anything_todo_or_abort(mldRequireCnt < 2, reqStatusEmptyMelding.join("<br />"));

    var canCloseCtr = 0;
    for (var i = 0; i < ingesloten.length; i++)
    {
      if (i == 0) lcl.set_dialect(mld_info.srtdisc_key, "MLD_SRTDISCIPLINE_KEY"); // Neem voor informatie de eerste melding.

      var sql = "SELECT dsc.ins_deel_key"
              + "     , dsc.ins_srtcontrole_key"
              + "     , cdp.ctr_disc_params_controle_type"
              + "     , mo.ins_deelsrtcontrole_key"
              + "  FROM ins_deelsrtcontrole dsc"
              + "     , ins_srtcontrole isc"
              + "     , ctr_disc_params cdp"
              + "     , mld_melding_object mo"
              + " WHERE dsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
              + "   AND isc.ctr_discipline_key = cdp.ctr_ins_discipline_key"
              + "   AND mo.ins_deelsrtcontrole_key = dsc.ins_deelsrtcontrole_key"
              + "   AND mo.mld_melding_key = " + ingesloten[i];
      var oRs = Oracle.Execute(sql);
      while (!oRs.eof)
      {
        // De controle moet aanwezig zijn. Maar een inspectie kan ook verwijderd zijn!
        var this_ins = ins.func_enabled_deel(oRs("ins_deel_key").Value,
                                             {srtcont_key: oRs("ins_srtcontrole_key").Value,
                                              deelsrtcont_key: oRs("ins_deelsrtcontrole_key").Value,
                                              scen_key: 1
                                             });

        if (this_ins.canInspFinishMjb)
        {
          canCloseCtr++;
          controleModeArray[oRs("ctr_disc_params_controle_type").Value - 1] = oRs("ctr_disc_params_controle_type").Value; // Controlemode 2 op de 2de plek van de Array invullen [-1, 2, -1].
        }
        oRs.MoveNext();
      }
      oRs.Close();
    }

    // De -1 waarden in de controlemode Array verwijderen
    for (var i = 2; i >= 0; i--)
    {
      if (controleModeArray[i] == -1) controleModeArray.splice(i, 1);
    }

    // BESTAANDE MELDING
    user.auth_required_or_abort(this_mld.canReadAny || this_mld.canChangeKenmerkBlok);

    if(mld_info.remark != null)
      remark = mld_info.remark;

    var sql = "SELECT l.alg_locatie_code||DECODE(aog.alg_plaatsaanduiding, NULL,'','-'||aog.alg_plaatsaanduiding) plaatscode"
            + ", COALESCE(g.alg_gebouw_adres, l.alg_locatie_adres) ||' '|| l.alg_locatie_plaats adres"
            + ", aog.alg_onroerendgoed_omschrijving plaats "
            + ", aog.alg_ruimte_key"
            + ", m.mld_melding_start_key"
            + ", COALESCE(m.mld_alg_onroerendgoed_keys, m.mld_alg_locatie_key) plaats_key"
            + ", COALESCE(aog.alg_type, CASE WHEN m.mld_alg_locatie_key IS NOT NULL THEN 'L' ELSE NULL END) plaats_niveau"
            + " FROM "
            + "  mld_melding m"
            + ", alg_v_allonrgoed_gegevens aog"
            + ", alg_locatie l"
            + ", alg_gebouw g"
            + " WHERE mld_melding_key = " + mld_key
            + " AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)"
            + " AND aog.alg_gebouw_key = g.alg_gebouw_key(+)"
            + " AND m.mld_alg_locatie_key = l.alg_locatie_key(+)";
    var oRs = Oracle.Execute(sql);
    var plaats_string = oRs("plaatscode").Value ? oRs("plaatscode").Value + " " + (oRs("plaats").Value || "") : "";
    var adres_string = oRs("adres").Value ? oRs("adres").Value : "";
    var stdm_key = mld_info.stdm_key;
    var stdm_info = mld.mld_stdmeldinginfo(stdm_key);
    start_key = oRs("mld_melding_start_key").Value

    if (oRs("alg_ruimte_key").Value)
        ruimte_key = oRs("alg_ruimte_key").Value;   // kan ik aan de ruimtebutton meegeven
    plaats_key    = oRs("plaats_key").Value;
    plaats_niveau = oRs("plaats_niveau").Value;
    oRs.Close();

    // Haal gerelateerde objecten op.
    sql = "SELECT d.ins_deel_key"
        + "     , " + element_description + " deel"
        + "  FROM mld_melding_object mo"
        + "     , ins_deel d"
        + "     , ins_srtdeel s"
        + "     , ins_srtgroep g"
        + "     , ins_tab_discipline dis"
        + " WHERE mo.ins_deel_key = d.ins_deel_key"
        + "   AND d. ins_srtdeel_key = s.ins_srtdeel_key"
        + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
        + "   AND g.ins_discipline_key = dis.ins_discipline_key"
        + "   AND mo.mld_melding_key = " + mld_key;
    var oRso = Oracle.Execute(sql);
    while (!oRso.eof)
    {
      ins_keys_arr.push(oRso("ins_deel_key").Value);
      ins_name_arr.push(oRso("deel").Value);
      oRso.MoveNext();
    }
    oRso.Close();
}
else
{
  // NIEUWE MELDING Stdm_Key is ondertussen gegarandeerd
  var melder_obj = user;

  // Bepaal de gedetailleerdste plaats die mobiel bekend is of meegegeven.
  alg_params.plaats = { key:    ruimte_key
                      , niveau: "R"
                      }
  if (alg_params.plaats.key == -1) {alg_params.plaats.key = alg_params.flr_key; alg_params.plaats.niveau = "V";}
  if (alg_params.plaats.key == -1) {alg_params.plaats.key = alg_params.bld_key; alg_params.plaats.niveau = "G";}
  if (alg_params.plaats.key == -1) {alg_params.plaats.key = alg_params.loc_key; alg_params.plaats.niveau = "L";}

  if (alg_params.plaats.niveau == 'L')
    sql = "SELECT l.alg_locatie_code plaatscode"
        + "     , l.alg_locatie_adres adres"
        + "     , l.alg_locatie_plaats plaats"
        + "  FROM alg_locatie l"
        + " WHERE l.alg_locatie_key = " + alg_params.plaats.key;
  else
    sql = "SELECT l.alg_locatie_code||DECODE(aog.alg_plaatsaanduiding, NULL,'','-'||aog.alg_plaatsaanduiding) plaatscode"
        + ", COALESCE(g.alg_gebouw_adres, l.alg_locatie_adres) ||' '|| l.alg_locatie_plaats adres"
        + ",      aog.alg_onroerendgoed_omschrijving plaats "
        + "  FROM alg_v_allonrgoed_gegevens aog"
        + ",      alg_locatie l"
        + ",      alg_gebouw g"
        + " WHERE aog.alg_onroerendgoed_keys = " + alg_params.plaats.key
        + "   AND aog.alg_type = " + safe.quoted_sql(alg_params.plaats.niveau)
        + "   AND aog.alg_gebouw_key = g.alg_gebouw_key"
        + "   AND aog.alg_locatie_key = l.alg_locatie_key";
  var oRs = Oracle.Execute(sql);
  var plaats_string = !oRs.Eof && oRs("plaatscode").Value? oRs("plaatscode").Value + " " + oRs("plaats").Value : "";
  var adres_string = !oRs.Eof && oRs("adres").Value ? oRs("adres").Value : "";
  oRs.Close();

  this_mld = mld.func_enabled_mld(stdm_info.ins_srtdiscipline_key, "S"); // wat mag ik zoal op een nieuwe melding
  var mld_info = { stdm_key:                    stdm_info.mld_stdmelding_key
                 , ruimte_key:                  ruimte_key
                 , srtdisc_key:                 stdm_info.ins_srtdiscipline_key
                 , disc_key:                    stdm_info.ins_discipline_key
                 , show_ins:                    stdm_info.ins_srtdiscipline_ins
                 , show_res:                    stdm_info.ins_srtdiscipline_res
                 , srtinst_verplichtstatus:     stdm_info.srtinst_verplichtstatus
                 , mld_stdmelding_omschrijving: stdm_info.stdmelding_omschrijving
                 , srtdisc_oms:                 stdm_info.srtdisc_oms
                 , ins_discipline_omschrijving: stdm_info.discipline_omschrijving
                 , kpnverplicht:                stdm_info.kpnverplicht
                 , prefix:                      stdm_info.ins_srtdiscipline_prefix
                 , meldbron_key:                meldbron_key
                 , melder_key:                  ( ( fronto || frontend || (!this_mld.canFOwrite && !this_mld.canBOwrite && this_mld.canFEwrite))
                                                ? user_key
                                                : -1)
                 , deelsrtcont_key:             deelsrtcont_key
                 , loc_key:                     alg_params.loc_key
                 , bld_key:                     alg_params.bld_key
                 , flr_key:                     alg_params.flr_key
                 , roo_key:                     alg_params.roo_key
                 };

  if (frontend)
    mld_info.mld_kk = (stdm_info.ins_srtdiscipline_kostenklant & 1) == 1? 1 : 0;
  else
    mld_info.mld_kk = (stdm_info.ins_srtdiscipline_kostenklant & 4) == 4? 1 : 0;
  var mandaat_eigen_kp = S("prs_dep_default_kpn") > 0 || stdm_info.show_eigen_kp == 1; // voor alle vakgroepen gemandateerd op eigen kp
  if (mandaat_eigen_kp && mld_info.mld_kk == 1)
    mld_info.kostenpl_key = melder_obj.prs_kostenplaats_key() || -1;

  plaats_niveau = getQParamSafe("alg_type", "");

  var loc_key = getQParamInt("loc_key", -1);
  var bld_key = getQParamInt("bld_key", -1);
  var flr_key = getQParamInt("flr_key", -1);
  var roo_key = getQParamInt("roo_key", -1);
  switch (plaats_niveau)
  {
    case "L":  plaats_key = loc_key; break;
    case "G":  plaats_key = bld_key; break;
    case "V":  plaats_key = flr_key; break;
    case "R":  plaats_key = roo_key; break;
  }
}

if (frontend && !mld_info.mld_kk)
{   // Indien frontend en kostenklant vinkje is uit, dan moet alleen de kostenplaats van het geselecteerde gebouw gekozen kunnen worden.
    // LET OP!: Persoon hoeft niet gemandateerd te zijn voor deze kostenplaats.
    // De kostenplaats van het gekozen gebouw wordt in een hidden input veld opgeslagen/bijgehouden.
    // Deze wordt meegegeven aan de FCLTkostenplaatsselector.
    var sqlg = "SELECT g.prs_kostenplaats_key"
             + "  FROM alg_gebouw g"
             + " WHERE g.alg_gebouw_key = " + mld_info.bld_key;
    var oRsg = Oracle.Execute(sqlg);
    mld_info.mld_kostenpl_key = (!oRsg.eof ? oRsg("prs_kostenplaats_key").Value || -1 : -1);
    oRsg.Close();
}


var subject = (mld_key > -1
              ? (mld_info.prefix || "")+ mld_key + " " + mld_info.mld_stdmelding_omschrijving
              : L("lcl_mobile_new").format(mld_info.mld_stdmelding_omschrijving )
              );

var subjectSubheader = "";
if (addSubheader)
{
  subjectSubheader = L("lcl_mobile_at").format(plaats_string);
}

if (frontend)
  var editKostenplaats = ((stdm_info.ins_srtdiscipline_kostenklant & 2) != 2 && stdm_info.kpnverplicht); // Kostenplaats verbergen voor FE als ins_srtdiscipline_kostenklant 2 is.
else
  var editKostenplaats = ((stdm_info.ins_srtdiscipline_kostenklant & 8) != 8 && stdm_info.kpnverplicht); // Kostenplaats verbergen voor FO/BO als ins_srtdiscipline_kostenklant 8 is.

lcl.set_dialect(stdm_info.ins_srtdiscipline_key, "MLD_SRTDISCIPLINE_KEY");

%>
<html>
  <head>
<% FCLTMHeader.Generate({title:  subject }); %>
    <script type="text/javascript">
        /* global */ var loadingAI;
        var this_mld = JSON.parse("<%=safe.jsstring(JSON.stringify(this_mld))%>");
<%      if (getQParamInt("notitie", 0) == 1) { %>
          $(function() {
            jqToast(L("lcl_mobile_data_saved"));
          });
<%      } %>
<%      if (getQParamInt("melding", 0) == 1) { %>
          $(function() {
            var toaster_text = (L("lcl_mld_fe_newmelding_confirm") != "" ? L("lcl_mld_fe_newmelding_confirm").format("<%=mld_key%>") : L("lcl_mobile_data_saved"));
            jqToast(toaster_text);
          });
<%      } %>

        var frontend = (<%=frontend? 1 : 0%> == 1);
        $(function()
        {
          if (<%=stdm_key%> > 0) // Alleen uitvoeren als de stdmelding bekend is.
            window.stdm_info = "<%=safe.jsstring(JSON.stringify(stdm_info))%>";
        });

        var timerID=null;
        function delayed(delay, fn)
        {
            if (timerID) clearTimeout(timerID);
                timerID = setTimeout(fn, delay);
        }

<%      if (mld_key > -1 && this_mld.canAccept) { %>
          function mld_accept_confirm() {

            var setting_mld_accept_confirm = <%=S("mld_accept_confirm")?1:0%>;

            if (setting_mld_accept_confirm) {
                mobile.changePage("accp-4-<%=mld_key%>");
            } else {
                FcltMgr.confirm("<%=safe.jsstring(L("lcl_mld_accept_1") + (mld_info.prefix || "") + mld_key + L("lcl_mld_accept_2"))%>", {
                  autoconfirm: "<%autoConfirm%>" || "<%multi%>"
                }, function () {
                var data = {
                  mld_key: "<%=mld_key%>",
                  multi: "<%multi%>",
                  maybeDouble: "<%maybeDouble%>"
                };
                protectRequest.dataToken(data);
                $.post("<%=rooturl%>/appl/mld/mld_accept_save.asp",
                  data,
                  McltCallbackAndThenAlways(mld_submit_callback),
                  "json");
                });
            }
            return false;
          };
<%      } %>

<%      if (mld_key > -1 && this_mld.canReject) { %>
          function mld_reject_confirm() {
            mobile.changePage("mrej-5-<%=mld_key%>");
            return false;
          };
<%      } %>

<%      if (mld_key > -1 && this_mld.canInstem) { %>
          function mld_instem() {
            FcltMgr.confirm(L("lcl_mld_ask_instem").format("<%=safe.jsstring(mld_info.prefix + mld_key)%>"), function() {
                var data = { mld_key: "<%=mld_key%>",
                             toaster: 1 };
                protectRequest.dataToken(data);
                $.post("<%=rooturl%>/appl/mld/mld_instemmen.asp",
                       data,
                       McltCallbackAndThenAlways(function() {
                         setTimeout(function () { window.history.back() }, 2500); // De toaster moet wel goed te zien zijn.
                       }),
                       "json");
            });
            return false;
          };
<%      } %>

<%      if (mld_key > -1 && this_mld.canClose) { %>
          function mld_close(verynew)
          {
            if (canGenerateAi) {
              loadingAI = getAI();
            }

            mobile.changePage("close-3-<%=mld_key%>");
            return false;
          };
<%      } %>

<%      if (mld_key > -1 && this_mld.canReopen) { %>
          function mld_reopen() {
            mobile.changePage("reopen-6-<%=mld_key%>");
            return false;
          };
<%      } %>

        function mld_continue()
        {
            mobile.changePage("continue-7-<%=mld_key%>");
            return false;
        }

        function mld_print()
        {
          FcltMgr.openDetail("/appl/mld/mld_opdr_xml.asp?mld_key=<%=mld_key%>");
          return false;
        };

        // Drie  modes
        // 1) Dubbele melding van een moedermelding aanmaken (opnieuw laden van save asp met parent_key, maar niet meer controleren op double) [1]
        // 2) Nieuwe melding aanmaken (opnieuw laden van save asp, maar niet meer controleren op double) [2]
        // 3) Geen melding aanmaken, gewoon terug. [cancel]
        function mldDoubleCallback(data, text)
        {
           if (data.mode == 2) // Eigen melding gewenst
          {
            iface.button.disable("btn_mld_submit"); // Disable de "Opslaan" button zodat niet nog een keer gesubmit kan worden.
            $("#forcesave").val(1);
            $.post($("form[name=meld]")[0].action, $("form[name=meld]").serialize(), McltCallbackAndThenAlways(mld_submit_callback), "json"); // Nu definitief
          }
          else if (data.mode == 1) // Geklikt op een gelijksoortige melding
          {
            $("#parent_key").val(data.parent_key);
            $("#forcesave").val(1);
            $.post($("form[name=meld]")[0].action, $("form[name=meld]").serialize(), McltCallbackAndThenAlways(mld_submit_callback), "json"); // Nu definitief
          }
          else
          {
            $("form", "#mdbl").html(data).trigger('create');
            mobile.changePage("mdbl");
          }
        }
        function askdoubleCallback(data, text)
        {
          if (data.child) // 'Koppelen' gekozen
          {
            iface.button.disable("btn_mld_submit"); // Disable de "Opslaan" button zodat niet nog een keer gesubmit kan worden.
            $("#parent_key").val(data.parent_key);
            $("#forcesave").val(1);
            $.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), mld_submit_callback, "json"); // Nu definitief
          }
          else
          { // Geen melding aanmaken
            FcltMgr.closeDetail(window, {cancel: true});
          }
        }
        function mld_submit_callback(json)
        {
          if (json.doublecheck)
          {
            var url = "<%=rooturl%>/appl/pda/mld_double.asp?urole=" + json.urole
                                      + "&stdmelding_key=" + json.stdm_key
                                      + "&ruimtekey=" + json.ruimtekey
                                      + "&verdiepingkey=" + json.verdiepingkey
                                      + "&gebouwkey=" + json.gebouwkey
                                      + "&locatiekey=" + json.locatiekey
                                      + "&ins_str=" + json.obj_arr
                                      + "&save=1";
            $.get(url,
                    {},
                    McltCallbackAndThenAlways(mldDoubleCallback));
            return;
          }

          if (json.success)
          {
<%          if (mld_key < 0) { %>
              if (json.autoorder)
              {
                var data = { mld_key: json.mld_key,
                             urole: "fe",
                             autoorder: 1 };
                <% protectRequest.dataToken("data"); %>
                $.post("<%=rooturl%>/appl/mld/mld_edit_opdr_save.asp",
                       data,
                       McltCallbackAndThenAlways(mld_submit_callback),
                       "json");
                return; // na opslaan van de opdracht komt vanzelf een nieuwe aanroep van mld_submit_callback
              }
<%          } %>

<%          if ((user.isGroupedUser() || Session("login_by_fallback")) && qrc) { %>
                // Waarschijnlijk QR-code op koffieautomaat. Niet naar andere schermen springen.
                window.location.href = "<%=rooturl%>/appl/pda/empty.asp?qrc=1&msg=lcl_pda_mld_call_confirm";
<%          } else if (mld_key > 0) { %>
                window.location.href = "<%=rooturl%>/appl/pda/melding.asp?melding=1&mld_key=" + "<%=mld_key%>";
<%          } else if (mld_key < 0) { %>
                // Nieuwe melding aangemaakt.
                var alert_txt = ( $("#melding_onderwerp").val()
                                ? L("lcl_pda_mld_call_thanks").format(json.mld_key, $("#melding_onderwerp").val())
                                : L("lcl_pda_mld_call_thanks_1").format(json.mld_key)
                                );
<%              if (this_mld.canBOwrite) { %>
                  // Melding verder behandelen.
                  alert_txt += "\n" + L("lcl_pda_mld_call_process");
                  FcltMgr.confirm( alert_txt
                                 , { autoconfirm: false
                                   , fncancel: function() { window.location.href = "<%=rooturl%>/appl/pda/facilitor.asp"; }
                                   }
                                 , function() { window.location.href = "<%=rooturl%>/appl/pda/melding.asp?melding=1&mld_key=" + json.mld_key; }
                                 );
<%              } else { %>
                  // Terug naar home pagina.
                  FcltMgr.alert(alert_txt);
                  window.location.href = "<%=rooturl%>/appl/pda/facilitor.asp";
<%              } %>
<%          } %>
          }
        };

        async function mld_submit()
        {
            if (!await validateForm("meld"))
                return false;

            // Als er een object gekozen is moet de ruimte_key daarvan ook in de formparams worden opgeslagen voor betere plaatsbepaling van de melding.
            var rtyp = $("#r_objs :selected").attr("ins_alg_ruimte_type");
            if (rtyp=="R")
            {
              var rkey = $("#r_objs :selected").attr("ins_alg_ruimte_key") || -1;
              $("#ruimtekey").val(rkey);
            }
            // TODO: Wat met doublecheck
            // Misschien automatisch forcesave of juist alert dat probleem al gemeld is?
            // 5.2.2 Gold D: inderdaad vooralsnog forcesafe
            $.post($("form[name=meld]")[0].action, $("form[name=meld]").serialize(), McltCallbackAndThenAlways(mld_submit_callback), "json");
            return true;
        }

        function mld_forward(fwdType)
        {
            window.location.href = "<%=rooturl%>/appl/pda/melding.asp?mld_key=<%=mld_key%>&action=forward&fwdType="+fwdType;
        }

        function PasteFromSelectbox()
        {
          if ($("#stdopmerk :selected").length && $("#stdopmerk :selected").val() != -1)
          {
            $("#opmerk_close").focus();
            var PastedText = $("#stdopmerk :selected")[0].getAttribute("afmeldtekst");
            $("#opmerk_close").val($("#opmerk_close").val() + ($("#opmerk_close").val() != ""? "\n" : "") + PastedText).trigger("change");
          }
        }

        function mld_forward_cancel()
        {
            window.location.href = "<%=rooturl%>/appl/pda/melding.asp?mld_key=<%=mld_key%>";
        }

        async function mld_forward_submit()
        {
            if (!await validateForm("u2"))
                return false;
console.log($("[name=forwardform]").serialize());
            $.post($("form[name=forwardform]")[0].action,
                   $("[name=forwardform]").serialize(),
                   mld_forward_submit_callback,
                   "json");
            return true;
        }

        function mld_forward_submit_callback(jdata)
        {
            // Moet er voor de melding met een nieuwe stdmelding automatisch een opdracht aangemaakt worden?
            if (jdata.autoorder)
            {
                var data = { mld_key: <%=mld_key%>,
                             message: jdata.message || jdata.toaster,
                             autoorder: 1
                           };
                <% protectRequest.dataToken("data"); %>
                $.post("<%=rooturl%>/appl/mld/mld_edit_opdr_save.asp",
                       data,
                       McltCallbackAndThenAlways(afsluiten),
                       "json");
            }
            else
                afsluiten(jdata);
        }

        function afsluiten(jdata)
        { // Sluit onszelf.
            window.location.href = "<%=rooturl%>/appl/pda/melding.asp?mld_key=<%=mld_key%>";
        }

        function setInitEinddatum(data, textStatus)
        {
          data.show_enddate_length = $("#show_enddate").length;
            var endDate = new Date(data.einddatum);
            if ($("#enddate").length)
                $("#enddate").val(endDate.getTime());

            var endTime = ("0" + endDate.getHours()).slice(-2) + ':' + ("0" + endDate.getMinutes()).slice(-2);
            endDate = new Date(endDate);
            endDateStr = calendar_names.daysMin[endDate.getDay()] + " " +
                         padout(endDate.getDate()) + "-" + padout(endDate.getMonth() + 1) + "-" + padout(endDate.getFullYear());
            if ($("#show_enddate").attr("type") === "date") { // Deze verwacht YYYY-MM-DD
              endDateStr = padout(endDate.getFullYear()) + "-" + padout(endDate.getMonth() + 1) + "-" + padout(endDate.getDate());
            }
            if ($("#show_enddate").length)
                $("#show_enddate").val(endDateStr);
            if ($("#time_from_enddate").length)
                $("#time_from_enddate").val(endTime);
        }

        async function mld_close_submit()
        {
          if (loadingAI && loadingAI.readyState !== 4) {
            loadingAI.abort(); // Breek AI request af zodat we ongestoord kunnen submitten
          }

          if (!await validateForm("u2"))
            return false;

          $.post($("form[name=closeform]")[0].action,
            $("[name=closeform]").serialize(),
            McltCallbackAndThenAlways(function() {
              window.location.href = "<%=rooturl%>/appl/pda/melding.asp?melding=1&mld_key=" + "<%=mld_key%>";
            }), "json");

          return true; // disable button
        }

        function ctrcloseToggler(deze)
        {
          var ctrclose = $(deze).prop('checked');
          if (ctrclose)
          {
  <%        for (var i = 0; i < controleModeArray.length; i++)
            { %>
              $("#sel_controlemode" + <%=controleModeArray[i]%>).addClass("required");
  <%        } %>
            $("#inscontrolemode").show();
            FcltMgr.resized(window);
          }
          else
          {
            $("#inscontrolemode").hide();
  <%        for (var i = 0; i < controleModeArray.length; i++)
            { %>
              $("#sel_controlemode" + <%=controleModeArray[i]%>).removeClass("required");
  <%        } %>
          }
        }

        function onChangeMelder(melder_key)
        {
          if (melder_key > 0 && typeof sgDept != "undefined" && (<%=mld_key%> < 0 || $("#sgDept").val() == -1))
          {
            $.getJSON("../prs/get_prs_info_ajax.asp",
                      { req_info: "prs_afdeling",
                        prs_perslid_key: melder_key
                      },
                      process_melder_afdeling);
          }
        }

        function process_melder_afdeling(data)
        {
          if (data.prs_afdeling_key > 0 && data.prs_afdeling_naam != "")
          {
            sgDept.setValue(data.prs_afdeling_key, data.prs_afdeling_naam, true, true, null, true);
          }
        }
        function mld_opmpaste()
        {
            $("#opmerk_close").focus();
            $("#opmerk_close").val($("#opmerk_close").val() + ($("#opmerk_close").val() != ""? "\n" : "") + "<%=safe.jsstring(opdr_opm)%>");
            $("#opmpaste").css("visibility", "hidden"); // Button na invoegen opmerking onzichtbaar maken zodat geen tweede keer toegevoegd kan worden.
        }
        $(function() {
<%          if (opdr_opm != "" && S("mld_add_mldopmerk_on_opdrclose") == 1)
            { %>
              mld_opmpaste();
<%          } %>
<%          if (mld_info.melder_key != user_key) { %>
                $("[name='note']").focus(function() {
                    $("#quickNoteTip").fadeIn();
                });
<%          }
            if (mld_key < 0 && !mld_info.einddatum) {  %>
                recalcEinddatum();
<%          } %>
            // recalculate enddate on change of object
            $("#r_objs").on("change", function _r_objs_change()
            {
                recalcEinddatum();
            });
        });

        function call_autobutton()
        {
<%        if (autobutton.toLowerCase() == "accept" && this_mld.canAccept) { %>
            mld_accept_confirm();
<%        } %>
        }

        var mld_key = <%=mld_key%>;
        function recalcEinddatum(recalc_always)
        {
            // Er zijn twee situaties te onderscheiden:
            // 1) Startdatum is zichtbaar/wijzigbaar,
            //    De tijd van de startdatum is altijd de begintijd van de dag (setting "fac_t_startofworkday" bijvoorbeeld 8:00 uur)
            //    => Startdatum = TRUNC(startdatum) + 8:00 uur
            //    => Einddatum = TRUNC(startdatum) + 8:00 uur + SLA
            //    LET OP!!!: Als je deze setting zet dan wordt eigenlijk verondersteld dat de SLA in dagen is en niet in uren.
            //               Echter als de startdatum vandaag is moet wel voor de begintijd de huidige sysdate tijd genomen worden tijdens het opslaan.
            //               Anders geldt de acceptatietijd (in uren) onterecht al vanaf het begin van de dag.
            //               Voor het bepalen/berekenen van de einddatum laten de startdatum gewoon aan het begin van de dag beginnen.
            // 2) Startdatum is niet zichtbaar/wijzigbaar
            //    De tijd van de startdatum is de tijd van de huidige waarde of van de sysdate, COALESCE(huidige waarde, sysdate).
            //    => Startdatum = COALESCE(huidige waarde, sysdate)
            //    => Einddatum = COALESCE(huidige waarde, sysdate) + SLA
            // Of de startdatum wel of niet zichtbaar/wijzigbaar is, is in te stellen bij vakgroep door de setting "Startdatum te bepalen" (mld_disc_params_startdatum)

            var startdate = new Date(parseInt($("#startdate").val(),10));
            var sysdate = new Date();

            var startOfWorkDay = <%=safe.jsfloat(S("fac_t_startofworkday"))%>;
            var startwerkdag_uur = Math.floor(startOfWorkDay);
            var startwerkdag_min = (startOfWorkDay - Math.floor(startOfWorkDay)) * 60;
            var startdatebegin = new Date(startdate.getFullYear(), startdate.getMonth(), startdate.getDate(), startwerkdag_uur, startwerkdag_min);

            if (<%=stdm_info.startdatum? 1 : 0%> == 1)
            { // Situatie 1: Einddatum = TRUNC(startdatum) + 8:00 uur + SLA
              // LET OP!!!: Als setting "mld_disc_params_startdatum" is gezet dan wordt eigenlijk verondersteld dat de SLA in dagen is en niet in uren.
              //            Echter als de startdatum vandaag is moet wel voor de begintijd de huidige sysdate tijd genomen worden tijdens het opslaan.
              //            Anders geldt de acceptatietijd (in uren) onterecht al vanaf het begin van de dag.
              //            Voor het bepalen/berekenen van de einddatum laten de startdatum gewoon aan het begin van de dag beginnen.
              var startdate_is_today = (startdate.midnight().getTime() == sysdate.midnight().getTime());
              startdatum = (startdate_is_today? sysdate.getTime() : startdatebegin.getTime());
            }
            else
            { // Situatie 2: Einddatum = COALESCE(huidige waarde, sysdate) + SLA
              if (mld_key < 0)
                var startdatum = sysdate.getTime(); // Nieuwe melding, nu/sysdate
              else
                var startdatum = startdate.getTime(); // Wijziging melding, huidige opgeslagen waarde
            }

            var stdm_key = <%=stdm_key%>;
            var prio = "<%=mld_info.mprio%>" || 3;
            var geb_key = $('#gebouwkey').val();
            var rui_key = $('#ruimtekey').val();

            // Mobile only has 1 object max
            var ins_key = $("#r_objs").val() || -1;

            // De voorwaarden of de einddatum opnieuw moet worden berekend zijn voor binnenkomst al afgedwongen.
            // Nu kan de database de einddatum bepalen.
            var params = { req_info: "calc_einddatum",
                           startdatum: startdatum,
                           srtdisc: <%=mld_info.srtdisc_key%>,
                           disc: <%=mld_info.disc_key%>,
                           stdm_key: stdm_key,
                           prio: prio,
                           geb_key: geb_key,
                           rui_key: rui_key,
                           ins_key: ins_key
                         };

            $.getJSON("<%=rooturl%>/appl/mld/get_mld_info_ajax.asp",
                      params,
                      setInitEinddatum);
        }

        // Eventueel automatisch een actie-knop klikken, maar pas nadat het scherm zichtbaar is ivm een confirm tekst.
        window.onload=function(){ call_autobutton(); };
    </script>
  </head>
  <body>
<%

if (action != "forward")
{
      PAGE_START({ id: "page-1-"+mld_key });
      HEADER({title: subject, back:!qrc, home: !qrc });
      if (addSubheader)
        HEADER({title: subject + " " + subjectSubheader, back:!qrc, home: !qrc });
      CONTENT_START();
        FORM_START("meld", { "name": "meld", "action": rooturl + "/appl/mld/mld_edit_melding_save.asp", "method": "POST" });
// Altijd forcesave omdat we geen doublecheck aankunnen
%>
        <input type="hidden" name="mld_key" value="<%=mld_key%>">
        <input type="hidden" name="forcesave" id="forcesave" value="0">
        <input type="hidden" name="parent_key" id="parent_key" value="-1">
        <input type="hidden" name="urole" value="<%=mld_key > 0? "bo" : "fe"%>">
        <input type="hidden" name="stdm" value="<%=mld_info.stdm_key%>">
        <input type="hidden" id="caddwgx" name="caddwgx" value="<%=caddwgx != null? safe.jsfloat(caddwgx) : ""%>">
        <input type="hidden" id="caddwgy" name="caddwgy" value="<%=caddwgy != null? safe.jsfloat(caddwgy) : ""%>">
<%
        if (mld_key == -1)
        { // Nieuw, maar deze velden kunnen we zelf verzinnen
          if (isvervolg)
          {
            Response.Write("<input type='hidden' id='start_key' name='start_key' value='"+mld_start_key+"'>");
          }
          if (!fronto)
          {
%>
            <input type="hidden" id="person" name="person" value="<%=user_key%>">
<%
          }
%>
            <input type="hidden" name="locatiekey" value="<%=alg_params.loc_key%>">
            <input type="hidden" name="gebouwkey" value="<%=alg_params.bld_key%>">
            <input type="hidden" name="verdiepingkey" value="<%=alg_params.flr_key%>">
            <input type="hidden" name="ruimtekey" id="ruimtekey" value="<%=alg_params.roo_key%>">
            <input type="hidden" name="meldbronkey" value="<%=mld_info.meldbron_key%>">
            <input type="hidden" name="deelsrtcont_key" value="<%=mld_info.deelsrtcont_key%>">

<%          // If can appoint process team && has a default process team
            if (stdm_info.srtgroep & 4 && stdm_info.default_ins_disc_key > 0)
            {
                var sql = "SELECT mld_disc_params_srtgroep"
                        + "  FROM mld_disc_params mdp"
                        + " WHERE mdp.mld_ins_discipline_key = " + stdm_info.default_ins_disc_key;
                var oRs = Oracle.Execute(sql);
                // If can be a process team
                if (!oRs.eof && oRs("mld_disc_params_srtgroep").Value & 2)
                { %>
                    <input type="hidden" name="mld_ins_discipline" value="<%=stdm_info.default_ins_disc_key%>">
<%              }
                oRs.Close();
            }
        }

        if (mld_key > -1)   // bestaande
        {
            BLOCK_START({ collapsedIcon: "fa-plus", expandedIcon: "fa-minus", collapsed: true, title: (mld_info.mld_onderwerp == null ? L("lcl_mld_frame_algemeen") : mld_info.mld_onderwerp) });
                var prs_melder = new Perslid(mld_info.melder_key);
                var melder_params = {};
                var tel = prs_melder.prs_perslid_mobiel() || prs_melder.prs_perslid_telefoonnr();
                if (tel)
                    melder_params = { type: "tel", phone_number: tel };
                melder_params.withhidden = { "id": "person", "value": mld_info.melder_key};
                ROFIELD("fld", L("lcl_caller"), prs_melder.naam(), melder_params);
                if (S("mld_num_prefix_mode") == 1 && mld_info.kostenpl_key > 0 && !editKostenplaats)
                {
                    var sql = "SELECT k.prs_kostenplaats_key kpkey"
                            + "     , " + S("prs_kpn_string") + " kpstring"
                            + " FROM prs_kostenplaats k"
                            + " WHERE k.prs_kostenplaats_key = " + mld_info.kostenpl_key;
                    var oRs = Oracle.Execute(sql);
                    ROFIELD("fld", L("lcl_mld_inf_Kostenplaats"), oRs("kpstring").Value);
                    oRs.Close();
                }

                ROFIELD("fld", L("lcl_mld_date_time")  , toDateTimeString(mld_info.melddatum));
                ROFIELD("fld", L("lcl_vakgroup")       , (mld_info.prefix ? mld_info.prefix+"-" : "") + mld_info.ins_discipline_omschrijving);
                if (stdm_info.srtgroep & 4 && mld_info.behandel_key > 0)
                {
                    var prs_behandelaar = new Perslid(mld_info.behandel_key);
                    ROFIELD((mld_info.behandel_key != user_key ?"attention":"fld"), L("lcl_mld_behandelaar"), prs_behandelaar.naam(), { suppressEmpty: true });
                }
            BLOCK_END();
        }
        else  // nieuwe
        {
            if (addObjectDesc)
              ROFIELD("fld", L("lcl_ins_object"), ins_name);
            if (fronto && !this_mld.canReadFEOnly)
            {
                var personEditable = (mld_key > 0 && this_mld.canPersChange) || (mld_key < 0  && this_mld.canFOwrite);
                FCLTpersoonselector("person",
                                    "sgPerson",
                                    { perslidKey: mld_info.melder_key,
                                      xxlabel: L("lcl_mld_name"),
                                      fieldNameKey: "person",
                                      readonly: !personEditable,
                                      autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                      required: personEditable,
                                      onChange: "onChangeMelder"
                                    });
            }
        }

        if (mld_info.show_ins && (stdm_info.alg_onrgoed_obj_niveau || stdm_info.prsafdobj))
        {
            if (ins_key > 0 && mld_key < 0)
            { // Nieuwe melding waarbij het object bekend is: via qrc-code
              %><input type="hidden" name="has_r_objs" value="1">
                <input type="hidden" name="r_objs" value="<%=ins_key%>">
              <%
            }
            else if (ins_name_arr.length < 2 && (mld_key < 0 || this_mld.canPlaatsChange))  // Meerdere objecten bewerken ondersteunen we niet.
            {
              %><input type="hidden" name="has_r_objs" value="1"><%
                  var sql = get_objecten_sql(plaats_key, plaats_niveau, user_key, null, mld_info.stdm_key, {extracode: "UITV"});
                  var tsql = "SELECT count(*) aantal FROM (" + sql + ")";
                  var toRs = Oracle.Execute(tsql);
                  var aantalObj = toRs("aantal").Value;
                  toRs.close();
                  var EmptyOption = true;
                  if (aantalObj > 0 || mld_info.srtinst_verplichtstatus == 2)
                  {
                    if (aantalObj == 1 && mld_info.srtinst_verplichtstatus == 2)
                          EmptyOption = false;
                    FCLTselector( "r_objs"
                                , sql
                                , { initKey: ins_keys_arr.length?ins_keys_arr[0]:-1
                                  , label: L("lcl_gerelateerdeobjecten")
                                  , mobile: true
                                  , extraParamValue: "ins_alg_ruimte_key,ins_alg_ruimte_type,uitvoertijd"
                                  , emptyOption: (EmptyOption ? L("lcl_select_object") : null)
                                  , required: mld_info.srtinst_verplichtstatus == 2
                                  }
                                );
                 }
            }
            else if (ins_name_arr.length)
                ROFIELD("fld", L("lcl_gerelateerdeobjecten"), ins_name_arr.join("\n"), {multi: ins_name_arr.length > 1});
        }

        if (S("mld_use_department") == 1)
        {
            var dep_key = mld_info.afdeling_key;
            if (!dep_key)
            {
                if (mld_info.melder_key > 0)
                    dep_key = new Perslid(mld_info.melder_key).prs_afdeling_key();
                else
                    dep_key = user.prs_afdeling_key();
            }
            FCLTafdelingselector("sgDept", "sgDept",
                                 { departmentKey: dep_key,
                                   label: L("lcl_mld_afdeling"),
                                   autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                   filtercode: "INCL",
                                   readonly: (mld_key > 0 && !this_mld.canDeptChange),
                                   required: true,
                                   suppressJustOne: true
                                 });
        }

        if (editKostenplaats)
        {
            var urlAdd_account = [{ urlParam: "prs_key", field: "person" }];
            if (frontend && !mld_info.mld_kk)
            {   // Indien frontend en kostenklant vinkje is uit, dan moet alleen de kostenplaats van het geselecteerde gebouw gekozen kunnen worden.
                // LET OP!: Persoon hoeft niet gemandateerd te zijn voor deze kostenplaats.
                // De kostenplaats van het geselecteerde gebouw wordt meegegeven aan de FCLTkostenplaatsselector
                // zodat alleen deze kostenplaats als resultaat opgeleverd gaat worden.
                urlAdd_account.push({ urlParam: "kp_key", field: "account_bld" });
%>
                <input type="hidden" id="account_bld" name="account_bld" value="<%=mld_info.mld_kostenpl_key%>">
<%
            }
            FCLTkostenplaatsselector("account",
                                     "sgAccount",
                                     mld_info.melder_key,
                                     { kostenplaatsKey: mld_info.kostenpl_key || -1,
                                       label: (urole == "fe")?L("lcl_mld_inf_Kostenplaats"):L("lcl_mld_inf_Kostenklant"),
                                       showCustomLabel: true,
                                       extraParamField: "kmodule",
                                       extracode: "M",
                                       filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initiële waarde kan bij kostenplaatsen altijd.
                                       urlAdd: urlAdd_account,
                                       readonly: (mld_key > 0 && !this_mld.canKostChange),
                                       required: (!(mld_key > 0 && !this_mld.canKostChange)? mld_info.kpnverplicht : false)
                                     });
        }
        else
        {
%>
            <input type="hidden" name="account" id="sgAccount" value="<%=mld_info.kostenpl_key || -1 %>">
<%      }

        var canPrioChangeFOBO = (this_mld.canFOwrite ? 1 : 0);
        var canPrioChange = (stdm_info.planbaarfe == 0 && (this_mld.canFOwrite || (this_mld.canFEwrite && stdm_info.frontendprio && (mld_key < 0 || mld_info.mld_status == 1 || mld_info.mld_status == 2)))? 1 : 0);

        if (mld_key > -1)
        {
            var params = { suppressEmpty: true
                         , moreinfo: "#info-4-"+mld_key
                         };

            ROFIELD("fld", L("lcl_place"), plaats_string, params);
            if (S("mld_print_loc_address")==3)  // mag van mij op zich wel standaard eigenlijk
              ROFIELD("fld", L("lcl_adress"), adres_string, {suppressEmpty: true} );

            var oms_readonly = !(this_mld.canOmsChange);
            if (S("mld_omschrijving_restrict_edit") == 1)
                oms_readonly = oms_readonly || !(mld_info.mld_status == 2 || mld_info.mld_status == 3);

            if ((stdm_info.subject != 0) && !(oms_readonly && !mld_info.mld_onderwerp))
            {
                RWFIELD("melding_onderwerp", L("lcl_mld_subject"), mld_info.mld_onderwerp
                       , { pclass: ((stdm_info.subject == 2 && (this_mld.canOmsChange || mld_key < 0))? " required" : "")
                         , readonly: (oms_readonly ? true : false)
                         }
                       );
            }

            if (mld_info.freetext != 0 && (!oms_readonly || mld_info.mld_omschr))
            {
              // Complaint text description
              RWFIELD("melding_omschrijving", L("lcl_txt"), mld_info.mld_omschr, { multi: true, pclass: (mld_info.freetext == 2 && (this_mld.canOmsChange || mld_key < 0) ? "required" : ""), readonly: oms_readonly });
            }

            var zichtbaar = (mld_info.fenotes == 1 || mld_info.fenotes == 3 );

            if (quicknoteSetting == 1 && this_mld.canChange) {
                RWFIELD("note", L("lcl_mld_quick_note_new"), null, {multi: true});
                if (mld_info.melder_key != user_key) { %>
                <p id="quickNoteTip" style="display: none;"><sup><%=(zichtbaar ? safe.html(L("lcl_fac_ano_intotext1")) + " " + safe.html(L("lcl_mld_zichtbaar_FE")) : safe.html(L("lcl_fac_ano_intotext1")) + " " + safe.html(L("lcl_mld_verborgen_FE")))%></sup></p>
<%              }
            }

            if (mld_info.mprio != 3 && !canPrioChange)
            {
                ROFIELD("attention", L("lcl_mld_urg"), mld.getpriotext(mld_info.mprio));
            }
            if (!(stdm_info.srtgroep & 4) && mld_info.behandel_key > 0 && mld_info.primaire_behandelaar != 0)
            {
                var prs_behandelaar = new Perslid(mld_info.behandel_key);
                ROFIELD((mld_info.behandel_key != user_key ?"attention":"fld"), L("lcl_mld_behandelaar"), prs_behandelaar.naam(), { suppressEmpty: true });
            }
            if (mld_info.mld_ins_discipline_key > 0)
            {
                ROFIELD("fld", L("mld_processing_group"), (mld_info.mld_srtins_prefix ? mld_info.mld_srtins_prefix + "-" : "") + mld_info.mld_ins_discipline_omschrijving);
            }
            if (mld_info.behandel2_key > 0)
            {
                var prs_behandelaar2 = new Perslid(mld_info.behandel2_key);
                ROFIELD((mld_info.behandel2_key != user_key ?"attention":"fld"), L("lcl_mld_processor"), prs_behandelaar2.naam(), { suppressEmpty: true });
            }
        }
        else // Nieuwe
        {
          if (stdm_info.subject != 0 && !(stdm_info.subject == 3 && S("ai_enabled") & 1))
          {
              RWFIELD("melding_onderwerp", L("lcl_mld_subject"), mld_info.mld_onderwerp
                      , { pclass: ((stdm_info.subject == 2 && (this_mld.canOmsChange || mld_key < 0))? " required" : "") }
                      );
          }

          if (stdm_info.freetext > 0)
              RWFIELD("melding_omschrijving", L("lcl_txt"), "", {multi: true, pclass: (stdm_info.freetext==2 ? "required" : "") });
        }

        var sql = null;
        if (mld_info.stdm_key > 0)
        {
          sql = "";
          var union = "";
          for (var i in stdm_info.prioriteiten)
          {
            var priotxt = stdm_info.prioriteiten[i].text;
            if (__Logging > 0)
            {
              priotxt += " **";
              priotxt += stdm_info.prioriteiten[i].uitvoertijd + " " + (stdm_info.prioriteiten[i].eenheid == 'D'? L("lcl_mld_days") : L("lcl_mld_hours"));
            }
            sql += union
                + " SELECT " + stdm_info.prioriteiten[i].key
                + ", " + safe.quoted_sql(priotxt)
                + " FROM DUAL";
            union = " UNION";
          }
        }

        if (canPrioChange)
        {
          // De prioriteitenmatrix indien aangegeven is dat dat moet EN als ALLE denkbare prioriteiten 1 t/m  gedefinieerd zijn
          // Als dat niet het geval is zouden er gaten ontstaan en wordt het enigszins onvoorspelbaar, dus dan maar niet.
          if ((mld_key < 0  || (mld_key > 0 && canPrioChangeFOBO && (stdm_info.prioriteiten[1] && stdm_info.prioriteiten[2] && stdm_info.prioriteiten[4]))) &&
              stdm_info.priomatrix > 0)
          {
            var urgentiesql= [];
            for (var i = 1; i <= 3; i++)
            {
                urgentiesql.push("SELECT " + i + ", " + safe.quoted_sql(L("lcl_mld_urgentie" + i)) + "||' - '|| " + safe.quoted_sql(L("lcl_mld_urgentie" + i + "_info")) + " tt FROM DUAL");
            }
            FCLTselector("urgentie",
                        urgentiesql.join(" UNION ") + " ORDER BY 1",
                        { initKey: mld_info.murgentie,
                          label: L("lcl_mld_matrixlabelprefix")+L("lcl_mld_urgentie"),
                          mobile: true,
                          //titleCol: "tt",
                          emptyOption: L("lcl_select_urgentie"),
                          readonly: (mld_key > 0 && !canPrioChange),
                          onChange: "onChangeImpactOrUrgentie(1)",
                          trclass: "tr_priomatrix"
                        });

            var impactsql= [];
            for (var i = 1; i <= 3; i++)
            {
                impactsql.push("SELECT " + i + ", " + safe.quoted_sql(L("lcl_mld_impact" + i)) + "||' - '|| " + safe.quoted_sql(L("lcl_mld_impact" + i + "_info")) + " tt FROM DUAL");
            }
            FCLTselector("impact",
                        impactsql.join(" UNION ") + " ORDER BY 1",
                        { initKey: mld_info.mimpact,
                          label: L("lcl_mld_matrixlabelprefix")+L("lcl_mld_impact"),
                          mobile: true,
                          //titleCol: "tt",
                          emptyOption: L("lcl_select_impact"),
                          readonly: (mld_key > 0 && !canPrioChange),
                          onChange: "onChangeImpactOrUrgentie(1)",
                          trclass: "tr_priomatrix"
                        });
          }
          FCLTselector("prio",
                       sql,
                       { initKey: (mld_key > 0 ? mld_info.mprio : 3),
                         label: L("lcl_mld_urg"),
                         mobile: true,
                         readonly: (mld_key > 0 && !canPrioChange),
                         onChange: "onChangePrioriteit()",
                         trclass: "tr_prio"
                       });
        }

        if (stdm_info.ins_srtdiscipline_bes > 0) { // Afleveradres
          FCLTadresselector("del_address", "sgAdres",
                    { adresKey: mld_info.deladdress_key,
                      label:    L("lcl_delivery_address"),
                      emptyOption: "",
                      filtercode: "A",
                      autlevel:   (this_mld.authparams(autfunction)? this_mld.authparams(autfunction).ALGreadlevel : 9),
                      readonly:   (mld_info.deladdress_key > 0 && mld_key > 0 && !this_mld.canAflChange),
                      required:   stdm_info.afleveradres_verplicht
                    });
        }

        if (mld_key > -1)
        {
            if (this_mld.canAfhandChange || (!mld_info.parent_key && !start_key))
            {
                ROFIELD("fld", L("lcl_mld_inf_Opmerking"), mld_info.remark, {suppressEmpty: true, multi: true});
            }
            else
            {
              if (mld_info.parent_key)  // gekoppelde melding verwijst naar de parent voor afhandeling
              {
                  var sprefix = mld.mld_prefix(mld_info.parent_key);
                  var params = { moreinfo: rooturl+"/appl/pda/melding.asp?mld_key=" + mld_info.parent_key, disabled: true};
                  ROFIELD("fld", L("lcl_mld_completion_in"), sprefix + mld_info.parent_key, params);
              }
              else if (start_key)
              {
                  ROFIELD("fld", L("lcl_mld_inf_Opmerking"), mld_info.remark, { moreinfo: rooturl + "/appl/pda/melding.asp?mld_key=" + start_key });
              }
            }
            if(mld_info.kto_type && mld_info.kto_key > 0)
            {
              switch(mld_info.kto_type)
              {
                case "R":
                  //reservering
                  ROFIELD("fld", L("lcl_mld_kto"), mld_info.kto_key, { moreinfo: rooturl + "/appl/pda/reservering.asp?rsv_ruimte_key=" + mld_info.kto_key });
                  break;
                case "M":
                  //melding
                  ROFIELD("fld", L("lcl_mld_kto"), mld_info.kto_key, { moreinfo: rooturl + "/appl/pda/melding.asp?mld_key=" + mld_info.kto_key });
                  break;
                case "B":
                  //bestelling
                  ROFIELD("fld", L("lcl_mld_kto"), mld_info.kto_key, { moreinfo: rooturl + "/appl/pda/bestelling.asp?bes_key=" + mld_info.kto_key });
                  break;
              }
            }
            if(start_key > 0 && start_key != mld_key)
            {
              ROFIELD("fld", L("lcl_mld_continue_of"), start_key, { moreinfo: rooturl + "/appl/pda/melding.asp?mld_key=" + start_key });
            }
        }

                FCLTcalendar("startdate",
                       { label     : L("lcl_mld_startdate"),
                         datum     : mld_info.melddatum,
                         minFuture : (frontend ? 0 : -1),
                         readonly  : mld_key > 0 && !this_mld.canWriteDatums && stdm_info.startdatum, // als hij verborgen is hoeftie niet readonly
                         required  : true,
                         trhidden  : !stdm_info.startdatum,
                         volgnr    : 1,
                         mobile    : true,
                         nofollow  : true
                       });


           if ( !frontend || (frontend && (stdm_info.taggable&2)==2))
           {
              var sql_tag = "SELECT mld_melding_tag_key"
                          + "     , mld_melding_tag_naam || DECODE(mld_melding_tag_datum_tot,NULL,'',' ('||TO_CHAR(mld_melding_tag_datum_tot, 'DD-MM-YYYY')||')') omschrijving"
                          + "     , mld_melding_tag_naam"
                          + "     , " + lcl.xsqla('mld_melding_tag_oms', 'mld_melding_tag_key')
                          + "     , mld_melding_tag_datum_tot"
                          + "  FROM mld_melding_tag"
                          + " WHERE (mld_melding_tag_datum_van IS NULL OR mld_melding_tag_datum_van <= TRUNC(SYSDATE))"  // denk ik
                          + "   AND mld_melding_tag_verwijder IS NULL"
                          + "   AND ins_srtdiscipline_key = " + mld_info.srtdisc_key
                          + " ORDER BY mld_melding_tag_datum_tot, mld_melding_tag_naam";
              FCLTselector("tag_key",
                                sql_tag,
                                { initKey: mld_info.tag_key
                                , initEmpty: true
                                , label: L("mld_melding_tag_naam")
                                , mobile: true
                                , titleCol: "mld_melding_tag_oms"
                                });
        }
        var einddatumHidden = stdm_info.planbaar == 2 || (stdm_info.planbaar == 0 && stdm_info.planbaarfe == 0 && frontend && mld_key < 0);

        // Wordt mogelijk dynamisch vervangen
        FCLTcalendar("enddate",
                       { label     : L("lcl_mld_enddate"),
                         datum     : mld_info.einddatum,
                         minDate   : (frontend ? mld_info.einddatum : null),
                         timeField : !frontend || (frontend && !stdm_info.planbaar), // Bij FE dus afh van Planbaar eind(datum+tijd) wel/niet in te vullen, anderen (FO & BO en zo) kunnen eind(datum+tijd) altijd invullen.
                         timeStep  : 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_melding.js
                         startTime : S("fac_t_startofworkday"),
                         endTime   : S("fac_t_endofworkday"),
                         readonly  : mld_key > 0 && !this_mld.canWriteDatums,
                         required  : true,
                         trclass   : "trenddate",
                         trhidden  : einddatumHidden,
                         mobile    : true,
                         volgnr    : 2
                       });

        // Flags
        if ((this_mld.canBOwrite || this_mld.canFOwrite) && (S("mld_melding_flags") > 0))
        {
            var mldflagnr = mld_info.flag || 0;
            var sqla = [];
            for (var i=0; i<S("mld_melding_flags"); i++)
            {
                sqla.push("SELECT "+i+","+safe.quoted_sql(L("lcl_mld_flag"+i))+" FROM DUAL");
            }
            FCLTselector("mldflag",
                         sqla.join(" UNION ALL "),
                         { initKey: mld_info.flag,
                           label: L("lcl_mld_flags"),
                           mobile: true
                         });
        }

        var prsautlevel = (this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel);
        // Als ik geen PRS-schrijfrechten op de melding heb, maar ik ben wel blokbehandelaar, dan mag ik gewoon iedereen uit mijn team kiezen. Niet optimaal, maar goed genoeg voor nu
        if ((!prsautlevel || prsautlevel == 9) && this_mld.canChangeKenmerkBlok) {
          prsautlevel = -1;
        }

        generateFlexKenmerkBlock ({stdm_arr : [mld_info.stdm_key],
                                   mld_key  : mld_key,
                                   prs_key  : user_key,
                                   reado    : (mld_key > 0 && !(this_mld.canFlexChange || this_mld.canChangeKenmerkBlok)),
                                   canDeleteAttachment: mld_info.mld_status != 6,
                                   canFlexChange: this_mld.canFlexChange,
                                   showConfidential : (mld_key > 1 ? this_mld.canViewConfidential : null),
                                   nameprefix: "page_1_",
                                   serie    : mld_key > 0 ? mld_key : 0,
                                   extraserie: true,
                                   mobile   : true,
                                   melder_key: mld_info.melder_key,
                                   srtdisc: S("mld_processing_group_all")? [] : [mld_info.srtdisc_key],
                                   disc: mld_info.disc_key,                                                                            // Initiele waarde primaire Vakgroep/Behandelteam.
                                   prsautlevel: prsautlevel,
                                   show_alg: mld_info.show_alg,
                                   loc_key: mld_info.loc_key,
                                   this_mld: this_mld
                                  });

        if (!closeCheckDone)
        {
          // TODO: moeten we dit nog wel doen?
          // Zijn er nog lopende opdrachten?
          var canCloseOpdr = [];
          var sqlC = "SELECT o.mld_opdr_key"
                   + "  FROM mld_opdr o"
                   + " WHERE o.mld_melding_key = " + mld_key
                   + "   AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)";
          var oRsC = Oracle.Execute(sqlC);
          while (!oRsC.eof)
          { // Voor elke opdracht controleren of deze afgemeld mogen worden
            var this_opdr = mld.func_enabled_opdracht(oRsC("mld_opdr_key").Value);
            if (!this_opdr.canClose)
            { // Geen autorisatie om alle opdracht af te melden-->dan geen enkele
              canCloseOpdr = [];
              break;
            }
            canCloseOpdr.push(oRsC("mld_opdr_key").Value);
            oRsC.MoveNext();
          }
          oRsC.Close();
        }

        if (mld_key > -1)
        {
          // Controleer of dit soort meldingen een BES component heeft of gedefinieerde MLD opdrachttypes.
          // Bovendien hebben deze frames pas zin als de status minstens Geaccepteerd is
          // (Alleen BO mag aanmaken, kan dat gelijk na invoer doen, maar zo niet dan eerst accepteren)
          var mfe     = mld.func_enabled_melding(mld_key); // heb ik uberhaubt leesrechten
          var fwdInfo = mld.getFwdType(mld_key, this_mld, mld_info);
          var showbes = false;
          var showord = false;
          var ordzichtbaarfe = false;
          if (mld_info.mld_status >= 4 )
          {  // niet afgewezen(1), ingevoerd(2) of ingezien(3)
            showbes = mld_info.show_bes; // Heeft voor een gegeven (srt)discipline een vaste waarde
            // De opdrachttypes behorende bij de srtdiscipline of bij de discipline
            sql = "SELECT mto.mld_typeopdr_zichtbaarfe"
                + "  FROM ins_srtdiscipline sd"
                + "     , mld_discipline d"
                + "     , mld_typeopdr_srtdiscipline tsd"
                + "     , mld_typeopdr mto"
                + " WHERE tsd.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
                + "   AND tsd.ins_discipline_key IS NULL"
                + "   AND sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key"
                + "   AND tsd.mld_typeopdr_key = mto.mld_typeopdr_key"
                + "   AND d.ins_discipline_key = " + mld_info.disc_key
                + " UNION ALL"
                + " SELECT mto.mld_typeopdr_zichtbaarfe"
                + "  FROM ins_srtdiscipline sd"
                + "     , mld_discipline d"
                + "     , mld_typeopdr_srtdiscipline tsd"
                + "     , mld_typeopdr mto"
                + " WHERE tsd.ins_discipline_key = d.ins_discipline_key"
                + "   AND tsd.ins_discipline_key IS NOT NULL"  // overbodig, maar wel duidelijk verschil met eerste clause
                + "   AND sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key"
                + "   AND tsd.mld_typeopdr_key = mto.mld_typeopdr_key"
                + "   AND d.ins_discipline_key = " + mld_info.disc_key
                + " ORDER BY 1 DESC";   // zodat echte waarden eerder komen dan de null-waarden
            ooRs = Oracle.Execute(sql);
            if (!ooRs.eof)
              showord = true;
            while (!ooRs.eof)
            { // Alle opdrachttypes doorlopen. Wellicht zit er een opdrachttype bij die wel door de fe zichtbaar is en die  mogelijk opdrachten bevat die de fe mag zien.
              ordzichtbaarfe = ordzichtbaarfe || (ooRs("mld_typeopdr_zichtbaarfe").Value == 1 && mld_info.melder_key == user_key); // Het moet ook mijn eigen melding zijn
              ooRs.MoveNext();
            }
            ooRs.Close();  // de overige records interesseren me in het geheel niet, ik weet al genoeg.
          }

          // Heeft men voldoende rechten om naar opdrachten te gaan?
          var opdr_page = "";
          var hasParent = mld_info.parent_key != null;              // dan geen opdrachten of bestellingen
          if (!hasParent && mfe.canReadAny) // Mocht ik geen leesrechten hebben, dan ook de opdrachten en bestellingen niet tonen.
          {
            var this_opdr = mld.func_enabled_mld(mld_info.aut_disc_arr, "D"); // wat mag ik zoal op een nieuwe melding
            if ((this_opdr.canORDBOFread) && showord)
            {
              opdr_page = rooturl+"/appl/pda/orders_list.asp?mld_key="+mld_key+"&urole=" + (this_opdr.canORDBOFread? "bo" : urole);
            }
          }
        }

        CONTROLGROUP_START();
        if (this_mld.canChange || mld_key == -1) {
            BUTTON((mld_key>-1 ? L("lcl_submit") : L("lcl_newsubmit")), {click: "mld_submit()", icon: "fa-fclt-save", singlepress: (mld_key == -1) });
        }
        if (mld_key > -1) {
            if (this_mld.canAccept) {
                BUTTON(L("lcl_mld_accept"), {click: "mld_accept_confirm()", icon: "fa-circle-check"});
            }
            if (this_mld.canInstem)
                BUTTON(L("lcl_instem"), {click:"mld_instem()", icon: "fa-thumbs-up"});

            if (this_mld.canReject) {
                BUTTON(L("lcl_mld_reject"), {click: "mld_reject_confirm()", icon: (this_mld.canInstem ? "fa-thumbs-down" : "fa-circle-xmark")});
            }
            if (this_mld.canClose) {
                BUTTON(L("lcl_close"), {click: "mld_close()", icon: "fa-flag-checkered"});
            }
            if (this_mld.canReopen) {
                BUTTON(L("lcl_mld_reopen"), {click: "mld_reopen()", icon: "fa-unlock"});
            }
            if (fwdInfo.fwdType & 1 && (this_mld.canForward || this_mld.canFixMelding)) { // bo2bo
                BUTTON(fwdInfo.fwdLabel,          {click: "mld_forward(1)", icon: (fwdInfo.fwdType == 1 ? "fa-arrow-right" : "fa-retweet")});
            }
            if (fwdInfo.fwdType & 2 && this_mld.canForwardTeam) {
                BUTTON(L("lcl_mld_forward_team"), {click: "mld_forward(2)", icon: "fa-arrow-right"});
            }
            var tsql = "SELECT COUNT(ins_deel_key) FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key;
            toRs = Oracle.Execute(tsql);
            if (toRs(0).Value > 0) {
              if (toRs(0).value == 1)
              {
                var tsql = "SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key;
                var toRs1 = Oracle.Execute(tsql);
                BUTTON(L("lcl_mobile_objecten")+" ("+toRs(0).Value + ")", {linkid: rooturl+"/appl/pda/ins_deel.asp?ins_key=" + toRs1("ins_deel_key").Value, icon: "fa-info" });
                toRs1.Close();
              }
              else
                BUTTON(L("lcl_mobile_objecten") + " (" + toRs(0).Value + ")", {linkid: rooturl + "/appl/pda/ins_list.asp?mld_key=" + mld_key +"&plaatsfilter=0", icon: "fa-info" });
            }
            toRs.Close();

            if (mld_key > 0 && this_mld.canContinue)
            {
                var vsql = "SELECT COUNT(*) FROM mld_melding where mld_melding_start_key = " + mld_key;
                var voRs = Oracle.Execute(vsql);
                BUTTON(L("lcl_mld_continuation_mld") + " ("+voRs(0).Value+")", {click: "mld_continue()", icon: "fa-diagram-subtask"});
                voRs.Close();
            }

            trackinglines = mobile.hastrackingpage('melding', mld_key);
            if (trackinglines>0) {
                BUTTON(L("lcl_history"), {linkid: "#mld-2-"+mld_key, icon: "fa-list"});
            }
            if (mfe.canReadNotes) { // Heb ik rechten om notities te zien
                var tsql = "SELECT COUNT(*) FROM mld_melding_note n WHERE n.mld_melding_key = " + mld_key;
                var toRs = Oracle.Execute(tsql);
                BUTTON(L("lcl_mld_frame_notes")+" ("+toRs(0).Value + ")", {linkid: rooturl + "/appl/pda/notitie.asp?node=melding&urole=" + urole + "&key=" + mld_key, icon: "fa-comment" });
                toRs.Close();
                if (!Session("app_build")) {
                  BUTTON(L("lcl_print"), {click: "mld_print()", icon: "fa-print"});
                }
            }
            if (ruimte_key > -1 && user.checkAutorisation( "WEB_ALGUSE", true)) {
                var rsql = "SELECT 1 from alg_ruimte WHERE alg_ruimte_nr NOT LIKE '\\_%' ESCAPE '\\' and alg_ruimte_key = " + ruimte_key
                var roRs = Oracle.Execute(rsql);
                if (!roRs.eof) {
                  BUTTON(L("lcl_room"), {linkid: rooturl + "/appl/pda/ruimte.asp?ruimte_key=" + ruimte_key, icon: "fa-info" });
                }
                roRs.Close();
            }
            if (opdr_page != "") {
              var tsql = "SELECT COUNT(*) FROM mld_opdr o WHERE o.mld_melding_key = " + mld_key
                       + "   AND o.mld_statusopdr_key IN (4, 5, 8)";  // zelfde als die in orders_list worden getoond
              var toRs = Oracle.Execute(tsql);
              BUTTON(L("lcl_mobile_opdrachten") + " ("+toRs(0).Value + ")", {linkid: opdr_page, icon: "fa-share" });
              toRs.Close();
            }
            // future extension. we kennen res_list nog niet mobiel, en gaan die ook niet alleen om deze reden nu maken.
            //if (mld_info.show_res) {
            //  var tsql = "SELECT COUNT(*) FROM res_reservering r WHERE r.mld_melding_key = " + mld_key;
            //  var toRs = Oracle.Execute(tsql);
            //  BUTTON(L("lcl_mobile_reserveringen") + " ("+toRs(0).Value + ")", {linkid: rooturl + "/appl/pda/reserveringen.asp?mld_key=" + mld_key, icon: "fa-calendar" });
            //  toRs.Close();
            //}

          }
         CONTROLGROUP_END();
         IFACE.FORM_END();
%>
      </form>
<%
      CONTENT_END();

      FOOTER();
      PAGE_END()
      if (mld_key > -1)
      {
          if (trackinglines>0) {
              PAGE_START({id: "mld-2-"+mld_key})
                mobile.trackingpage("melding", mld_key, (mld_info.prefix || "")+ mld_key);
              PAGE_END();
          }
      }
}

if (action == "forward")
{
    // Wat gaan we doen? (fwdType:)
    // 1. Vakgroep wijzigen (= Corrigeren)
    // 2. Behandelteam wijzigen (= Doorsturen)
    var fwdInfo = mld.getFwdType(mld_key, this_mld, mld_info);
    var fwdType = getQParamInt("fwdType", fwdInfo.fwdType);

    user.anything_todo_or_abort((fwdType & fwdInfo.fwdType) && (fwdType == 1 || fwdType == 2));

      PAGE_START({id: "fwd-2-"+mld_key});
        HEADER({title: (fwdType == 1 ? fwdInfo.fwdLabel : L("lcl_mld_forward_team")) + " " + (mld_info.prefix || "") + mld_key, back:!qrc });
        CONTENT_START();
%>
    <script type="text/javascript">

      function onChangeVakgroep(vakgroep_key)
      {
        // Melding leegmaken
        sgStdm.setValue(-1, "", false, false, null, true);
        sgStdm.CheckJustOne();

        if (typeof sgBehandelaar != "undefined")
        {
          if (vakgroep_key == -1) // Efficiënter
            sgBehandelaar.setValue(-1, "", false, false);
          else
            sgBehandelaar.setValue($("#sBehandel").val(), $("#sBehandel_show").val(), false /*doonChange*/, true /*checkExist*/);
        }
      }

      function onChangeBehandelteam(behandelteam_key)
      {
        if (typeof sgBehandelaar2 != "undefined")
        {
          if (behandelteam_key == -1) // Efficiënter
            sgBehandelaar2.setValue(-1, "", false, false);
          else
            sgBehandelaar2.setValue($("#sBehandel2").val(), $("#sBehandel2_show").val(), false /*doonChange*/, true /*checkExist*/);
        }
      }

    </script>
<%
    FORM_START("forwardform", { "name": "forwardform", "action": rooturl + "/appl/mld/mld_forward_save.asp?mld_key=" + mld_key + "&fwdType=" + fwdType, "method": "POST" });
          if (fwdType == 1)
          {
            // Vakgroep
            var urlAdd = [{urlParam: "disc_old", field: "disc_old",        init: mld_info.disc_key }];
            if (mld.useAlgScope("D"))
            {
               var eindlevel = (stdm_info.ins_srtdiscipline_alglevel ? stdm_info.ins_srtdiscipline_alglevel : 2);
               switch (eindlevel) { // Zonder break;
                case 5: urlAdd.push({urlParam: "roomkey", field: "ruimtekey",     init: mld_info.room_key});
                case 4: urlAdd.push({urlParam: "flrkey",  field: "verdiepingkey", init: mld_info.flr_key });
                case 3: urlAdd.push({urlParam: "bldkey",  field: "gebouwkey",     init: mld_info.bld_key });
                case 2: urlAdd.push({urlParam: "lockey",  field: "locatiekey",    init: mld_info.loc_key });
               }
            }

            // Vakgroep
            FCLTdisciplineselector("disc",
                                   "sgDisc",
                                   { label: L("lcl_vakgroup"),
                                     disc_key: S("mld_forward_auto_fill") ? mld_info.disc_key : -1,
                                     module: "MLDP",
                                     perslidKey: user_key,
                                     behandelteam_key: mld_info.mld_ins_discipline_key,
                                     autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                     srtdisc_key: S("mld_forward_all") == 1? -1 : mld_info.srtdisc_key,
                                     urlAdd: urlAdd,
                                     filtercode: this_mld.canForwardKeten? "VDK" : "VD",
                                     onChange: "onChangeVakgroep",
                                     required: true
                                   });

            urlAdd.push({urlParam: "disc_key", field: "disc"});

            // Standaardmelding
            FCLTstdmeldingselector("stdm",
                                   "sgStdm",
                                   { label: L("lcl_complain"),
                                     perslidKey: user_key,
                                     behandelteam_key: mld_info.mld_ins_discipline_key,
                                     stdmelding_key: S("mld_forward_auto_fill") ? stdm_key : -1,
                                     autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                     srtdisc_key: (S("mld_forward_all") == 1? -1 : mld_info.srtdisc_key),
                                     urlAdd: urlAdd,
                                     filtercode: this_mld.canForwardKeten? "VDK" : "",
                                     required: true
                                   });
          }
          else if (fwdType == 2)
          {
            // Behandelteam
            var urlAdd = [{urlParam: "disc",     field: "disc" }];
%>
            <input type="hidden" id="disc" name="disc" value="<%=mld_info.disc_key%>">
<%
            FCLTdisciplineselector("mld_ins_discipline",
                                   "sgDisc",
                                   { label: L("mld_processing_group"),
                                     disc_key: (S("mld_forward_auto_fill") ? mld_info.mld_ins_discipline_key : -1),
                                     module: "MLDB",
                                     urlAdd: urlAdd,
                                     perslidKey: user_key,
                                     autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                     srtdisc_key: (S("mld_processing_group_all") == 1 ? -1 : mld_info.srtdisc_key),
                                     onChange: "onChangeBehandelteam"
                                   });
          }

          // Behandelaar
          if (S("mld_forward_can_assign"))
          {
%>
            <input type="hidden" id="person" name="person" value="<%=mld_info.melder_key%>">
<%
            var urlAdd = [{urlParam: "prs_key", field: "person", init: mld_info.melder_key}];

            if (mld_info.show_alg)
            {
              urlAdd.push({urlParam: "loc_key", field: "loc_key", init: mld_info.loc_key});
%>
              <input type="hidden" id="loc_key" name="loc_key" value="<%=mld_info.loc_key%>">
<%
            }

            if (fwdType == 1)
            {
              urlAdd.push({urlParam: "disc_key", field: "disc", init: (S("mld_forward_auto_fill") ? mld_info.disc_key : -1)});

              if (mld_info.primaire_behandelaar != 0)
              {
                FCLTpersoonselector("sBehandel",
                                    "sgBehandelaar",
                                    { perslidKey: (S("mld_forward_auto_fill") ? mld_info.behandel_key : -1),
                                      label: L("lcl_mld_behandelaar"),
                                      autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                      urlAdd: urlAdd,
                                      readonly: !this_mld.canAfhandChange,
                                      required: (mld_info.primaire_behandelaar == 2),
                                      filtercode: (mld_info.mld_status == 0 ? "BEHF" : "BEHB")
                                    });
              }
            }
            else if (fwdType == 2)
            {
              urlAdd.push({urlParam: "disc_key", field: "mld_ins_discipline", init: (S("mld_forward_auto_fill") ? mld_info.mld_ins_discipline_key : -1)});

              FCLTpersoonselector("sBehandel2",
                                  "sgBehandelaar",
                                  { idadd: 2,
                                    perslidKey: (S("mld_forward_auto_fill") ? mld_info.behandel2_key : -1),
                                    label: L("lcl_mld_processor"),
                                    autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                    urlAdd: urlAdd,
                                    readonly: !this_mld.canAfhandChange,
                                    filtercode: (mld_info.mld_status == 0 ? "BH2F" : "BH2B")
                                  });
            }
          }

          if (!stdm_info.hide_kostenplaats && !stdm_info.is_kto_antwoord)
          {
            var urlAdd_account = [{ urlParam: "prs_key", field: "person" }];
            if (frontend && !mld_info.mld_kk)
            { // Indien frontend en kostenklant vinkje is uit, dan moet alleen de kostenplaats van het geselecteerde gebouw gekozen kunnen worden.
              // LET OP!: Persoon hoeft niet gemandateerd te zijn voor deze kostenplaats.
              // De kostenplaats van het geselecteerde gebouw wordt meegegeven aan de FCLTkostenplaatsselector
              // zodat alleen deze kostenplaats als resultaat opgeleverd gaat worden.
              urlAdd_account.push({ urlParam: "kp_key", field: "account_bld" });
%>
                <input type="hidden" id="account_bld" name="account_bld" value="<%=mld_info.mld_kostenpl_key%>">
<%
            }
            FCLTkostenplaatsselector("account",
                                     "sgAccount",
                                     mld_info.melder_key,
                                     { kostenplaatsKey: mld_info.kostenpl_key || -1,
                                       label: (urole == "fe")?L("lcl_mld_inf_Kostenplaats"):L("lcl_mld_inf_Kostenklant"),
                                       showCustomLabel: true,
                                       extraParamField: "kmodule",
                                       extracode: "M",
                                       filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initiële waarde kan bij kostenplaatsen altijd.
                                       urlAdd: urlAdd_account,
                                       readonly: (mld_key > 0 && !this_mld.canKostChange),
                                       required: (!(mld_key > 0 && !this_mld.canKostChange)? mld_info.kpnverplicht : false)
                                     });

            if (S("show_ordernr") != 0)
            {
              RWFIELD("ordernr", L("lcl_mld_inf_Ordernr"), mld_info.mld_ordernr, {readonly: (mld_key > 0 && !this_mld.canKostChange), html: 'maxlength="30"'});
            }
          }

__Log({"TEST": {"fe":frontend, "tag": stdm_info.taggable}})
          if ( !frontend || (frontend && (stdm_info.taggable&2)==2))
          {
              var sql_tag = "SELECT mld_melding_tag_key"
                          + "     , mld_melding_tag_naam || DECODE(mld_melding_tag_datum_tot,NULL,'',' ('||TO_CHAR(mld_melding_tag_datum_tot, 'DD-MM-YYYY')||')') omschrijving"
                          + "     , mld_melding_tag_naam"
                          + "     , " + lcl.xsqla('mld_melding_tag_oms', 'mld_melding_tag_key')
                          + "     , mld_melding_tag_datum_tot"
                          + "  FROM mld_melding_tag"
                          + " WHERE (mld_melding_tag_datum_van IS NULL OR mld_melding_tag_datum_van <= TRUNC(SYSDATE))"  // denk ik
                          + "   AND mld_melding_tag_verwijder IS NULL"
                          + "   AND ins_srtdiscipline_key = " + mld_info.srtdisc_key
                          + " ORDER BY mld_melding_tag_datum_tot, mld_melding_tag_naam";
              FCLTselector("tag_key",
                                sql_tag,
                                { initKey: mld_info.tag_key
                                , initEmpty: true
                                , label: L("mld_melding_tag_naam")
                                , mobile: true
                                , titleCol: "mld_melding_tag_oms"
                                });
          }

          ROFIELD("fld", "", mld_info.remark);  // De opmerking/afhandeling die er al stond...
          RWFIELD("opmerk_forward", L("lcl_mld_note_new"), "", {name: "opmerk", multi: true, pclass: ((S("mld_forward_opm_flags") & 1) == 1? " required" : "")});

          var note_zichtbaarFE = (mld_info.fenotes == 1 || mld_info.fenotes == 3);
          // Geef keuze voor wel of niet zichtbaar voor FE
          CHB_FIELD("zichtbaarFE", "<nobr>" + L("lcl_mld_zichtbaar_FE") + "</nobr>", note_zichtbaarFE);
          // We houden het simpel: geen notificatie dmv 'actie bij melder zetten'.

          CONTROLGROUP_START();
            BUTTON((fwdType == 1 ? fwdInfo.fwdLabel : L("lcl_mld_forward_team")), {click: "mld_forward_submit()", icon: "fa-fclt-save"} );
            BUTTON(L("lcl_cancel"), {click: "mld_forward_cancel()", icon: "fa-fclt-cancel"} );
          CONTROLGROUP_END();
          IFACE.FORM_END();
%>
      </form>
<%
        CONTENT_END();
        FOOTER();
      PAGE_END();
}

if (mld_key > -1)
{
      // Info pagina met plaatsgegevens, vanuit klikken op plaats.
      //
      PAGE_START({id: "info-4-"+mld_key, dialog: true});
        HEADER({title: L("ins_srtdiscipline_alg") , back:!qrc });
        CONTENT_START();

          var sql = "SELECT COALESCE(g.alg_gebouw_adres, l.alg_locatie_adres) adres"
                  + "     , l.alg_locatie_plaats"
                  + "     , l.alg_locatie_code"
                  + "     , COALESCE(g.alg_gebouw_postcode, l.alg_locatie_postcode) postcode"
                  + "     , l.alg_locatie_omschrijving"
                  + "     , l.alg_locatie_verantw"
                  + "     , l.alg_locatie_verantw_tel"
                  + "     , o.alg_gebouw_naam"
                  + "     , o.alg_verdieping_omschrijving"
                  + "     , o.alg_ruimte_nr"
                  + "     , o.alg_ruimte_omschrijving"
                  + "     , o.alg_verdieping_key"
                  + "     , ct.cad_tekening_key"
                  + "     , o.alg_ruimte_key"
                  + "     , msd.cad_thema_key"
                  + "     , m.mld_melding_dwgx"
                  + "     , m.mld_melding_dwgy"
                  + "  FROM alg_v_onroerendgoed_gegevens o"
                  + "     , alg_locatie l"
                  + "     , alg_gebouw g"
                  + "     , mld_melding m"
                  + "     , mld_stdmelding msd"
                  + "     , (SELECT cad_tekening_key"
                  + "             , alg_verdieping_key"
                  + "          FROM cad_tekening"
                  + "         WHERE cad_tekening_verwijder IS NULL"
                  + "           AND cad_tekening_type = 'P') ct"
                  + " WHERE m.mld_alg_locatie_key = l.alg_locatie_key"
                  + "   AND o.alg_onroerendgoed_keys(+) = m.mld_alg_onroerendgoed_keys"
                  + "   AND o.alg_gebouw_key = g.alg_gebouw_key(+)"
                  + "   AND o.alg_verdieping_key = ct.alg_verdieping_key(+)"
                  + "   AND m.mld_stdmelding_key = msd.mld_stdmelding_key"
                  + "   AND m.mld_melding_key = " + mld_key;
          var oRs = Oracle.Execute(sql);
          if (!oRs.eof)
          {
            var info_params = { suppressEmpty: true };
            ROFIELD("fld", L("lcl_alg_loc_adres"),               oRs("adres").Value, info_params);
            ROFIELD("fld", L("lcl_alg_loc_plaats"),              oRs("postcode").Value+" "+oRs("alg_locatie_plaats").Value, info_params);
            ROFIELD("fld", L("lcl_estate_locatie_man_code"),     oRs("alg_locatie_code").Value, info_params);
            ROFIELD("fld", L("lcl_estate_locatie_title"),        oRs("alg_locatie_omschrijving").Value, info_params);
            ROFIELD("fld", L("lcl_estate_gebouw_man_name"),      oRs("alg_gebouw_naam").Value, info_params);
            ROFIELD("fld", L("lcl_estate_verdieping_man_descr"), oRs("alg_verdieping_omschrijving").Value, info_params);
            if (oRs("cad_tekening_key").Value)
            {
              var ruimte_params = { suppressEmpty: true, moreinfo: rooturl
                                      + "/appl/pda/plattegrond.asp?verdieping_key=" + oRs("alg_verdieping_key").Value
                                      + "&ruimte_key=" + oRs("alg_ruimte_key").Value
                                      + "&mld_key_dwgxy=" + mld_key
                                      + "&readonly=1"
                                      + (oRs("mld_melding_dwgx").Value != null && oRs("mld_melding_dwgy").Value != null
                                        ? "&caddwgx=" + oRs("mld_melding_dwgx").Value + "&caddwgy=" + oRs("mld_melding_dwgy").Value
                                        : "")
                                      + (oRs("cad_thema_key").Value > 0
                                        ? "&thema_key=" + oRs("cad_thema_key").Value
                                        : "&nothema=1") };
            }
            else
            {
              var ruimte_params = info_params;
            }
            ROFIELD("fld", L("lcl_estate_ruimte_man_nr"),           oRs("alg_ruimte_nr").Value, ruimte_params);
            ROFIELD("fld", L("lcl_estate_ruimte_man_sort"),         oRs("alg_ruimte_omschrijving").Value, info_params);
            ROFIELD("fld", L("lcl_estate_locatie_man_verantw"),     oRs("alg_locatie_verantw").Value, info_params);
            ROFIELD("fld", L("lcl_estate_locatie_man_verantw_tel"), oRs("alg_locatie_verantw_tel").Value, { suppressEmpty: true, type: "tel", phone_number: oRs("alg_locatie_verantw_tel").Value });
          }
          oRs.Close();

        CONTENT_END();
      PAGE_END();
      //
      // *****************************************************
}

if (mld_key > -1 && this_mld.canClose && action != "forward")
{
    // scherm: Afmelden melding
    PAGE_START({id: "close-3-" + mld_key, dialog: true});
      HEADER({title: L("lcl_close") + " " + subject, back: false});
      CONTENT_START();
      FORM_START("closeform", { "name": "closeform", "action": rooturl + "/appl/mld/mld_close_save.asp?mld_key=" + mld_key, "method": "POST" });
        var url_get_mld_info_ajax = "../mld/get_mld_info_ajax.asp?req_info=promptAI&mld_key=" + mld_key;
%>
        <script>
          function getAI() {
            var protected_mld_info_ajax = "<%=safe.jsstring(protectQS.create(url_get_mld_info_ajax))%>";
            var data = {
              // mld_key: mld_key, // deze zit al in protected_mld_info_ajax
              for: "afmelden"
            };
            protectRequest.dataToken(data);
            var request = $.ajax(protected_mld_info_ajax, {
              method: "POST",
              noSpinner: true,
              data: data
            });
            request.then(json => {
              if (json.success) {
                $("#stdopmerk option:disabled")
                  .removeAttr("disabled")
                  .attr("afmeldtekst", json.content)
                  .val(-2);
              }
            });
            return request;
          }
        </script>
<%
        var prefix = "";
        var oldRemark = "";
        var melder_key = -1;
        var req = false;
        var stdmld_arr = [];
        var disc_arr = [];
        var canNoti = false;

        sql = "SELECT ''"
            + "  FROM fac_srtnotificatie"
            + " WHERE fac_srtnotificatie_code = 'MLDAFM' AND fac_srtnotificatie_mode > 0";
        var oRs = Oracle.Execute(sql);
        var canSrtNoti = !oRs.eof;
        oRs.Close();

        sql = "SELECT DISTINCT std.mld_stdmelding_afmeldtext"
            + "     , mm.mld_melding_opmerking"
            + "     , sd.ins_srtdiscipline_prefix"
            + "     , std.mld_stdmelding_key"
            + "     , std.mld_stdmelding_notify"
            + "     , md.ins_discipline_key"
            + "     , mdp.mld_disc_params_notify"
            + "     , mm.prs_perslid_key"
            + "  FROM mld_melding mm"
            + "     , mld_stdmelding std"
            + "     , mld_discipline md"
            + "     , mld_disc_params mdp"
            + "     , ins_srtdiscipline sd"
            + " WHERE mld_melding_key IN (" + mld_key + ")"
            + "   AND mm.mld_stdmelding_key = std.mld_stdmelding_key"
            + "   AND std.mld_ins_discipline_key = md.ins_discipline_key"
            + "   AND md.ins_discipline_key = mdp.mld_ins_discipline_key"
            + "   AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key";
        oRs = Oracle.Execute(sql);
        while (!oRs.eof)
        {
          prefix = oRs("ins_srtdiscipline_prefix").Value || "";
          oldRemark = oRs("mld_melding_opmerking").Value;
          req = req || ((S("mld_afhandeling_required_for_close") || oRs("mld_stdmelding_afmeldtext").value == 2) && (oldRemark == null));
          stdmld_arr[stdmld_arr.length] = oRs("mld_stdmelding_key").Value;
          disc_arr[disc_arr.length] = oRs("ins_discipline_key").Value;
          melder_key = oRs("prs_perslid_key").Value;
          if (canSrtNoti && !canNoti)
          {
              canNoti = oRs("mld_disc_params_notify").Value == 1 ||
                       (oRs("mld_disc_params_notify").Value == 2 && oRs("mld_stdmelding_notify").Value == 1);
          }
          oRs.MoveNext();
        }
        oRs.Close();

        var txt = "";
        if (lastopdr)
          txt = L("lcl_mld_close_order_close_call") + "<br>";

        // Mag ik kennisbank raadplegen en standaard-antwoorden knippen/plakken
        var authFaq = (S("faq_enabled") == 1) && user.checkAutorisation("WEB_FAQFOF", true);
        var buttons =  [];
        if (authFaq && authFaq.PRSwritelevel < 9) // schrijfrechten op WEB_FAQFOF nodig
        {
          var goegel = "FcltMgr.openDetail('/appl/fac/fac_faq_search.asp?urole=bo&autosearch=1'"
                              + "+'&stdm_str='+'" + stdmld_arr.join(",") + "'"
                              + "+'&disc_key_str='+'" + disc_arr.join(",") + "'"
                              + ", '" + L("lcl_faq_kennisbank") + "') ";
          buttons.push({ icon: "fa-book", title: L("lcl_mld_paste"), action: "PasteFromClipboard()"});
          buttons.push({ icon: "fa-lightbulb", title: L("lcl_fac_filterblok"), action: goegel});
        }

          var generate_ai = ingesloten.length == 1 && (S("ai_enabled") & 4);
          if (generate_ai) {
              sql = "SELECT COUNT(*) aantal_notities"
                  + "  FROM mld_melding_note mn"
                  + "     , prs_v_perslid_fullnames_all p"
                  + " WHERE mn.prs_perslid_key = p.prs_perslid_key" // Geen outer-join want we willen hier geen tracking
                  + "   AND mld_melding_key = " + ingesloten[0];
              oRs = Oracle.Execute(sql);
              generate_ai = oRs("aantal_notities").Value > 0;
              oRs.Close();
          }

          var sql_from_t = "  FROM mld_afmeldtekst"
                         + " WHERE ((mld_stdmelding_key IN (" + stdmld_arr.join(",") + ") )"
                         + "    OR (mld_stdmelding_key IS NULL AND mld_ins_discipline_key IN (" + disc_arr.join(",") + ") )"
                         + "    OR (mld_stdmelding_key IS NULL AND mld_ins_discipline_key IS NULL))"
                         + "   AND BITAND(mld_afmeldtekst_usefor, 1) = 1";

          var sql_from_o = "  FROM mld_opdr mo"
                         + " WHERE mo.mld_melding_key = " + ingesloten[0]
                         + "   AND mo.mld_statusopdr_key in (6, 7, 9)" // status=afgemeld, verwerkt en afgerond
                         + "   AND mo.mld_opdr_opmerking IS NOT NULL";

          var sql = "SELECT SUM(aantal) aantal"
                  + "  FROM ( SELECT COUNT(*) aantal" + sql_from_t
                          + (ingesloten.length == 1
                            ? " UNION SELECT COUNT(*)" + sql_from_o
                            : ""
                            )
                          + ")";
          oRs = Oracle.Execute(sql);
          var aantal_teksten = oRs("aantal").Value + (generate_ai ? 1 : 0);
          oRs.Close();

          %>
            <script>
              var canGenerateAi = <%=generate_ai ? 1 : 0%>
              $(() => {
<%        if (generate_ai) { %>
                if ($.mobile.activePage.is($("#close-3-<%=mld_key%>"))) {
                  loadingAI = getAI(); // Hier kom je na een F5 van de afmeld-pagina, dan wil je opnieuw getAI() uitvoeren
                }
<%        } else if (S("mld_sel_single_closingtext") == 2 && aantal_teksten == 1) { %>
                PasteFromSelectbox();
<%        } %>
              });
            </script>
          <%

          if (aantal_teksten > 0)
          {
           sql = "SELECT TO_CHAR(mld_afmeldtekst_key) key"
                + "     , " + lcl.xsql('mld_afmeldtekst_naam', 'mld_afmeldtekst_key') + " textname"
                + "     , " + lcl.xsql('mld_afmeldtekst_omschrijving', 'mld_afmeldtekst_key') + " afmeldtekst"
                + "     , 2 src"
                + sql_from_t;
            if (ingesloten.length == 1)
            {
              sql += " UNION "
                   + "SELECT TO_CHAR(mo.mld_opdr_key)"
                   + "     ," + safe.quoted_sql(L("lcl_opdr_closeremark") + " /") +"|| mo.mld_opdr_bedrijfopdr_volgnr"
                   + "     , mo.mld_opdr_opmerking"
                   + "     , 1"
                   + sql_from_o
              if (generate_ai) {
                sql += " UNION "
                     + "SELECT '##DISABLED##'"
                     + "     , " + safe.qL("lcl_mld_ai_generated")
                     + "     , " + safe.quoted_sql(I("fa-spinner-third fa-spin fa-lg")) // Wordt onload gevuld
                     + "     , 3"
                     + "  FROM DUAL";
              }
            }
            sql += " ORDER BY 4,2";

            FCLTselector("stdopmerk",
                          sql,
                          { label: L("lcl_mld_inf_std_opm"),
                            initKey: -1,
                            emptyOption: (S("mld_sel_single_closingtext")==2 && aantal_teksten==1 && !generate_ai ? null : ""),
                            extraParamValue: "afmeldtekst",
                            onChange: "PasteFromSelectbox()"});
          }

          // tekstveld waarin informatie over de afhandeling vermeld kan worden
          if (ingesloten.length == 1 && oldRemark)
          {
              %><div><%=safe.html(oldRemark)%></div><%
          }

          RWFIELD("opmerk_close", L("lcl_mld_finish_close") + " " + (mld_info.prefix || "") + mld_key, "", {name: "opmerk", multi: true, disabled: false, pclass: "fldtxt" + (req?" required":"")});

          if (canNoti)
          {
            var sql = "SELECT CASE"
                    + "       WHEN prs_perslid_systeemadres IS NOT NULL"
                    + "       THEN 1"
                    + "       ELSE 0"
                    + "       END hassysteemadres"
                    + "  FROM prs_perslid"
                    + " WHERE prs_perslid_key = " + melder_key;
            oRs = Oracle.Execute(sql);
            var hassysteemadres = oRs("hassysteemadres").Value;
            oRs.Close();
            if (hassysteemadres)
            { // bij systeemadres altijd notificeren; geen checkbox tonen.
%>            <input type="hidden" id="noti_caller" name="noti_caller" value="1">
<%
            }
            else
            { // Geen systeemadres dus mag kiezen. Zet wel een default.
              CHB_FIELD("noti_caller", L("lcl_mld_noti_caller"), (S("mld_close_noti_default_off") == 1 ? 0 : 1) );
            }
          }

          if (canCloseOpdr.length)
          { %>
            <tr>
              <td colspan="2">
                <% CHB_FIELD("opdr_close", canCloseOpdr.length + L("lcl_mld_ord_close_all"), S("mld_close_opdr_default")); %>
              </td>
            </tr>
<%        }
          if (canCloseCtr > 0)
          { %>
            <tr>
              <td colspan="2">
                <% CHB_FIELD("ctr_close", canCloseCtr > 1? canCloseCtr + L("lcl_mld_ctr_close_all_n") : L("lcl_mld_ctr_close_all_1"), 0, { html: "onChange='ctrcloseToggler(this)'" }); %>
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <div id="inscontrolemode" style="display: none">
                  <table>
<%                  for (var i = 0; i < controleModeArray.length; i++)
                    { // Maximaal 3 types.
                      var sctype;
                      switch (controleModeArray[i])
                      {
                        case 1:  sctype = L("lcl_ins_srtcontrole_insp"); break;
                        case 2:  sctype = L("lcl_ins_srtcontrole_repl"); break;
                        case 3:  sctype = L("lcl_ins_srtcontrole_cert"); break;
                      }

                      sql = "SELECT ins_controlemode_key"
                          + "     , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key')
                          + "  FROM ins_controlemode"
                          + "  WHERE ins_srtcontrole_type = " + controleModeArray[i]
                          + "    AND ins_controlemode_success = 1"
                          + "  ORDER BY 2";

                      // Methode is voor de status Afgemeld(5) en Historie/Verwerkt(6) altijd ingevuld.
                      // Required wordt gezet als de selectbox zichtbaar wordt.
                      FCLTselector("sel_controlemode" + controleModeArray[i],
                                   sql,
                                   { label: L("lcl_ins_controle_mode") + " " + sctype,
                                     initKey: -1,
                                     emptyOption: L("lcl_select_controlemode"),
                                     selectjustone: true
                                   });
                    }
%>                </table>
                </div>
              </td>
            </tr>
<%        }

          var prsautlevel = (this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel);
          // Als ik geen PRS-schrijfrechten op de melding heb, maar ik ben wel blokbehandelaar, dan mag ik gewoon iedereen uit mijn team kiezen. Niet optimaal, maar goed genoeg voor nu
          if ((!prsautlevel || prsautlevel == 9) && this_mld.canChangeKenmerkBlok) {
            prsautlevel = -1;
          }

          // De verplichte afmeld (close) kenmerken tonen bij het afmelden. Vooralsnog worden de andere verplichte kenmerken niet getoond.
          generateFlexKenmerkBlock({stdm_arr     : [stdm_key],
                                    mld_key      : mld_key,
                                    close        : true,
                                    mobile       : true,
                                    prs_key: user_key,
                                    act_key: mld_info.act_key,
                                    reado: (mld_key > 0 && !(this_mld.canFlexChange || this_mld.canChangeKenmerkBlok)), // Bij alleen canChangeKenmerkBlok rechten dan ook check in isReadonly.
                                    canFlexChange: this_mld.canFlexChange,
                                    showConfidential : this_mld.canViewConfidential,
                                    melder_key: mld_info.melder_key,
                                    srtdisc: S("mld_processing_group_all")? [] : [mld_info.srtdisc_key],
                                    disc: mld_info.disc_key,                                                                            // Initiele waarde primaire Vakgroep/Behandelteam.
                                    prsautlevel: prsautlevel,
                                    show_alg: mld_info.show_alg,
                                    loc_key: mld_info.loc_key,
                                    this_mld: this_mld
                                  });

          CONTROLGROUP_START();
            if (opdr_opm != "")
              BUTTON(L("lcl_mld_opm_paste"), {id: "opmpaste", click: "mld_opmpaste();", icon: "fa-clipboard"});
            BUTTON(L("lcl_close"), {click: "mld_close_submit();", icon: "fa-flag-checkered"});
            BUTTON(L("lcl_cancel"), {click: "mobile.changePage();", icon: "fa-fclt-cancel"} );
          CONTROLGROUP_END();
          IFACE.FORM_END();
%>
    </form>
<%
      CONTENT_END();
    PAGE_END();
}

if (mld_key > -1 && this_mld.canAccept && action != "forward")
{
  var autfunction = "";
  if (fronto)
    autfunction = "WEB_MLDFOF";
  else if (backo)
    autfunction = "WEB_MLDBOF";
  else
    autfunction = "WEB_MLDUSE";

  var transitParam = buildTransitParam(["mld_key", "multi", "maybeDouble", "urole", "opmerk"]);

  // Geen autfunction bepaald. Je komt bij FIN niet binnen met een bepaalde rol (urole).
  // Alleen PRSreadlevel en PRSwritelevel van belang want fac_functie_min_level = 7 (lezen en schrijven organisatie)
  var authparamsMLDBOF = user.checkAutorisation("WEB_MLDBOF", true);
  var authparamsMLDBO3 = user.checkAutorisation("WEB_MLDBO3", true);
  var authparamsMLDFOF = user.checkAutorisation("WEB_MLDFOF", true);

  var hasBehandelteam = 0;
  var ingesloten = [];

  var this_mld  = mld.func_enabled_melding(mld_key); // Wat heb ik zoal aan rechten op deze specifieke melding
  var mld_info  = mld.mld_melding_info(mld_key);
  var this_stdm = mld.mld_stdmeldinginfo(mld_info.stdm_key);

  var maybeDouble = (!mld_info.parent_key && (this_stdm.doublecheck == 2 || this_stdm.doublecheck == 3));
  // Geen child melding en bulk actie mag de maybeDouble meldingen niet op geaccepteerd zetten
  if (this_mld.canAccept && !mld_info.parent_key && !(multi && maybeDouble))
  {
    ingesloten.push(mld_key);
    hasBehandelteam += (this_stdm.srtgroep & 4 ? 1 : 0);
  }

  user.anything_todo_or_abort(ingesloten.length > 0); // We klagen niet over enkele wel en enkele niet
  lcl.set_dialect(mld_info.srtdisc_key, "MLD_SRTDISCIPLINE_KEY");
  // scherm: Accepteren melding
  PAGE_START({id: "accp-4-" + mld_key, dialog: true})
    HEADER({title: L("lcl_accept") + " " + subject, back: false});
    CONTENT_START();

%>
    <script type="text/javascript">

      $(function()
      {
        $("#opmerk_accept").focus();
      });

      async function mld_accept_submit()
      {
        if (!await validateForm("u2"))
          return false;

        $.post($("form[name=acceptform]")[0].action, $("[name=acceptform]").serialize() + "<%=transitParam%>",
        McltCallbackAndThenAlways(function() {
          window.location.href = "<%=rooturl%>/appl/pda/melding.asp?melding=1&mld_key=" + "<%=mld_key%>";
        }), "json");
        return true; // disable button
      }

      function onChangeBehandelteam(behandelteam_key)
      {
        if (typeof sgBehandelaar2 != "undefined")
        {
          if (behandelteam_key == -1) // Efficiënter
            sgBehandelaar2.setValue(-1, "", false, false);
          else
            sgBehandelaar2.setValue($("#sBehandel2").val(), $("#sBehandel2_show").val(), true, true);
        }
      }

      function mld_cancel()
      {
        window.history.back();
      }

    </script>
<%
  FORM_START("acceptform", { "name": "acceptform", "action": rooturl + "/appl/mld/mld_accept_save.asp", "method": "POST" });
      var mld_stdm = "";
      var prefix = "";
      var oldRemark = "";
      var ins_srtdiscipline_key = -1;
      var ins_discipline_omschrijving = "";
      var mld_ins_discipline_key = -1;
      var req = false;
      if (ingesloten.length == 1)
      {
        sql = "SELECT sm.mld_ins_discipline_key"
            + "     , sm.mld_stdmelding_key"
            + "     , m.mld_melding_opmerking"
            + "     , m.mld_ins_discipline_key"
            + "     , m.mld_melding_behandelaar2_key"
       		  + "     , sd.ins_srtdiscipline_key"
       		  + "     , " + lcl.xsqla('md.ins_discipline_omschrijving', 'md.ins_discipline_key')
            + "     , sd.ins_srtdiscipline_prefix"
            + "  FROM mld_melding m"
            + "     , mld_stdmelding sm"
            + "     , mld_discipline md"
            + "     , ins_srtdiscipline sd"
            + " WHERE mld_melding_key = " + ingesloten[0]
            + "   AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
            + "   AND sm.mld_ins_discipline_key = md.ins_discipline_key"
            + "   AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key";
        oRs = Oracle.Execute(sql);

        mld_stdm = oRs("mld_stdmelding_key").value;
        prefix = oRs("ins_srtdiscipline_prefix").value || "";
        oldRemark = oRs("mld_melding_opmerking").value;
        ins_discipline_omschrijving = oRs("ins_discipline_omschrijving").value;
        ins_srtdiscipline_key = oRs("ins_srtdiscipline_key").value;
        mld_ins_discipline_key = oRs("mld_ins_discipline_key").value;
        mld_melding_behandelaar2_key = oRs("mld_melding_behandelaar2_key").value;

        oRs.close();
      }

      if (!hasBehandelteam)
      {
        // Vakgroep
        RWFIELD("flddisc", L("lcl_vakgroup"), (prefix ? prefix + "-" : "") + ins_discipline_omschrijving, { readonly: true })

        // <!-- Meldingen (Discipline) -->
        FCLTstdmeldingselector("stdm", "sgStdm", { label: L("lcl_complain"),
                                                   perslidKey: user_key,
                                                   autfunctionKey: -1, // toch readonly
                                                   stdmelding_key: mld_stdm,
                                                   readonly: true } );
      }
      else if (hasBehandelteam)
      {
        // Behandelteam
        FCLTdisciplineselector("mld_ins_discipline",
                               "sgDisc",
                               { label: L("mld_processing_group"),
                                 disc_key: mld_ins_discipline_key,
                                 module: "MLDB",
                                 perslidKey: user_key,
                                 autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                 srtdisc_key: (S("mld_processing_group_all") ? -1 : ins_srtdiscipline_key),
                                 onChange: "onChangeBehandelteam"
                               });
      }

      // Behandelaar
      if (this_mld.canBOwrite || this_mld.canFOwrite)
      {
%>
        <input type="hidden" id="prs_key"  name="prs_key"  value="<%=mld_info.melder_key%>">
        <input type="hidden" id="disc_key" name="disc_key" value="<%=mld_info.disc_key%>">
<%
        var urlAdd = [{urlParam: "prs_key", field: "prs_key", init: mld_info.melder_key}];

        if (mld_info.show_alg)
        {
%>
        <input type="hidden" id="loc_key"  name="loc_key"  value="<%=mld_info.loc_key%>">
<%
          urlAdd.push({urlParam: "loc_key", field: "loc_key", init: mld_info.loc_key});
        }

        if (!hasBehandelteam)
        {
          urlAdd.push({urlParam: "disc_key", field: "disc_key", init: mld_info.disc_key});

          FCLTpersoonselector("sBehandel",
                              "sgBehandelaar",
                              { perslidKey: (mld_info.behandel_key > 0 ? mld_info.behandel_key : (this_mld.canVakgBOFwrite ? user_key : -1)),
                                label: L("lcl_mld_behandelaar"),
                                autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                urlAdd: urlAdd,
                                readonly: !this_mld.canAccept,
                                filtercode: (mld_info.mld_status == 0 ? "BEHF" : "BEHB")
                              });
        }
        else if (hasBehandelteam)
        {
          urlAdd.push({urlParam: "disc_key", field: "mld_ins_discipline", init: mld_info.mld_ins_discipline_key});

          FCLTpersoonselector("sBehandel2",
                              "sgBehandelaar",
                              { idadd: 2,
                                perslidKey: mld_melding_behandelaar2_key,
                                label: L("lcl_mld_processor"),
                                autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                urlAdd: urlAdd,
                                readonly: !this_mld.canAccept,
                                filtercode: (mld_info.mld_status == 0 ? "BH2F" : "BH2B")
                              });
        }
      }
      // Reden accepteren
%>
        <tr><td class="label"><label for="opmerk_accept"></label></td>
            <td ><%=safe.html(oldRemark)%></td>
        </tr>
<%
        RWFIELD("opmerk_accept", L("lcl_mld_note"), "", {name: "opmerk", multi: true, disabled: false, pclass: "fldtxt" + (req?" required":"")});

      CONTROLGROUP_START();
        BUTTON(L("lcl_accept"), {click: "mld_accept_submit();", icon: "fa-fclt-save"});
        BUTTON(L("lcl_cancel"), {click: "mobile.changePage();", icon: "fa-fclt-cancel"} );
      CONTROLGROUP_END();

      IFACE.FORM_END();
%>
  </form>
<%
    CONTENT_END();
  PAGE_END();
}

// scherm: Instemmen met melding
PAGE_START({id: "minstem-5-" + mld_key, dialog: true})
  HEADER({title: L("lcl_instem") + " " + subject, back: false});
  CONTENT_START();

  // TODO

  CONTENT_END();
PAGE_END();


if (mld_key > -1 && this_mld.canReject && action != "forward")
{
  var transitParam = buildTransitParam(["mld_key", "urole", "opmerk"]);

  // Geen autfunction bepaald. Je komt bij FIN niet binnen met een bepaalde rol (urole).
  // Alleen PRSreadlevel en PRSwritelevel van belang want fac_functie_min_level = 7 (lezen en schrijven organisatie)
  var authparamsMLDBOF = user.checkAutorisation("WEB_MLDBOF", true);
  var authparamsMLDBO3 = user.checkAutorisation("WEB_MLDBO3", true);
  var authparamsMLDFOF = user.checkAutorisation("WEB_MLDFOF", true);

  var ingesloten = [];

  // scherm: Afwijzen melding
  PAGE_START({id: "mrej-5-" + mld_key, dialog: true})
    HEADER({title: L("lcl_reject") + " " + subject, back: false});
    CONTENT_START();
      FORM_START("rejectform", { "name": "rejectform", "action": rooturl + "/appl/mld/mld_reject_save.asp?mld_key=" + mld_key });
%>
    <script type="text/javascript">

      $(function()
      {
        $("#opmerk_reject").focus();
      });

      async function mld_reject_submit()
      {
        if (!await validateForm("u2"))
          return false;

        $.post( $("form[name=rejectform]")[0].action
              , $("[name=rejectform]").serialize() + "<%=transitParam%>"
              , McltCallbackAndThenAlways(mld_reject_callback)
              , "json"
              );
        return true; // disable button
      }

      function mld_reject_callback(data)
      {
          // mobile kan slechts 1 melding per keer afwijzen
          if (data.reject_arr[0]?.inspect)
          {
              var insdata = data.reject_arr[0].inspect;
                protectRequest.dataToken(insdata);
                //jQuery.ajaxSetup({async: false});
                $.post( "../ins/ins_inspect_save.asp"
                      , insdata
                      , mld_reject_close
                      , "json"
                      );
                //jQuery.ajaxSetup({async: true});
          }
          else
          {
              mld_reject_close(data);
          }
      }

      function mld_reject_close(data)
      {
          window.location.href = "<%=rooturl%>/appl/pda/melding.asp?melding=1&mld_key=" + "<%=mld_key%>";
      }

      function mld_cancel()
      {
        window.history.back();
      }

    </script>

        <input type="hidden" name="urole" value="<%=mld_key > 0? "bo" : "fe"%>">
        <input type="hidden" name="stdm" value="<%=mld_info.stdm_key%>">
        <input type="hidden" name="disc" value="<%=mld_info.disc_key%>">
<%
        RWFIELD("disc", L("lcl_vakgroup"), (mld_info.prefix ? mld_info.prefix + "-" : "") + mld_info.ins_discipline_omschrijving, {readonly: true})
        ROFIELD("remark", "", mld_info.remark, {multi: true, suppressEmpty: true});

        RWFIELD("opmerk_reject", L("lcl_mld_inf_Opmerking"), "", {name: "opmerk", multi: true, disabled: false, pclass: "fldtxt" + (req?" required":"")});

        // De verplichte afwijs (reject) kenmerken tonen bij het afwijzen. Vooralsnog worden de andere verplichte kenmerken niet getoond.
        generateFlexKenmerkBlock({stdm_arr    : [stdm_key],
                                  mld_key     : mld_key,
                                  cancel      : true,
                                  mobile      : true,
                                  nameprefix  : "mrej_5_",
                                  serie       : mld_key > 0 ? mld_key : 0,
                                  extraserie  : true,
                                  canFlexChange: this_mld.canFlexChange,
                                  showConfidential : this_mld.canViewConfidential,
                                  melder_key: mld_info.melder_key,
                                  srtdisc: S("mld_processing_group_all")? [] : [mld_info.srtdisc_key],
                                  disc: mld_info.disc_key,                                                                            // Initiele waarde primaire Vakgroep/Behandelteam.
                                  prsautlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                  show_alg: mld_info.show_alg,
                                  loc_key: mld_info.loc_key,
                                  this_mld: this_mld
                                });

      CONTROLGROUP_START();
        BUTTON(L("lcl_reject"), {click: "mld_reject_submit();", icon: "fa-times"});
        BUTTON(L("lcl_cancel"), {click: "mobile.changePage();", icon: "fa-fclt-cancel"} );
      CONTROLGROUP_END();

      IFACE.FORM_END();
%>
  </form>
<%
    CONTENT_END();
  PAGE_END();
}

if (mld_key > -1 && this_mld.canReopen && action != "forward")
{
  // scherm: Heropenen melding
  PAGE_START({id: "reopen-6-" + mld_key, dialog: true});
    HEADER({title: L("lcl_reopen") + " " + subject, back: false});
    CONTENT_START();
      FORM_START("reopenform", { "name": "reopenform", "action": rooturl + "/appl/mld/mld_reopen_save.asp?mld_key=" + mld_key });
%>
    <script type="text/javascript">

      $(function()
      {
        $("#opmerk_reopen").focus();
      });

      async function mld_reopen_submit()
      {
        if (!await validateForm("u2"))
          return false;

        $.post( $("form[name=reopenform]")[0].action
              , $("[name=reopenform]").serialize() + "<%=transitParam%>"
              , McltCallbackAndThenAlways(function() {
                  window.location.href = "<%=rooturl%>/appl/pda/melding.asp?melding=1&mld_key=" + "<%=mld_key%>";
                })
              , "json"
              );
        return true; // disable button
      }

      function mld_cancel()
      {
        window.history.back();
      }

    </script>

        <input type="hidden" name="urole" value="<%=mld_key > 0? "bo" : "fe"%>">
        <input type="hidden" name="stdm" value="<%=mld_info.stdm_key%>">
        <input type="hidden" name="disc" value="<%=mld_info.disc_key%>">
<%
        ROFIELD("disc", L("lcl_vakgroup"), (mld_info.prefix ? mld_info.prefix + "-" : "") + mld_info.ins_discipline_omschrijving, {readonly: true})
        ROFIELD("remark", "", mld_info.remark, {multi: true, suppressEmpty: true});

        RWFIELD("opmerk_reopen", L("lcl_mld_note"), "", { name: "opmerk", multi: true, disabled: false, pclass: "fldtxt required" });

      CONTROLGROUP_START();
        BUTTON(L("lcl_reopen"), {click: "mld_reopen_submit();", icon: "fa-unlock"});
        BUTTON(L("lcl_cancel"), {click: "mobile.changePage();", icon: "fa-fclt-cancel"} );
      CONTROLGROUP_END();

      IFACE.FORM_END();
%>
  </form>
<%
    CONTENT_END();
  PAGE_END();
}

if (mld_key > -1 && this_mld.canContinue && action != "forward")
{
  // scherm: vervolgmeldingen
  function fncolHeader(oRs)
  {
      var txt = oRs("item").Value;
      var hdr_status = (    oRs("status_key").Value != 0
                         && oRs("status_key").Value != 4
                         && oRs("status_key").Value != 7
                       ? status.getmldstatustext(oRs("status_key").Value)
                       : ""
                       );

      txt = "<span>" + safe.html(txt) + "</span><span class='cs1'>"
          + (oRs("mobile_detail").Value || "")
          + "</span>";
      if (hdr_status)
      {
          txt = "<span class='n2'>(" + hdr_status + ") </span>" + txt;
      }

      return txt;
  }

  function fncolLink(oRs)
  {
      var url = "../pda/melding.asp?mld_key=" + oRs("item_key").Value;
      return url;
  }

  function fncolContent(oRs, thisModule)
  {
      var result = ( oRs("mld_melding_onderwerp").Value
                   ? "<span class='subject'>" + safe.html(oRs("mld_melding_onderwerp").Value)+ "</span>"
                   : toDateTimeString(oRs("datum").Value, false, false, true)
                   )
                 + ( oRs("mld_melding_omschrijving").Value
                   ? "<div class='listbodytext'>" +safe.html(shorttxt(oRs("mld_melding_omschrijving").Value, S("rs_mobile_maxchar"))) + "</div>"
                   : ""
                   );
      return result;
  }

  PAGE_START({id: "continue-7-" + mld_key, dialog: true});
%>
    <script type="text/javascript">
      function vervolg_melding()
      {
        var purl = "melding.asp?mld_key=-1&urole=fo&mld_continue=1&start_key=<%=mld_key%>";
        window.location.href = purl;
      }
    </script>
<%
    HEADER({title: L("lcl_mld_continuation_mld") + " " + subject, back: false});
    CONTENT_START();
      CONTAINER_START()
        BUTTON(L("lcl_add"), {click: "vervolg_melding()", icon: "fa-plus" });
      CONTAINER_END();

      var sql = "SELECT isd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key)  item"
              + "     , m.mld_melding_key                                            item_key"
              + "     , m.mld_melding_onderwerp"
              + "     , m.mld_melding_omschrijving"
              + "     , m.mld_melding_datum                                          datum"
              + "     , m.mld_melding_status                                         status_key"
              + "     , id.ins_discipline_omschrijving                               mobile_detail"
              + "     , COALESCE(m.prs_perslid_key_voor, m.prs_perslid_key)          prs_perslid_key"
              + "  FROM mld_melding       m"
              + "     , mld_stdmelding    sm"
              + "     , ins_srtdiscipline isd"
              + "     , ins_tab_discipline id"
              + " WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key"
              + "   AND sm.mld_ins_discipline_key = id.ins_discipline_key"
              + "   AND id.ins_srtdiscipline_key = isd.ins_srtdiscipline_key"
              + "   AND m.mld_melding_start_key = " + mld_key
              + " ORDER BY item_key DESC";

      var rst = new ResultsetTable({ sql: sql
                                   , keyColumn: "item_key"
                                   , linkColumn: fncolLink
                                   , headerColumn: fncolHeader
                                   , contentColumn: fncolContent
                                   , ID: "mld_list_m"
                                   , showAll: true
                                   , noSearch: false
                                   , layout: "card"
                                   });
      var cnt = rst.processResultset();
    CONTENT_END();
    FOOTER();
  PAGE_END();
}

  // page double calls
  PAGE_START({id: "mdbl"})
    HEADER({title: L("lcl_mld_save_new_call") + " " + subject, back: false});
    CONTENT_START();
      FORM_START("doubleform", { "name": "doubleform" });
      IFACE.FORM_END();
%>
  </form>
<%
    CONTENT_END();
  PAGE_END();
PDA_PAGE_END(); %>
    </body>
</html>
<% ASPPAGE_END();
%>
