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

    File:         ins_deel_free.asp
    Description:  Modal screen

    Parameters:   ins_key of
                  res_deel_key (dan zoeken we ins_key zelf wel op)

    Context:
    Note:

*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/contactpersoonselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="./ins_flexkenmerk.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/objectselector.inc" -->
<!-- #include file="./ins.inc" -->

<%
FCLTHeader.Requires({ plugins:["jQuery"],
                      js: ["multi.js"] });

var has_rsvdeel = false;
var adapt = getQParamInt("adapt", 0) == 1;
var lendout = getQParamInt("lendout", 0) == 1;
var takein = getQParamInt("takein", lendout? 0 : 1) == 1;
var rsv_deel_key = getQParamInt("rsv_deel_key", -1); // We komen uit een bestaande reservering
var ins_key_arr;
if (rsv_deel_key > 0)
{
  var sql = "SELECT res_ins_deel_key"
          + "  FROM res_rsv_deel rrd,"
          + "       res_deel rd"
          + " WHERE rrd.res_deel_key = rd.res_deel_key"
          + "   AND res_rsv_deel_key = " + rsv_deel_key;
  var oRs = Oracle.Execute(sql);
  ins_key_arr = [oRs("res_ins_deel_key").Value];
  oRs.Close();
}
else
  ins_key_arr = getQParamIntArray("ins_keys", []);

var autfunction;
var authparams;
var sort_key;
var algprs_key;
var alg_ruimte_type;
var isCil = false;
var desc;
var objecten = [];
var ingesloten = [];
var srtdeelkey_array = [];
if (ins_key_arr.length)
{
  var tobeLendoutTakein = 0;
  var isSleCil = ins.isSleCil(ins_key_arr[0]); // Er is minimaal 1 ins_key.
  // Bepaal de objecten in de selectie die
  // ook echt uitgegeven of ingenomen kunnen of mogen worden.
  for (var i = 0; i < ins_key_arr.length; i++)
  {
    var disc_key;
    // Indien het een sleutel of cilinder betreft dan WEB_SLEFOF rechten i.p.v. WEB_INSFOF rechten.
    if (isSleCil && i == 0) // Alleen de eerste keer autorisatie bepalen.
    {
      autfunction = "WEB_SLEFOF";
      authparams = user.checkAutorisation(autfunction, true);
    }
    else
    {
      var sql = "SELECT ins_discipline_key"
              + "  FROM ins_deel"
              + " WHERE ins_deel_key = " + ins_key_arr[i];
      var oRs = Oracle.Execute(sql);
      // Als de key van het object nog niet bekend is dan neem ik de discipline niet mee en blijft die null.
      if (!oRs.eof)
        disc_key = oRs("ins_discipline_key").Value;
      oRs.Close();

      autfunction = "WEB_INSFOF";
      authparams = user.checkAutorisation(autfunction, true, disc_key);
    }

    var sql = "SELECT d.ins_deel_key"
            + "     , d.ins_srtdeel_key"
            + "     , d.ins_alg_ruimte_key"
            + "     , d.ins_alg_ruimte_type"
            + "     , d.ins_deel_omschrijving"
            + "     , s.ins_srtgroep_key"
            + "  FROM ins_v_deelenonderdeel d"
            + "     , ins_srtdeel s"
            + " WHERE d.ins_srtdeel_key = s.ins_srtdeel_key"
            + "   AND d.ins_deel_key = " + ins_key_arr[i];
    if (!adapt)
    {
      sql += (lendout
        ? "   AND d.ins_alg_ruimte_key_org IS NULL"      // Uitgeven.
          + " AND d.ins_alg_ruimte_type_org IS NULL"
        : "   AND d.ins_alg_ruimte_key_org IS NOT NULL"  // Innemen.
          + " AND d.ins_alg_ruimte_type IN ('C', 'P', 'R', 'T')");
    }
    var oRs = Oracle.Execute(sql);
    var canCheckOut = lendout && !oRs.eof; // Is het object vrij?
    var canTakein   = takein && !oRs.eof;  // Is het object uitgeleend?

    // Ik moet enige schrijfrechten hebben op de object discipline.
    if (((authparams && authparams.ALGwritelevel < 9) || (authparams && authparams.PRSwritelevel < 9)) &&
        (canCheckOut || canTakein))
    {
      if (tobeLendoutTakein == 0)
      { // Gegevens eerste object.
        sort_key = oRs("ins_srtdeel_key").Value;
        algprs_key = oRs("ins_alg_ruimte_key").Value; // alg_key (niet uitgeleend) of prs_key (uitgeleend)
        alg_ruimte_type = oRs("ins_alg_ruimte_type").Value;
        isCil = oRs("ins_srtgroep_key").Value == S("cil_ins_srt_groep_key");
        desc = oRs("ins_deel_omschrijving").Value;
      }
      objecten.push(oRs("ins_deel_omschrijving").Value);
      ingesloten.push(ins_key_arr[i]);
      srtdeelkey_array.push(oRs("ins_srtdeel_key").Value);
      tobeLendoutTakein++;
    }
    oRs.Close()
  }

  user.auth_required_or_abort(adapt || (tobeLendoutTakein > 0 && lendout != takein)); // We klagen niet over enkele wel en enkele niet.
}
else
{ // Dan moet er een prs_key meegegeven zijn. Object uitlenen.
  autfunction = "WEB_INSFOF";
  authparams = user.checkAutorisation(autfunction, true); // Er is geen object key en dus ook een discipline.

  // Ik moet enige schrijfrechten hebben op de object discipline.
  user.auth_required_or_abort((authparams && authparams.ALGwritelevel < 9) || (authparams && authparams.PRSwritelevel < 9));
}

if (ingesloten.length)
{ // Object uitlenen of innemen
  if (isCil)
  {
    sql = "SELECT aor.alg_locatie_key"
        + "     , aor.alg_gebouw_key"
        + "     , aor.alg_terreinsector_key"
        + "     , aor.alg_verdieping_key"
        + "     , aor.alg_ruimte_key"
        + "     , aor.alg_type"
        + "  FROM alg_v_allonroerendgoed aor"
        + " WHERE aor.alg_onroerendgoed_keys = " + algprs_key;
    var oRs_1 = Oracle.Execute(sql);

    var loc_key = oRs_1("alg_locatie_key").Value;
    var bld_key = oRs_1("alg_gebouw_key").Value;
    var ter_key = oRs_1("alg_terreinsector_key").Value;
    var flr_key = oRs_1("alg_verdieping_key").Value;
    var room_key = oRs_1("alg_ruimte_key").Value;
    var alg_type = oRs_1("alg_type").Value;
    oRs_1.Close();
  }

  var default_prs_key = null;
  var host_naam = "";
  var restxt = "";
  var hasreservering = false;
  var has_rsvdeel = (rsv_deel_key > 0) && lendout;
  var res_rsv_deel_key = null;
  if (lendout)
  {
    // Zijn het reserveerbare objecten.
    var sql = "SELECT res_deel_key"
            + "  FROM res_deel"
            + " WHERE res_ins_deel_key IN (" + ingesloten.join(",") + ")"
    var oRs = Oracle.Execute(sql);
    var res_delen = [];
    while (!oRs.eof)
    {
        res_delen.push(oRs("res_deel_key").Value);
        oRs.MoveNext();
    }
    oRs.Close();

    if (res_delen.length > 0)
    {   // Zoek de contactpersoon van eerstkomende reservering.
        restxt = L("lcl_ins_lend_no_res"); // Geen toekomstige reservering gevonden
        var sql = "SELECT rrr.res_reservering_key"
                + "     , rrr.res_rsv_ruimte_volgnr"
                + "     , rrr.res_rsv_ruimte_van"
                + "     , rrr.res_rsv_ruimte_host_key"
                + "     , rrd.res_rsv_deel_key"
                + "     , " + S("prs_pers_string") + " host_naam"
                + "  FROM res_rsv_ruimte rrr"
                + "     , res_rsv_deel rrd"
                + "     , prs_perslid p"
                + " WHERE res_rsv_ruimte_host_key = p.prs_perslid_key(+)"
                + "   AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
                + "   AND res_rsv_deel_verwijder IS NULL"
                // Alleen reserveerbare objecten.
                + "   AND res_deel_key IN (" + res_delen.join(",") + ")"
                + "   AND res_rsv_deel_tot > SYSDATE"
                + (rsv_deel_key > 0
                  ? " AND res_rsv_deel_key = " + rsv_deel_key
                  : " ORDER BY res_rsv_deel_tot ASC"); // Eerstkomende eerst.
        var oRs2 = Oracle.Execute(sql);
        if (!oRs2.Eof)
        {
            default_prs_key = oRs2("res_rsv_ruimte_host_key").Value; // gedachte is dat de gastheer daadwerkelijk naar
                                                                     // de zaal gaat en de contactpersoon niet perse
            host_naam = oRs2("host_naam").Value;
            restxt = L("lcl_ins_lend_next_res").format(
                            String(oRs2("res_reservering_key").Value) + "/" + oRs2("res_rsv_ruimte_volgnr").Value,
                            toDateTimeString(oRs2("res_rsv_ruimte_van").Value),
                            oRs2("host_naam").Value);
            hasreservering = true;
            res_rsv_deel_key = oRs2("res_rsv_deel_key").Value;
        }
        oRs2.Close();
    }
  }
}
else
{ // Dan moet er een prs_key (of cps_key, [contactpersoon_key]) meegegeven zijn -> Object uitlenen
  lendout = 1;
  takein = 0;
  var dis_key = getQParamInt("dis_key", -1); // Discipline
  var srtgroup = getQParamInt("srtgroup", -1); // Groep
  var srtdeel = getQParamInt("srtdeel", -1); // Objectsoort

  var prs_key = getQParamInt("prs_key", -1);
  var cps_key = getQParamInt("cps_key", -1);

  if (prs_key > 0)
  {
    var sql = "SELECT " + S("prs_pers_string") + " naam"
            + " FROM prs_perslid p"
            + " WHERE prs_perslid_key = " + prs_key;
    var oRs = Oracle.Execute(sql);

    var prs_naam = oRs("naam").Value;
  }
  else
  { // er is een contactpersoon_key meegegeven (cps_key > 0)
    var sql = "SELECT " + S("prs_contactpers_string") +" naam"
            + " FROM prs_contactpersoon cp"
            + " WHERE cp.prs_contactpersoon_key = " + cps_key;
    var oRs = Oracle.Execute(sql);

    var prs_naam = oRs("naam").Value;
  }
  var sort_key = -1;
}

%>
<html>
  <head>
<%
    FCLTHeader.Generate();
%>
    <script type="text/javascript">

      async function ins_submit()
      {
        document.activeElement.blur(); // trigger laatste onChanges
        if (!await validateForm("u2"))
          return false;
        var data = $("form").serializeArray();
        protectRequest.dataToken(data);
        $.post("ins_deel_free_save.asp",
               data, //TODO: Gewoon submit van het formulier en ins_deel_free_save.asp hierop aanpassen.
               FcltCallbackClose,
               "json");
        return true; // disable button
      }

      function ins_cancel()
      {
        FcltMgr.closeDetail(window, { cancel: true });
      }

      function updateSrtGroup(pautfunction, psrtgroup_arr, psrtdeel_arr)
      {
        // Object suggestbox leeg maken. checkExist moet dan false zijn en lastTry true.
        sgObject.setValue(-1, "", true, false, null, true);
        var ldis_key = $('#disc :selected').val();
        $("#srtgroup").load("../Shared/loadGroup.asp?" + serializeObj(
                            { autfunction: pautfunction,
                              disc_key_arr: ldis_key,
                              module: "ins",
                              required: 1,
                              emptyOption: "",
                              srtgroup: (psrtgroup_arr? psrtgroup_arr.join(",") : "")
                            }), // srtgroupChanged
                            function ()
                            {
                              // Laad de items
                              // Selecteer eventueel de initiële items die meegegeven kunnen worden
                              updateSrtDeel(pautfunction, (psrtdeel_arr? psrtdeel_arr : []));
                            });
      }

      function updateSrtDeel(pautfunction, psrtdeel_arr)
      {
        // Object suggestbox leeg maken. checkExist moet dan false zijn en lastTry true.
        sgObject.setValue(-1, "", true, false, null, true);
        var lsrtgroup = $('#srtgroup :selected').val();
        $("#srtdeel").load("../Shared/loadSrtDeel.asp?" + serializeObj(
          { autfunction : pautfunction,
            srtgroup_key_arr: lsrtgroup,
            module: "ins",
            srtdeel_arr: (psrtdeel_arr? psrtdeel_arr.join(",") : ""),
            required: 1,
            emptyOption: "",
            multi: 1
          })
        );
      }

      function loadKenmerk()
      {
        var ins_key = $("#ins_keys").val();
        var s = "load_kenmerk.asp?urole=fo"
              + "&ins_key=" + ins_key
              + "&reado=0"
              + "&lendout=1"
              + "&srtdeel_arr=";
        $.get(s, flexReloaded);
      }

      function onChangeGebouw()
      {
        var isGebouw = $("#bttype").val() == "B";

        if ($("#bttype").val() == "B")
        { // Het is een gebouw
          if (!$("#verdieping").hasClass("required"))
            $("#verdieping").addClass("required");
          if (!$("#ruimte").hasClass("required"))
            $("#ruimte").addClass("required");
        }
        else
        { // Het is een terrein
          $("#verdieping").removeClass("required");
          $("#ruimte").removeClass("required");
        }
      }

      function onChangePerson(check)
      { // Naam is aangepast.
        if ($("#lent_out_person").val() > 0/* || $("#leen_vrij").is(":checked")*/)
        { // Naam is gevuld met een waarde.
          // Vinkje ervoor zetten, required attribute zetten (synchroon lopen) en veld verplicht maken.
          $("input[type=checkbox][name=check_lent_out_person]").prop("checked", true);
          $("#check_lent_out_person").attr("req_check_lent_out_person", true);
          $("#lent_out_person_show").toggleClass("required", true);
          // setValue(key, txt, doonChange, checkExist, extraParam, lastTry)
          // De user hoef ik hier niet te checken of die bestaat (checkExist).
          if (typeof sglent_out_cperson != "undefined")
          { // Contactpersoon was gevuld. Dan moet contactpersoon leeg gemaakt worden.
            sglent_out_cperson.setValue(-1, "");
            // Vinkje verwijderen, required attribute op false zetten (synchroon lopen) en verplicht van het veld halen.
            $("input[type=checkbox][name=check_lent_out_cperson]").prop("checked", false);
            $("#check_lent_out_cperson").attr("req_check_lent_out_cperson", false);
            $("#lent_out_cperson_show").toggleClass("required", false);
          }
        }
        else
        { // Naam is leeg gemaakt of vinkje is eraf gehaald.
          // Vinkje verwijderen.
          $("input[type=checkbox][name=check_lent_out_person]").prop("checked", false);
          if ($("#lent_out_cperson").val() < 0)
          { // Naam en contactpersoon zijn beide leeg..
            // Dan naam verplicht maken en required attribute zetten (synchroon lopen).
            $("#check_lent_out_person").attr("req_check_lent_out_person", true);
            $("#lent_out_person_show").toggleClass("required", true);
          }
          else
          { // Contactpersoon is nog gevuld. Vinkje is eraf gehaald.
            // Verplichting van naam halen en required attribute op false zetten (synchroon lopen).
            $("#check_lent_out_person").attr("req_check_lent_out_person", false);
            $("#lent_out_person_show").toggleClass("required", false);
          }
        }

        // Als het vinkje van de checkbox voor het veld naam er niet afgehaald is, dan is de naam aangepast.
        // Dan radiobutton voor de naam zetten.
        if (!check)
          $("#leen_vrij").prop("checked", true);
      }

      function onChangeCPerson(check)
      { // Contactpersoon is aangepast.
        if ($("#lent_out_cperson").val() > 0/* || $("#leen_vrij").is(":checked")*/)
        { // Contactpersoon is gevuld met een waarde.
          // Vinkje ervoor zetten, required attribute zetten (synchroon lopen) en veld verplicht maken.
          $("input[type=checkbox][name=check_lent_out_cperson]").prop("checked", true);
          $("#check_lent_out_cperson").attr("req_check_lent_out_cperson", true);
          $("#lent_out_cperson_show").toggleClass("required", true);
          // setValue(key, txt, doonChange, checkExist, extraParam, lastTry)
          // De user hoef ik hier niet te checken of die bestaat (checkExist).
          if (typeof sglent_out_person != "undefined")
          { // Naam was gevuld. Dan moet naam leeg gemaakt worden.
            sglent_out_person.setValue(-1, "");
            // Vinkje verwijderen, required attribute op false zetten (synchroon lopen) en verplicht van het veld halen.
            $("input[type=checkbox][name=check_lent_out_person]").prop("checked", false);
            $("#check_lent_out_person").attr("req_check_lent_out_person", false);
            $("#lent_out_person_show").toggleClass("required", false);
          }
        }
        else
        { // Contactpersoon is leeg gemaakt.
          // Vinkje verwijderen.
          $("#check_lent_out_cperson").attr("req_check_lent_out_cperson", false);
          // Verplichting van contractpersoon halen en required attribute op false zetten (syncroon lopen).
          $("input[type=checkbox][name=check_lent_out_cperson]").prop("checked", false);
          $("#lent_out_cperson_show").toggleClass("required", false);

          if ($("#lent_out_person").val() < 0)
          {
            // Naam en contactpersoon zijn beide leeg.
            // Dan naam verplicht maken en required attribute zetten (synchroon lopen).
            $("#check_lent_out_person").attr("req_check_lent_out_person", true);
            $("#lent_out_person_show").toggleClass("required", true);
          }
        }

        // Als het vinkje van de checkbox voor het veld naam er niet afgehaald is, dan is de naam aangepast.
        // Dan radiobutton voor de naam zetten.
        if (!check)
          $("#leen_vrij").prop("checked", true);
      }

      function onChangeIsres()
      {
        if ($("#leen_res").is(":checked"))
        { // Reservering.
          // De naam weer met de reservering host vullen.
          // Bij het opslaan wordt bij een reservering altijd de host opgeslagen ongeacht wat er was ingevuld.
          // Dan hier ook maar altijd invullen. Dan is het duidelijk wat wordt opgeslagen.
          // Dan de checkboxen voor de velden ook ook maar goed zetten voor de duidelijkheid.
          sglent_out_person.setValue(<%=default_prs_key || -1%>, "<%=host_naam%>");
          $("#check_lent_out_person").prop("checked", true);
          $("#check_lent_out_person").attr("req_check_lent_out_person", false);
          $("#lent_out_person_show").removeClass("required");

          // Contactpersoon leeg maken.
          sglent_out_cperson.setValue(-1, "");
          $("#check_lent_out_cperson").prop("checked", false);
          $("#check_lent_out_cperson").attr("req_check_lent_out_cperson", false);
          $("#lent_out_cperson_show").removeClass("required");
        }
        if ($("#leen_vrij").is(":checked"))
        { // Geen reservering, maar los uitgeven.
          if ($("#lent_out_cperson").val() > 0)
          { // Contactpersoon is gevuld. Contactpersoon verplicht maken.
            $("#check_lent_out_cperson").attr("req_check_lent_out_cperson", true);
            $("#lent_out_cperson_show").addClass("required");
          }
          else
          { // Contactpersoon is niet gevuld. Naam verplicht maken.
            $("#check_lent_out_person").attr("req_check_lent_out_person", true);
            $("#lent_out_person_show").addClass("required");
          }
        }
      }

      function onChangeSuggest(prs_key, prs_txt, obj)
      { // Eigen onChange functie voor de suggest boxen.
        if (!($("#leen_res").is(":checked") && obj.check))
        { // Geen reservering en vinkje is er niet afgehaald. Dan is het veld naam of contactpersoon aangepast.
          switch (obj.suggestid)
          {
              case "lent_out_person_show":  if (<%=ingesloten.length%> > 0 &&
                                                "<%=alg_ruimte_type%>" != "C" &&
                                                <%=(!has_rsvdeel || (has_rsvdeel && !hasreservering))? 1 : 0%> == 1 &&
                                                <%=(!takein || ingesloten.length == 1)? 1 : 0%> == 1)
                                              onChangePerson(obj.check);
                                            break;
              case "lent_out_cperson_show": onChangeCPerson(obj.check);
                                            break;
          }
        }
        else
        { // Is reservering + vinkje eraf gehaald, dan de naam weer met de reservering host vullen.
          // Bij het opslaan wordt bij een reservering altijd de host opgeslagen ongeacht wat er was ingevuld.
          // Dan hier ook maar altijd invullen. Dan is het duidelijk wat wordt opgeslagen.
          // Dan de checkboxen voor de velden ook ook maar goed zetten voor de duidelijkheid.
          sglent_out_person.setValue(<%=default_prs_key || -1%>, "<%=host_naam%>");
          $("#check_lent_out_person").prop("checked", true);
          $("#check_lent_out_cperson").prop("checked", false);
        }
      };

    </script>
  </head>

  <body class="fclt-modal" id="mod_insdeelfree">
  <% MODAL_START(); %>
    <form name="u2"
          action="ins_deel_free_save.asp"
          method="post"
          onsubmit="ins_submit();return false">
      <input type="hidden" name="adapt" id="adapt" value="<%=adapt? 1 : 0%>">
      <input type="hidden" name="lendout" id="lendout" value="<%=lendout? 1 : 0%>">
      <input type="hidden" name="takein" id="takein" value="<%=takein? 1 : 0%>">
<%
      if (ingesloten.length == 1)
        var blockheader = desc;
      else if (ingesloten.length > 0)
        var blockheader = lendout? L("lcl_ins_lendout_multi").format(ingesloten.length) : L("lcl_ins_takein_multi").format(ingesloten.length);
      else
        var blockheader = (L("lcl_ins_lend_out_to") + " " + prs_naam);

      MODAL_BLOCK_START("insUit", blockheader, { icon: (adapt ? "fa-fclt-edit" : (takein ? "fa-arrow-circle-down" : "fa-arrow-circle-up")) });

      if (hasreservering)
      {
        Response.Write("<caption>"
                     + "<input type='radio' name='isres' id='leen_res' value='" + res_rsv_deel_key + "' checked>"
                     + "<label for='isres'>" + safe.html(restxt) + "</label></caption>"
                      );
      }
      else
      {
        if (lendout)
            Response.Write("<caption><div id='uitleen_restxt'>" + safe.html(restxt) + "</div></caption>");
      }

      if (ingesloten.length == 0) // JGL: Vanuit bezoekersoverzicht?
      {
        // <!-- Discipline -->
        sql = "SELECT ins_discipline_key"
            + ", " + lcl.xsqla('ins_discipline_omschrijving', 'ins_discipline_key')
            + " FROM ins_v_aanwezigdiscipline"
            + " WHERE ins_discipline_key IN"
              + " (SELECT ins_discipline_key"
              + " FROM fac_v_webgebruiker g"
              + ", fac_functie f"
              + " WHERE g.prs_perslid_key = " + user_key
              + " AND f.fac_functie_key = g.fac_functie_key "
              + " AND f.fac_functie_code = " + safe.quoted_sql(autfunction)
              + " AND (g.fac_gebruiker_alg_level_read < 9 AND g.fac_gebruiker_prs_level_read < 9)" + ")"
              + " ORDER BY " + lcl.xsql('ins_discipline_omschrijving', 'ins_discipline_key');
        FCLTselector("disc",
                     sql,
                     { initKey: dis_key,
                       label: L("lcl_discipline"),
                       onChange: 'updateSrtGroup("' + autfunction + '");', // disgroupChanged
                       emptyOption: (dis_key > 0? null : "")
                     });

        // <!-- Group -->
        FCLTselector("srtgroup",
                     "", // sql: lege selectbox die onload wordt geladen
                     { initKey: srtgroup,
                       label: L("lcl_obj_group"), //L("lcl_obj_inf_name")
                       onChange: 'updateSrtDeel("' + autfunction + '");', // srtgroupChanged
                       emptyOption: ""
                     });
        // <!-- Objectsoort -->
        FCLTselector("srtdeel", // obj_sort
                     "", // sql: lege selectbox die onload wordt geladen
                     { initKey: srtdeel,
                       label: L("lcl_obj_sort"),
                       onChange: 'sgObject.setValue(-1, "", true, false, null, true);', // Object suggestbox leegmaken. checkExist moet dan false zijn en lastTry true.
                       initEmpty: true,
                       emptyOption: ""
                     });
        FCLTobjectselector("ins_keys",
                           "sgObject",
                           { label: L("lcl_ins_object"),
                             objectKey: -1,
                             urlAdd: [{urlParam: "disc_key", field: "disc"},
                                      {urlParam: "srtgroep_key", field: "srtgroup"},
                                      {urlParam: "srtdeel_key", field: "srtdeel"}],
                             onChange: "loadKenmerk",
                             required: true,
                             filtercode: "I", // Ik wil een object uitgeven, dus laat alle ingenomen objecten zien
                             autfunction: "WEB_INSFOF"
                           }); %>
        <script type="text/javascript">
          // Laad de groupen en de items
          // Selecteer eventueel de initiële groepen en items die meegegeven kunnen worden
          $(function()
          {
            updateSrtGroup("<%=autfunction%>", ["<%=srtgroup%>"], ["<%=srtdeel%>"]);
          });
        </script>
        <tr>
          <td>
            <input type="hidden" name="lent_out_person" id="lent_out_person" value="<%=prs_key > 0? prs_key : cps_key%>">
            <input type="hidden" name="person_type" id="person_type" value="<%=prs_key > 0? "P" : "C"%>">
          </td>
        </tr>
<%
      }
      else
      {
        if (isCil)
        {
          FCLTplaatsselector(authparams.ALGwritelevel,
                             { locatiekey: loc_key,
                               gebouwkey: alg_type == "G"? bld_key : ter_key,
                               verdiepingkey: flr_key,
                               ruimtekey: room_key,
                               suppressEmpty: true,
                               terrein: true,
                               eindlevel: 5,
                               requiredlevel: 5,
                               onGebChange: "onChangeGebouw();",
                               readonly: takein
                             });
        }
        else
        {
          if (alg_ruimte_type == "C")
            FCLTcontactpersoonselector("lent_out_person",
                                       "sglent_out_person",
                                       { contactpersoonKey: (takein? algprs_key : null),
                                         label: L("lcl_contact_pers"),
                                         extracode: "B",
                                         required: true,
                                         moreinfo: true,
                                         readonly: takein
                                       });
          else if (!has_rsvdeel || (has_rsvdeel && !hasreservering))
          {
            if (takein && ingesloten.length > 1)
            {
              ROFIELDTR("fld", L("lcl_ins_objects"), objecten.join(", ")); // Objecten.
            }
            else
            {
              var prssel_key;
              if (has_rsvdeel && !hasreservering)
              { // Vanuit een reservering aangeroepen, maar deze reservering is in het verleden.
                // Er zijn geen toekomstige reserveringen.
                // Zoek aanvrager (host) op. Deze dan als naam invullen.
                var sql = "SELECT res_rsv_ruimte_host_key"
                        + "  FROM res_rsv_deel rd"
                        + "     , res_rsv_ruimte rr"
                        + " WHERE rd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
                        + "   AND rd.res_rsv_deel_key = " + rsv_deel_key;
                var oRs = Oracle.Execute(sql);
                prssel_key = oRs("res_rsv_ruimte_host_key").Value;
                oRs.Close();
              }
              else if (takein)
                prssel_key = (alg_ruimte_type == "P"? algprs_key : null);
              else
                prssel_key = default_prs_key;
              // Persoonselector of contractpersoonselector moet ingevuld worden.
              // Bij type==R/A is hij nog niet uitgeleend
              if (alg_ruimte_type == "R" || alg_ruimte_type == "A" || alg_ruimte_type == "P" || alg_ruimte_type == "W" || alg_ruimte_type == "T")
                FCLTpersoonselector("lent_out_person", // requestor
                                     "sglent_out_person",
                                    { perslidKey: prssel_key,
                                      label: (hasreservering? "<input type='radio' name='isres' id='leen_vrij' value=''>" : "") + L("lcl_name"),
                                      autlevel: authparams.PRSwritelevel,
                                      required: lendout || alg_ruimte_type == "R",
                                      moreinfo: true,
                                      readonly: takein,
                                      onChange: "onChangePerson"
                                     });
              if (alg_ruimte_type == "R" || alg_ruimte_type == "A" || alg_ruimte_type == "C" || alg_ruimte_type == "W" || alg_ruimte_type == "T")
                FCLTcontactpersoonselector("lent_out_cperson",
                                           "sglent_out_cperson",
                                           { contactpersoonKey: (takein? (alg_ruimte_type == "C"? algprs_key : null) : null),
                                             label: (hasreservering? "<input type='radio' name='spacehidden' id='spacehidden' value='' style='visibility: hidden'>" : "") + L("lcl_contact_pers"), // I.v.m. uitlijnen beide suggestboxen.
                                             extracode: "B",
                                             required: takein && alg_ruimte_type == "C",
                                             readonly: takein,
                                             moreinfo: true,
                                             onChange: "onChangeCPerson"
                                           });
            }
          }
        }
        if (ingesloten.length)
        { %>
          <tr><td><input type="hidden" name="ins_keys" id="ins_keys" value="<%=ingesloten.join(",")%>"></td></tr>
<%      }
      }
      MODAL_BLOCK_END();

      if (ingesloten.length > 1)
      { // LET OP! Deze clientside code wordt uitgevoerd NA initialisatie door suggest.js.
        //         Daar wordt namelijk nog de class "suggest" op suggestvelden gezet hetgeen in onderstaande code wordt opgevraagd!
%>
        <script>
          $(function()
            {
              init_multi({ onChangeSuggest: "onChangeSuggest",
                           keepRequired: true });

              $("[name=isres]").change(onChangeIsres);
              onChangeIsres();
              onChangeGebouw();
              FcltMgr.resized(window);
            });
        </script>
<%    }
      // Einde clientside code voor het bovenstaande block.

      if (ingesloten.length <= 1)
      { %>
<%
          generateFlexKenmerkBlock({ urole: "fo",
                                     ins_key: ingesloten.length? ingesloten[0] : -1,
                                     srtdeelkey_array: sort_key > 0? [sort_key] : [],
                                     lendout: true,
                                     reado: false
                                   });
      }
      else
      {
        // MGE: De variablen die hieronder worden bepaald worden verderop niet gebruikt.
        //      Daarom uitgecommentarieerd.
        //sql = "SELECT DISTINCT s.ins_srtdeel_key"   // PF: verondersteld de omschrijving overbodig hier
        //    + "     , g.ins_srtgroep_key"
        //    + "     , g.ins_discipline_key"
        //    + " FROM ins_v_deelenonderdeel d"
        //    + "    , ins_srtdeel s"
        //    + "    , ins_srtgroep g"
        //    + " WHERE s.ins_srtdeel_key = d.ins_srtdeel_key"
        //    + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
        //    + "   AND d.ins_deel_key in (" + ingesloten.join(",") + ")";
        //oRs = Oracle.Execute(sql);
        //var ins_srtdeel_key = oRs("ins_srtdeel_key").Value;
        //var ins_srtgroep_key = oRs("ins_srtgroep_key").Value;
        //var ins_discipline_key = oRs("ins_discipline_key").Value;
        //var diff_objsrt = false;
        //var diff_grp = false
        //var diff_disc = false;
        //oRs.MoveNext();
        //while (!oRs.eof)
        //{
        //  if (oRs("ins_srtdeel_key").Value != ins_srtdeel_key) diff_objsrt = true;
        //  if (oRs("ins_srtgroep_key").Value != ins_srtgroep_key) diff_grp = true;
        //  if (oRs("ins_discipline_key").Value != ins_discipline_key) diff_disc = true;
        //  oRs.MoveNext();
        //}
        //oRs.close();

        // change the flex proprties that belong to at least one item
        generateFlexKenmerkBlock({ urole: "fo",
                                   ins_key: ingesloten[0],
                                   ins_key_arr: ingesloten,
                                   lendout: true,
                                   srtdeelkey_array: srtdeelkey_array,
                                   nodefaults: true,
                                   reado: false,
                                   multi: true,
                                   label_colspan: 1
                                 });
      }

      var buttons =  [ {title: (adapt? L("lcl_submit") : (takein? L("lcl_ins_insinn") : L("lcl_ins_lend_out"))),
                        icon: (adapt? "fa-fclt-save" : (takein? "fa-arrow-circle-down" : "fa-arrow-circle-up")),
                        action: "ins_submit()",
                        singlepress: true,
                        id: "btn_free_submit"},
                        {title: L("lcl_cancel"), icon: "fa-fclt-cancel", action: "ins_cancel()"} ];
      SIMPLE_BLOCK_START();
        CreateButtons(buttons);
      SIMPLE_BLOCK_END();
      IFACE.FORM_END();
%>
    </form>
<% MODAL_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
