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

    File:           mld_edit_melding.asp
    Description:    Muteerscherm voor meldingen
                    Merk op dat het voor zowel toevoegen als wijzigen gebruikt wordt.
    Parameters:     mld_key: key van bestaande melding of -1 voor nieuw
                    mld_continue: 1 betekent vervolgmelding, mld_key is dan de bronmelding en wordt dan -1
                    mld_copy: 1 betekent kopie, mld_key is dan de bronmelding en wordt dan -1

    Context:
    Note:           De lcl-textcontextswitcher is srtdisc=ins_srtdiscipline_key
                    Deze is dus verplicht dus kan lcl.set_dialect worden aangeroepen.

*/

var multi = false;
var isVervolgmelding = (getQParamInt("mld_continue", 0) == 1);
if (isVervolgmelding)
  var mld_key_arr = getQParamIntArray("mld_key");
else
  var mld_key = getQParamInt("mld_key", -1);
var LOCKED_USER_OK = { "xmlnode": "melding", "key": isVervolgmelding ? mld_key_arr[0] : mld_key };
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/afdelingselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/objectselector.inc" -->
<!-- #include file="../Shared/adresselector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/disciplineselector.inc" -->
<!-- #include file="../Shared/stdmeldingselector.inc" -->
<!-- #include file="../Shared/referentieselector.inc" -->
<!-- #include file="../prs/prs.inc" -->
<!-- #include file="mld_flexkenmerk.inc" -->
<!-- #include file="mld.inc" -->

<%
FCLTHeader.Requires({ plugins: ["suggest", "jQuery", "kenmerk"],
                      js: ["../mld/mld_edit_melding.js", "../mld/mld.js", "../fac/faq.js"] })

if (isVervolgmelding)
{
  var cont_mld_key = -1;
  var cont_stdmelding_key = -1;
  var cont_srtdisc_key = -1;
  if (mld_key_arr.length > 1)
  {
    var tobecontinued = 0;
    var ingesloten = [];
    var cont_mld_rights;
    var cont_mld_info;
    // Bepaal de meldingen in deze selectie die ook echt vervolgd kunnen of mogen worden.
    for (var i = 0; i < mld_key_arr.length; i++)
    {
      cont_mld_rights = mld.func_enabled_melding(mld_key_arr[i]); // Wat heb ik zoal aan rechten op deze specifieke melding
      cont_mld_info = mld.mld_melding_info(mld_key_arr[i]);
      lcl.set_dialect(cont_mld_info.srtdisc_key, "MLD_SRTDISCIPLINE_KEY");
      if (cont_mld_rights.canContinue && !cont_mld_info.parent_key) // Geen child melding
      {
        if (ingesloten.length === 0)
        {
          cont_mld_key = mld_key_arr[i];
          cont_stdmelding_key = cont_mld_info.stdm_key;
          cont_srtdisc_key = cont_mld_info.srtdisc_key;
        }
        ingesloten.push(mld_key_arr[i]);
        tobecontinued++;
      }
    }
    // De laatst gebruikte set_dialect uit de for-lus geldt nu voor de onderstaande code.
    user.anything_todo_or_abort(tobecontinued > 0); // We klagen niet over enkele wel en enkele niet
    multi = tobecontinued > 1;
    if (multi)
      var mld_key = -1; // Nieuwe melding aanmaken die straks als parent voor de meegegeven child meldingen fungeert.
    else
      var mld_key = ingesloten[0];
  }
  else
  {
    // Maar één enkele melding om te vervolgen
    var mld_key = mld_key_arr[0];
    cont_mld_key = mld_key_arr[0];

    var cont_mld_info = mld.mld_melding_info(cont_mld_key);
    cont_stdmelding_key = cont_mld_info.stdm_key;
    cont_srtdisc_key = cont_mld_info.srtdisc_key;
  }

  if (getQParamInt("srtdisc") != cont_srtdisc_key)
      mld_key = -1;
}

// AUTORISATIEPARAMETERS
var urole = getQParamSafe("urole");
var fronto = urole == "fo";
var backo  = urole == "bo";
var minfo  = urole == "mi";
var frontend = (!fronto && !backo && !minfo);

var autfunction = '';
if (fronto)
  autfunction = 'WEB_MLDFOF';
else if (minfo)
  autfunction = 'WEB_MLDBAC';
else if (backo)
  autfunction = 'WEB_MLDBOF';   // twijfel - PF
else
  autfunction = 'WEB_MLDUSE';

var authparams = user.checkAutorisation(autfunction); // Dit is nog ongeacht de melding

var ins_key = getQParamInt("ins_key", -1);    // Nieuwe melding op dit object
var fromkb  = getQParamInt("fromkb", 0) == 1; // Ik kom vanuit kennisbank

var meldbron_key    = getQParamInt("meldbronkey", -1);
var deelsrtcont_key = getQParamInt("deelsrtcont_key", -1);  // Nieuwe melding bij deze taak
var mld_grouped_key_arr = getQParamKeyArray("mld_grouped_key_arr", []); // Nieuwe melding voor deze gegroepeerde meldingen
var start_key       = getQParamInt("start_key", -1);
var default_prio    = getQParamInt("default_prio", -1); // Afwijkende prioriteit (vanaf het menu meegegeven)
var ref_key         = getQParamInt("ref_key", -1);      // In Case Of a new call for a contract
var ref_type        = getQParam("ref_type", "");        // In Case Of a new call for a contract
// Save initial reference name
var lreferenceName = "";
if (ref_key > -1)
    lreferenceName = getReferenceNameReferentie(ref_key, ref_type);

var isCopy = getQParamInt("mld_copy", 0) == 1; // <- Alleen bij nieuwe kopieen
var bron_mld_key = -1;
// Bij een vervolgmelding moet er ook data worden overgenomen van de orginele melding, als het hetzelfde vakgroeptype betreft, evenals bij 'isCopy'
// Bronmelding = de 'originele' melding (X) waar deze nieuwe melding (Y) haar vooringevulde data vandaan haalt (Y = kopie of vervolgmelding)
var hasBronmelding = isCopy || (isVervolgmelding && mld_key > -1);
var useBronmelding = hasBronmelding && !multi;
if (useBronmelding) {
  bron_mld_key = mld_key;
  mld_key = -1;
}

var mld_defaultstdmelding = -1;
var disc_key = -1;
var withFutureRes = false;
if (mld_key > 0)
{
  var this_mld_rights = mld.func_enabled_melding(mld_key); // Wat mag ik zoal op deze melding
  // Ik moet in ieder geval kunnen wijzigen in de edit mode.
  // Als ik alleen canChangeKenmerkBlok rechten heb mag ik alleen de kenmerken in het toegewezen kenmerk blok wijzigen. De algemene kenemerken mogen dan niet gewijzigd worden.
  // Daarom heb je bij de bepaling van de readonly parameters altijd this_mld_rights.canChange rechten nodig.
  // Alleen bij bestaande meldingen kun je canChangeKenmerkBlok rechten hebben. Bij nieuwe meldingen heb je dus canChange rechten.
  user.auth_required_or_abort(this_mld_rights.canChange || this_mld_rights.canChangeKenmerkBlok);
}
else // Nieuwe melding
{
  var srtdisc_key   = getQParamInt("srtdisc");            // Deze is gegarandeerd
  var this_mld_rights  = mld.func_enabled_mld(srtdisc_key, "S"); // Wat mag ik zoal op een nieuwe melding
  // Liefst wil ik hier urole afhankelijk zijn maar dan is straks FCLTdisciplineselector misschien wel leeg en zijn we nog verder van huis
  user.auth_required_or_abort(urole == "fe"? this_mld_rights.canFEwrite : this_mld_rights.canFOwrite); // Dit is nog ongeacht de melding

  var def_aanvrager_key = getQParamInt("prs_key", -1);
  var act_key = getQParamInt("act_key", -1);  // fac_activiteit_key voor geplande meldingen.
  var act_oms = "";
  if (act_key > 0)
  {
    var sql = "SELECT fac_activiteit_omschrijving"
            + "  FROM fac_activiteit"
            + " WHERE fac_activiteit_key = " + act_key;
    oRs = Oracle.Execute(sql);
    act_oms = oRs("fac_activiteit_omschrijving").Value;
    oRs.Close();
  }
  var mld_defaultstdmelding_key   = getQParamInt("mld_defaultstdmelding", -1);
  var mld_ins_discipline_key  = getQParamInt("mld_ins_discipline_key", -1);
  var mld_omschr    = getQParam("txt" , "");
  var mld_onderwerp = getQParam("onderwerp" , act_oms);
  var disc_key  = getQParamInt("disc", -1);
  var isurl_disc = (disc_key != -1);
  var loc_key   = getQParamInt("loc_key", -1);
  var bld_key   = getQParamInt("bld_key", -1);
  var flr_key   = -1;
  var room_key  = -1;
  var einddatum = new Date();
  var sql = "SELECT COUNT (*) cnt"
          + "  FROM mld_stdmelding stdm, mld_discipline md "
          + " WHERE     stdm.mld_ins_discipline_key = md.ins_discipline_key "
          + "       AND stdm.mld_stdmelding_verwijder IS NULL "
          + "       AND md.ins_discipline_verwijder IS NULL "
          + "       AND mld_stdmelding_thirdparty = 0 "
          + "       AND md.ins_srtdiscipline_key = " + srtdisc_key;
  var oRs = Oracle.Execute(sql);
  var lAllThirdparty = (oRs("cnt").Value == 0);
  oRs.close();

  var res_key = null;
  var rsv_ruimte_volgnr = null;
  var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1);
  var cnt_key = getQParamInt("cnt_key", -1);
  if (rsv_ruimte_key > 0)
  {
    var sql = "SELECT COALESCE(rr.alg_ruimte_key, arg.alg_ruimte_key) alg_ruimte_key"
            + "     , arg.alg_ruimte_aanduiding"
            + "     , ogb.alg_locatie_key"
            + "     , ogb.alg_gebouw_key"
            + "     , ogb.alg_verdieping_key"
            + "     , rr.res_rsv_ruimte_van"
            + "     , rr.res_reservering_key"
            + "     , rr.res_rsv_ruimte_volgnr"
            + "     , rr.res_rsv_ruimte_contact_key"
            + "  FROM res_rsv_ruimte rr"
            + "     , res_ruimte_opstelling ro"
            + "     , res_v_alg_ruimte_gegevens arg"
            + "     , alg_v_onrgoed_boom ogb"
            + " WHERE rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)"
            + "   AND ro.res_ruimte_key = arg.res_ruimte_key(+)"
            + "   AND COALESCE(rr.alg_ruimte_key, arg.alg_ruimte_key) = ogb.alg_ruimte_key"
            + "   AND res_rsv_ruimte_key = " + rsv_ruimte_key
            + " ORDER BY arg.alg_ruimte_aanduiding";
    oRs = Oracle.Execute(sql);
    loc_key = oRs("alg_locatie_key").Value;
    bld_key = oRs("alg_gebouw_key").Value;
    flr_key = oRs("alg_verdieping_key").Value;
    room_key = oRs("alg_ruimte_key").Value;
    var res_begin = new Date(oRs("res_rsv_ruimte_van").Value);
    einddatum = (res_begin < new Date()? new Date() : res_begin); // Einddatum melding is begintijd reservering.
    res_key = oRs("res_reservering_key").Value;
    rsv_ruimte_volgnr = oRs("res_rsv_ruimte_volgnr").Value;
    withFutureRes = res_begin > new Date();
    contact_key = oRs("res_rsv_ruimte_contact_key").Value;
  }
}

// Default person for flexfields, can be used from deeplink (e-mail notification)
var def_kenmerk_link_key = getQParamInt("def_kenmerk_link_key", -1);
// Is the default from cust.inc overruled by the caller?
var perslidkey = (def_kenmerk_link_key == -1 ? user_key : def_kenmerk_link_key);
var txtreado = (getQParamInt("txtreado" , 0) == 1); // Als txtreado gedefinieerd is, dan is het omschrijving veld niet te editten

// LOCALE VARIABELEN
var lBestaandeMelding = (mld_key != -1);
var lNieuweMelding = !lBestaandeMelding;

var showBehandelBlock = lBestaandeMelding;  // Dan altijd
/*
Does there exist;
1: A vakgroep which can be a team
2: A vakgroep which can have a team
*/
var sql = "SELECT 1"
        + "  FROM DUAL"
        + " WHERE EXISTS"
        + "           (SELECT 1"
        + "              FROM mld_disc_params dp1, mld_discipline d1"
        + "             WHERE d1.ins_discipline_key = dp1.mld_ins_discipline_key"
        + "               AND d1.ins_discipline_verwijder IS NULL"
        + "               AND BITAND (dp1.mld_disc_params_srtgroep, 2) = 2)" // Is team?
        + "   AND EXISTS"
        + "           (SELECT 1"
        + "              FROM mld_disc_params dp2, mld_discipline d2"
        + "             WHERE d2.ins_discipline_key = dp2.mld_ins_discipline_key"
        + "               AND d2.ins_discipline_verwijder IS NULL"
        + "               AND BITAND (dp2.mld_disc_params_srtgroep, 4) = 4)" // Has team?
        + "   AND ROWNUM <= 1";
var oRs = Oracle.Execute(sql);
var canUseTeams = !oRs.EoF;
oRs.Close();
sql = "";

// INITIALISATIE MET DE INITIEEL WEER TE GEVEN GEGEVENS
if (lBestaandeMelding)
{
  // ================================ Bestaande melding ===========================================

  var this_mld_info  = mld.mld_melding_info(mld_key); // Globale variabele met alle mld_melding informatie
  var this_stdm_info = mld.mld_stdmeldinginfo(this_mld_info.stdm_key);

  this_mld_info.template = 0;
  if (!this_mld_info.locked_user_key || this_mld_info.locked_user_key == user_key)
  {
    mld.lock(mld_key);
    this_mld_info.locked_user_key = user_key;
  }

  // Controleer of wat discipline-settings toch altijd gelijk zijn, daar kunnen we voordeel mee doen
  // Merk op dat we nog scherper zouden kunnen controleren als we autorisatie meenemen. Vooralsnog niet
  sql = "SELECT MAX(COALESCE(mdp.mld_disc_params_startdatum, 0)) startdatum"
      + "  FROM mld_discipline md, "
      + "       mld_disc_params mdp"
      + " WHERE mdp.mld_ins_discipline_key = md.ins_discipline_key"
      + "   AND md.ins_srtdiscipline_key = " + this_mld_info.srtdisc_key;
  oRs = Oracle.Execute(sql);
  var disc_with_startdatum = oRs("startdatum").Value == 1;
  oRs.Close();

  var ins_srtdiscipline_kostenklant = this_stdm_info.ins_srtdiscipline_kostenklant || 0;
  if (frontend)
      this_stdm_info.hide_kostenplaats = (ins_srtdiscipline_kostenklant & 2) == 2;
  else
      this_stdm_info.hide_kostenplaats = (ins_srtdiscipline_kostenklant & 8) == 8;
}
else
{ // ================================ Nieuwe melding ==============================================
  // Bepaal wat vereiste defaults
  var this_mld_info = { mld_key: -1,
                      mld_omschr: mld_omschr, // De tekst tonen in de omschrijving, vanuit deeplink
                      mld_onderwerp: mld_onderwerp, // De tekst tonen in de omschrijving, vanuit deeplink
                      melder_key: rsv_ruimte_key > 0 ? contact_key : null,
                      meldbron_key: (meldbron_key > 0 ? meldbron_key : S("mld_meldbron_key")),
                      afdeling_key: -1,
                      place_key: -1,
                      stdm_key: multi || isVervolgmelding ? -1 : mld_defaultstdmelding_key,
                      act_key: act_key,
                      einddatum: einddatum,
                      melddatum: new Date(),
                      mld_ordernr: "",
                      remark: "",
                      mld_status: -1,
                      mld_status_str:  mld.getmldstatustext(2),
                      deladdress_key: -1,
                      mprio: (default_prio > 0 ? default_prio : 3), // Afwijkende prio van menuoptie of 'Normaal'
                      frontendprio: false,
                      alg_onrgoed_niveau: "",
                      module: -1,
                      kpnverplicht: false,
                      disc_key: multi || isVervolgmelding ? -1 : disc_key,
                      srtdisc_key: srtdisc_key,
                      kostenpl_key: -1,
                      loc_key: loc_key,
                      bld_key: bld_key,
                      flr_key: flr_key,
                      room_key: room_key,
                      cnt_key: cnt_key,
                      rsv_ruimte_key: rsv_ruimte_key,
                      res_key: res_key,
                      rsv_ruimte_volgnr: rsv_ruimte_volgnr,
                      respijt: 0,
                      publiek: 0,
                      naam_ext: "",
                      email_ext: "",
                      tel_ext: "",
                      startkey: isVervolgmelding ? cont_mld_key : start_key, // Bij vervolgmelding de start key zetten of de start key die is meegegeven.
                      template: getQParamInt("template", 0)
                    }
  if (this_mld_info.stdm_key > 0)
  {
    var this_stdm_info = mld.mld_stdmeldinginfo(this_mld_info.stdm_key);
    var this_mld_rights = mld.func_enabled_mld(this_stdm_info.ins_discipline_key, "D"); // Ik weet het nog nauwkeuriger dan ik dacht
    user.auth_required_or_abort(urole == "fe"? this_mld_rights.canFEwrite : this_mld_rights.canFOwrite || (isVervolgmelding && this_mld_rights.canBOwrite));
    var einddatumZichtbaar = this_stdm_info.planbaar != 2 && (urole == "fe" ? this_stdm_info.planbaarfe > 0 : true);
  }
  else
  {
    var this_stdm_info = {
      mld_stdmelding_key: -1,
      ins_srtinst: [],
      kanverwijzen: 0,
      prioriteiten: [],   // Je weet nog niet of de nieuwe melding meerdere prioriteiten kent
      planbaar: 0,        // Je weet nog niet of de nieuwe melding planbaar is
      planbaarfe: 1       // Wijzigen tot het niet meer mag.
    };
  }

  // Is dit een KTO deeplink?
  this_mld_info.kto_type = getQParam("kto_type", null); // M/R/B
  if (this_mld_info.kto_type)
  {
    this_mld_info.kto_key = getQParamInt("kto_key");
    this_stdm_info.is_kto_antwoord = true; // Dat weet ik zeker

    // Vul this_mld_info.mld_omschr ook. Doorgaans zal freetext=0 zijn en is deze tekst nooit in showmode zichtbaar.
    // Hij komt echter wel in meldingoverzichten terug en is dan wel fijn
    // >> dan moet je dus in mld_list ipv de description deze tekst verzinnen indien het een KTO is
    switch(this_mld_info.kto_type)
    {
      case "M": // this_mld_info.mld_omschr = L("lcl_mld_kto") + " " + L("lcl_complain") + " " + mld.mld_prefix(this_mld_info.kto_key) + this_mld_info.kto_key;
                sql = "SELECT prs_perslid_key, prs_perslid_key_voor"
                    + "  FROM mld_melding"
                    + " WHERE mld_melding_key = " + this_mld_info.kto_key;
                break;
      case "B": // this_mld_info.mld_omschr = L("lcl_mld_kto") + " " + L("lcl_bes_bestelling") + " " + S("bes_bestelling_prefix") + this_mld_info.kto_key;
                sql = "SELECT prs_perslid_key, prs_perslid_key_voor"
                    + "  FROM bes_bestelling"
                    + " WHERE bes_bestelling_key = " + this_mld_info.kto_key;
                break;
      case "R": // this_mld_info.mld_omschr = L("lcl_mld_kto") + " " + L("lcl_reservation") + " " + rnum;
                sql = "SELECT res_reservering_key, res_rsv_ruimte_volgnr"
                    + "  FROM res_rsv_ruimte"
                    + " WHERE res_rsv_ruimte_key = " + this_mld_info.kto_key;
                oRs = Oracle.Execute(sql);
                var rnum = oRs("res_reservering_key").Value + "/" + oRs("res_rsv_ruimte_volgnr").Value;

                sql = "SELECT res_rsv_ruimte_contact_key prs_perslid_key,"
                    + "       res_rsv_ruimte_host_key prs_perslid_key_voor"
                    + "  FROM res_rsv_ruimte"
                    + " WHERE res_rsv_ruimte_key = " + this_mld_info.kto_key;
                break;
       default:  // Only for robustness
                sql = "SELECT prs_perslid_key, prs_perslid_key_voor FROM mld_melding WHERE 1=0";
    }
    oRs = Oracle.Execute(sql);
    user.auth_required_or_abort(!oRs.eof && (user.isCollega(oRs("prs_perslid_key").Value) || user.isCollega(oRs("prs_perslid_key_voor").Value)));
  }
  // Controleer of wat discipline-settings toch altijd gelijk zijn, daar kunnen we voordeel mee doen
  // Merk op dat we nog scherper zouden kunnen controleren als we autorisatie meenemen. Vooralsnog niet
  sql = "SELECT MIN(COALESCE(mdp.mld_disc_params_eigen_kp, 0)) eigen_kp,"
      + "       MIN(COALESCE(md.ins_discipline_kpnverplicht, 0)) kpnverplicht,"
      + "       MAX(COALESCE(mdp.mld_disc_params_startdatum, 0)) startdatum,"
      + "       MAX(BITAND(sm.mld_stdmelding_planbaar, 3)) planbaar,"
      + "       MIN(BITAND(sm.mld_stdmelding_planbaar, 3)) planbaarmin,"
      + "       MAX(sm.mld_stdmelding_planbaarfe) planbaarfe,"
      + "       MIN(sm.mld_stdmelding_planbaarfe) planbaarfemin"
      + "  FROM ins_srtdiscipline isd, "
      + "       mld_discipline md, "
      + "       mld_disc_params mdp, "
      + "       mld_stdmelding sm"
      + " WHERE isd.ins_srtdiscipline_key = " + this_mld_info.srtdisc_key
      + "   AND isd.ins_srtdiscipline_key = md.ins_srtdiscipline_key"
      + "   AND mdp.mld_ins_discipline_key = md.ins_discipline_key"
      + "   AND md.ins_discipline_key = sm.mld_ins_discipline_key"
      + "   AND mld_stdmelding_verwijder IS NULL"
      + "   AND (mld_stdmelding_vervaldatum IS NULL OR mld_stdmelding_vervaldatum > SYSDATE)"
      // Als er een default stdmelding is meegegeven dan daar alleen naar kijken (JGL: Zit het dan niet al in this_stdm_info?)
      + (mld_defaultstdmelding_key > 0
        ? " AND sm.mld_stdmelding_key = " + mld_defaultstdmelding_key
        : "");
  oRs = Oracle.Execute(sql);
  this_mld_info.kpnverplicht = (oRs("kpnverplicht").Value == 1); // Voor alle vakgroepen verplicht
  var mandaat_eigen_kp = S("prs_dep_default_kpn") > 0 || oRs("eigen_kp").Value == 1; // Voor alle vakgroepen gemandateerd op eigen kp [dat is strikt genomen S("prs_dep_default_kpn") & 5) > 0]
  var disc_with_startdatum = oRs("startdatum").Value == 1;
  var anyEinddatumZichtbaar =
    (einddatumZichtbaar || ((oRs("planbaarmin").Value & 2) !== 2)) && // Als stdm_key al was gekozen dan is 'einddatumZichtbaar' bekend
    (frontend
      ? (oRs("planbaarfemin").Value > 0) // Additionele voorwaarde indien FE
      : true);

  if (this_mld_info.stdm_key > 0)
  {
    // Hebben we hem al
  }
  else if (oRs("planbaar").Value == oRs("planbaarmin").Value && oRs("planbaarfe").Value == oRs("planbaarfemin").Value)
  {
    this_stdm_info.planbaar    = oRs("planbaar").Value;
    this_stdm_info.planbaarfe  = oRs("planbaarfe").Value;
  }
  oRs.Close();

  showBehandelBlock = disc_with_startdatum
                   || anyEinddatumZichtbaar
                   || hasMldFlags;

  sql = "SELECT COALESCE(ins_srtdiscipline_kostenklant, 0) kostenklant"
      + ", ins_srtdiscipline_prefix prefix"
      + ", " + lcl.xsqla('ins_srtdiscipline_omschrijving', 'ins_srtdiscipline_key')
      + ", ins_srtdiscipline_alg"
      + ", ins_srtdiscipline_ins"
      + ", ins_srtdiscipline_bes"
      + ", ins_srtdiscipline_mldgroup"
      + " FROM ins_srtdiscipline"
      + " WHERE ins_srtdiscipline_key = " + this_mld_info.srtdisc_key;
  oRs = Oracle.Execute(sql);

  var alg_level = 0;
  switch (oRs("ins_srtdiscipline_alg").Value)
  {
    case 1:   alg_level = 5; break; // Ruimte
    case 3:   alg_level = 4; break; // Verdieping
    case 5:   alg_level = 3; break; // Gebouw
    case 7:   alg_level = 2; break; // Locatie
    default:  alg_level = 0;        // Niet tonen
  }

  this_stdm_info.ins_srtdiscipline_mldgroup = oRs("ins_srtdiscipline_mldgroup").Value;
  if (frontend)
  {
    this_stdm_info.hide_kostenplaats = (oRs("kostenklant").Value & 2) == 2;
    this_mld_info.mld_kk = (oRs("kostenklant").Value & 1) == 1 ? 1 : 0; // Kan ook 2 zijn voor onzichtbaar.
  }
  else
  {
    this_stdm_info.hide_kostenplaats = (oRs("kostenklant").Value & 8) == 8;
    this_mld_info.mld_kk = (oRs("kostenklant").Value & 4) == 4 ? 1 : 0; // Kan ook 8 zijn voor onzichtbaar.
  }
  // Bij vervolgen (isVervolgmelding) kunnen alle vakgroepen en stdmeldingen gekozen worden.
  // De ALG, INS en BES gegevens worden clientside getoond. Initieel moeten ze allemaal aanwezig zijn.
  this_mld_info.prefix = oRs("prefix").Value;
  this_mld_info.alg_level = alg_level;
  this_mld_info.show_alg = isVervolgmelding || alg_level > 0;
  this_mld_info.show_ins = isVervolgmelding || oRs("ins_srtdiscipline_ins").Value == 1;
  this_mld_info.show_bes = isVervolgmelding || oRs("ins_srtdiscipline_bes").Value > 0;
  this_mld_info.afleveradres_verplicht = oRs("ins_srtdiscipline_bes").Value == 1;
  this_mld_info.srtdisc_oms = oRs("ins_srtdiscipline_omschrijving").Value;
  oRs.close();

  if (rsv_ruimte_key < 0)
  {
    this_mld_info.melder_key = (( fronto && (S("mld_fo_default_user") || def_aanvrager_key > 0))
                             || frontend
                             || (multi) // Bij multi vervolgmelding is de user de melder (als multi dan is isVervolgmelding (automatische) ook true).
                             || (!this_mld_rights.canFOwrite && !this_mld_rights.canBOwrite && this_mld_rights.canFEwrite)
                             ? (def_aanvrager_key > 0 ? def_aanvrager_key : user_key)
                             : -1);
  }
  this_mld_info.perslid_key_voor = S("mld_allow_for_others") == 2 ? "" : this_mld_info.melder_key;
  var melder_obj;
  if (this_mld_info.melder_key == user_key)
      melder_obj = user;
  else
    if (this_mld_info.melder_key == -1)
        melder_obj = null;
    else
        melder_obj = new Perslid(this_mld_info.melder_key);

  if (ins_key > 0) // Automatisch ruimte kiezen
  {
    var ins_has_loc = false;
    sql = "SELECT alg_locatie_key,"
        + "       alg_gebouw_key,"
        + "       alg_verdieping_key,"
        + "       alg_ruimte_key"
        + "  FROM ins_deel isd, alg_v_allonroerendgoed alg"
        + " WHERE ins_deel_key = " + ins_key
        + "   AND alg_onroerendgoed_keys = isd.ins_alg_ruimte_key"
        + "   AND isd.ins_alg_ruimte_type = 'R'"
    oRs = Oracle.Execute(sql);
    if (!oRs.Eof)
    {
      ins_has_loc = true;
      this_mld_info.loc_key = oRs("alg_locatie_key").Value;
      this_mld_info.bld_key = oRs("alg_gebouw_key").Value;
      this_mld_info.flr_key = oRs("alg_verdieping_key").Value;
      this_mld_info.room_key = oRs("alg_ruimte_key").Value;
    }
  }

  if (this_mld_info.loc_key == -1 && melder_obj) // FO komt soms leeg binnen
  {
    this_mld_info.loc_key = melder_obj.alg_locatie_key({ "withcurrent": true });
    this_mld_info.bld_key = melder_obj.alg_gebouw_key({ "withcurrent": true });
    this_mld_info.flr_key = melder_obj.alg_verdieping_key({ "withcurrent": true });
    this_mld_info.room_key = melder_obj.alg_ruimte_key({ "withcurrent": true });
  }

  // Plaats velden die niet zichtbaar zijn leeg maken.
  switch (this_mld_info.alg_level)
  { // Zonder break;
    case 2: this_mld_info.bld_key = -1;
    case 3: this_mld_info.flr_key = -1;
    case 4: this_mld_info.room_key = -1;
  }

  if (melder_obj)
  {
    if (multi)
        this_mld_info.kostenpl_key = user.prs_kostenplaats_key();
    else if (/* TODO: overwegen kpnverplicht && */ mandaat_eigen_kp != 0 && this_mld_info.mld_kk == 1)
    {   // default kostenplaats
        this_mld_info.kostenpl_key = melder_obj.prs_kostenplaats_key() || -1;
    }
    if (this_mld_info.show_bes)
    {
      var prs_info = new prs.prs_perslid(this_mld_info.melder_key, { withAflever: true });
      this_mld_info.deladdress_key = multi ? user.mld_adres_key() : prs_info.mld_adres_key;
    }
  }
  this_mld_info.show_eigen_kp = false;
  this_mld_info.show_start_date = false;
} // if/else (lBestaandeMelding)

if (this_mld_info.meldbron_key)
{
  var sql = "SELECT mld_meldbron_kiesbaar"
          + "  FROM mld_meldbron"
          + " WHERE mld_meldbron_key = " + this_mld_info.meldbron_key;
  var oRs = Oracle.Execute(sql);
  if (!oRs.eof)
    this_mld_info.meldbron_kiesbaar = oRs("mld_meldbron_kiesbaar").Value;
  oRs.Close();
}

if (useBronmelding)
{
  // Haal de globale variabele op met alle mld_melding informatie voor gegevens die ik wil overnemen uit de bestaande melding.
  bron_mld_rights = mld.func_enabled_melding(bron_mld_key); // Wat heb ik zoal aan rechten op deze specifieke melding
  var bron_mld_info = mld.mld_melding_info(bron_mld_key);

  this_mld_info.srtinst_verplichtstatus = bron_mld_info.srtinst_verplichtstatus;
  this_mld_info.mld_ins_discipline_key  = bron_mld_info.mld_ins_discipline_key;
  this_mld_info.melder_key    = bron_mld_info.melder_key;
  this_mld_info.kostenpl_key  = bron_mld_info.kostenpl_key;
  this_mld_info.mld_kk        = bron_mld_info.mld_kk;
  this_mld_info.disc_key      = bron_mld_info.disc_key;
  this_mld_info.stdm_key       = bron_mld_info.stdm_key;
  this_mld_info.mprio         = bron_mld_info.mprio;
  this_mld_info.loc_key       = bron_mld_info.loc_key;
  this_mld_info.bld_key       = bron_mld_info.bld_key;
  this_mld_info.flr_key       = bron_mld_info.flr_key;
  this_mld_info.room_key      = bron_mld_info.room_key;
  this_mld_info.deladdress_key = bron_mld_info.deladdress_key;
  this_mld_info.mld_omschr    = bron_mld_info.mld_omschr;
  this_mld_info.remark        = bron_mld_info.remark;
  this_mld_info.behandel_key  = bron_mld_info.behandel_key;
  this_mld_info.behandel_key2 = bron_mld_info.behandel_key2;
  this_mld_info.mld_onderwerp = bron_mld_info.mld_onderwerp;
  this_mld_info.room_obj_arr  = bron_mld_info.room_obj_arr;
  this_mld_info.primaire_behandelaar = bron_mld_info.primaire_behandelaar;
  if (isVervolgmelding && (this_stdm_info.canholdthirdparty == 1 || lAllThirdparty))
  {
    this_mld_info.naam_ext = bron_mld_info.naam_ext;
    this_mld_info.email_ext = bron_mld_info.email_ext;
    this_mld_info.tel_ext = bron_mld_info.tel_ext;
  }
}

lcl.set_dialect(this_mld_info.srtdisc_key, "MLD_SRTDISCIPLINE_KEY");
var url_get_mld_info_ajax = "../mld/get_mld_info_ajax.asp?mld_key=" + mld_key;
/* ================================ Initiele gegevens bepaald  ==================================== */

%>
<html>
  <head>
<% FCLTHeader.Generate(); %>
    <script type="text/javascript">
      var protected_mld_info_ajax = "<%=safe.jsstring(protectQS.create(url_get_mld_info_ajax))%>";
      var ref_key              = <%=ref_key%>;
      var ref_type             = "<%=safe.jsstring(ref_type)%>";
      var lreferenceName       = "<%=safe.jsstring(lreferenceName)%>";
      var faq_max_results_mld  = "<%=S("faq_max_results_mld")%>";
      var mld_key              = <%=mld_key%>;
      var act_key              = <%=this_mld_info.act_key ? this_mld_info.act_key : -1%>;
      var ins_key              = <%=ins_key%>;
<%// We hebben al een (sterke default-)locatie, als;
  var mld_has_loc =  mld_key > 0                              // Het een bestaande melding is
                  || useBronmelding                           // Het een vervolgmelding/kopie is (gebruik die locatie)
                  || getQParamInt("loc_key", -1) > -1         // Er een hardcoded loc(atie)_key in de url is meegegeven
                  || getQParamInt("rsv_ruimte_key", -1) > -1  // Het een melding bij een reservering is (gebruik de locatie van de ruimte)
                  || ins_has_loc;                             // Het een melding bij een object is (gebruik de locatie van het object)
%>
      var mld_use_requestor_location = <%=(!mld_has_loc && S("mld_uses_requestor_location") == 1) ? 1 : 0%>;
      var mld_status           = <%=this_mld_info.mld_status%>;
      var mprio                = <%=this_mld_info.mprio%>;
      var srtdisc_key          = <%=this_mld_info.srtdisc_key%>;
      var disc_key             = <%=this_mld_info.disc_key%>;
      var alg_onrgoed_niveau   = "<%=this_mld_info.alg_onrgoed_niveau%>";
      var perslidkey           = <%=perslidkey%>;
      var def_kenmerk_link_key = <%=def_kenmerk_link_key%>;
      var user_kpkey           = <%=user.prs_kostenplaats_key() || -1%>;
      var user_kpnaam          = "<%=safe.jsstring(user.afdeling().kpn_naam())%>";
      var user_kpmodule        = "<%=user.afdeling().kpn_module()%>";
      var user_afd_key         = <%=user.prs_afdeling_key()%>;

      var objects_allowed = <%=this_stdm_info.objects_allowed ? 1 : 0%>; // for toggle stdmelding
      // The next two are used in toggleBehandelteam()
      var show_abh = (<%=(this_mld_rights.canBOwrite) ? 1 : 0%> == 1);
      // Always set default behandelteam if initially empty and the field is hidden (so you can't specifically set it) - Or if it's a new MLD
      var alwaysSetBht = (<%=(!(this_mld_info.mld_ins_discipline_key > 0) && (lNieuweMelding || !this_mld_rights.canBOwrite)) ? 1 : 0%> == 1);

      var show_alg = (<%=this_mld_info.show_alg ? 1 : 0%> == 1);
      var show_bes = (<%=this_mld_info.show_bes ? 1 : 0%> == 1);
      var show_ins = (<%=this_mld_info.show_ins ? 1 : 0%> == 1);
      var frontend = (<%=frontend ? 1 : 0%> == 1);
      var mld_allow_for_others        = <%=S("mld_allow_for_others")%>;
      var mld_show_endtime            = <%=S("mld_show_endtime")%>;
      var mld_show_start_date         = <%=this_mld_info.show_start_date ? 1 : 0%>;
      var mld_selector_mode           = <%= S("mld_selector_mode") %>;
      var mld_object_filled_in_alert  = <%= S("mld_object_filled_in_alert") %>;
      var startOfWorkDay              = parseFloat("<%=safe.jsfloat(S("fac_t_startofworkday"))%>");
      var endOfWorkDay                = parseFloat("<%=safe.jsfloat(S("fac_t_endofworkday"))%>");
      var withFutureRes               = <%=withFutureRes ? 1 : 0%> == 1;
      var fromkb                      = <%=fromkb ? 1 : 0%> == 1;
      var melddatum                   = <%=this_mld_info.melddatum.getTime()%>;
      var alg_level                   = <%=this_mld_info.alg_level%>;
      var mld_kk                      = <%= this_mld_info.mld_kk ? 1 : 0 %> == 1;
      var copy                        = <%=bron_mld_key > 0 ? 1 : 0 %>; // (useBronmelding)
      var cont_stdm                   = "<%=cont_stdmelding_key || "-1"%>";
      var mld_copy_key                = <%=bron_mld_key%>;
      var melder_key                  = <%=this_mld_info.melder_key%>;
      var mld_processing_group_all    = <%=S("mld_processing_group_all")%> == 1;
      var prsautlevel                 = <%=(this_mld_rights.authparams(autfunction) && this_mld_rights.authparams(autfunction).PRSwritelevel) || 9%>;
      var loc_key                     = <%=this_mld_info.loc_key%>;

      // Voor bestaande meldingen
      var canFlexChange = (<%=this_mld_rights.canFlexChange ? 1 : 0%> == 1);

      // Voor nieuwe en bestaande meldingen
      // Heb ik als FO, BO en FE enige write rechten?
      // Bestaande melding: Voor de geselecteerde discipline
      // Nieuwe melding: Voor een van de disciplines binnen de srtdiscipline
      var canFOwrite = (<%=this_mld_rights.canFOwrite ? 1 : 0%> == 1);
      var canBOwrite = (<%=this_mld_rights.canBOwrite ? 1 : 0%> == 1);
      var canFEwrite = (<%=this_mld_rights.canFEwrite ? 1 : 0%> == 1);

<% if (useBronmelding) { %>
      function make_attachments_readonly()
      {
        $("input[type=button][isbijlage=1]", "td.flexvalue").attr({readonly: true, disabled: true }).addClass("btn_disabled"); // Make attachment buttons readonly and disabled when copying call
      }
<% } %>

      $(function()
      {
        $('#issuer_search').change(function() { sgLoc.setValue($('#locatiekey').val(), $('#locatie').val(), true, true); });
        $('textarea').resize(function () { FcltMgr.resized(window) } );
        $('textarea').autogrow();
        if (alg_onrgoed_niveau == "H")
          $('#mldAlg').hide();
<% if (lNieuweMelding) { %>
        FcltMgr.setTitle("<%=safe.jsstring(this_mld_info.srtdisc_oms)%>", { hot: true });
        onChangeMeldbron();
<% }
   if (useBronmelding) { %>
      make_attachments_readonly();
<% } %>
      });

      function cadShowdiscfn()
      {
        var disc_arr = [];
        if (stdm_info.ins_srtinst)
        {
          for (var i = 0; i < stdm_info.ins_srtinst.length; i++)
          {
            if (stdm_info.ins_srtinst[i].ins_srtinstallatie_niveau == "D")
                disc_arr.push(stdm_info.ins_srtinst[i].ins_srtinstallatie_key);
          }
        }
        return disc_arr;
      };

      function cadShowgrpfn()
      {
        var grp_arr = [];
        if (stdm_info.ins_srtinst)
        {
          for (var i = 0; i < stdm_info.ins_srtinst.length; i++)
          {
            if (stdm_info.ins_srtinst[i].ins_srtinstallatie_niveau == "G")
                grp_arr.push(stdm_info.ins_srtinst[i].ins_srtinstallatie_key);
          }
        }
        return grp_arr;
      }

      function cadShowsrtfn()
      {
        var srt_arr = [];
        if (stdm_info.ins_srtinst)
        {
          for (var i = 0; i < stdm_info.ins_srtinst.length; i++)
          {
            if (stdm_info.ins_srtinst[i].ins_srtinstallatie_niveau == "S")
                srt_arr.push(stdm_info.ins_srtinst[i].ins_srtinstallatie_key);
          }
        }
        return srt_arr;
      }

      function cadShowthemafn()
      {
        var thema_key = (stdm_info.cad_thema_key ? stdm_info.cad_thema_key : -1);
        return thema_key;
      };

      function cadCallbackInsfn(ins_key)
      {
        var prs_key = ($("#personFor").length > 0 ? $("#personFor").val() : $("#person").val());
        var stdmld_key = $("#stdm").val();

        $.getJSON("../mld/get_mld_info_ajax.asp",
                  { req_info: "get_object_by_key",
                    ins_key: ins_key,
                    alg_key: $("#verdiepingkey").val(),
                    alg_niveau: "V",
                    prs_key: prs_key,
                    stdmld_key: stdmld_key
                  },
                  function(data, ins_key)
                  {
                    for (i in data)
                    {
                      if ("omschrijving" in data[i])
                      {
                        $("#r_objs_button").val(L("lcl_mld_objects") + " (" + data.length + ")");

                        _toggleObjectPicker(0);
                        $("#r_objs").append($(document.createElement("option")).attr("value", data[i].key).attr("uitvoertijd", data[i].uitvoertijd).text(data[i].omschrijving));
                        if (typeof sgObject != "undefined") // setTimeout zodat de onChangeAlg klaar is (met evt. leeg maken van objectSelector)
                            setTimeout(function () { sgObject.setValue(data[i].key, data[i].omschrijving); }, 1);

                        if (mld_key < 0 && mld_object_filled_in_alert == 1)
                            FcltMgr.alert(L("lcl_mld_object_filled_in"));
                        // Vul nu ook de plaatsgegevens behorend bij dit object in, voor zover dit mogelijk is.
                        if (data[i].alg_ruimte_type == "R")
                        { // setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
                          // lastTry is true zodat suggestbox wordt leeggemaakt indien waarde niet voorkomt (en niet de laatst waarde wordt getoond)
                          window.cadPickedObject = true;
                          sgRoom.setValue(data[i].alg_ruimte_key, data[i].alg_ruimte_nr, true, true, null, true);
                        }
                        break;
                      }
                    }
                });
      }

      // Meestal unlocken we gewoon in showmode die er achteraan komt maar soms wordt het tabblad daarvoor al gesloten.
      // Dan komen we hier langs.
      function onCloseHot()
      {
        var data = { mld_key: <%=mld_key%> };
        <% protectRequest.dataToken("data"); %>
        jQuery.ajaxSetup({async: false}); // Anders faalt o.a. bij IE9 de $.post bij afsluiten
        $.post( "mld_unlock.asp",
                data,
                FcltCallback,
                "json");
      }

      <% OVERRULELAYOUT("mld_edit_melding", { "isnew": !(mld_key > 0), "urole": urole }); %>

    </script>
  </head>
  <body class="editmode">
<%
SUBFRAME_START();
  var buttons =  [];
  buttons.push ({ title: L("lcl_submit"), icon: "fa-fclt-save", action:"mld_submit()", singlepress: true, id:"btn_mld_submit" });
  // 26-11-2020 14:28:26/PF deze functionaliteit mag hier best weg, zit ook in showmode en werkt alleen voor bestaande meldingen, dus weg ermee
  if (false && S("mld_show_search_similar") && (backo || fronto))
  {
      var goegel = "FcltMgr.openDetail('/appl/mld/mld_search.asp?urole=" + urole + "&chkSelf=1&chkBusy=1&autosearch=1&opl=1"
                 + "&searchtekst='+escape($('#melding_omschrijving').val())+'"
                 + "&locatie_key='" + "+($('#locatiekey').val()||-1)+" + "'"
                 + "&disc=-1', '', '" + L("lcl_mld_similarcalls") + "') ";

      if (lBestaandeMelding && (this_mld_rights.canBOwrite || this_mld_rights.canFOwrite))
          buttons.push({ icon: "fa-lightbulb-on", title: L("lcl_mld_similarcalls"), action: goegel });
  }
  if (mld_key > 0 || this_mld_info.act_key == -1) {
    buttons.push ({ title: L("lcl_cancel"), icon: "fa-fclt-cancel", action:"mld_cancel()" });
  }

  IFRAMER_HEADER(
      (this_mld_info.act_key > 0 ? (L("lcl_job_template") + " " + this_mld_info.act_key)
                               : (lBestaandeMelding ? L("lcl_complain") + " " + (this_mld_info.prefix != null ? this_mld_info.prefix : "") + mld_key : L("lcl_mld_new"))), buttons);
  if (this_mld_info.locked_user_key && this_mld_info.locked_user_key != user_key)
  {
    var other = new Perslid(this_mld_info.locked_user_key);
    SIMPLE_BLOCK_START(); %>
    <div class="warning"><%=L("lcl_mld_melding_locked").format(safe.html(other.naam()), toTimeString(this_mld_info.locked_date))%></div><%
    SIMPLE_BLOCK_END();
  }
%>
    <form id="u2" name="u2"
          action="mld_edit_melding_save.asp"
          method="post"
          onsubmit='mld_submit();return false'>
      <input type="hidden" name="urole" id="urole" value="<%=urole%>">
      <input type="hidden" name="fac_activiteit_key" value="<%=this_mld_info.act_key%>">
      <input type="hidden" name="mld_copy" value="<%=(isCopy ? 1 : 0)%>">
      <input type="hidden" name="mld_continue" value="<%=(isVervolgmelding ? 1 : 0)%>">
      <input type="hidden" name="mld_copy_key" value="<%=(isVervolgmelding ? cont_mld_key : bron_mld_key)%>">
<% if (multi) { %>
      <input type="hidden" name="child_arr" value="<%=mld_key_arr.join(",")%>">
<% } %>

      <input type="hidden" name="forcesave" id="forcesave" value="0">
      <input type="hidden" name="parent_key" id="parent_key" value="-1">
      <input type="hidden" name="template" id="template" value="<%=this_mld_info.template%>">
<%
  if (lNieuweMelding)
  {
    // Als er een meldbron_key is meegegeven, dan deze doorgeven.
    if (meldbron_key > 0)
    { %>
      <input type="hidden" name="meldbronkey" id="meldbronkey" value="<%=meldbron_key%>">
<%  }
    // Als er een start_key is meegegeven of het is vervolgen, dan de startkey doorgeven.
    if (this_mld_info.startkey > 0)
    { %>
      <input type="hidden" name="start_key" id="start_key" value="<%=this_mld_info.startkey%>">
<%  }
    // Als er een deelsrtcont_key is meegegeven, dan deze doorgeven.
    if (deelsrtcont_key > 0)
    { %>
      <input type="hidden" name="deelsrtcont_key" id="deelsrtcont_key" value="<%=deelsrtcont_key%>">
<%  }
    // Als er 'te-groeperen-meldingen' zijn meegegeven, dan deze doorgeven.
    if (mld_grouped_key_arr.length)
    { %>
      <input type="hidden" name="mld_grouped_key_arr" id="mld_grouped_key_arr" value="<%=mld_grouped_key_arr.join(",")%>">
<%  }
  }

  if (lBestaandeMelding)
  { %>
      <input type="hidden" name="mld_key" value="<%=mld_key%>">
      <input type="hidden" name="srtdisc" value="<%=this_mld_info.srtdisc_key%>">
<%
  }
  if (this_mld_info.rsv_ruimte_key > 0)
  { %>
      <input type="hidden" name="rsv_ruimte_key" id="rsv_ruimte_key" value="<%=this_mld_info.rsv_ruimte_key%>">
<%
  }
  if (this_mld_info.cnt_key > 0)
  { %>
      <input type="hidden" name="cnt_key" id="cnt_key" value="<%=this_mld_info.cnt_key%>">
<%
  }

  function injectFlagselector()
  {
    if (hasMldFlags)
    {
        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: this_mld_info.flag,
                      label: L("lcl_mld_flags"),
                      flag: this_mld_info.flag,
                      readonly: lBestaandeMelding && !this_mld_rights.canChange
                    });
    }
  }

  function injectAdresselector()
  {
    FCLTadresselector("del_address", "sgAdres",
                      { adresKey: this_mld_info.deladdress_key,
                        label:    L("lcl_delivery_address"),
                        emptyOption: "",
                        filtercode: "A",
                        autlevel:   (this_mld_rights.authparams(autfunction)? this_mld_rights.authparams(autfunction).ALGreadlevel : 9),
                        readonly:   (this_mld_info.deladdress_key > 0 && mld_key > 0 && !this_mld_rights.canAflChange),
                        required:   this_mld_info.afleveradres_verplicht
                      });
  }

  /* Global variables (spanning multiple BLOCK's) */
  var personEditable = (mld_key > 0 && this_mld_rights.canPersChange) || (mld_key < 0 && !frontend);
  var personForExist = (S("mld_allow_for_others") == 1 || S("mld_allow_for_others") == 2) &&
                       (mld_key < 0 || this_mld_rights.canKostChange || this_mld_info.melder_key != this_mld_info.perslid_key_voor) && !isVervolgmelding;

  // Het externnr moet wel ingevuld kunnen worden als mld_meldbron_key=S("mld_meldbron_key")
  var sql = "SELECT SUM(CASE WHEN BITAND(mld_meldbron_kiesbaar, 1) = 1 THEN 1 ELSE 0 END) kiesbaar"
          + "     , SUM(CASE WHEN BITAND(mld_meldbron_kiesbaar, 2) = 2 THEN 1 ELSE 0 END) externnr"
          + "  FROM mld_meldbron"
          + " WHERE mld_meldbron_verwijder IS NULL"
          + "   AND (  BITAND(mld_meldbron_kiesbaar, 1) = 1"
          + "       OR mld_meldbron_key = " + S("mld_meldbron_key")
          + "       )";
  var oRs = Oracle.Execute(sql);
  var aantalKiesbaar = oRs("kiesbaar").Value;
  var aantalExternnr = oRs("externnr").Value;
  oRs.Close();
  var hasKiesbareMeldbron = lNieuweMelding && fronto && aantalKiesbaar > 0;
  var isNieuwExtern = (lNieuweMelding && (((this_mld_info.meldbron_kiesbaar & 2) == 2) || aantalExternnr > 0) && (urole == "bo" || urole == "fo") );
  var hasMldFlags = (urole == "bo" || urole == "fo") && S("mld_melding_flags") > 0;

  var stdm_readonly = ((mld_defaultstdmelding_key > 0 && !isVervolgmelding) || (mld_key > 0 && !this_mld_rights.canStdmChange) || (lBestaandeMelding && this_stdm_info.slabewaken && this_mld_info.respijt != 0));
  /* \Global variables */


  /* In deze functie staan alle blokken. Deze intrigerende constructie maakt het mogelijk om de volgorde aangepast te kunnen hebben */

  function writeBlock(id)
  {
    if (blockPrinted[id])
        return true;

    // Dit block bevat alles over de initiatie van de melding:
    // waar komt het vandaan (wie), wie gaat het betalen, bij wie moet je wezen voor meer info e.d.
    if (id == "mldCaller")
    {
      // Een melding kan geregistreerd worden voor iemand anders, dan heb je dus de melder en de persoon voor wie die melder meldt
      // Of dat mag wordt gestuurd door setting S("mld_allow_for_others") {0=no | 1=yes | 2=yes, initial empty}

      // Die kun je niet altijd aanpassen
      var personForEditable = (mld_key > 0 && this_mld_rights.canKostChange) || (mld_key < 0);

      // Heel soms kan dit blok achterwege gelaten worden omdat er niks zinnigs ingevuld hoeft te worden
      if (((S("mld_allow_for_others") > 0) && (personForEditable || (this_mld_info.melder_key != this_mld_info.perslid_key_voor))) ||
          !frontend || !this_stdm_info.hide_kostenplaats || this_mld_info.kostenpl_key > 0 || S("mld_use_department") == 1)
      {
        // Alleen de fo kan de melder kiezen, en dan nog alleen als nog niet verder in behandeling
        // Dat is: readonly als afgewezen of minstens geaccepteerd
        BLOCK_START(id, L("lcl_mld_aanvragergegevens"), {icon: (this_mld_info.wfstep > 0 && this_mld_info.startkey != mld_key ? "fa-diagram-project" : "fa-user")});
        var urlAdd = [];
        if (mld.useAlgScope("A")) {
          if (this_mld_info.alg_level >= 2) {
            urlAdd.push({urlParam: "loc_key", field: "locatiekey", init: this_mld_info.loc_key});
          }
        }
        var hasPersonFor = (S("mld_allow_for_others") > 0) &&
                            (personForEditable || (this_mld_info.melder_key != this_mld_info.perslid_key_voor)) &&
                            !isVervolgmelding;
        FCLTpersoonselector("person",
                            "sgPerson",
                            { perslidKey: isVervolgmelding && (multi || frontend) ? user_key : this_mld_info.melder_key,
                              label:    L("lcl_mld_name"),
                              readonly: !personEditable,
                              urlAdd:   (!hasPersonFor && fronto ? urlAdd : null),
                              moreinfo: (backo || fronto),
                              onChange: "onChangeMelder",
                              autlevel: this_mld_rights.authparams(autfunction) && this_mld_rights.authparams(autfunction).PRSwritelevel,
                              extracode: "AK",
                              extraParamField: "prs_afd_key",
                              required: personEditable
                            });
        // Melding voor (aanpasbaar bij nieuwe meldingen en bij bestaande meldingen als de kostenplaats ook aanpasbaar is)
        if (hasPersonFor)
        { // Melding voor
          FCLTpersoonselector("personFor",
                              "sgPersonFor",
                              { perslidKey: this_mld_info.perslid_key_voor,
                                label:    L("lcl_mld_call_for"),
                                autlevel: this_mld_rights.authparams(autfunction) && this_mld_rights.authparams(autfunction).PRSwritelevel,
                                readonly: !personForEditable,
                                urlAdd:   urlAdd,
                                moreinfo: !frontend,
                                required: true,
                                onChange: "GetSetCallInfo"
                              });
        }

        if (S("mld_use_department") == 1)
        {
          FCLTafdelingselector("sgDept", "sgDept",
                               { departmentKey: this_mld_info.afdeling_key || -1,
                                 label: L("lcl_mld_afdeling"),
                                 autlevel: authparams.PRSwritelevel,
                                 filtercode: "INCL",
                                 readonly: (mld_key > 0 && !this_mld_rights.canDeptChange),
                                 required: true,
                                 suppressJustOne: true,
                                 moreinfo: !frontend
                               });
%>
          <script>
            $(function()
                {
                    if (mld_key  == -1)
                    {
                        GetSetCallInfo($("#person").val()); // Geeft afdeling ook initiele waarde afhankelijk van de aanvrager.
                    }
                });
          </script>
<%
        }

        if (!this_stdm_info.hide_kostenplaats && !this_stdm_info.is_kto_antwoord)
        {
          var urlAdd_account = [{ urlParam: "prs_key", field: (frontend && S("mld_allow_for_others") == 1 && S("prs_dep_default_kpn_voor") == 1 ? "personFor" : "person") },
                                { urlParam: "showeigenkp", field: "eigenkp" }];
          if (frontend && !this_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" });
          }

          FCLTkostenplaatsselector("account",
                                   "sgAccount",
                                   this_mld_info.melder_key,
                                   { kostenplaatsKey: this_mld_info.kostenpl_key || -1,
                                     checkInit: mld_key == -1,
                                     label: (urole == "fe")?L("lcl_mld_inf_Kostenplaats"):L("lcl_mld_inf_Kostenklant"),
                                     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_rights.canKostChange),
                                     kptoggle: { ischecked: (this_mld_info.mld_kk == 1),
                                                 readonly: (mld_key > 0 && !this_mld_rights.canKostChange),
                                                 onChange: "onChangeKostenklant();",
                                                 hidden: (urole == "fe") },
                                     required: (!(mld_key > 0 && !this_mld_rights.canKostChange)? this_mld_info.kpnverplicht : false)
                                   });
          if (frontend && !this_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 alg_kostenplaats_key = -1;
            if (this_mld_info.show_alg && !(this_stdm_info.alg_onrgoed_niveau == "H" && stdm_readonly)) { // Alleen de gebouw-kostenplaats in acht nemen als 'plaats' er hier toe doet
              var sqlg = "SELECT g.prs_kostenplaats_key"
                      + "  FROM alg_gebouw g"
                      + " WHERE g.alg_gebouw_key = " + this_mld_info.bld_key;
              var oRsg = Oracle.Execute(sqlg);
              if (!oRsg.EOF) {
                alg_kostenplaats_key = oRsg("prs_kostenplaats_key").Value;
              }
              oRsg.Close();
            }
%>
            <input type="hidden" id="account_bld" name="account_bld" data-stored-value="<%=alg_kostenplaats_key%>" value="<%=alg_kostenplaats_key%>">
<%        }

          if (S("show_ordernr") != 0)
          {
            RWFIELDTR("ordernr",  "fldshort", L("lcl_mld_inf_Ordernr"), this_mld_info.mld_ordernr, {readonly: (mld_key > 0 && !this_mld_rights.canKostChange), maxlength: 30});
          }
        }

        if (!frontend) // Deze velden nooit voor frontend laten zien
          if (lBestaandeMelding || mld_defaultstdmelding_key > -1 || lAllThirdparty)
          {
            if ((lNieuweMelding || this_mld_rights.canChange) && (this_stdm_info.canholdthirdparty == 1 || lAllThirdparty))
            {
                RWFIELDTR("naam_ext", "fld", L("lcl_mld_naam_ext"), this_mld_info.naam_ext, {maxlength: 60});
                RWFIELDTR("email_ext", "fld", L("lcl_mld_email_ext"), this_mld_info.email_ext, {maxlength: 100});
                RWFIELDTR("tel_ext", "fld", L("lcl_mld_tel_ext"), this_mld_info.tel_ext, {maxlength: 20});
            }
            else
            {
                ROFIELDTR("naam_ext", L("lcl_mld_naam_ext"), this_mld_info.naam_ext, {suppressEmpty: true});
                ROFIELDTR("email_ext", L("lcl_mld_email_ext"), this_mld_info.email_ext, {suppressEmpty: true});
                ROFIELDTR("tel_ext", L("lcl_mld_tel_ext"), this_mld_info.tel_ext, {suppressEmpty: true});
            }
          }
          if (hasKiesbareMeldbron && aantalKiesbaar > 1)  // een hoef je niet te kiezen
          {
            var sqlbron = "SELECT mld_meldbron_key"
                        + "     , " + lcl.xsqla('mld_meldbron_omschrijving', 'mld_meldbron_key')
                        + "     , CASE WHEN BITAND(mld_meldbron_kiesbaar, 2) = 2"
                        + "            THEN 1 ELSE 0"
                        + "       END isextern"
                        + "  FROM mld_meldbron"
                        + " WHERE mld_meldbron_verwijder IS NULL"
                        + "   AND BITAND(mld_meldbron_kiesbaar, 1) = 1"
                        + " ORDER BY mld_meldbron_omschrijving";  // ik denk 2, vertaald
            FCLTselector("meldbron",
                        sqlbron,
                        { initKey: this_mld_info.meldbron_key,
                          label: L("mld_meldbron"),
                          extraParamValue: "isextern",
                          onChange: "onChangeMeldbron()"
                        });
          }

          if (isNieuwExtern)
          {
            RWFIELDTR("externnr", "fld", L("lcl_mld_externr"), this_mld_info.externnr, {maxlength: 30});
          }
        BLOCK_END();
      }
      else
      { %>
        <input type="hidden" id="person" name="person" value="<%=user_key%>">
        <input type="hidden" id="prs_afd_key" name="prs_afd_key" value="<%=user.prs_afdeling_key()%>">
<%    }

      // Een FE kan niet togglen
      // Als bij nieuwe meldingen de persoon initieel wordt ingevuld dan de OnChange van de persoon suggestbox uitvoeren,
      // maar bij een melding bij Reservering niet, dan hebben we die gegevens juist al bepaald en overgenomen
      if (rsv_ruimte_key < 0 && mld_key < 0 && this_mld_info.melder_key > 0 && !useBronmelding)
      {
%>
        <script type="text/javascript">
          $(function()
          {
            onChangeMelder(<%=this_mld_info.melder_key%>);
          });
        </script>
<%
      }
    } // \mldCaller
    else if (id == "mldMelding")
    {
      BLOCK_START(id, L("lcl_mld_categorie"), {icon: "fa-tag"});

        ROFIELDTR("fld", L("lcl_vakgroup_type"), this_mld_info.srtdisc_oms);
        // Setting mld_selector_mode:
        // Selector mode vakgroep/melding voor de frontend.
        //     0 = (=default) vakgroep en melding (beide eerst te kiezen)
        //     1 = vakgroep readonly
        //     2 = alleen melding
        var vakg_readonly = !isVervolgmelding && (disc_key > 0 ||
                                      ((mld_key > 0 && !this_mld_rights.canVakgChange) || this_stdm_info.is_kto_antwoord) ||
                                      (frontend && (S("mld_selector_mode") == 1 || S("mld_selector_mode") == 2)) ||
                                      (lBestaandeMelding && this_stdm_info.slabewaken && this_mld_info.respijt != 0));
        var urlAdd = [];
        if (mld.useAlgScope("D"))
        { // Alleen plaats velden die zichtbaar zijn meegeven.
          switch (this_mld_info.alg_level)
          { // Zonder break;
            case 5: urlAdd.push({urlParam: "roomkey", field: "ruimtekey", init: this_mld_info.room_key});
            case 4: urlAdd.push({urlParam: "flrkey", field: "verdiepingkey", init: this_mld_info.flr_key});
            case 3: urlAdd.push({urlParam: "bldkey", field: "gebouwkey", init: this_mld_info.bld_key});
            case 2: urlAdd.push({urlParam: "lockey", field: "locatiekey", init: this_mld_info.loc_key});
          }
        }
        else
        {
          if (this_mld_info.alg_level == 5)
            // Plaats is zichtbaar. I.v.m. ruimtefuncties de ruimte key meegeven.
            urlAdd.push({urlParam: "roomkey", field: "ruimtekey", init: this_mld_info.room_key});
        }

        FCLTdisciplineselector("disc",
                               "sgDisc",
                               { label: L("lcl_vakgroup"),
                                 disc_key: this_mld_info.disc_key,
                                 module: "MLDP",
                                 perslidKey: (lBestaandeMelding ? this_mld_info.melder_key : user_key),
                                 autfunctionKey: (canUseTeams && vakg_readonly ? -1 : authparams.autfunctionkey), // Dan mag ik alles zien (readonly, zie: func_enabled)
                                 autRW: "W",
                                 srtdisc_key: this_mld_info.srtdisc_key,
                                 ins_key_arr: ins_key > 0 ? [ins_key] : [],
                                 urlAdd: urlAdd,
                                 onChange: ((frontend && S("mld_selector_mode") == 1) ? null : "onChangeVakgroep"),
                                 extraParamField: "eigenkp",
                                 extracode: "K",
                                 ref_type: ref_type,
                                 readonly: vakg_readonly,
                                 dohide: (frontend && (S("mld_selector_mode") == 2)? true : false),
                                 required: (mld_key < 0 || this_mld_rights.canVakgChange),
                                 filtercode: (frontend ? "FE" : (mld_grouped_key_arr.length ? "MG" : ((fronto && (mld_key < 0) || isVervolgmelding) ? "VD" : ""))),
                                 moreinfo: !vakg_readonly && !frontend && (user.checkAutorisation("WEB_FAQUSE", true) || user.checkAutorisation("WEB_FAQFOF", true)) // !readonly && rechten
                               });

        urlAdd.push({urlParam: "perslidKey", field: "person", init: this_mld_info.melder_key});
        if (  (!frontend || (S("mld_selector_mode") != 2))            // Als frontend en setting mld_selector_mode twee is, dan is de discipline niet zichtbaar en moet de stdmelding er niet van afhankelijk zijn.
           || (frontend && S("mld_selector_mode") == 2 && isurl_disc) // Als frontend en setting mld_selector_mode =2 en disc_key via url, dan stdmelding wel afhankelijk van discipline.
           )
            urlAdd.push({urlParam: "disc_key", field: "disc"});
        var res =
            FCLTstdmeldingselector("stdm",
                                    "sgStdm",
                                    { label: L("lcl_complain"),
                                      stdmelding_key: this_mld_info.stdm_key,
                                      autfunctionKey: (canUseTeams && stdm_readonly ? -1 : authparams.autfunctionkey), // Dan mag ik alles zien (readonly, zie: func_enabled)
                                      srtdisc_key: this_mld_info.srtdisc_key,
                                      ins_key_arr: ins_key > 0 ? [ins_key] : [],
                                      ref_type: ref_type,
                                      readonly: stdm_readonly,
                                      urlAdd: urlAdd,
                                      onChange: "onChangeStdMelding",
                                      extraParamField: "priomatrix",
                                      extracode: "PM",
                                      initOnChange: (mld_key < 0 && !useBronmelding), // Geen initialisatie van sgonChange (ingevulde einddatum niet aanpassen aan de uitvoertijd) bij bestaande meldingen. Voor useBronmelding gebeurt het hieronder clientside.
                                      required: (mld_key < 0 || this_mld_rights.canStdmChange),
                                      filtercode: (frontend ? "FE" : null),
                                      moreinfo: !stdm_readonly &&
                                                 (user.checkAutorisation("WEB_FAQUSE", true) || user.checkAutorisation("WEB_FAQFOF", true)) && // !readonly && rechten
                                                 !frontend
                                    });

        if (res.stdmelding_key > 0 && !(this_mld_info.stdm_key>0))
        { // We hebben er wel eentje maar hadden er geen
          this_mld_info.stdm_key = res.stdmelding_key;
          this_stdm_info = mld.mld_stdmeldinginfo(this_mld_info.stdm_key);
        }

        if (useBronmelding)
        {
%>
          <script type="text/javascript">
            $(function()
            { // InitOnChange is bij useBronmelding (kopieren en vervolgen) altijd false omdat anders de objecten leeg werden gemaakt.
              // Daarom hier onChangeStdMelding maar aanroepen met copy = true waardoor de objecten niet worden verwijderd..
              onChangeStdMelding(<%=this_mld_info.stdm_key%>, "", { copy: true });
            });
          </script>
<%
        }

        if (lBestaandeMelding)
        {
          var alg_key_arr = [];
          if (this_mld_info.bld_key && this_mld_info.bld_key != -1)   alg_key_arr.push(this_mld_info.bld_key);
          if (this_mld_info.flr_key && this_mld_info.flr_key != -1)   alg_key_arr.push(this_mld_info.flr_key);
          if (this_mld_info.room_key && this_mld_info.room_key != -1) alg_key_arr.push(this_mld_info.room_key);

          var faq_info = mld.faq_info(this_mld_info.loc_key, alg_key_arr, this_mld_info.disc_key, this_mld_info.stdm_key, -1, this_mld_info.afdeling_key, -1);
          for (i in faq_info.fixed_faq)
          {
              faq_info.fixed_faq[i].safe_answer = safe.fclthtml(faq_info.fixed_faq[i].answer, { "faqlink": true, "file_params": { "module": "FAQA", "key": faq_info.fixed_faq[i].faq_key }});
              faq_info.fixed_faq[i].safe_answer2 = safe.fclthtml(faq_info.fixed_faq[i].answer2, { "faqlink": true, "file_params": { "module": "FAQB", "key": faq_info.fixed_faq[i].faq_key }});
          }
        }
%>
        <input type="hidden" name="canholdthirdparty" id="canholdthirdparty" value="<%=this_stdm_info.canholdthirdparty%>">
        <input type="hidden" name="alg_onrgoed_obj_niveau" id="alg_onrgoed_obj_niveau" value="">
        <input type="hidden" name="prsafdobj" id="prsafdobj" value="">
        <input type="hidden" id="suggest_alg_niveau" value="">

        <script type="text/javascript">
          $(function()
          {
            var JSONdataStdm = "<%=safe.jsstring(JSON.stringify(this_stdm_info))%>";
            var JSONdataFaq = "<%=safe.jsstring(JSON.stringify(faq_info ? faq_info.fixed_faq : null))%>";

            // FSN#20381: Moet gedefinieerd worden na definitie FCLTkostenplaatsselector zodat sgAccount (ook $() ) gedefinieerd is
            if (mld_key > 0) // Alleen voor bestaande meldingen uitvoeren. Voor nieuwe meldingen zorgt initOnChange van de stdmeldingselector voor de aanroep.
            {
              process_stdm_info(JSON.parse(JSONdataStdm), false); // Tweede parameter stdmChanged voorkomt einddatum aanpassing bij bestaande meldingen
              show_fixed_faq("mldFaq", -1, JSON.parse(JSONdataFaq), faq_max_results_mld);
            }
            togglePriomatrix();

            // Set correct values onLoad (setTimeout so that sgObject has been initiated)
            setTimeout(function() { setSuggestUrlAdd("<%=this_stdm_info.alg_onrgoed_niveau%>", "<%=this_stdm_info.alg_onrgoed_obj_niveau%>"); }, 1);
          });
        </script>
<%
        var hide_prio = false;
        if (frontend)
        { // Alle meldingen waar ik (frontend) prio zou mogen aangeven.
          sql = " SELECT mld_stdmelding_key"
              + "   FROM mld_stdmelding sm"
              + "      , mld_v_aanwezigdiscipline md"
              + "      , mld_disc_params dp"
              + "  WHERE sm.mld_ins_discipline_key = md.ins_discipline_key"
              + "    AND md.ins_discipline_key = dp.mld_ins_discipline_key"
              + "    AND mld_stdmelding_verwijder is NULL"
              + "    AND sm.mld_stdmelding_notfrontend = 0"
              + "    AND dp.mld_disc_params_frontendprio = 1"
              // Vervallen stdmeldingen worden niet getoond, dus ook niet meenemen
              + "    AND (sm.mld_stdmelding_vervaldatum IS NULL OR"
              + "         sm.mld_stdmelding_vervaldatum > SYSDATE)"
              + "    AND (   sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur IS NOT NULL"
              + "         OR sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur IS NOT NULL"
              + "         OR sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur IS NOT NULL)"
              + "    AND md.ins_srtdiscipline_key = " + this_mld_info.srtdisc_key
              // Als er een default stdmelding is meegegeven dan daar alleen naar kijken
              + (mld_defaultstdmelding_key > 0
                ? " AND sm.mld_stdmelding_key = " + mld_defaultstdmelding_key
                : "")
              + "    AND md.ins_discipline_key IN (SELECT ins_discipline_key"
              + "                                    FROM fac_v_webgebruiker"
              + "                                    WHERE fac_functie_key = " + authparams.autfunctionkey
              + "                                    AND fac_gebruiker_prs_level_write < 9"
              + "                                    AND fac_gebruiker_alg_level_write < 9"
              + "                                    AND prs_perslid_key = " + user_key + ")"
          oRs = Oracle.Execute(sql);

          // Prioriteiten niet zichtbaar als ik het nergens mag aangeven
          hide_prio = (oRs.Eof);
          oRs.close();
        }
%>
        <input type="hidden" name="kto_type" id="kto_type" value="<%=this_mld_info.kto_type%>">
        <input type="hidden" name="kto_key" value="<%=this_mld_info.kto_key%>">
        <input type="hidden" name="filtercode" id="filtercode" value="<%=((this_stdm_info.kanverwijzen==128)?"M" :"O")%>">
<%
        if (hide_prio)
        { %>
          <input type="hidden" name="prio" id="prio" value="<%=this_mld_info.mprio%>">
<%      }
        else
        {
          var sqlprio = null;
          if (this_mld_info.stdm_key > 0)
          {
            sqlprio = "";
            var union = "";
            for (var i in this_stdm_info.prioriteiten)
            {
              var priotxt = this_stdm_info.prioriteiten[i].text;
              if (__Logging > 0)
              {
                priotxt += " **";
                priotxt += this_stdm_info.prioriteiten[i].uitvoertijd + " " + (this_stdm_info.prioriteiten[i].eenheid == 'D'? L("lcl_mld_days") : L("lcl_mld_hours"));
              }
              sqlprio += union
                   + " SELECT " + this_stdm_info.prioriteiten[i].key
                   + ", " + safe.quoted_sql(priotxt)
                   + " FROM DUAL";
              union = " UNION";
            }
          }

          var canPrioChangeFOBO = (this_mld_rights.canFOwrite ? 1 : 0);
          var canPrioChange = (this_stdm_info.planbaarfe == 0 && (this_mld_rights.canFOwrite || (this_mld_rights.canFEwrite && this_stdm_info.frontendprio && (mld_key < 0 || this_mld_info.mld_status == 1 || this_mld_info.mld_status == 2)))? 1 : 0);

          // 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 && (this_stdm_info.prioriteiten[1] && this_stdm_info.prioriteiten[2] && this_stdm_info.prioriteiten[4]) && this_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: this_mld_info.murgentie,
                          label: L("lcl_mld_matrixlabelprefix")+L("lcl_mld_urgentie"),
                          emptyOption: L("lcl_select_urgentie"),
                          readonly: (mld_key > 0 && !canPrioChange),
                          onChange: "onChangeImpactOrUrgentie(0)",
                          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: this_mld_info.mimpact,
                          label: L("lcl_mld_matrixlabelprefix")+L("lcl_mld_impact"),
                          emptyOption: L("lcl_select_impact"),
                          readonly: (mld_key > 0 && !canPrioChange),
                          onChange: "onChangeImpactOrUrgentie(0)",
                          trclass: "tr_priomatrix"
                        });
          }
          FCLTselector("prio",
                       sqlprio,
                       { initKey: this_mld_info.mprio,
                         label: L("lcl_mld_urg"),
                         readonly: (mld_key > 0 && !canPrioChange),
                         onChange: "onChangePrioriteit()",
                         trclass: "tr_prio"
                       });
        } %>
        <script type="text/javascript">
          var hide_prio = <%=hide_prio ? 1 : 0%> == 1;
        </script>

<%
        if (this_mld_rights.canChange && this_mld_info.canbepublished)
            RWCHECKBOXTR("publiek", "fldafr", L("lcl_mld_publiek"), this_mld_info.publiek);

        // Waarom hier?? Omdattie afhangt van de gekozen stdmelding
        if (lNieuweMelding && mld_defaultstdmelding_key == -1 && !lAllThirdparty)
        {
          RWFIELDTR("naam_ext", "fld", L("lcl_mld_naam_ext"), this_mld_info.naam_ext, {maxlength: 60});
          RWFIELDTR("email_ext", "fld", L("lcl_mld_email_ext"), this_mld_info.email_ext, {maxlength: 100});
          RWFIELDTR("tel_ext", "fld", L("lcl_mld_tel_ext"), this_mld_info.tel_ext, {maxlength: 20});
%>
          <script type="text/javascript">
            $(function()
            {
              $("#naam_ext, #email_ext, #tel_ext").closest("tr").hide();
              FcltMgr.resized();
            });
          </script>
<%
          if (this_mld_info.meldbron_key != S("mld_meldbron_key"))
          { // Niet lastigvallen met defaultwaarde
            sql = "SELECT "+lcl.xsqla('mld_meldbron_omschrijving', 'mld_meldbron_key')
                + "  FROM mld_meldbron"
                + " WHERE mld_meldbron_key = " + this_mld_info.meldbron_key;
            oRs = Oracle.Execute(sql);

            ROFIELDTR("fld", L("lcl_mld_meldbron"), oRs("mld_meldbron_omschrijving").Value);
            oRs.close();
          }
          ROFIELDTR("fld", L("lcl_mld_meldbron_nr"), this_mld_info.meldbron_nr, {suppressEmpty: true});

          if (this_mld_rights.canChange && ((this_mld_info.meldbron_kiesbaar & 2) == 2))
              RWFIELDTR("externnr", "fld", L("lcl_mld_externr"), this_mld_info.externnr, {maxlength: 30});
          else
              ROFIELDTR("fld", L("lcl_mld_externr"), this_mld_info.externnr, {suppressEmpty: true});
        }
        // Omdat we bij nieuwe meldingen geen mldInfo-blok hebben en fobo best direct een flag mag zetten
        if (!showBehandelBlock)
          injectFlagselector();

      BLOCK_END();
    } // \mldMelding
    else if (id == "mldAlg")
    {
      if (this_mld_info.show_alg && !(this_stdm_info.alg_onrgoed_niveau == "H" && stdm_readonly))
      {
        BLOCK_START(id, L("lcl_plaatsgegevens"), {icon: "fa-map-marker"});
          if (personEditable && !(mld_key > 0 && !this_mld_rights.canPlaatsChange)) // Show checkbox when editable and not readonly
          {
            // Check if there are any users with other rights then -1 or 9 for the selected srtdisc
            // HSLE#74760 fac_v_webgebruiker is zuiverder maar fac_groeprechten is veel sneller
            sql = "SELECT fac_gebruiker_alg_level_read"
                + "  FROM fac_groeprechten w, fac_functie f, ins_tab_discipline otd"
                + " WHERE     fac_functie_code = 'WEB_MLDUSE'"
                + "       AND w.fac_functie_key = f.fac_functie_key"
                + "       AND fac_gebruiker_alg_level_read > -1" // Alleen als scope beperking
                + "       AND ins_srtdiscipline_key = " + this_mld_info.srtdisc_key
                + "       AND w.ins_discipline_key = otd.ins_discipline_key"
                + "       AND ins_discipline_verwijder IS NULL"
            oRs = Oracle.Execute(sql);
            if (!oRs.EOF)
                RWCHECKBOXTR("issuer_search", "fldissuersearch", L("lcl_mld_issuer_search"), true, {boxfirst: true, twocols: true});
            oRs.Close();
          }
          FCLTplaatsselector( this_mld_rights.authparams(autfunction) && this_mld_rights.authparams(autfunction).ALGwritelevel,
                              { locatiekey: this_mld_info.loc_key,
                                gebouwkey: this_mld_info.bld_key,
                                verdiepingkey: this_mld_info.flr_key,
                                ruimtekey: this_mld_info.room_key,
                                terrein: true,
                                onLocChange: "onChangeLocatie(true);",
                                onGebChange: "onChangeGebouw(true);",
                                onVerChange: "onChangeVerdieping();",
                                onRuiChange: "onChangeRuimte();",
                                onLocCascade: "getObjectInfo(true);",
                                onGebCascade: "getObjectInfo(true);",
                                onVerCascade: "getObjectInfo(true);",
                                onRuiCascade: "getObjectInfo(true);",
                                moreinfo: (this_mld_rights.canBOwrite || this_mld_rights.canFOwrite) && !frontend,
                                readonly: (mld_key > 0 && !this_mld_rights.canPlaatsChange),
                                filtercode: this_mld_info.alg_level <= 2 ? null : "FACMLD",  /*strict genomen alleen voor FE/FO, maar readonly maakt dit vanzelf goed toch? */
                                suppressEmpty: true,
                                eindlevel: (this_mld_info.alg_level ? this_mld_info.alg_level : 2), // Minimaal Locatie
                                cadSelect: true,
                                cadDwgX: this_mld_info.dwgx,
                                cadDwgY: this_mld_info.dwgy,
                                cadShowdiscfn: true,
                                cadShowgrpfn: true,
                                cadShowsrtfn: true,
                                cadShowthemafn: true,
                                cadCallbackInsfn: "cadCallbackInsfn",
                                requiredlevel: this_stdm_info.alg_onrgoed_niveau,
                                urlAdd: [{ urlParam: "stdm_key",      field: "stdm" },
                                         { urlParam: "person_key",    field: "person" },
                                         { urlParam: "personfor_key", field: "personFor" },
                                         { urlParam: "issuer_search", field: "issuer_search" }]
                              });

          if (this_mld_info.show_bes && mld.nextBlock() == "mldBes")
          {
            injectAdresselector();
            blockPrinted["mldBes"] = true; // Zorgt ervoor dat het mldBes block overgeslagen wordt
          }
        BLOCK_END();
      }
    } // \mldAlg

    else if (id == "mldBes")
    {
      if (this_mld_info.show_bes)
      {
        BLOCK_START(id, L("lcl_aflevergegevens"), {icon: "fa-address-card"});
          injectAdresselector();
        BLOCK_END();
      }
    } // \mldBes

    else if (id == "mldInfo")
    {
      // Het blok Behandeling geeft alle status en planningsinformatie
      // Het is nog niet erg van toepassing voor nieuwe meldingen
      // Maar soms wel
      //  FO: voor flags en planning
      //  FE: als de melding planbaar is voor de FE

      // Einddatum verborgen als FE een melding invoert en toch readonly is.
      // Readonly gebeurd dynamisch in functie processEinddatum(...) in mld_edit_melding.js.

      // In FE mode staat de melding (stdmelding) en daarmee ook de planbaarheid vast (readonly).
      // planbaar: -- 0: einddatum wordt berekend, 1: de einddatum van de melding is default leeg, 2: veld is verborgen, +4: toon actiedatum
      // planbaarfe:  -- 0: niet in te vullen door FE
      var einddatumHidden = this_stdm_info.planbaar == 2 || (this_stdm_info.planbaar == 0 && this_stdm_info.planbaarfe == 0 && frontend && mld_key < 0);
      if (showBehandelBlock)
      {
        BLOCK_START(id, L("lcl_mld_behandeling"), {icon: "fa-clock"});

          // Of de startdatum van de melding kan worden gekozen of gewoon Nu is, hangt af van de discipline
          // Is er binnen de mogelijkheden *geen enkele* vakgroep (discipline) met een startdatum? Dan de startdatum niet editable tonen.
          if (disc_with_startdatum)
          {
            // Wordt mogelijk dynamisch vervangen
            FCLTcalendar( "startdate",
                          { label   : L("lcl_mld_startdate"),
                            datum   : this_mld_info.melddatum,
                            minFuture : (frontend ? 0 : -1),
                            onChange: "onChangeStartdatum();",
                            readonly: !this_mld_rights.canWriteDatums && this_mld_info.show_start_date, // Als hij verborgen is hoeftie niet readonly
                            required: true,
                            trhidden: mld_key > 0 && !this_mld_info.show_start_date, // De hele tr moet hidden en niet alleen het inputveld
                            volgnr: 1,
                            nofollow: true
                          });
            // We hebben het veld startdate nodig voor de functie get_mld_info_ajax(calc_einddatum, ..)
            // Ook als deze readonly is, dus dan alsnog toevoegen. Let op: startdate MOET een integer zijn!
            if (!this_mld_rights.canWriteDatums && this_mld_info.show_start_date) { %>
          <input type="hidden" name="startdate" id="startdate" value="<%=this_mld_info.melddatum.getTime()%>">
<%          }
          }
          else
          {
            // De huidige datum tonen lijkt aardig maar suggereert teveel: de save-datum is bepalend
            if (lBestaandeMelding) {
              ROFIELDTR("fld", L("lcl_mld_date_time"), toDateTimeString(this_mld_info.melddatum)); %>
          <input type="hidden" name="startdate" id="startdate" value="<%=this_mld_info.melddatum.getTime()%>">
<%          }
          }
          ROFIELDTR("fld", L("lcl_mld_status"), this_mld_info.mld_status_str);
          if (this_mld_info.afmelddatum) {
            ROFIELDTR("flddatetime", L("lcl_mld_closedate"), toDateTimeString(this_mld_info.afmelddatum, false, false, true));
          }

          var urlAdd = [{ urlParam: "prs_key",  field: "person",  init: this_mld_info.melder_key },
                        { urlParam: "disc_key", field: "disc",    init: this_mld_info.disc_key }];
          if (this_mld_info.show_alg)
              urlAdd.push({ urlParam: "loc_key", field: "locatiekey", init: this_mld_info.loc_key });
          if (
            this_mld_info.primaire_behandelaar != 0 &&
            (
              bron_mld_key == -1 ||
              this_mld_info.primaire_behandelaar
            )
          ) {
            FCLTpersoonselector("sBehandel",
                                "sgBehandelaar",
                                 { perslidKey: this_mld_info.behandel_key,
                                  label: L("lcl_mld_behandelaar"),
                                  autlevel: this_mld_rights.authparams(autfunction) && this_mld_rights.authparams(autfunction).PRSwritelevel,
                                  urlAdd: urlAdd,
                                  suppressEmpty: true,
                                  readonly: frontend || (mld_key > 0 && !this_mld_rights.canAfhandChange),
                                  required: (this_mld_info.primaire_behandelaar == 2),
                                  filtercode: (this_mld_info.mld_status == 0 ? "BEHF" : "BEHB")
                                });
          }
          var actiondate_is_today = (this_mld_info.actiedatum ? this_mld_info.actiedatum.midnight().getTime() == new Date().midnight().getTime() : false);
          FCLTcalendar( "actiondate",
                      { label        : L("lcl_mld_actiondate"),
                        datum        : this_mld_info.actiedatum,
                        minDate      : (frontend ? this_mld_info.actiedatum : null),
                        timeField    : !frontend || (frontend && this_stdm_info.planbaar == 0 && this_stdm_info.planbaarfe == 0), // Bij FE dus afh van Planbaar eind(datum+tijd) wel/niet in te vullen, anderen (FO 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"),
                        onChange     : "onChangeActiondate();",
                        readonly     : frontend || (mld_key > 0 && !this_mld_rights.canWriteDatums),
                        trclass      : "tractiondate" + (actiondate_is_today ? " today" : ""),
                        trhidden     : !this_stdm_info.show_actiedatum, // De hele tr moet hidden en niet alleen het inputveld als in FE mode readonly
                        volgnr       : 2,
                        initEmpty    : this_mld_info.actiedatum == null,
                        initTimeEmpty: this_mld_info.actiedatum == null
                      });

          var taggable_select_params = {
            "stdm_taggable":        this_stdm_info.taggable,
            "srtdisc_key":          this_mld_info.srtdisc_key,
            "stdmeldinggroep_key":  this_stdm_info.stdmeldinggroep_key,
            "tag_key":              this_mld_info.tag_key
          }
          Response.Write(mld.taggable_select_html(urole, taggable_select_params));

          // Wordt mogelijk dynamisch vervangen
          FCLTcalendar( "enddate",
                        { label    : L("lcl_mld_enddate"),
                          datum    : this_mld_info.einddatum,
                          minDate  : (frontend ? this_mld_info.einddatum : null),
                          timeField: !frontend || (frontend && this_stdm_info.planbaar == 0 && this_stdm_info.planbaarfe == 0), // Bij FE dus afh van Planbaar eind(datum+tijd) wel/niet in te vullen, anderen (FO 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"),
                          onChange : "onChangeEnddate();",
                          readonly : mld_key > 0 && !this_mld_rights.canWriteDatums,
                          required : true,
                          trclass  : "trenddate",
                          trhidden : einddatumHidden, // De hele tr moet hidden en niet alleen het inputveld als in FE mode readonly
                          volgnr   : 3,
                          addClass : (this_mld_info.rsv_ruimte_key > 0 ? "mldres" : null) // Als de melding onder een reservering valt dan addClass toevoegen.
                        });


          if (this_stdm_info.slabewaken && this_mld_rights.canSLAChange)
          {
            sql = "SELECT  'U', " + safe.quoted_sql(L("lcl_mld_hours")) + " FROM DUAL"
                + " UNION SELECT  'D', " + safe.quoted_sql(L("lcl_mld_days")) + " FROM DUAL"
                + " ORDER BY 2";
            // Als de stdmelding wordt aangepast wordt de respijt leeg gemaakt en verwijderd. Bij de volgende edit actie is respijt dan weer te wijzigen.
            var selectparams = { fieldName: "dayshours_resp",
                                 sql: sql,
                                 params: { id: "dayshours_resp",
                                           initKey: this_mld_info.respijt_eenheid, // Eenheid respijt hetzelfde als stdmelding.
                                           disable: true
                                         }
                               }
            RWFIELDTR("respijt", "fld", L("lcl_mld_respijt"), this_mld_info.respijt ? Math.round(this_mld_info.respijt * 1000) / 1000 : "", {maxlength: 8, datatype: "float", selector: selectparams});
            RWCHECKBOXTR("indult", "fldafr", L("lcl_mld_indult"), this_mld_info.indult);
          }
          if (this_mld_rights.canAfrond)
              RWCHECKBOXTR("afgerond", "fldafr", L("lcl_mld_afgerond"), this_mld_info.mld_afgerond, { "html": "onChange='onChangeAfgerond(this)'" });

          if ((this_mld_info.kto_opt & 2) == 2 && this_mld_info.kto_verstuurd == null && this_mld_rights.canClose)
              RWCHECKBOXTR("ktoself", "fldkto", L("lcl_mld_kto_invite"), this_mld_info.kto);
          else
              ROCHECKBOXTR("fldkto", L("lcl_mld_kto_invite"), this_mld_info.kto, { suppressEmpty: true });

          injectFlagselector();

        BLOCK_END();
      }
      else { /* Startdatum moet wel opvraagbaar zijn i.v.m. berekening einddatum. */ %>
          <input type="hidden" name="startdate" id="startdate" value="<%=this_mld_info.melddatum.getTime()%>">
<%    }
    } // \mldInfo
    else if (id == "mldProcessing")
    {
      if (canUseTeams)
      {
        var hideSelectors = !this_mld_rights.canBOwrite;
        var initHideProcessingBlock = lNieuweMelding || hideSelectors || !(this_mld_info.srtgroep & 4); // Voor cost is deze waarde altijd true (lNieuweMelding is true).
        BLOCK_START(id, L("lcl_mld_processing_details"), {icon: "fa-wrench", hidden: initHideProcessingBlock});
          var urlAdd = [{ urlParam: "disc", field: "disc", init: this_mld_info.disc_key }];
          FCLTdisciplineselector( "mld_ins_discipline",
                                  "sgDisc",
                                  { idadd: 2,
                                    label: L("mld_processing_group"),
                                    disc_key: this_mld_info.mld_ins_discipline_key,
                                    module: "MLDB",
                                    perslidKey: (lBestaandeMelding ? this_mld_info.melder_key : user_key),
                                    autfunctionKey: -1, // Alles is toegestaan! authparams.autfunctionkey,
                                    srtdisc_key: S("mld_processing_group_all") ? null : this_mld_info.srtdisc_key,
                                    onChange: "onChangeBehandelteam",
                                    hidden: hideSelectors,
                                    urlAdd: urlAdd,
                                    noJustOne: true,
                                    required: false,
                                    moreinfo: !(mld_key > 0 && !this_mld_rights.canAfhandChange) &&
                                               (user.checkAutorisation("WEB_FAQUSE", true) || user.checkAutorisation("WEB_FAQFOF", true)) && // !readonly && rechten
                                               !frontend
                                  });

          var urlAdd = [{ urlParam: "prs_key",  field: "person",              init: this_mld_info.melder_key },
                        { urlParam: "disc_key", field: "mld_ins_discipline",  init: this_mld_info.mld_ins_discipline_key }];
          if (this_mld_info.show_alg)
              urlAdd.push({urlParam: "loc_key",  field: "locatiekey",         init: this_mld_info.loc_key});

          FCLTpersoonselector("sBehandel2",
                              "sgBehandelaar",
                              { perslidKey: this_mld_info.behandel2_key,
                                idadd: 2,
                                label: L("lcl_mld_processor"),
                                //autlevel: niet van toepassing op BH2F en BH2B
                                urlAdd: urlAdd,
                                hidden: hideSelectors,
                                filtercode: (this_mld_info.mld_status == 0 ? "BH2F" : "BH2B")
                              });

        BLOCK_END();
      }
    } // \mldProcessing
    else if (id == "mldFaq")
    {
      BLOCK_START(id, L("lcl_faq_kennisbank"), { hidden: true, icon:"fa-book" });
        // Hier komen vaste aanwijzingen
      BLOCK_END();
    } // \mldFaq
    else if (id == "mldIns")
    {
      var show_obj_fld = false;
      // Als het objecten veld zichtbaar moet zijn, dan moet in ieder geval gelden:
      // 1) Bij het vakgroeptype moet "Objectgegevens" op "Ja" staan,
      // 2) Bij de melding (stdmelding) moet in het blok "Objectgegevens",
      //    a) De setting "Plaatsobjecten" niet op "Geen plaatsgebonden objecten" staan of
      //    b) De setting "Organisatieobjecten" niet op "Geen Afdeling of Persoon" staan.
      if (this_mld_info.show_ins && (this_stdm_info.alg_onrgoed_obj_niveau != "" || this_stdm_info.prsafdobj > 0))
      { // Is er een object meegegeven of zijn er objecten te tonen?
        var thereAreObjects = ins_key > 0;
        var thereAreMultipleObjects = false;
        var org_mld_key = (useBronmelding ? bron_mld_key : mld_key);
        if (!thereAreObjects && org_mld_key > 0)
        {
          sql = "SELECT m.ins_deel_key"
              + "  FROM mld_melding_object m"
              + " WHERE m.mld_melding_key = " + org_mld_key
              + " ORDER BY m.ins_deel_key";
          oRs = Oracle.Execute(sql);
          thereAreObjects = !oRs.Eof;
          if (thereAreObjects)
          {
            oRs.moveNext();
            thereAreMultipleObjects = !oRs.Eof;
          }
          oRs.close();
        }

        // Als de objecten knop aanwezig is of er zijn geselecteerde objecten te tonen dan objectenblok tonen.
        var objparams = { module: "M",
                          mld_key: mld_key,
                          ins_key: ins_key,
                          canPlaatsChange: useBronmelding ? bron_mld_rights.canPlaatsChange : this_mld_rights.canPlaatsChange,
                          canClose: useBronmelding ? bron_mld_rights.canClose : this_mld_rights.canClose,
                          hasMultiObj: thereAreMultipleObjects,
                          init_obj_key: (this_mld_info.room_obj_arr && this_mld_info.room_obj_arr.length == 1 ? this_mld_info.room_obj_arr[0].ins_key : -1),
                          srtinst_verplichtstatus: this_mld_info.srtinst_verplichtstatus,
                          aantalobj: 0,
                          thereAreObjects: thereAreObjects,
                          disableobjects: true,
                          onclickobj: "mld_melding_object()" };

        var status_ojb_verplicht = -1;
        if (mld_key > 0)
        {
          // Als een object verplicht is bij afmelden en niet is ingevuld, dan moet ik een object kunnen invullen als ik ook afmeld rechten heb.
          sql = "SELECT sm.ins_srtinst_verplichtstatus"
              + "  FROM mld_melding m"
              + "     , mld_stdmelding sm"
              + " WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key"
              + "   AND m.mld_melding_key = " + mld_key;
          oRs = Oracle.Execute(sql);
          status_ojb_verplicht = oRs("ins_srtinst_verplichtstatus").Value;
          oRs.Close();
        }

        show_obj_fld = (ins_key < 0 && (mld_key <= 0 || this_mld_rights.canPlaatsChange)) || (thereAreObjects && (lNieuweMelding || this_mld_rights.canChange)) || (this_mld_rights.canClose && status_ojb_verplicht == 5);
      } // if (this_mld_info.show_ins)

      var show_any_ref = (this_mld_info.rsv_ruimte_key && this_mld_info.res_key)              // Reservering referentie
                      || this_mld_info.cnt_key > 0                                          // Contract Referentie
                      || (this_stdm_info.kanverwijzen == 0 && this_mld_info.kto_type)            // Overige referentie
                      || this_stdm_info.kanverwijzen;                                          // Referentie edit-veld
      var show_groepering = this_stdm_info.ins_srtdiscipline_mldgroup & 2;
      var show_rel_block  = (lNieuweMelding || this_mld_rights.canChange) && ((mld_key > -1 && show_obj_fld) || show_any_ref || show_groepering);
%>
      <script type="text/javascript">
        var show_any_ref = (<%=show_any_ref ? 1 : 0%> == 1);
        var show_groepering = (<%=show_groepering ? 1 : 0%> == 1);
      </script>
<%
      BLOCK_START(id, L("lcl_gerelateerdeobjecten"), { icon: "fa-hand-point-right", hidden: !show_rel_block });
        if (show_obj_fld)
            mld.generate_relobject_editblock(useBronmelding ? bron_mld_key : mld_key, objparams, this_mld_info, this_stdm_info);

        if (this_mld_info.rsv_ruimte_key && this_mld_info.res_key)
            mld.referentielink("R", this_mld_info.rsv_ruimte_key, L("lcl_mld_with_res"));

        if (this_mld_info.cnt_key > 0)
            mld.referentielink("C", this_mld_info.cnt_key, L("lcl_mld_with_cnt"));

        if (this_stdm_info.kanverwijzen == 0 && this_mld_info.kto_type) // Referentie (kanverwijzen > 0) verderop invoerbaar.
          mld.referentielink(this_mld_info.kto_type, this_mld_info.kto_key, L("lcl_mld_kto"));

        FCLTreferentieselector( "ref_key",
                                "sgRef",
                                { label: L("lcl_reference"),
                                  referenceKey: this_stdm_info.kanverwijzen ? (this_mld_info.kto_key || ref_key) : -1,
                                  referenceType: (this_mld_info.kto_type || ref_type), // De waarde komt standaard in het extraParamField field ref_type.
                                  excludemldkey: mld_key > 0 ? mld_key: null,
                                  hidden: !this_stdm_info.kanverwijzen,
                                  urlAdd: [{ urlParam: "prs_key",     field: (personForExist ? "personFor" : "person"), init: (personForExist ? this_mld_info.perslid_key_voor : this_mld_info.melder_key) },
                                           { urlParam: "stdm_key",    field: "stdm",                                    init: this_mld_info.stdm_key },
                                           { urlParam: "filtercode",  field: "filtercode",                              init: ((this_stdm_info.kanverwijzen==128)?"M" :"O") }]
                                });

        // Naar een groeperende nieuwere melding
        if (this_stdm_info.ins_srtdiscipline_mldgroup & 2)
        {
          FCLTreferentieselector( "mldgroup_key",
                                  "sgmldgroup",
                                  { label: (this_mld_info.mldgroup_key || -1) > -1 ? mld.mld_prefix(this_mld_info.mldgroup_key, "ins_srtdiscipline_omschrijving") : L("lcl_mldgroup_key"),
                                    referenceKey: this_mld_info.mldgroup_key || -1,
                                    omitRefType: true, // Het veld "Kto_type" weglaten.
                                    referenceType: "M", // Deze parameter is nog nodig om de juiste huidige referentie op te halen.
                                    excludemldkey: mld_key > 0 ? mld_key: null,
                                    hidden: frontend || !(user.has("WEB_MLDFOF") || user.has("WEB_MLDBOF") || user.has("WEB_MLDBAC")),
                                    filtercode: "MGO"
                                  });
        }
      BLOCK_END();
    } // \mldIns
    else if (id == "mldOmschrijving")
    {
      // Geen omschrijving indien mld_stdmelding_freetext == 0 en mld_stdmelding_subject == 0
      BLOCK_START(id, L("lcl_txt"), { wide: true, icon: "fa-comment-lines", hidden: (this_mld_info.freetext == 0 && this_mld_info.subject == 0) });

        var oms_readonly = !(this_mld_rights.canOmsChange || mld_key < 0) || txtreado;
        if (S("mld_omschrijving_restrict_edit") == 1)
            oms_readonly = oms_readonly || !((S("mld_rejected_is_open") == 1 && this_mld_info.mld_status == 1) || this_mld_info.mld_status == 2 || this_mld_info.mld_status == -1);

        // Short subject
        if (this_mld_info.subject != 0 /* Onzichtbaar */ && !(this_stdm_info.subject == 3 && mld_key < 0 && !this_mld_rights.canFOwrite) /* AI will generate */ && !(oms_readonly && !this_mld_info.mld_onderwerp))
        {
          var subjectRequired = !txtreado &&
                              (   this_mld_info.subject == 2 && (this_mld_rights.canOmsChange || mld_key < 0) // subject == 2 => verplicht
                               || this_mld_info.subject == 3 && mld_key > 0);                                 // subject == 3 => AI
          RWFIELDTR("melding_onderwerp",
                    "fld" + (subjectRequired ? " required" : ""),
                    L("lcl_mld_subject"),
                    this_mld_info.mld_onderwerp,
                    { maxlength: 200, readonly: oms_readonly, placeholder: (mld_key < 0 && this_stdm_info.subject == 3 && this_mld_rights.canFOwrite) ? L("lcl_mld_ai_generate_subject_placeholder") : "" });
        }

        if ((this_mld_info.freetext != 0) && !(oms_readonly && !this_mld_info.mld_omschr))
        {
          // Complaint text description
          RWTEXTAREATR( "melding_omschrijving",
                        "fldtxt" + ((this_mld_info.freetext == 2 && (this_mld_rights.canOmsChange || mld_key < 0) && !txtreado)? " required" : ""),
                        L("lcl_mld_inf_Omschrijving"),
                        this_mld_info.mld_omschr,
                        { html: "rows='5'", readonly: oms_readonly, bb_codes: true, maxlength: S("mld_melding_oms_maxlen") });
        }
      BLOCK_END();
    } // \mldOmschrijving
    else if (id == "mldFlex")
    {
      var prsautlevel = (this_mld_rights.authparams(autfunction) && this_mld_rights.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_rights.canChangeKenmerkBlok) {
        prsautlevel = -1;
      }

      var flexParams = {stdm_arr: this_mld_info.stdm_key > 0 ? [this_mld_info.stdm_key] : [],
                        mld_key: bron_mld_key > 0 ? bron_mld_key : mld_key,
                        copy: bron_mld_key > 0,
                        prs_key: perslidkey,
                        act_key: this_mld_info.act_key,
                        reado: (mld_key > 0 && !(this_mld_rights.canFlexChange || this_mld_rights.canChangeKenmerkBlok)), // Bij alleen canChangeKenmerkBlok rechten dan ook check in isReadonly.
                        canFlexChange: this_mld_rights.canFlexChange,
                        showConfidential: bron_mld_key > 0 ? bron_mld_rights.canViewConfidential : this_mld_rights.canViewConfidential,
                        melder_key: this_mld_info.melder_key,
                        srtdisc: S("mld_processing_group_all")? [] : [this_mld_info.srtdisc_key],
                        disc: this_mld_info.disc_key,                                                                            // Initiele waarde primaire Vakgroep/Behandelteam.
                        prsautlevel: prsautlevel,
                        show_alg: this_mld_info.show_alg,
                        loc_key: this_mld_info.loc_key,
                        this_mld: this_mld_rights
                       };
      generateFlexKenmerkBlock (flexParams);
    } // \mldFlex
    else if (id == "mldAfhandel")
    {
      if (lBestaandeMelding && (this_mld_rights.canBOwrite || this_mld_rights.canFOwrite))
      {
        if (S("mld_afhandeling_restrict_edit") == 0 || this_mld_info.remark)
        { // Mag ik kennisbank raadplegen en standaard-antwoorden knippen/plakken
          var authFaq = (S("faq_enabled")==1) && user.checkAutorisation("WEB_FAQFOF", true);
          var afh_rw = this_mld_rights.canAfhandChange && S("mld_afhandeling_restrict_edit") == 0;
          if (S("mld_afrond_canremark") == true)
              afh_rw = true;
          var buttons = [];
          if (authFaq && afh_rw && authFaq.PRSwritelevel<9) // Schrijfrechten op WEB_FAQFOF nodig
          {
            var openKB = "FcltMgr.openDetail('/appl/fac/fac_faq_search.asp?urole="+urole+"&autosearch=1&s='+escape($('#melding_omschrijving').val())"
                       + ", '" + L("lcl_faq_kennisbank") + "') ";
            buttons.push({ icon: "fa-books", title: L("lcl_faq_kennisbank"), action: openKB });
          }

          BLOCK_START(id,  L("lcl_behandelgegevens"), { buttons: buttons, icon: "fa-check" });
            RWTEXTAREATR( "remark",
                          "fldtxt",
                          L("lcl_mld_inf_Opmerking"),
                          this_mld_info.remark,
                          { html: "rows='3' cols='40'", readonly: !afh_rw });
          BLOCK_END();
        }
      }
    } // \mldAfhandel
    else
      return false;
    return true;
  } // \writeBlock

  mld.writeBlocks();
  IFACE.FORM_END();
%>
  </form>
<% SUBFRAME_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
