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

    File:               mld_edit_melding.asp
    Description:        Bekijk/wijzig melding (Mobile version)
    Parameters:         mld_key voor bestaande melding
                        mld_key=-1 voor nieuwe melding, en dan
                            stdm_key
                            ins_key
                            ruimte_key
                            -
                            rest optioneel

                            Nog niet helemaal uitgekristalliseerd hoe de stdm geslecteerd en gefilterd kan worden, handigst
    Note:
    Je kunt en moet eenkostenplaats invullen:
            - als bij vakgroeptype Defaultwaarde kosten klant "Standaard Aan" is
            - als bij Vakgroep Kostenplaats verplicht aangevinkt is
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/get_objecten_sql.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="../mld/mld.inc" -->
<!-- #include file="../mld/mld_flexkenmerk.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->


<%
FCLTHeader.Requires({ js: ["./modernizr-3.3.0.custom.min.js"] });
FCLTHeader.Requires({plugins: ["suggest"]});

var mld_key = getQParamInt("mld_key",-1);
var action = getQParam("action", "");
var qrc = getQParamInt("qrc", 0) != 0;
var mld_info = {};
var plaats_key = -1;
var plaats_niveau = "";
var ins_keys_arr = [];
var ins_name_arr = [];
var addSubheader = false;

// Mogelijke parameters voor toevoegen only
if (mld_key == -1)
{
    // Verplicht:
    var stdm_key = getQParamInt("stdm_key", -1);
    if (stdm_key == -1) {
        Server.Transfer("melding_new.asp"); // Ga maar eerst stdmelding kiezen
    }
    // Optioneel:
    var ins_key = getQParamInt("ins_key", -1);  // test 5009 Het kan zijn dat ik vanuit de lijst deze meekrijg om een nieuwe aan te maken
    var ruimte_key = getQParamInt("ruimte_key", -1);  // Het kan zijn dat ik vanuit de lijst deze meekrijg om een nieuwe aan te maken
    addSubheader = (ins_key > -1 || ruimte_key > -1);
    if (ruimte_key==-1 && ins_key > -1)
    {
        // Als ik een object heb kan ik zelf de plaats precies bepalen (ruimte; TODO of terrein)
        var sql = " SELECT alg_ruimte_key,"
                + "        alg_verdieping_key,"
                + "        alg_gebouw_key,"
                + "        alg_terreinsector_key,"  // doen we nog niets mee
                + "        alg_locatie_key,"
                + "        ins_deel_omschrijving,"
                +          lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
                + "   FROM ins_v_deel_gegevens d, ins_srtdeel sd"
                + "  WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key"
                + "    AND d.ins_deel_key = " + ins_key;

        var oRs = Oracle.Execute(sql);
        var locatie_key = oRs("alg_locatie_key").value;
        var gebouw_key = oRs("alg_gebouw_key").value;
        var verdieping_key = oRs("alg_verdieping_key").value;
        ruimte_key = oRs("alg_ruimte_key").value;

        var ins_name = oRs("ins_srtdeel_omschrijving").value+ " " +oRs("ins_deel_omschrijving").value;
        oRs.Close();
    }
    else
    {
        // Deze zijn niet waarschijnlijk meegegeven, maar de defaultwaarde is ook al handig
        var locatie_key = getQParamInt("locatie_key", -1); // Locatie
        var gebouw_key = getQParamInt("gebouw_key", -1); // Gebouw, kan -1 zijn, dan niet gebruiken
        var verdieping_key = getQParamInt("verdieping_key", -1);
        var ruimte_key = getQParamInt("ruimte_key", -1);
        if (locatie_key < 0 && gebouw_key < 0 && verdieping_key < 0 && ruimte_key < 0)
        { // Geen waarden meegegeven. Neem eigen werklocatie.
          var locatie_key = user.alg_locatie_key({withcurrent:true});
          var gebouw_key = user.alg_gebouw_key({withcurrent:true});
          var verdieping_key = user.alg_verdieping_key({withcurrent:true});
          var ruimte_key =  user.alg_ruimte_key({withcurrent:true});
        }
        else if (ruimte_key > 0)
        { // Bepaald bovenliggende waarden
          var sql = "SELECT alg_locatie_key"
                  + "     , alg_gebouw_key"
                  + "     , alg_verdieping_key"
                  + "  FROM alg_v_allonroerendgoed aog"
                  + " WHERE aog.alg_onroerendgoed_keys = " + ruimte_key
                  + "   AND aog.alg_type = 'R'";
          var oRs = Oracle.Execute(sql);
          var locatie_key = oRs("alg_locatie_key").value;
          var gebouw_key = oRs("alg_gebouw_key").value;
          var verdieping_key = oRs("alg_verdieping_key").value;
        }
        else if (verdieping_key > 0)
        { // Bepaald bovenliggende waarden
          var sql = "SELECT alg_locatie_key"
                  + "     , alg_gebouw_key"
                  + "  FROM alg_v_allonroerendgoed aog"
                  + " WHERE aog.alg_onroerendgoed_keys = " + verdieping_key
                  + "   AND aog.alg_type = 'V'";
          var oRs = Oracle.Execute(sql);
          var locatie_key = oRs("alg_locatie_key").value;
          var gebouw_key = oRs("alg_gebouw_key").value;
        }
        else if (gebouw_key > 0)
        { // Bepaald bovenliggende waarden
          var sql = "SELECT alg_locatie_key"
                  + "  FROM alg_v_allonroerendgoed aog"
                  + " WHERE aog.alg_onroerendgoed_keys = " + gebouw_key
                  + "   AND aog.alg_type = 'G'";
          var oRs = Oracle.Execute(sql);
          var locatie_key = oRs("alg_locatie_key").value;
        }
    }
}

if (mld_key > -1)
{
    // BESTAANDE MELDING
    var this_mld = mld.func_enabled_melding(mld_key); // Wat heb ik zoal aan rechten op deze specifieke melding
    user.auth_required_or_abort(this_mld.canReadAny);
    mld_info = mld.mld_melding_info(mld_key);

    sql = "SELECT l.alg_locatie_code||"
          +          "NVL2(g.alg_gebouw_code,'-'||g.alg_gebouw_code,'') ||"
          +          "NVL2(g.alg_verdieping_code,'-'||g.alg_verdieping_code,'') ||"
          +          "NVL2(g.alg_ruimte_nr,'-'||g.alg_ruimte_nr,'')||"
          +          "NVL2(g.alg_terreinsector_code,'-'||g.alg_terreinsector_code,'') plaatscode"
          + ", alg_onroerendgoed_omschrijving plaats "
        + ", g.alg_ruimte_key"
        + ", g.alg_onroerendgoed_keys"
        + ", g.alg_type"
        + " FROM "
        + "  mld_melding m"
        + ", alg_v_allonrgoed_gegevens g"
        + ", alg_locatie l"
        + " WHERE mld_melding_key = " + mld_key
        + " AND m.mld_alg_onroerendgoed_keys = g.alg_onroerendgoed_keys(+)"
        + " AND m.mld_alg_locatie_key = l.alg_locatie_key(+)";

    var oRs = Oracle.Execute(sql);

    var plaats_string = oRs("plaatscode").value ? oRs("plaatscode").value+" "+(oRs("plaats").value||"") : "";
    var stdm_key = mld_info.stdm;
    var stdm_info = mld.mld_stdmeldinginfo(mld_info.stdm);
    if (oRs("alg_ruimte_key").value)
        ruimte_key = oRs("alg_ruimte_key").value;   // kan ik aan de ruimtebutton meegeven
    plaats_key    = oRs("alg_onroerendgoed_keys").value;
    plaats_niveau = oRs("alg_type").value;
    oRs.Close();

    // Haal gerelateerde objecten op.
    sql = "SELECT d.ins_deel_key"
        + "     , d.ins_deel_omschrijving"
        + "     , sd.ins_srtdeel_omschrijving"
        + "  FROM mld_melding_object mo"
        + "     , ins_deel d"
        + "     , ins_srtdeel sd"
        + " WHERE mo.ins_deel_key = d.ins_deel_key"
        + "   AND d. ins_srtdeel_key = sd.ins_srtdeel_key"
        + "   AND mo.mld_melding_key = " + mld_key;
    var oRso = Oracle.Execute(sql);
    while (!oRso.eof)
    {
      ins_keys_arr.push(oRso("ins_deel_key").value);
      ins_name_arr.push(oRso("ins_srtdeel_omschrijving").value+ " " +oRso("ins_deel_omschrijving").value);
      oRso.MoveNext();
    }
    oRso.Close();
}
else
{
    // NIEUWE MELDING Stdm_Key is ondertussen gegarandeerd
    mld_info.stdm = stdm_key;
    this_mld = {};
    var melder_obj = user;

    // Bepaal de gedetailleerdste plaats die mobiel bekend is of meegegeven.
    plaats_key = ruimte_key;
    plaats_niveau = "R";
    if (plaats_key == -1) {plaats_key = verdieping_key; plaats_niveau = "V";}
    if (plaats_key == -1) {plaats_key = gebouw_key;     plaats_niveau = "G";}
    if (plaats_key == -1) {plaats_key = locatie_key;    plaats_niveau = "L";}

    if (plaats_niveau == 'L')
      sql = "SELECT l.alg_locatie_code plaatscode"
          + "     , l.alg_locatie_plaats plaats"
          + "  FROM alg_locatie l"
          + " WHERE l.alg_locatie_key = " + plaats_key;
    else
      sql = "SELECT l.alg_locatie_code||"
          + "       NVL2(g.alg_gebouw_code,'-'||g.alg_gebouw_code,'') ||"
          + "       NVL2(g.alg_verdieping_code,'-'||g.alg_verdieping_code,'') ||"
          + "       NVL2(g.alg_ruimte_nr,'-'||g.alg_ruimte_nr,'')||"
          + "       NVL2(g.alg_terreinsector_code,'-'||g.alg_terreinsector_code,'') plaatscode"
          + ",      alg_onroerendgoed_omschrijving plaats "
          + "  FROM alg_v_allonrgoed_gegevens g"
          + ",      alg_locatie l"
          + " WHERE g.alg_onroerendgoed_keys = " + plaats_key
          + "   AND g.alg_type = " + safe.quoted_sql(plaats_niveau)
          + "   AND g.alg_locatie_key = l.alg_locatie_key";
    var oRs = Oracle.Execute(sql);
    var plaats_string = !oRs.Eof && oRs("plaatscode").value? oRs("plaatscode").value + " " + oRs("plaats").value : "";

    var stdm_info = mld.mld_stdmeldinginfo(mld_info.stdm);
    mld_info.srtdisc  = stdm_info.ins_srtdiscipline_key;
    mld_info.show_ins = stdm_info.ins_srtdiscipline_ins;
    mld_info.srtinst_verplicht = stdm_info.srtinst_verplicht;

    var mandaat_eigen_kp = S("prs_dep_default_kpn") || stdm_info.show_eigen_kp == 1; // voor alle vakgroepen gemandateerd op eigen kp

    mld_info.mld_kk = stdm_info.ins_srtdiscipline_kostenklant;
    mld_info.prefix = stdm_info.ins_srtdiscipline_prefix;

    if (mandaat_eigen_kp == 1 && mld_info.mld_kk == 1)
      mld_info.kostenpl_key = melder_obj.afdeling().prs_kostenplaats_key() || -1;

    mld_info.mld_stdmelding_omschrijving = stdm_info.stdmelding_omschrijving ;
    mld_info.srtdisc_oms = stdm_info.srtdisc_oms;
    mld_info.ins_discipline_omschrijving = stdm_info.discipline_omschrijving;
}
var subject = (mld_key > -1
              ? (mld_info.prefix || "")+ mld_key + " " + mld_info.mld_stdmelding_omschrijving
              : L("lcl_mobile_new").format(mld_info.mld_stdmelding_omschrijving )
              );

var subjectSubheader = "";
if (addSubheader)
{
    if (ins_key > -1)
      subjectSubheader = L("lcl_mobile_about").format(ins_name);
    else if (ruimte_key > -1)
      subjectSubheader = L("lcl_mobile_at").format(plaats_string);
}


// TODO lcl.set_dialect(mld_melding.srtdisc, "MLD_SRTDISCIPLINE_KEY");

%>
<html>
  <head>
<% FCLTMHeader.Generate({title:  subject }); %>
    <script type="text/javascript">
        var timerID=null;
        function delayed(delay, fn)
        {
            if (timerID) clearTimeout(timerID);
                timerID = setTimeout(fn, delay);
        }

        function mld_accept()
        {   // Eérst accepteren, dan saven. Ander heb je met BOF maar zonder FOF een probleem
            $.post( "../mld/mld_accept_save.asp?mld_key=<%=mld_key%>"
                  , $("[name=meld]").serialize()
                  , FcltCallbackAndThen(function ()
                      {
                        $.post( $("form[name=meld]")[0].action
                              , $("[name=meld]").serialize()
                              , McltCallbackRefresh
                              , "json");
                      })
                  , "json");
            return false;
        };

        function mld_close()
        {
            $.post( $("form[name=meld]")[0].action
                  , $("[name=meld]").serialize()
                  , FcltCallbackAndThen(function ()
                     {
                       $.post( "../mld/mld_close_save.asp?mld_key=<%=mld_key%>"
                             , $("[name=meld]").serialize()
                             , McltCallbackRefresh
                             , "json");
                     })
                  , "json");
            return false;
        };

        function mld_submit_callback(json)
        {
          if (json.doublecheck)
          {
            alert("<%=L("lcl_mld_already_registered")%>");
            return;
          }

          if (json.success)
          {
            if (json.mld_key > 0 && !json.opdr_key) // Na opslaan opdracht niet nog een keer de melding weergeven.
<%            if (qrc) { %>
                alert("<%=L("lcl_pda_mld_call_confirm")%>");
                McltCallbackClose(json);
<%            } else { %>
                jqToast(L("lcl_mobile_data_saved")); // ' onder nummer ... '
<%            } %>

<% if (mld_key < 0)
   { %>
            if (json.autoorder)
            {
              var data = { mld_key: json.mld_key,
                           urole: "fe",
                           autoorder: 1 };
              <% protectRequest.dataToken("data"); %>
              $.post("../mld/mld_edit_opdr_save.asp",
                     data,
                     McltCallbackAndThenAlways(function () { mld_submit_callback({success: true, mld_key: json.mld_key }) }),
                     "json");

              verynew="0"; // zo nieuw zijn we niet meer.
            }
            else
<% } %>
            {
            <% if (qrc) { %>
                // Waarschijnlijk QR-code op koffieautomaat. Niet naar andere schermen springen.
                $("input[name=mld_key]").val(json.mld_key);
            <% } else if (mld_key < 0){ %>
                // Nieuwe melding aangemaakt. Altijd complete reload, we hebben nu een mld_key namelijk
                window.location.href = "melding.asp?mld_key=" + json.mld_key;
            <% } else { %>
                // Opslaan button geklikt. Er hoeft niet gerefreshed te worden. Er kan direct weer gewijzigd worden (Afhandeling)
            <% } %>
            }
          }
        };

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

        function mld_forward()
        {
            window.location.href = "melding_new.asp?mld_key=<%=mld_key%>&action=forward";
        }

        function PasteFromSelectbox()
        {
            if ($("#stdremark :selected").val() > -1)
            {
                $("#remark").focus();
                var PastedText = $("#stdremark :selected")[0].getAttribute("afmeldtekstoms");
                $("#remark").val($("#remark").val() + ($("#remark").val() != ""? "\n" : "") + PastedText);
            }
        }

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

        function mld_forward_submit()
        {
            if (!validateForm("u2"))
                return false;

            $.post($("form[name=meld_fwd]")[0].action,
                   $("[name=meld_fwd]").serialize(),
                   mld_forward_submit_callback,
                   "json");
            return true;
        }

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

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

    </script>
  </head>
  <body>
    <div>
<%
if (action != "forward")
{
      PAGE_START({id: "page-1-"+mld_key});
      HEADER({title: safe.html(subject), back:!qrc, home: !qrc, datatheme: (1||mld_info.melder_key==user_key ? jQFrontEndTheme : null) });
      if (addSubheader)
        HEADER({title: safe.html(subjectSubheader), datatheme: jQHeaderTheme});
      CONTENT_START();

// Altijd forcesave omdat we geen doublecheck aankunnen
%>
      <form name="meld" id="meld" action="../mld/mld_edit_melding_save.asp" method="post">
        <input type="hidden" name="mld_key" value="<%=mld_key%>">
        <input type="hidden" name="forcesave" id="forcesave" value="0">
        <input type="hidden" name="parent_key" id="parent_key" value="-1">
        <input type="hidden" name="urole" value="<%=mld_key > 0? "bo" : "fe"%>">
        <input type="hidden" name="stdm" value="<%=mld_info.stdm%>">
<%
        if (mld_key == -1)
        { // Nieuw, maar deze velden kunnen we zelf verzinnen
%>
            <input type="hidden" name="person" value="<%=user_key%>">
            <input type="hidden" name="locatiekey" value="<%=locatie_key%>">
            <input type="hidden" name="gebouwkey" value="<%=gebouw_key%>">
            <input type="hidden" name="verdiepingkey" value="<%=verdieping_key%>">
            <input type="hidden" name="ruimtekey" id="ruimtekey" value="<%=ruimte_key%>">
            <input type="hidden" name="meldbronkey" value="7">
<%
        }
        else
        { // Voor bestaande melding moet de start en einddatum mee worden gegeven aan mld_edit_melding_save
          // om te voorkomen dat deze daar gevuld worden met default sysdate.
%>
            <input type="hidden" name="startdate" value="<%=mld_info.melddatum.getTime()%>">
            <input type="hidden" name="enddate"   value="<%=mld_info.einddatum.getTime()%>">
<%
        }

        if (mld_key > -1)   // bestaande
        {
            BLOCK_START({collapsed: true, title: L("lcl_mld_frame_algemeen")});
                var prs_melder = new Perslid(mld_info.melder_key);
                ROFIELD("fld", L("lcl_caller")         , prs_melder.naam(), { moreinfo: "tel:"+(prs_melder.prs_perslid_mobiel()||prs_melder.prs_perslid_telefoonnr()) });
                ROFIELD("fld", L("lcl_mld_date_time")  , toDateTimeString(mld_info.melddatum));
                ROFIELD("fld", L("lcl_vakgroup")       , (mld_info.prefix+"-" || "") + mld_info.ins_discipline_omschrijving);
            BLOCK_END();
        }

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

        if (stdm_info.ins_srtdiscipline_kostenklant==1 && stdm_info.kpnverplicht) {

            FCLTkostenplaatsselector("account",
                                     "sgAccount",
                                     user_key,
                                     { kostenplaatsKey: mld_info.kostenpl_key || -1,
                                       label: L("lcl_mld_inf_Kostenplaats"),
                                       extraParamField: "module",
                                       extracode: "M",
                                       filtercode: "AA",
                                       required: true
                                     });
        }

        if (mld_key > -1)
        {
            ROFIELD("fld", L("lcl_place"), plaats_string, {suppressEmpty: true} );

            ROFIELD("fld", L("lcl_txt")                              , mld_info.mld_omschr, {multi: true});
            if (mld_info.mprio != 3) {
                ROFIELD("attention", L("lcl_mld_urg")                , mld.getpriotext(mld_info.mprio));
            }
            if (mld_info.behandel_key)
            {
                var prs_behandelaar = new Perslid(mld_info.behandel_key);
                ROFIELD((mld_info._behandel_key != user_key ?"attention":"fld"), L("lcl_mld_behandelaar")   , prs_behandelaar.naam(), {suppressEmpty: true });
            }

            generateFlexKenmerkBlock ({
                                       fnpre    : function () {},
                                       fnpost   : "",
                                       stdm_arr : [mld_info.stdm],
                                       mld_key  : mld_key,
                                       prs_key  : user_key,
                                       reado    : (mld_key > 0 && !this_mld.canFlexChange),
                                       mobile   : true
                                      });
        }
        else // Nieuwe
        {
            if (stdm_info.freetext > 0)
                RWFIELD("melding_omschrijving", L("lcl_txt"), "", {multi: true, pclass: (stdm_info.freetext==2 ? "required" : "") });

            generateFlexKenmerkBlock ({
                                       fnpre    : function () {},
                                       fnpost   : "",
                                       stdm_arr : [mld_info.stdm],
                                       mld_key  : mld_key,
                                       prs_key  : user_key,
                                       reado    : (mld_key > 0 && !this_mld.canFlexChange),
                                       mobile   : true
                                      });
        }

        if (mld_key > -1)
        {
            if (this_mld.canAfhandChange)
            {
              sql = "SELECT COUNT(*) aantal"
                  + "  FROM mld_afmeldtekst"
                  + " WHERE mld_stdmelding_key IS NULL"
                  + "    OR mld_stdmelding_key = " + mld_info.stdm
              oRs2 = Oracle.Execute(sql);
              if (oRs2("aantal").value > 0)
              {
                sql = "SELECT mld_afmeldtekst_key"
                    + "     , " + lcl.xsqla('mld_afmeldtekst_naam', 'mld_afmeldtekst_key')
                    + "     , " + lcl.xsql('mld_afmeldtekst_omschrijving', 'mld_afmeldtekst_key') + " afmeldtekstoms"
                    + "  FROM mld_afmeldtekst"
                    + " WHERE mld_stdmelding_key IS NULL"
                    + "    OR mld_stdmelding_key = " + mld_info.stdm
                    + " ORDER BY 2";
                FCLTselector("stdremark",
                             sql,
                             { label: L("lcl_mld_inf_std_opm"),
                               initKey: -1,
                               emptyOption: "",
                               extraParamValue: "afmeldtekstoms",
                               onChange: "PasteFromSelectbox()",
                               mobile: true});
              }

              RWFIELD("remark", L("lcl_mld_inf_Opmerking"), mld_info.remark, {multi: true});
            }
            else
            {
              if (mld_info.parent_key)  // gekoppelde melding verwijst naar de parent voor afhandeling
              {
                  var sprefix = mld.mld_prefix(mld_info.parent_key);
                  var params = { moreinfo: "melding.asp?mld_key=" + mld_info.parent_key, disabled: true};
                  ROFIELD("fld", L("lcl_mld_completion_in"), sprefix + mld_info.parent_key, params);
              }
              else
                ROFIELD("fld", L("lcl_mld_inf_Opmerking"), mld_info.remark);

            }
        }

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

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

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

        CONTROLGROUP_START()
        if (this_mld.canChange || mld_key == -1) {
            BUTTON((mld_key>-1 ? L("lcl_submit") : L("lcl_newsubmit")), {click: "mld_submit()", dataicon: "refresh"});
        }
        if (mld_key > -1) {
            if (this_mld.canAccept) {
                BUTTON(L("lcl_mld_accept"), {click: "mld_accept()", dataicon: "check"});
            }
            if (this_mld.canClose) {
                BUTTON(L("lcl_close"), {click: "mld_close()", dataicon: "check"});
            }
            if (this_mld.canForward || this_mld.canFixMelding) { // bo2bo
                BUTTON( (this_mld.canForward?L("lcl_forward"):L("lcl_fixmelding")),
                        { click: "mld_forward()",
                          dataicon: "forward",
                          dataajax: "false"} );
            }
            var tsql = "SELECT COUNT(ins_deel_key) FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key;
            toRs = Oracle.Execute(tsql);
            if (toRs(0).value>0) {
              if (toRs(0).value==1)
              {
                tsql = "SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key;
                toRs1 = Oracle.Execute(tsql);
                BUTTON(L("lcl_mobile_objecten")+" ("+toRs(0).value+")", {linkid: "./ins_deel.asp?ins_key="+toRs1("ins_deel_key").value, dataicon: "info", dataajax: 'false'});
              }
              else
                BUTTON(L("lcl_mobile_objecten")+" ("+toRs(0).value+")", {linkid: "./ins_list.asp?mld_key="+mld_key, dataicon: "info", dataajax: 'false'});
            }
            trackinglines = mobile.hastrackingpage('melding', mld_key);
            if (trackinglines>0) {
                BUTTON(L("lcl_history"), {linkid: "#mld-2-"+mld_key, dataicon: "bullets", transition: "pop", datarel: "dialog"});
            }
            if (mfe.canReadNotes) { // Heb ik rechten om notities te zien
                var tsql = "SELECT COUNT(*) FROM mld_melding_note n WHERE n.mld_melding_key = " + mld_key;
                toRs = Oracle.Execute(tsql);
                BUTTON(L("lcl_mld_frame_notes")+" ("+toRs(0).value+")", {linkid: "./notitie.asp?node=melding&key="+mld_key, dataicon: "comment", dataajax: 'false'});
            }
            if (ruimte_key > -1 && user.checkAutorisation( "WEB_ALGUSE", true)) {
                BUTTON(L("lcl_room"), {linkid: "./ruimte.asp?ruimte_key="+ruimte_key, dataicon: "info", dataajax: 'false'});
            }
            if (opdr_page != "") {
              var tsql = "SELECT COUNT(*) FROM mld_opdr o WHERE o.mld_melding_key = " + mld_key
                       + "   AND o.mld_statusopdr_key IN (4, 5, 8)";  // zelfde als die in orders_list worden getoond
              toRs = Oracle.Execute(tsql);
              BUTTON(L("lcl_mobile_opdrachten")+" ("+toRs(0).value+")", {linkid: opdr_page, dataicon: "action", dataajax: "false"});
            }
         }
         CONTROLGROUP_END()
         IFACE.FORM_END();
%>
      </form>
<%
      CONTENT_END();
      FOOTER();
      PAGE_END()
      if (mld_key > -1)
      {
          if (trackinglines>0) {
              PAGE_START({id: "mld-2-"+mld_key})
                mobile.trackingpage('melding', mld_key, (mld_info.prefix || "")+ mld_key);
              PAGE_END();
          }
          // Deze pagina zou nog niet hoeven als er geen notes zijn, geeft niks
          PAGE_START({id: "mld-3-"+mld_key})
            mobile.notespage('melding', mld_key, (mld_info.prefix || "")+ mld_key);
          PAGE_END();
      }
}

if (action == "forward")
{
    var stdm_key = getQParamInt("stdm_key", -1);
    var disc_key = getQParamInt("srtdisc", -1);

      PAGE_START({id: "mld-4-"+mld_key});
        HEADER({title: L("lcl_mld_forward_mld").format((mld_info.prefix || "") + mld_key), back:!qrc });
        CONTENT_START();
%>
    <form name="meld_fwd" id="meld_fwd" action="../mld/mld_forward_save.asp?mld_key=<%=mld_key%>" method="post">
      <input type="hidden" name="disc" id="disc" value="<%=disc_key%>">
      <input type="hidden" name="stdm" id="stdm" value="<%=stdm_key%>">
<%
          ROFIELD("fld", L("lcl_vakgroup"), stdm_info.discipline_omschrijving);
          ROFIELD("fld", L("lcl_complain"), stdm_info.stdmelding_omschrijving);
          ROFIELD("fld", "", mld_info.remark);  // De opmerking/afhandeling die er al stond...
          RWFIELD("opmerk", L("lcl_mld_inf_Opmerking"), "", {multi: true, pclass: (stdm_info.freetext==2 ? "required" : "")});

          CONTROLGROUP_START()
            BUTTON(L("lcl_forward"), {click: "mld_forward_submit()", dataicon: "check"} );
            BUTTON(L("lcl_cancel"), {click: "mld_forward_cancel()", dataicon: "back"} );
          CONTROLGROUP_END()
          IFACE.FORM_END();
%>
    </form>
<%
        CONTENT_END();
        FOOTER();
      PAGE_END();
}
%>
    </div>
  </body>
</html>
