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

    File:               res_edit_rsv_ruimte.asp
    Description:        Bouwen van het ruimte edit/select blok voor een reservering
                        In dit blok bepalen we met name de WANNEER en WAAR eigenschappen
                        Ofwel: res_rsv_ruimte records met begin/eind tijdstippen en een alg_ruimte
                        of res_ruimte (via opstelling) verwijzing
                        (zie verder res_edit_objcat
    Parameters:
        rsv_ruimte_key  required, existing rsv_ruimte_key. Al het andere zoeken we er zelf bij
        urole           required
    Context:            (Altijd) subframe van res_reservering.asp
    Note:
 */
 %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../res/res.inc" -->
<!-- #include file="res_flexkenmerk.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../prs/prs.inc" -->
<%
FCLTHeader.Requires({plugins: ["jQuery", "kenmerk"],
                          js: ["date.js", "jquery.timepicker-table.js"],
                         css: ["timePicker-table.css"]})
%>

<html>
  <head>
<%  FCLTHeader.Generate() %>
<%
    // Required parameters
    var urole = getQParamSafe("urole");
    var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1);

    var autfunction = { fe: "WEB_RESUSE", bo: "WEB_RESBOF", fo: "WEB_RESFOF" } [urole];
    var authparams = user.checkAutorisation(autfunction);

    // Moeten we weten voor notfrontend bij activiteiten
    var feonly = autfunction != "WEB_RESFOF" &&
                 autfunction != "WEB_RESBOF" &&
                 (user.checkAutorisation(["WEB_RESFOF", "WEB_RESBOF"], true) == null);

    // Optional parameters
    var rsv_copy_key = getQParamInt("rsv_copy_key", -1); // hier kopieren we veel uit
    var for_undelete = getQParamInt("undelete", 0)==1; // fo-functie undelete reservering

    if (rsv_ruimte_key == -1)
    {
      // Bepalen restype en kostenplaats verplicht uit srtactiviteit.
      var srtact = getQParamInt("srtact"); // Deze is gegarandeerd voor nieuwe reserveringen

      var sql = "SELECT sa.res_srtactiviteit_soort"
              + "     , sa.res_srtactiviteit_kpnverplicht"
              + "     , sa.res_srtactiviteit_metaantal"
              + "     , sa.res_srtactiviteit_metomschr"
              + "     , sa.res_srtactiviteit_metopmerk"
              + " FROM res_srtactiviteit sa"
              + " WHERE sa.res_srtactiviteit_key = " + srtact;
      var oRs = Oracle.Execute(sql);
      var restype = oRs("res_srtactiviteit_soort").value == 0? "R" : "CV";
      var srtdisc_kpnverplicht = oRs("res_srtactiviteit_kpnverplicht").value;
      var srtdisc_metaantal = oRs("res_srtactiviteit_metaantal").value;
      var srtdisc_metomschr = oRs("res_srtactiviteit_metomschr").value;
      var srtdisc_metopmerk = oRs("res_srtactiviteit_metopmerk").value;
      oRs.Close();

      var res_ruimte_key = getQParamInt("res_ruimte_key", -1);
      var res_van = getQParamDate("res_van", null);
      var res_tot = getQParamDate("res_tot", null);
      if (rsv_copy_key > 0)
      {
          var this_res = res.func_enabled(rsv_copy_key); // wat mocht ik zoal op deze reservering
          user.auth_required_or_abort(this_res.couldCreate);
      }
      else
        this_res = {};
    }
    else
    {
      var this_res = res.func_enabled(rsv_ruimte_key); // wat mag ik zoal op deze reservering
      user.auth_required_or_abort(this_res.canChange);
    }

    var fronto = urole == "fo"; // DEPRECATED
    var backo = urole == "bo";
    var frontend = urole == "fe";

    // TODO??
    rsv_ruimte_key = getQParamInt("next_rsv_ruimte_key", rsv_ruimte_key);

    // TODO: Dit waren globals. Wat nu?
    serie=false; // TODO: Hoe te doen? Vervalt, false is ok
    // end TODO

    // rrr is een belangrijke globale: hij bevat 'allerlei' info uit het res_rsv_ruimte record
    //     en eventueel wat daar 1-op-1 uit afgeleid kan worden
    // conventie: altijd dezelfde naam als het database veld, maar dan zonder res_
    var reado_alg = false;
    var reado_level;
    if (rsv_ruimte_key == -1 && rsv_copy_key == -1) // defaults zetten.
    {
      // bezorg-afhaal mode
      var ab_mode = getQParamInt("ab_mode", S("res_default_CVAB_mode")); // 0=afhalen; 1=bezorgen, null=weetniet, +2=vast
      var activiteit_key = getQParamInt("activiteit_key", -1);
      var aantal_verplicht = false;
      var descript_required = false;
      if (activiteit_key > 0)
      {
        sql = "SELECT ac.res_activiteit_aantalverplicht,"
            + "       res_activiteit_omsverplicht"
            + "  FROM res_activiteit ac"
            + " WHERE res_activiteit_key = " + activiteit_key;
        oRs = Oracle.Execute(sql);
        aantal_verplicht = oRs("res_activiteit_aantalverplicht").value == 1;
        descript_required = oRs("res_activiteit_omsverplicht").value == 1;
      }

      var rrr = { rsv_ruimte_key      : rsv_ruimte_key,
                  res_ruimte_key      : res_ruimte_key,
                  reservering_key     : -1,
                  status_fo_key       : urole=='fo'?S("res_default_fo_status_key"):2,
                  status_bo_key       : 2, // default 2, ingevoerd
                  status_flag         : 0,
                  activiteit_key      : activiteit_key,
                  srtactiviteit_key   : srtact,
                  alg_ruimte_key      : getQParamInt("alg_ruimte_key", S("res_default_alg_ruimte_key")),
                  ruimte_opstel_key   : -1,
                  rsv_ruimte_noshow   : null,
                  rsv_ruimte_bezoekers: getQParamArray("bez_naam", [], true).length||null, // leeg! laten ipv '0', en QParam niet splitsen op komma (zie ook bez_show_bezoekers.asp
                  rsv_ruimte_volgnr   : 1,
                  descript            : getQParam("bez_omschr", ""), // vanuit Outlook
                  rsv_ruimte_dirtlevel: res.dirtlevel.ruimte.noroom,
                  rsv_ruimte_aanmaak  : new Date(),
                  contact_key         : (urole == 'fo' && !S("res_fo_default_user")? -1 : user_key),
                  host_key            : getQParamInt("host_key", -1),

                  alg_locatie_key     : user.alg_locatie_key(),
                  kostenplaats_key    : (S("prs_dep_default_kpn") == 1 ? user.afdeling().prs_kostenplaats_key() || -1 : -1),
                  kostenplaats_omschr : user.afdeling().kpn_string() || "",
                  kostenplaats_module : user.afdeling().kpn_module() || "",
                  descript_required   : descript_required,
                  aantal_verplicht    : aantal_verplicht,
                  kosten_klant        : S("kosten_klant_default") == 1,
                  resnrtxt            : L("lcl_new"),
                  srtactiviteit_kpnverplicht : srtdisc_kpnverplicht,
                  srtactiviteit_metaantal    : srtdisc_metaantal==1,
                  srtactiviteit_metomschr    : srtdisc_metomschr==1,
                  srtactiviteit_metopmerk    : srtdisc_metopmerk==1,
                  ab_mode             : ab_mode,
                  res_ruimte_extern   : false
                }

      if (res_ruimte_key > 0) // locatiekey opzoeken.
      {
        // Checken of ik de res_ruimte_key wel mag eigenlijk
        // Zou niet mis moeten kunnen gaan behalve hacken?
        // kan van een andere discipline zijn if (authparams.ALGwritelevel > -1)
        {
            sql = "SELECT 1"
                + "  FROM " + res.fac_v_my_res_ruimte_write
                + " WHERE res_ruimte_key = " + res_ruimte_key
                + "   AND fac_functie_key = " + authparams.autfunctionkey
                + "   AND prs_perslid_key = " + user_key;

            oRs = Oracle.Execute(sql);
            user.auth_required_or_abort(!oRs.eof);
        }

        sql = "SELECT alg_locatie_key"
            + "  FROM res_alg_ruimte rar,"
            + "       alg_v_onrgoed_boom aob"
            + " WHERE rar.alg_ruimte_key = aob.alg_ruimte_key"
            + "   AND res_ruimte_key = " + res_ruimte_key;
        oRs = Oracle.Execute(sql);
        rrr.alg_locatie_key = oRs("alg_locatie_key").Value;

        if (rrr.activiteit_key == -1) // Toevallig maar één activiteit mogelijk voor onze ruimte?
        {
            sql = "select ra.res_activiteit_key"
                + "  from res_activiteitdiscipline rad,"
                + "       res_activiteit ra,"
                + "       res_ruimte rr"
                + " where rr.res_ruimte_key = " + res_ruimte_key
                + "   and rad.res_discipline_key = rr.res_discipline_key"
                + "   and rad.res_activiteit_key = ra.res_activiteit_key";
            if (feonly)
                sql += " AND ra.res_activiteit_notfrontend = 0"
            var oRs = Oracle.Execute(sql);
            if (!oRs.Eof)
            {
                var act = oRs("res_activiteit_key").Value;
                oRs.MoveNext();
                if (oRs.Eof)
                {
                  rrr.activiteit_key = act; // er was er maar eentje
                  // Dan voor deze activiteit ook kijken of het aantal bezoeker en/of omschrijving verplicht is.
  %>              <script type="text/javascript">
                      $(document).ready(function()
                                  {
                                    checkVeldenVerplicht();
                                  });
                  </script>
<%              }
            }

        }
      }

      if (rrr.host_key == -1)
      {
          if (urole=='fe' && !S("res_fe_init_host_empty"))
              rrr.host_key = user_key;
          else
              if (urole != 'fe' && S("res_fo_default_user")) // frontoffice
                  rrr.host_key = user_key;
      }
      if (rrr.host_key > 0)
          var host_info = new prs.prs_perslid(rrr.host_key);
      else
      { // FSN#20439 workaround, moet beter
        host_info = { kostenplaats_key: -1 };
      }

      ordernr_reado = false;

      if (res_van)
      {
          rrr.rsv_ruimte_van = res_van.addFloatHours(0, S("res_h"));  // afronden op S("res_h") interval
          // default eindtijd bepalen?
          if (res_tot)
              rrr.rsv_ruimte_tot = res_tot.addFloatHours(0, S("res_h"));
          else
              rrr.rsv_ruimte_tot = rrr.rsv_ruimte_van.addFloatHours(S("res_dur"), S("res_h"));
      }
      else
      {
          rrr.rsv_ruimte_van = new Date().setFloatHours(S("res_t1"), S("res_h"));
          rrr.rsv_ruimte_tot = rrr.rsv_ruimte_van.addFloatHours(S("res_dur"), S("res_h"));
      }

      if (restype == "CV" && rrr.host_key == user_key && rrr.alg_ruimte_key == -1)
      {
          rrr.alg_locatie_key    = user.alg_locatie_key();
          rrr.alg_gebouw_key     = user.alg_gebouw_key();
          rrr.alg_verdieping_key = user.alg_verdieping_key();
          rrr.alg_ruimte_key     = user.alg_ruimte_key();
      }

      // Als een voorgeselecteerd object/discipline/activiteit een strakke scope-heeft vullen we die alvast in
      var res_deel_key = getQParamInt("res_deel_key", -1);
      if (res_deel_key > 0)
      {
        sql = "SELECT res_deel_alg_level"
            + "     , res_discipline_key"
            + "  FROM res_deel rd"
            + " WHERE res_deel_key = " + res_deel_key;
        oRs = Oracle.Execute(sql);
        rrr.res_deel_alg_level = oRs("res_deel_alg_level").value;
        rrr.res_discipline_key = oRs("res_discipline_key").value;
        if (oRs("res_deel_alg_level").value == 5) // Hij kan alleen in eigen ruimte
            rrr.ab_mode = 2; // automatisch afhalen-vast

        // Alg_ruimte gegevens van res_deel_key ofwel ins_deel_key op zoeken.
        sql = "SELECT rg.alg_locatie_key"
            + "     , rg.alg_gebouw_key"
            + "     , rg.alg_verdieping_key"
            + "     , rg.alg_ruimte_key"
            + "     , rd.res_deel_alg_level"
            + "  FROM res_deel rd"
            + "     , ins_deel d"
            + "     , alg_v_ruimte_gegevens_all rg"
            + " WHERE rd.res_ins_deel_key = d.ins_deel_key"
            + "   AND COALESCE(d.ins_alg_ruimte_key_org, d.ins_alg_ruimte_key) = rg.alg_ruimte_key"
            + "   AND res_deel_key = " + res_deel_key;
        oRs = Oracle.Execute(sql);
        rrr.alg_locatie_key = oRs("alg_locatie_key").value;
        rrr.alg_gebouw_key = oRs("alg_gebouw_key").value;
        rrr.alg_verdieping_key = oRs("alg_verdieping_key").value;
        rrr.alg_ruimte_key = oRs("alg_ruimte_key").value;
        if (oRs("res_deel_alg_level").Value >= 5) reado_alg = true; // Als de alg_level kleiner is dan 5 dan zijn er waarschijnlijk meerdere plekken te kiezen
      }
      // disc_key en act_key worden door RESA filter opgelost in de plaatsselector

      // Als een voorgeselecteerd artikel een strakke scope-heeft vullen we die alvast in
      var res_artikel_key = getQParamInt("res_artikel_key", -1);
      if (res_artikel_key > 0)
      {
        sql = "SELECT ra.res_discipline_key"
            + "     , sao.alg_onrgoed_key"
            + "     , sao.alg_onrgoed_niveau"
            + "  FROM res_artikel ra"
            + "     , res_srtartikel_onrgoed sao"
            + " WHERE ra.res_discipline_key = sao.res_discipline_key"
            + "   AND ra.res_artikel_key = " + res_artikel_key;
        oRs = Oracle.Execute(sql);
        rrr.res_discipline_key = oRs("res_discipline_key").value;
        var alg_onrgoed_key = oRs("alg_onrgoed_key").value;
        var alg_onrgoed_niveau = oRs("alg_onrgoed_niveau").value;
        oRs.MoveNext();
        if (oRs.Eof)
        { // Er is maar 1 scope. Dan kan deze ingevuld worden.
          if (alg_onrgoed_niveau == "L")
          { // Artikel scope is een locatie
            rrr.alg_locatie_key = alg_onrgoed_key;
            rrr.alg_gebouw_key = -1;
            rrr.alg_verdieping_key = -1;
            rrr.alg_ruimte_key = -1;
            reado_level = 2;
          }
          else
          { // Artikel scope is een ruimte of een gebouw
            sql = "SELECT aor.alg_locatie_key"
                + "     , aor.alg_gebouw_key"
                + "     , aor.alg_verdieping_key"
                + "     , aor.alg_ruimte_key"
                + "     , aor.alg_type"
                + "  FROM alg_v_allonroerendgoed aor"
                + " WHERE aor.alg_onroerendgoed_keys = " + alg_onrgoed_key
                + "   AND aor.alg_type = " + safe.quoted_sql(alg_onrgoed_niveau);
            oRs = Oracle.Execute(sql);
            rrr.alg_locatie_key = oRs("alg_locatie_key").value;
            rrr.alg_gebouw_key = oRs("alg_gebouw_key").value;
            rrr.alg_verdieping_key = oRs("alg_verdieping_key").value;
            rrr.alg_ruimte_key = oRs("alg_ruimte_key").value;
            if (alg_onrgoed_niveau == "G")
              reado_level = 3;
            if (alg_onrgoed_niveau == "V")
              reado_level = 4;
            if (alg_onrgoed_niveau == "R")
              reado_level = 5;
          }
        }
        //else wordt wel de eigen kamer ingevuld die hiervoor al bepaald is.
      }

      rrr.flex_defaults = {};
      var flex_defaults = getQParam("flex_defaults", "").split("&"); //bsn=12345678&plaats=Enschede&postcode=1234AB
      for (var i in flex_defaults)
      {
          var nm = flex_defaults[i].split("=")[0].toLowerCase();
          var val = flex_defaults[i].split("=")[1];
          rrr.flex_defaults[nm] = val;
      }
    }
    else // Bestaande reservering
    { // Zoek zo snel mogelijk info van res_rsv_ruimte op.
      sql = "SELECT rr.res_reservering_key, "
          + "       rr.res_reservering_ispool, "
          + "       rrr.res_status_fo_key, "
          + "       rrr.res_status_bo_key, "
          + "       rrr.res_rsv_ruimte_flag, "
          + "       rrr.res_rsv_ruimte_van, "
          + "       rrr.res_rsv_ruimte_tot, "
          + "       rrr.res_activiteit_key, "
          + "       ra.res_activiteit_omsverplicht, "
          + "       ra.res_activiteit_aantalverplicht, "
          + "       sa.res_srtactiviteit_prefix, "
          + "       res_rsv_ruimte_noshow, "
          + "       res_rsv_ruimte_bezoekers, "
          + "       res_rsv_ruimte_bezoekers_shown, "
          + "       res_rsv_ruimte_volgnr, "
          + "       res_rsv_ruimte_dirtlevel, "
          + "       res_rsv_ruimte_aanmaak, "
          + "       alg_ruimte_key, "
          + "       rrr.res_ruimte_opstel_key,"
          + "       ro.res_opstelling_omschrijving,"
          + "       res_ruimte_opstel_bezoekers,"
          + "       COALESCE(res_rsv_ruimte_opmerking,'') res_rsv_ruimte_opmerking,"
          + "       rrr.res_rsv_ruimte_contact_key,"
          + "       rrr.res_rsv_ruimte_host_key,"
          + "       rrr.res_rsv_ruimte_omschrijving,"
          + "       rrr.res_rsv_ruimte_ordernr,"
          + "       res_rsv_ruimte_totaal,"
          + "       res_rsv_ruimte_korting,"
          + "       COALESCE (res_rsv_ruimte_kosten_klant, -1) res_rsv_ruimte_kosten_klant, "
          + "       kp.prs_kostenplaats_nr,"
          + "       COALESCE (kp.prs_kostenplaats_key, -1) prs_kostenplaats_key, "
          + "       COALESCE((SELECT " + S("prs_kpn_string")
          + "                   FROM prs_kostenplaats k"
          + "                  WHERE k.prs_kostenplaats_key = kp.prs_kostenplaats_key), "
          + "                '') prs_kostenplaats_omschr,"
          + "       kp.prs_kostenplaats_module,"
          + "       sa.res_srtactiviteit_key,"
          + "       sa.res_srtactiviteit_kpnverplicht,"
          + "       sa.res_srtactiviteit_metaantal,"
          + "       sa.res_srtactiviteit_metomschr,"
          + "       sa.res_srtactiviteit_metopmerk,"
          + "       rrr.res_rsv_ruimte_cvab_mode"
          + "  FROM res_rsv_ruimte rrr, "
          + "       res_activiteit ra, "
          + "       res_srtactiviteit sa, "
          + "       res_reservering rr,"
          + "       prs_kostenplaats kp,"
          + "       res_ruimte_opstelling rro, "
          + "       res_opstelling ro"
          + " WHERE res_rsv_ruimte_key = " + (rsv_ruimte_key > 0? rsv_ruimte_key : rsv_copy_key)
          + "   AND rrr.res_reservering_key = rr.res_reservering_key"
          + "   AND rrr.res_activiteit_key = ra.res_activiteit_key"
          + "   AND ra.res_srtactiviteit_key = sa.res_srtactiviteit_key"
          + "   AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)"
          + "   AND rro.res_opstelling_key = ro.res_opstelling_key(+)"
          + "   AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)";

      oRs = Oracle.Execute(sql);

      var srtact = oRs("res_srtactiviteit_key").value;
      var rrr = { rsv_ruimte_key      : rsv_ruimte_key,
                  reservering_key     : oRs("res_reservering_key").value,
                  reservering_ispool  : oRs("res_reservering_ispool").value == 1,
                  status_fo_key       : oRs("res_status_fo_key").value,
                  status_bo_key       : oRs("res_status_bo_key").value||2, // default 2, ingevoerd
                  status_flag         : oRs("res_rsv_ruimte_flag").value||0,
                  activiteit_key      : oRs("res_activiteit_key").value,
                  srtactiviteit_key   : srtact,
                  rsv_ruimte_van      : new Date(oRs("res_rsv_ruimte_van").value),
                  rsv_ruimte_tot      : new Date(oRs("res_rsv_ruimte_tot").value),
                  alg_ruimte_key      : oRs("alg_ruimte_key").value,
                  ruimte_opstel_key   : oRs("res_ruimte_opstel_key").value,
                  opstelling_omschrijving: oRs("res_opstelling_omschrijving").Value,
                  opstel_bezoekers    : oRs("res_ruimte_opstel_bezoekers").Value,
                  rsv_ruimte_noshow   : oRs("res_rsv_ruimte_noshow").value,
                  rsv_ruimte_bezoekers: oRs("res_rsv_ruimte_bezoekers").value,
                  bezoekers_shown     : oRs("res_rsv_ruimte_bezoekers_shown").value,
                  rsv_ruimte_volgnr   : oRs("res_rsv_ruimte_volgnr").value,
                  rsv_ruimte_dirtlevel: oRs("res_rsv_ruimte_dirtlevel").value,
                  rsv_ruimte_aanmaak  : new Date(oRs("res_rsv_ruimte_aanmaak").value),

                  contact_key        : oRs("res_rsv_ruimte_contact_key").value,
                  host_key           : oRs("res_rsv_ruimte_host_key").value,

                  rsv_ruimte_opmerking : oRs("res_rsv_ruimte_opmerking").value,
                  descript           : oRs("res_rsv_ruimte_omschrijving").value,
                  descript_required  : oRs("res_activiteit_omsverplicht").value==1,
                  aantal_verplicht   : oRs("res_activiteit_aantalverplicht").value==1,
                  res_ordernr        : oRs("res_rsv_ruimte_ordernr").value,
                  ruimte_korting     : oRs("res_rsv_ruimte_korting").value,
                  ruimte_totaal      : oRs("res_rsv_ruimte_totaal").value,
                  kosten_klant       : oRs("res_rsv_ruimte_kosten_klant").value == 1,
                  kostenplaats_key   : oRs("prs_kostenplaats_key").value,
                  kostenplaats_omschr: oRs("prs_kostenplaats_omschr").value,
                  kostenplaats_module: oRs("prs_kostenplaats_module").value,
                  resnrtxt           : (oRs("res_srtactiviteit_prefix").value? oRs("res_srtactiviteit_prefix").value : "") + String(oRs("res_reservering_key").value) + "/"+ (rsv_copy_key == -1?oRs("res_rsv_ruimte_volgnr").value:L("lcl_new")),
                  srtactiviteit_kpnverplicht : oRs("res_srtactiviteit_kpnverplicht").value,
                  srtactiviteit_metaantal    : oRs("res_srtactiviteit_metaantal").value == 1,
                  srtactiviteit_metomschr    : oRs("res_srtactiviteit_metomschr").value == 1,
                  srtactiviteit_metopmerk    : oRs("res_srtactiviteit_metopmerk").value == 1,
                  ab_mode            : oRs("res_rsv_ruimte_cvab_mode").value
                }

      // Afgeleide informatie
      if(oRs("res_ruimte_opstel_key").value)
          restype = "R";
      else
          restype = "CV";

      // When *any* part of the reservation has status_bo >=5 (uitgevoerd) then
      // host/department/order get read-only
      // Other RES_RESERVATION fields can (autorisation controlled) always be edited
      // (not time/status constrained)
      max_bo_key = this_res.max_bo || 2; // Ingevoerd
      oRs.close();
      ordernr_reado = (max_bo_key == 6)

      if (restype == "R") // zal rrr.ruimte_opstel_key gevuld zijn
      {
        sql = "SELECT ro.res_ruimte_key"
            + "     , alg_locatie_key"
            + "     , res_ruimte_extern_id"
            + "  FROM res_ruimte_opstelling ro"
            + "     , res_v_res_ruimte_gegevens_all rrg"
            + " WHERE ro.res_ruimte_opstel_key = " + rrr.ruimte_opstel_key
            + "   AND rrg.res_ruimte_key = ro.res_ruimte_key"
            + " ORDER BY rrg.res_alg_ruimte_verwijder DESC NULLS FIRST";

        oRs = Oracle.Execute(sql);
        rrr.res_ruimte_key = rsv_ruimte_key > 0? oRs("res_ruimte_key").Value : -1;
      	rrr.alg_locatie_key = oRs("alg_locatie_key").Value;
      	rrr.res_ruimte_extern = oRs("res_ruimte_extern_id").Value != null;
        oRs.close();
      } else { // CV

          rrr.status_bo_key = max_bo_key; // Voor CV geldt de rsv_ruimte bo-status niet

          sql = "SELECT rg.alg_ruimte_aanduiding,"
              + "       rg.alg_locatie_key,"
              + "       rg.alg_gebouw_key,"
              + "       rg.alg_verdieping_key,"
              + "       rg.alg_ruimte_key"
              + "  FROM alg_v_ruimte_gegevens_all rg"
              + " WHERE  rg.alg_ruimte_key = " + rrr.alg_ruimte_key

          oRs = Oracle.Execute(sql);

          rrr.alg_locatie_key = oRs("alg_locatie_key").Value;
          rrr.alg_gebouw_key = oRs("alg_gebouw_key").Value;
          rrr.alg_verdieping_key = oRs("alg_verdieping_key").Value;
          rrr.alg_ruimte_key = rsv_ruimte_key > 0 ? oRs("alg_ruimte_key").Value : -1;
      }

      // Script zorgt ervoor dat ook bij het openen van het scherm de image achter het label komt te staan.
%>
          <script type="text/javascript">
                  $(document).ready(function()
                              {
                                OnChangeSubstatus();
                              });
          </script>
<%
    }
    lcl.set_dialect(srtact, "RES_SRTACTIVITEIT_KEY");

    // Afhankelijk van activiteitsoort de eerstvolgende dag waarop deze reservering mag worden gedaan bepalen.
    var sql = "SELECT fac.DatumTijdPlusUitvoerTijd(SYSDATE, MIN(rd.res_disc_params_expire_dagen), 'DAGEN')-SYSDATE"
            + "  FROM res_activiteit ra"
            + "     , res_activiteitdiscipline ad"
            + "     , res_disc_params rd"
            + " WHERE ad.res_discipline_key = rd.res_ins_discipline_key"
            + "   AND ad.res_activiteit_key = ra.res_activiteit_key"
            + "   AND ra.res_srtactiviteit_key = " + srtact;
    if (feonly)
        sql += " AND ra.res_activiteit_notfrontend = 0"
    var oRsa = Oracle.Execute(sql);
    rrr.fe_expire_dagen = oRsa(0).Value || 0;
    oRsa.Close();

%>

    <script type="text/javascript">
      function res_submit_callback(json)
      {
          if (json.success)
          {
              if (json.park_na < json.park_voor)
              {
                alert_text = json.park_na + L("lcl_park_alert1") + json.park_voor + L("lcl_park_alert2");
                alert(alert_text);
              }
              FcltMgr.closeDetail(window, json);
          }
          else
              iface.button.enable("btn_res_submit");
      }

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

          if (rsv_ruimteOnSubmit())
          {
              $.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), FcltCallbackAndThenAlways(res_submit_callback), "json");
              return true;
          }
          else
              return false;
      }

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

      var sel_room = {RoomConfigs: [],         // Hierin houden we clientside informatie over onze gekozen ruimte bij
                      org_opstel_key : <%= rsv_ruimte_key>0?rrr.ruimte_opstel_key||-1:-1 %>
                     };
    </script>
<%
    var reado_rsv_ruimte = false;
    if (rsv_ruimte_key > 0)
    {
      var reado_rsv_ruimte = rrr.status_bo_key == 6;
    }

    // last_minute mag frontend niet meer de zaal of tijdstippen wijzigen
    //      (noch de catering zelf maar dat regelt res_show_objcat.asp)
    var fe_lastminute = false;

    if (restype == "CV")
    {
      reado_rsv_ruimte = ordernr_reado;
      if (rsv_ruimte_key > 0) // Existing reservation
      {
        if (rrr.rsv_ruimte_van < this_res.earliest_expire_change)
            last_minute = true;
        else
            last_minute = false;
        fe_lastminute = (urole=="fe" && last_minute);
      }
    }  // restype = "CV"

%>
    <script type="text/javascript">
      var srtdisc_kpnverplicht = <%=rrr.srtactiviteit_kpnverplicht%>;
      var srtdisc_metaantalvis = <%=rrr.srtactiviteit_metaantal ? "true" : "false"%>;
      var frontend = <%=frontend? 1 : 0%> == 1;
      // Room choice has changed
      // Show different little schedule and update room description/picture
      /* params
              res_ruimte_key: res_ruimte_key
              res_ruimte_oms: ruimte omschrijving
              def_conf: default configuratie key
      */

      // Process de ruimte-data die van de Ajax terugkomt.
      // Functie wordt ook initieel aangeroepen.
      function process_res_ruimte_info(data)
      {
          var date_from = new Date(parseInt($("#date_from").val()));
          var vervaldatum = data.vervaldatum? new Date(data.vervaldatum) : null;
          var roomChanged = ($("#sel_room").val() != data.ruimte_nr + (vervaldatum && vervaldatum < date_from? L("lcl_inactive_data_suffix") : ""));
          var opstel_selected = -1;
          var opstel_img_count = 0;
          // sel_room is globaal!
          sel_room.RoomConfigs = data.RoomConfigs;
          sel_room.res_ruimte_key = data.res_ruimte_key;
          sel_room.kosten = data.kosten;
          sel_room.kpnverplicht = data.kpnverplicht;
          sel_room.default_opstel_key = data.default_opstel_key;
          sel_room.imagePath = data.imagePath; // ruimtefoto

          if (srtdisc_kpnverplicht != 1)
          { // Indien kostenplaats niet verplicht is volgens srtactiviteit, dan kan de ruimte discipline hiervoor zorgen.
            $("#account_show").toggleClass("required", sel_room.kpnverplicht == 1);
          }

          // Afhankelijk van het extern van de ruimte de opstellingen listbox bijwerken.
          var extern = data.extern_id != null;
          if (extern)
            var ruimte_opstel = document.u2.ruimte_opstel_ro; //
          else
          { // Werk opstellingen listbox bij
            var ruimte_opstel = document.u2.ruimte_opstel;

            for( i=ruimte_opstel.options.length-1; i>=0; i-- )
              ruimte_opstel.options.remove(i);

            if (sel_room.default_opstel_key == -1 && sel_room.RoomConfigs.length > 1)
            {
              oOption = document.createElement("OPTION");
              oOption.text = "";
              oOption.value = -1;
              ruimte_opstel.options.add(oOption);
            }

            for( i=0; i<sel_room.RoomConfigs.length; i++ )
            {
              if (!sel_room.RoomConfigs[i].verwijderd)
              {
                  oOption = document.createElement("OPTION");
                  oOption.text = sel_room.RoomConfigs[i].opstelling_omschrijving + " (" + sel_room.RoomConfigs[i].bezoekers + " " + L("lcl_res_pers") + ")";
                  oOption.value = sel_room.RoomConfigs[i].ruimte_opstel_key;
                  if (sel_room.RoomConfigs[i].ruimte_opstel_key == (sel_room.org_opstel_key>0?sel_room.org_opstel_key:sel_room.default_opstel_key))
                  {
                      oOption.selected = true;
                      opstel_selected = i;
                  }
                  if (sel_room.RoomConfigs[i].imagePath != "")
                      opstel_img_count++;
                  ruimte_opstel.options.add(oOption);
              }
            }
          }

          $("#sel_room").val(data.ruimte_nr + (vervaldatum && vervaldatum < date_from? L("lcl_inactive_data_suffix") : "")); // Tekst bijwerken
          if (vervaldatum && vervaldatum < date_from)
            $("#sel_room").addClass("res_fatal")
          else
            $("#sel_room").removeClass("res_fatal")


          if (data.imagePath || opstel_img_count > 0)
          {
            var imagePath = (data.imagePath ? data.imagePath : ""); // default ruimtefoto
            var imageOms  = L("lcl_res_image_room");
            if (opstel_selected != -1)
            {
              var opstelling = sel_room.RoomConfigs[opstel_selected];
              imagePath = (opstelling.imagePath ? opstelling.imagePath : imagePath);
              imageOms  = (opstelling.imagePath ? L("lcl_res_image_config") : imageOms);
            }

            if (imagePath)
            {
              $('#resphoto').show()[0].src = imagePath;
              $('#resphoto').unbind("click");
              $('#resphoto').click(function(){ res_info(imagePath); });
              $('#resphoto').prop("title", imageOms);
            }
            else
              $('#resphoto').hide();

            RuimteOpstelChanged();
          }

          if (data.ruimte_omschrijving)
              $('#resdescript').show().html(data.ruimte_omschrijving.replace(/\n/,"<br>"));
          else
              $('#resdescript').hide();

          if (data.ruimte_info_url)
          {
              var ref = '<span class="details" readonly onclick="FcltMgr.stopPropagation(event);res_info(\''+data.ruimte_info_url+'\');">'+L("lcl_more_info")+'</span>';

              $('#resinfo').show().html(ref);
              $('#resinfo').unbind("click");
              $('#resinfo').click(function(){ res_info(data.ruimte_info_url); })
          }
          else
              $('#resinfo').hide();

          // Alleen voor de frontend, en de ruimte moet wel veranderd zijn.
          // Bij initialisatie alleen als er een ruimte (res_ruimte_key) is meegegeven.
          if (frontend && (!data.init || (data.init && <%=res_ruimte_key||-1%> > 0)) && roomChanged)
          {
            $("#status_fo").val(data.status_fo_key > 0? data.status_fo_key : <%=S("res_default_fe_status_key")%>); // Overruling default fe status key door status_fo_key van de res_ruimte?
            $("#status_fo_ro").val(data.status_fo_key > 0? data.status_fo_string : "<%=safe.jsstring(res.getfostatustext(S("res_default_fe_status_key")))%>");
          }

          FcltMgr.resized();
      };

      function RuimteOpstelChanged()
      {
          var opstel_selected = $("#ruimte_opstel")[0].selectedIndex;
          if ($("#ruimte_opstel option:first").val() == -1)  // lege optie toegevoegd
              opstel_selected = opstel_selected - 1;

          var imagePath = null;
          var imageOms  = L("lcl_res_image_room");
          if (opstel_selected > -1 && sel_room.RoomConfigs[opstel_selected].imagePath)
          {
              imagePath = sel_room.RoomConfigs[opstel_selected].imagePath;
              imageOms = L("lcl_res_image_config");
          }
          else
          {
              imagePath = (sel_room.imagePath ? sel_room.imagePath : null);
          }

          if (imagePath)
          {
              $('#resphoto').show()[0].src = imagePath;
              $('#resphoto').unbind("click");
              $('#resphoto').click(function(){ res_info(imagePath); });
              $('#resphoto').prop("title", imageOms);
          }
      }

      function onLocChanged()
      {
          process_res_ruimte_info({ ruimte_nr: L("lcl_res_select_room"),  // Kies een ruimte
                                    RoomConfigs: [],
                                    res_ruimte_key: -1
                                  });
      }

      // Aangeroepen bij sluiten van planbord popup!
      // Ruimte gewijzigd: haal informatie op en
      function SelRoomChanged(params)
      {
        if (params.res_ruimte_key)
        {
          sel_room.res_ruimte_key = params.res_ruimte_key;
          $("#sel_room").attr("hasvalue", "1");

          $.getJSON("get_res_info_ajax.asp?req_info=res_ruimte&res_ruimte_key=" + sel_room.res_ruimte_key, // Gastheer key meegeven voor bepaling kostenplaats aanvrager.
                    process_res_ruimte_info);
          // pas op: asynchroon
          $("#res_ruimte_key").val(params.res_ruimte_key);

          // Indien kostenplaats niet gevuld is dan deze default vullen.
          if (($("#account").val() == -1) && (<%=rrr.srtactiviteit_kpnverplicht%> < 2))
            // setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
            sgAccount.setValue($("#default_kostenplaats_person_key").val(), $("#default_kostenplaats_person_omschr").val(), true, true, $("#default_kostenplaats_module").val(), true);
        }
      }

      // Kies in een modal popupje een geschikte ruimte
      function FindAvailableRooms(relaxed)
      {
          // Deze moeten minimaal ingevuld zijn.
          if (!validateForm("u2", { checkOnly: ["sel_activity", "show_date_from", "time_from_date_from",
                                                "show_date_to", "time_from_date_to", "locatie"],
                                    relaxed: relaxed
                                  }))
              return false;

          var date_from = new Date(parseInt($("#date_from").val()));
          var date_to = new Date(parseInt($("#date_to").val()));
          date_to.setFullYear(date_from.getFullYear());  // We hebben alleen een tijdstip namelijk
          date_to.setMonth(date_from.getMonth());
          date_to.setDate(date_from.getDate());

          var url= "../res/res_select_room.asp?urole=<%=urole%>&rsv_ruimte_key=<%=rsv_ruimte_key%>"
          if (sel_room.res_ruimte_key)
              url += "&res_ruimte_key=" + sel_room.res_ruimte_key; // default
          url += "&date_from=" + date_from.getTime();
          url += "&date_to=" + date_to.getTime();
          url += "&locatie_key=" + $('#locatiekey').val();
          url += "&activiteit_key=" + $('#sel_activity').val();
          url += "&width_px=" + $(window).width();
          var visheader = "";
          if (srtdisc_metaantalvis)
          {
            var nbez = (parseInt($('#bezoekers').val(), 10)||0);
            url += "&vis=" + nbez; // nog niet moeilijk doen over ongeldige waarden
            visheader = nbez ? " (" + nbez + L("lcl_res_nrpers_inplanbord") + ")": "";
          }
          FcltMgr.openModalDetail(url,
                                  L("lcl_res_select_inplanbord") + $('#sel_activity :selected').text() + visheader,
                                  { resizable: false,
                                    callback: SelRoomChanged,
                                    minHeight: 300} // Voor de omschrijving popup
                                 );
      }

      // Let op dat validateForm de basis controles al gedaan heeft
      // Verder alleen client side controles die een vraag stellen, de rest gaat via de server
      // return false als submit niet toegestaan
      function rsv_ruimteOnSubmit()
      {
          // check if visitors will fit
          for( i=0; i<sel_room.RoomConfigs.length; i++ ) {
               if( sel_room.RoomConfigs[i].ruimte_opstel_key == document.u2.ruimte_opstel.value &&
                   sel_room.RoomConfigs[i].bezoekers > 0 &&
                   sel_room.RoomConfigs[i].bezoekers < document.u2.bezoekers.value ) {
                   if( ! confirm( L("lcl_res_too_many_visitors") ) ) return false;
               }
          }

          <% if (S("res_247organisation") != 1) {  /* Geen popup voor 24/7 organisation */ %>
            var startDate = new Date(parseInt($('#date_from').val()));
            if( cal_isVrijeDag(startDate) || cal_isWeekend(startDate))
            {
               if( ! confirm( "<%=L("lcl_holiday")%>" ) )
                  return false;
            }
          <% } %>
 <%       if ((S("res_hide_remark")==0) || ((S("res_hide_remark")==2) && (rsv_ruimte_key>=0))) { %>
          if(document.forms.u2.opmerk)
          {
              s = document.forms.u2.opmerk.value;
              if (s.length > 2000 )
                 document.forms.u2.opmerk.value = s.substring(0,2000);
          }
<%      } %>

        return true;
      }

      function onChangeStarttijd()
      {
          <% if (rsv_ruimte_key < 0) { /* alleen bij nieuwe */ %>
              autosetEindtijd();
          <% } %>
      }

      function checkVeldenVerplicht()
      {
        // Afhankelijk van de geselecteerde waarde voor activiteit
        // moet het veld omschrijving en/of aantalbezoekers verplicht worden gemaakt.
        var opt = $("#sel_activity").find("option:selected");
        var oms_verplicht = opt[0].getAttribute("res_activiteit_omsverplicht");
        var bez_verplicht = opt[0].getAttribute("res_activiteit_aantalverplicht");

        $("#descript").toggleClass("required", oms_verplicht == "1");
        $("#bezoekers").toggleClass("required", bez_verplicht == 1);
      }

      function OnChangeActivity()
      {
        var act_key = document.u2.sel_activity.value;
        if (isNaN(act_key) || act_key<0) act_key = -1;
        var s = "load_kenmerk.asp?urole=<%=urole%>&act_key=" + act_key + "<%=(serie?"&serie=1":"")%>&act_change=1";
        s += "&rsv_ruimte_key=<%=rsv_ruimte_key%>";
        $("#resFlexList,#resFlex2List").load(s, function ()
        {
            $("#resFlex,#resFlex2").toggle($("#k_all").val()>0); // verbergen als leeg
            FcltMgr.resized();
        } );
        checkVeldenVerplicht();
        autosetEindtijd();
      }

      function OnChangeSubstatus()
      {
        var i = $("#resflag").val();
        $('label[for="resflag"]').html(L("lcl_res_flags") + ":&nbsp;" + " " + "<img src='../Pictures/resflag"+i+".png'>");
      }

      function onAfhaalBezorgClick()
      {
        $("#ab_mode_filtcode").val(  $("#afhaal").prop("checked")? "RESA" : "RESB"  );

        // Check of de waarden nog geldig zijn want voor afhaal/bezorg worden verschillende filtercodes gebruikt
        // 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)
        sgLoc.setValue($("#locatiekey")[0].value, $("#locatie")[0].value, false, true, null, true);
        sgBld.setValue($("#gebouwkey")[0].value, $("#gebouw")[0].value, false, true, $("#bttype")[0].value, true);
        sgFlr.setValue($("#verdiepingkey")[0].value, $("#verdieping")[0].value, false, true, null, true);
        sgRoom.setValue($("#ruimtekey")[0].value, $("#ruimte")[0].value, false, true, null, true);
      }

      function autosetEindtijd()
      {
        if ($("#sel_activity")[0].tagName == "SELECT")
        { // Activiteit is een selectbox
          var opt = $("#sel_activity").find("option:selected");
          // De extraParamValue is opgeslagen als text. De res_activiteit_duur is een float met mogelijk een komma i.p.v. een punt als decemaal scheidingsteken.
          var res_duur = parseFloat((String(opt[0].getAttribute("res_activiteit_duur"))).replace(',','.'));
        }
        else
        { // Activiteit is een inputbox: $("#sel_activity")[0].tagName == "INPUT")
          var res_duur = parseFloat($("#sel_activity")[0].getAttribute("res_activiteit_duur"))
        }

        if (res_duur)
        {
          var startDate = new Date(parseInt($('#date_from').val()));
          var endDate = new Date(parseInt($('#date_to').val()));
          var estEndDate = startDate.addFloatHours(res_duur, <%=safe.jsfloat(S("res_h"))%>);
          if (!isNaN(startDate) && endDate.getTime() != estEndDate.getTime())
          {
            $("#show_date_to").datepicker('setDate',new Date(estEndDate));
            $("#date_to").val(estEndDate.getTime());
            $("#time_from_date_to").val(toTimeString(estEndDate)).css("color", "red");
          }
        }
      }

      function res_info(url)
      {
        var wnd = window.open(url);
        try { wnd.focus() } catch(e) {};
      }

      jQuery(document).ready(function() {
           $('textarea').resize(function () { FcltMgr.resized(window) } );
           $('textarea').autogrow();

<%         if (restype == "R" && rrr.res_ruimte_key == -1 && rsv_copy_key == -1) { /* nog geen ruimte en alle defaults zijn ingevuld? */ %>
              FindAvailableRooms(true);
<%         } %>
<%         if (restype == "R") { /* plaats van-tijd voor tot-tijd */ %>
                $("#time_from_date_from").insertBefore($("#time_from_date_to")).after("&nbsp;" + L("lcl_tot") + "&nbsp;");
<%         } %>
      });

    </script>
  </head>

  <body id="editbody">
<%
    var buttons =  [ {title: L("lcl_submit"), icon:"opslaan.png", action:"res_submit()", singlepress: true, id:"btn_res_submit" },
                     {title: L("lcl_cancel"), icon: "undo.png", action:"res_cancel()" } ];
    IFRAMER_HEADER(L("lcl_res_frame_algemeen"), buttons);
%>

    <form name="u2"
          action="res_edit_rsv_ruimte_save.asp?x=x<%=buildTransitParam(["urole","rsv_ruimte_key", "rsv_copy_key", "rsv_is_serie", "res_deel_key", "res_artikel_key", "pool", "undelete"])%>"
          method="post">
      <div id="edit">
        <input type='hidden' id='restype' name='restype' value='<%= restype %>'>
<div class='leftcontainer'>
<%
        BLOCK_START("resPlaats" , L("lcl_res_plaats"));
        FCLTcalendar( "date_from",
                      { label    : restype == "CV"? L("lcl_res_starttime_CV") : L("lcl_date"),
                        datum    : rrr.rsv_ruimte_van,
                        minFuture: ((urole=="fe")?rrr.fe_expire_dagen:null),
                        maxPast  : ((urole=="fe")?0:S("res_reservering_limiet")),
                        maxFuture: ((urole=="fe"&&S("res_fe_reservering_limiet")>0)?S("res_fe_reservering_limiet"):S("res_reservering_limiet")),
                        initEmpty: (rsv_ruimte_key<0 && rsv_copy_key<0 && !res_van),
                        timeField: true,
                        timeStep : S("res_h")*60,
                        startTime: S("res_t1"),
                        calendars: (rsv_ruimte_key<0?2:1),
                        endTime  : S("res_t2"),
                        autoopen : (rsv_ruimte_key<0 && rsv_copy_key<0 && !res_van),
                        readonly : fe_lastminute || (rsv_copy_key > 0 && rrr.reservering_ispool) || rrr.res_ruimte_extern,
                        saveValue: (rsv_copy_key > 0 && rrr.reservering_ispool),
                        volgnr   : 1,
                        required : true,
                        onChange : "onChangeStarttijd()"
                      });

        //======= FIELD 'Activiteit' =======
        var sql = "SELECT a.res_activiteit_key"
                + "     , " + "CASE WHEN sa.res_srtactiviteit_prefix IS NULL"
                       + "          THEN ''"
                       + "          ELSE sa.res_srtactiviteit_prefix || '-'"
                       + "          END"
                       + "          || " + lcl.xsqla("a.res_activiteit_omschrijving", "a.res_activiteit_key")
                + "     , a.res_activiteit_duur"
                + "     , a.res_activiteit_omsverplicht"
                + "     , a.res_activiteit_aantalverplicht"
                + "  FROM res_activiteit a"
                + "     , res_srtactiviteit sa"
                + (res_deel_key > 0 || res_artikel_key > 0
                  ? " , res_activiteitdiscipline rad"
                  : "")
                + " WHERE res_activiteit_verwijder IS NULL"
                + "   AND a.res_srtactiviteit_key = sa.res_srtactiviteit_key"
                + "   AND sa.res_srtactiviteit_key = " + srtact
                + "   AND sa.res_srtactiviteit_soort = " + (restype == "R"? "0" : "1")
                + "   AND EXISTS (SELECT res_activiteit_key"
                + "                 FROM res_activiteitdiscipline rad,"
                + "                      ins_tab_discipline disc"
                + "                    , fac_v_my_disciplines md"
                + "                WHERE rad.res_discipline_key = md.ins_discipline_key"
                + "                  AND md.prs_perslid_key = " + user_key
                + "                  AND md.fac_functie_code = " + safe.quoted_sql(autfunction)
                + "                  AND fac_gebruiker_alg_level_write < 9"
                + "                  AND fac_gebruiker_prs_level_write < 9"
                + "                  AND rad.res_discipline_key = disc.ins_discipline_key"
                + "                  AND rad.res_activiteit_key = a.res_activiteit_key"
                + "                  AND ins_discipline_verwijder IS NULL"
                + (restype == "R"
                  ? "                AND ins_discipline_min_level = 3"         // 1; Reserveerbaar object; 2; Verbruiksartikel; 3; Ruimte
                  : "                AND ins_discipline_min_level IN (1,2)") // 1; Reserveerbaar object; 2; Verbruiksartikel; 3; Ruimte
                + "              )"
                + (getQParamInt("activiteit_key", -1) > 0
                  ? " AND a.res_activiteit_key = " + getQParamInt("activiteit_key", -1)
                  : "")
                + (feonly
                   ? " AND a.res_activiteit_notfrontend = 0"
                   : "")
                + (res_deel_key > 0 || res_artikel_key > 0
                  ? " AND rad.res_activiteit_key = a.res_activiteit_key"
                    + " AND rad.res_discipline_key = " + rrr.res_discipline_key
                  : "")
                + " ORDER BY res_activiteit_volgnr, sa.res_srtactiviteit_prefix, UPPER(" + lcl.xsql('a.res_activiteit_omschrijving', 'a.res_activiteit_key') +")";

        var result = FCLTselector("sel_activity", sql,
                        { label: L("lcl_activity"),
                          emptyOption: rrr.activiteit_key == -1? L("lcl_res_select_activity") : null,
                          initKey: rrr.activiteit_key,
                          onChange: "OnChangeActivity()",
                          extraParamValue: "res_activiteit_duur,res_activiteit_omsverplicht,res_activiteit_aantalverplicht",
                          readonly: getQParamInt("activiteit_key", -1) > -1 || rrr.res_ruimte_extern,
                          required: true
                        }
                      );

        // Als meegeven dan is het readonly hierboven en moeten we het maar hidden oplossen.
        if ((getQParamInt("activiteit_key", -1) > 0) || rrr.res_ruimte_extern)
        {
          oRs = Oracle.Execute(sql);
          var resDuur = 0;
          if (!oRs.Eof)
          {
            resDuur = oRs("res_activiteit_duur").Value;
          }
%>
          <input type="hidden" id="sel_activity" name="sel_activity" value="<%=rrr.res_ruimte_extern? rrr.activiteit_key : getQParamInt("activiteit_key")%>" res_activiteit_duur="<%=resDuur%>">
<%
        }
        if (result.justone)
        {
          rrr.activiteit_key = result.initKey; // voor de flexkenmerken
  %>
          <script type="text/javascript">
              $(document).ready(function()
                          {
                            checkVeldenVerplicht();
                            <% if (rrr.reservering_key < 0) { %>
                                autosetEindtijd();
                            <% } %>
                          });
          </script>
<%      }

        FCLTcalendar( "date_to",
                  { label    : restype == "CV"? L("lcl_res_endtime_CV") : L("lcl_time"),
                    datum    : rrr.rsv_ruimte_tot,
                    minFuture: ((urole=="fe")?rrr.fe_expire_dagen:null),
                    maxFuture: ((urole=="fe"&&S("res_fe_reservering_limiet")>0)?S("res_fe_reservering_limiet"):S("res_reservering_limiet")),
                    timeField: true,
                    timeStep : S("res_h")*60,
                    startTime: S("res_t1"),
                    endTime  : S("res_t2"),
                    volgnr   : 2,
                    readonly : fe_lastminute || (rsv_copy_key > 0 && rrr.reservering_ispool) || rrr.res_ruimte_extern,
                    saveValue: (rsv_copy_key>0 && rrr.reservering_ispool),
                    hidden   : (restype == "R"), // Meerdaags ruimte ondersteunen we nog niet echt
                    required : true,
                    onChange : '$("#time_from_date_to").css("color", "auto")'
                  });

        //======= FIELD 'Aantal personen/nr visitors' =======
        if (rrr.srtactiviteit_metaantal)
        {
          RWFIELDTR("bezoekers", "fldbezcnt", L("lcl_visitors"), rrr.rsv_ruimte_bezoekers, {datatype: "number", required: rrr.aantal_verplicht, readonly: rrr.res_ruimte_extern });
          if (rrr.res_ruimte_extern)
          {
%>
            <input type="hidden" name="bezoekers" id="bezoekers" value="<%=rrr.rsv_ruimte_bezoekers%>" />
<%
          }
        }
        else
      	{
%>
            <input type="hidden" name="bezoekers" id="bezoekers" value="<%=rrr.rsv_ruimte_bezoekers%>" />
<%
        }

        // Voor bestaande reserveringen en back-rechten kan het werkelijk aantal deelnemers
        // ook hier worden ingevuld (in detailed noshow mode)
        if (rrr.rsv_ruimte_key > 0 && S("res_noshow_detailed") == 1 && backo) {
            RWFIELDTR("bezshown", "fldnoshow", L("lcl_res_real_visitors"), rrr.bezoekers_shown, {datatype: "number", maxlength: 5});
        }

        if (restype == "R")
        {
          //======= FIELD 'Ruimte' =======
          if (rrr.res_ruimte_key > 0)
          { // Vullen client-side sel_room variabele en invullen configurations
            var rri = res.res_ruimte_info(rrr.res_ruimte_key);
            rri.init = true;
            var rvi = res.res_voorzieningen_info(rsv_ruimte_key);
            rri.kpnverplicht = (rri.kpnverplicht || rvi.kpnverplicht)? 1 : 0; // Voorzieningen verplichtheid meenemen met ruimte verplichtheid.
            if ((rrr.srtactiviteit_kpnverplicht == 2) && rri.kpnverplicht)
            { // Kostenplaats is niet verplicht (Niet tonen(2)) via srt activiteit maar wel via de discipline. Dan moet kostenplaats veld toch getoond worden.
              rrr.srtactiviteit_kpnverplicht = 0;
            }

  %>
          	<script type="text/javascript">
          	    $(document).ready(function()
          	                {
                              var JSONdata = '(<%=safe.jsstring(JSON.stringify(rri))%>)';
            		              process_res_ruimte_info(eval('(' + JSONdata + ')'));
          	                });
          	</script>
<%        }

          FCLTplaatsselector(authparams.ALGwritelevel, { locatiekey: rrr.alg_locatie_key,
                                                         startlevel: 2,/*locatie*/
                                                         eindlevel: 2,/*locatie*/
                                                         readonly: reado_rsv_ruimte || fe_lastminute || rrr.res_ruimte_extern,
                                                         filtercode: "RES",  /*strict genomen alleen voor FE/FO, maar readonly maakt dit vanzelf goed toch? */
                                                         urlAdd: [{ urlParam: "act_key", field: "sel_activity" }],
                                                         no_table: true,
                                                         onLocChange: "onLocChanged()",
                                                         requiredlevel: (S("res_search_require_locatie")==1 ? 2 : null)
                                       });

          var attrValue = "hasvalue='" + (rsv_ruimte_key == -1 && rrr.res_ruimte_key == -1? "0" : "1") + "'";
%>
          <tr><td class="label"><label for='sel_room'><%=L("lcl_room")%>:</label></td>
    	      <td><div id='req_sel_room'>
    	            <input type="text" id="sel_room"
    	                   class="<%=!rrr.res_ruimte_extern? "button fldresroomedit" : ""%> fldresroom required"
    	                   readonly
    	                   <% if (!rrr.res_ruimte_extern) { %> onclick="FindAvailableRooms()" <% } %>
    	                   value="<%=L("lcl_res_select_room")%>"
    	                   name="sel_room" <%=attrValue%> />
    	        </div>
    	      </td>
    	    </tr>

          <!-- Opstelling -->
          <tr><td class="label"><label for='ruimte_opstel<%=rrr.res_ruimte_extern? "_ro" : ""%>'><%=L("lcl_config") %>:</label></td>
              <td>
                  <!--[if lt IE 8]><div id='req_ruimte_opstel' class='fldopstel required'><![endif]-->
<%                if (rrr.res_ruimte_extern)
                  { %>
                    <input class="fld" type="text" name="ruimte_opstel_ro" id="ruimte_opstel_ro" value="<%=safe.html(rrr.opstelling_omschrijving) + " (" + rrr.opstel_bezoekers + " " + L("lcl_res_pers") + ")"%>" readonly />
<%                }
                  else
                  { %>
                      <select class="fldopstel required" <%=reado_rsv_ruimte? "disabled" : ""%>
                              name='ruimte_opstel' id='ruimte_opstel'
                              onChange='RuimteOpstelChanged()'>
                      <% /* Will be filled automatically */ %>
                      </select>
<%                } %>

                  <!--[if lt IE 8]></div><![endif]-->
<%                if (rrr.res_ruimte_extern)
                  { %>
                    <input type="hidden" name="ruimte_opstel" id="ruimte_opstel" value="<%=rrr.ruimte_opstel_key%>" />
<%                } %>
              </td>
          </tr>
<%      }
        else
        { // restype == "CV")
          if (rsv_ruimte_key > 0)
          { // Vullen client-side sel_room variabele en invullen configurations
            var rvi = res.res_voorzieningen_info(rsv_ruimte_key);
          }

          if (rrr.ab_mode & 2) // dan vast
          {
            // Filter voor de plaatsselector is afhankelijk van de de huidige gekozen waarde (rrr.ab_mode)
            urlAdd = [{urlParam: "filtcode", val: (rrr.ab_mode & 1? "RESB" : "RESA"), init: (rrr.ab_mode & 1? "RESB" : "RESA")}];
            %><tr><td class="label">
                <label><%=(rrr.ab_mode & 1)? L("lcl_res_bezorgen_fixed") : L("lcl_res_afhalen_fixed")%>:</label>
              </td><td><input type="hidden" id="ab_mode" name="ab_mode" value="<%=rrr.ab_mode%>"></td></tr>
<%        }
          else // toggle bezorg/afhaal
          {
            // Filter voor de plaatsselector is afhankelijk van de de huidige gekozen waarde (rrr.ab_mode)
            urlAdd = [{urlParam: "filtcode", jqfield: "#ab_mode_filtcode", init: (rrr.ab_mode & 1? "RESB" : "RESA")}];
%>
            <tr><td></td>
              <td><label class="lt"><input type="radio" id="afhaal" name="ab_mode" value="0" <%=!(rrr.ab_mode & 1)? "checked" : ""%> onClick="onAfhaalBezorgClick()"><%=L("lcl_res_afhalen")%></label>
                  <label class="lt"><input type="radio" id="bezorg" name="ab_mode" value="1" <%=rrr.ab_mode & 1? "checked" : ""%> onClick="onAfhaalBezorgClick()"><%=L("lcl_res_bezorgen")%></label>
                  <input type="hidden" id="ab_mode_filtcode" name="ab_mode_filtcode" value="<%=(rrr.ab_mode & 1? "RESB" : "RESA")%>">
              </td>
            </tr>
<%
            //TODO: Hierboven ook iets doen op de onChange
          }

          // Plaatsselector is altijd afhankelijk van activiteit
          urlAdd.push({urlParam: "act_key", val: rrr.activiteit_key, init: rrr.activiteit_key});

          if (getQParamInt("disc_key", -1) > 0)
              urlAdd.push({urlParam: "disc_key", val: getQParamInt("disc_key"), init: getQParamInt("disc_key")});

          if (getQParamInt("res_deel_key", -1) > 0)
              urlAdd.push({urlParam: "res_deel_key", val: res_deel_key, init: res_deel_key});

          // Bij afhalen is locatie verplicht en de rest wat minder, maar die hebben we toch nodig
          // Het kan (zal) zijn dat bij onChange wat gereset moet worden?
          FCLTplaatsselector(authparams.ALGwritelevel, { locatiekey: rrr.alg_locatie_key,
                                                         gebouwkey: rrr.alg_gebouw_key,
                                                         verdiepingkey: rrr.alg_verdieping_key,
                                                         ruimtekey: rrr.alg_ruimte_key,
                                                         // readonlylevel: rrr.res_deel_alg_level,
                                                         startlevel: 2, /*locatie*/
                                                         eindlevel: 5, /*ruimte*/
                                                         initfiltercode: (rrr.ab_mode & 1)? 'RESB' : 'RESA', // Filter voor de plaatsselector is afhankelijk van de de huidige gekozen waarde (rrr.ab_mode)
                                                         urlAdd: urlAdd,
                                                         readonly: reado_rsv_ruimte || fe_lastminute || getQParamInt("alg_ruimte_key", -1) > 0 || reado_alg,
                                                         readonlylevel: reado_level,
                                                         no_table: true,
                                                         required: true
                                                       });
        }

        //======= FIELD 'Status' (alleen te editen door FO) =======
        sql = "SELECT         1, " + safe.quoted_sql(res.getfostatustext(1)) + " FROM DUAL"
            + " UNION SELECT  2, " + safe.quoted_sql(res.getfostatustext(2)) + " FROM DUAL"
            + " UNION SELECT  3, " + safe.quoted_sql(res.getfostatustext(3)) + " FROM DUAL"
            + " UNION SELECT  4, " + safe.quoted_sql(res.getfostatustext(4)) + " FROM DUAL"
            + (for_undelete ? " UNION SELECT -1, '' FROM DUAL" : "")
            + " ORDER BY 2 NULLS FIRST";
        FCLTselector('status_fo', sql,
                          { label:  L("lcl_status_FO"),
                            initKey: (rsv_ruimte_key > 0 ? (for_undelete ? -1 : rrr.status_fo_key )
                                                         : (fronto ? S("res_default_fo_status_key") : S("res_default_fe_status_key"))),
                            readonly: reado_rsv_ruimte || !fronto || rrr.res_ruimte_extern,
                            required: (for_undelete ? true : false)
                          }
                       );

        // In de frontend mode kan voor elke reserveringsruimte aangegeven worden welke initiëel FO-status de reservering moet krijgen (res_ruimte.res_status_fo_key).
        // Voor de frontend deze status voor de gekozen ruimte bijhouden.
        if (frontend)
        { %>
          <input type="hidden" id="status_fo" name="status_fo" value="<%=rsv_ruimte_key > 0? rrr.status_fo_key : S("res_default_fe_status_key")%>">
<%      }
        if (S("res_noshow_detailed") == 0 && backo)
        {   // Allow editing of No show
            CHECKBOXTR(L("lcl_res_no_show"), "", "res_noshow", rrr.rsv_ruimte_noshow, { html: (reado_rsv_ruimte || rrr.res_ruimte_extern? "disabled" : "")});
        }
        BLOCK_END()

        BLOCK_START("resUser",L("lcl_res_info"));
%>
        <script type="text/javascript">
          // Process de data die van de gastheer via Ajax terugkomt.
          function process_host_info(data)
          {
            if ($("#kostenklant").prop("checked"))
              // Zet eigen (default) kostenplaats alleen als kostenklant AAN. Indien niet aanwezig dan wordt suggestbox automatisch leeg gemaakt.
              sgAccount.setValue(data.kostenplaats_key, data.kpn_string, true, true, data.module, true);
            $("#default_kostenplaats_person_key").val(data.kostenplaats_key);
            $("#default_kostenplaats_person_omschr").val(data.kpn_string);
            $("#default_kostenplaats_module").val(data.kpn_module);

            <% if (1 || restype == "CV") { %>
            var callerinfo=FcltMgr.getCaller();

            if (callerinfo && callerinfo.prs_key == data.prs_perslid_key && data.werkplekken.length && confirm(L("lcl_shared_use_caller_werkplek")))
                plaatsselector.preferWerkplekken(data.werkplekken); // Selecteert automatisch
            <% } %>

          };

          function changeKostK(zelf)
          {
            if (zelf)
            { // Aanroep van onchange van kostenklant vinkje. zelf is dan checkbox object
              if ($("#person").val() > 0)
              { // Persoon is ingevuld.
                acc_key = $("#default_kostenplaats_person_key").val();
                acc_oms = $("#default_kostenplaats_person_omschr").val();

                // 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)
                sgAccount.setValue(acc_key, acc_oms, true, true, null, true);
               }
            }
          }

          function changeName(p_key, txt) // Change contact/aanvrager name
          {
            if (p_key > 0)
            {
              sgHost.setValue(p_key, txt);
              changeNameH(p_key);
            }
          }

          // Wijzigen van de gastheer heeft geen invloed op de inhoud van de kostenplaats listboxen
          // maar wel invloed op de geselecteerd in die listbox (namelijk de kostenplaats van de
          // afdeling van de gastheer)
          function changeNameH(p_key) { // On change host name change dept
            if (p_key > 0)
            {
              $.getJSON("../prs/get_prs_info_ajax.asp",
                        { req_info: "prs_perslid",
                          prs_werkplek: 1,
                          prs_perslid_key: p_key
                        },
                        process_host_info);
              }
          }
        </script>

<%      //======= FIELD 'Aanvrager/contact' =======
        FCLTpersoonselector("person",
                            "sgPerson",
                            { label: L("lcl_name"),
                              perslidKey: rrr.contact_key,
                              onChange: "changeName",
                              moreinfo: urole!='fe',
                              autlevel: authparams.PRSwritelevel,
                              readonly: urole!='fo' || ordernr_reado || rrr.res_ruimte_extern,
                              required: true
                            });

        //======= FIELD 'Gastheer/host' =======
        FCLTpersoonselector("personH",
                            "sgHost",
                            { label: L("lcl_host"),
                              perslidKey: (S("res_allow_for_others")?rrr.host_key : rrr.contact_key),
                              autlevel: authparams.PRSwritelevel,
                              onChange: "changeNameH",
                              moreinfo: urole!='fe',
                              readonly: authparams.PRSwritelevel==9 || ordernr_reado,
                              required: true,
                              trclass: (S("res_allow_for_others")?"":"hidden")
                            });

        //======= FIELD 'Kostenplaats' =======
        if (rrr.srtactiviteit_kpnverplicht < 2)
        {
          FCLTkostenplaatsselector("account",
                                   "sgAccount",
                                   rrr.kosten_klant? rrr.contact_key : user_key,
                                   { label: L("lcl_res_inf_kostenklant"),
                                     kostenplaatsKey: rrr.kostenplaats_key,
                                     filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initiële waarde kan bij kostenplaatsen altijd.
                                     urlAdd: [{ urlParam: "prs_key", field: "person" }],
                                     readonly: ordernr_reado,
                                     kptoggle: { ischecked: rrr.kosten_klant,
                                                 onChange: "changeKostK(this);",
                                                 readonly: ordernr_reado,
                                                 hidden: (frontend) },
                                     required: rrr.srtactiviteit_kpnverplicht == 1 ||
                                               ((rrr.res_ruimte_key > 0 && restype == "R" && rri.kpnverplicht) ||
                                                (rsv_ruimte_key > 0 && rvi.kpnverplicht))
                                   });
        }
        else
      	{
%>
          <input type="hidden" id="account" name="account" value="-1" />
<%
        }
%>
        <input type="hidden" id="default_kostenplaats_person_key" value="<%=(rsv_ruimte_key==-1 && rsv_copy_key == -1)? host_info.kostenplaats_key : rrr.kostenplaats_key%>">
        <input type="hidden" id="default_kostenplaats_person_omschr" value="<%=(rsv_ruimte_key==-1 && rsv_copy_key == -1)? safe.htmlattr(host_info.kpn_string) : safe.htmlattr(rrr.kostenplaats_omschr)%>">
        <input type="hidden" id="default_kostenplaats_module" value="<%=(rsv_ruimte_key==-1 && rsv_copy_key == -1)? safe.htmlattr(host_info.kpn_module) : safe.htmlattr(rrr.kostenplaats_module)%>">
<%
        if (S("show_ordernr") != 0)
        {
            RWFIELDTR("ordernr", "fldordernr", L("lcl_mld_inf_Ordernr"), rrr.res_ordernr,
                     {readonly: ordernr_reado, maxlength: 30});
        }
        if (rrr.srtactiviteit_metomschr)
        {
%>
        <tr>
          <td class="label"><label for="descript"><%=L("lcl_descr")%>:</label></td>
          <td><input class="fldresdesc<%=rrr.descript_required && !rrr.res_ruimte_extern? " required":""%>" name="descript" id="descript" <%=ordernr_reado || rrr.res_ruimte_extern? "readonly " : ""%>
                     maxlength="60" value="<%=safe.htmlattr(rrr.descript)%>">
          </td>
        </tr>
<%
        }
        if (rrr.srtactiviteit_metopmerk)
        {
          RWTEXTAREATR("opmerk", "fldomschr", L("lcl_remark"), rrr.rsv_ruimte_opmerking, {html: "rows='4'" + (ordernr_reado? " readonly" : ""), maxlength: 2000});
        }
%>

<%      BLOCK_END();
%></div><% // div.leftcontainer

        // ============================================================================================================

      BLOCK_START("resInfo", rsv_ruimte_key > -1 ? L("lcl_reservation") + " " + rrr.resnrtxt : L("lcl_res_new_reservation"));
        if (rsv_ruimte_key > 0)
        {
            ROFIELDTR("fldresstatus", L("lcl_status_BO"), res.getbostatustext(rrr.status_bo_key),
                            { infoPointer: { Url: "appl/shared/status_info.asp?rsv_ruimte_key="+rsv_ruimte_key + "&urole=" + urole,
                                             Title: L("lcl_status_details") + " " + rrr.resnrtxt
                                           }
                            });
        }

        if (S("res_reservering_flags") > 0)
        {
          if (urole != "fe")
          {
            flag_array = [];
            for (i=0; i<S("res_reservering_flags"); i++)
            {
              flag_array.push("SELECT "+i+", "+safe.quoted_sql(L("lcl_res_flag"+i))+" FROM DUAL");
            }
            sql = flag_array.join(" UNION ");
            FCLTselector( "resflag"
                        , sql
                        , { initKey: rrr.status_flag
                          , label: L("lcl_res_flags")
                          , onChange: "OnChangeSubstatus()"
                          }
                        );
          }
          else
          {
            ROFIELDTR("fld", L("lcl_res_flags")
                     , L("lcl_res_flag"+rrr.status_flag)
                     , { html: "style='padding-left: 20px; background-repeat: no-repeat; background-image: url(../Pictures/resflag"+rrr.status_flag+".png)'"
                       , suppressEmpty: true
                       }
                     );
          }
        }

        if (restype == "R" || (S("res_roompricingkorting") & 4)) // Misschien kortingveld tonen/ ook voor catering?
        {
            if (this_res.canChangeKorting)
                RWFIELDTR("ruimte_korting", "fldshort", L("lcl_res_ruimtekorting") + " " + S("currency_pref"),
                         safe.curreditable(rrr.ruimte_korting), { datatype: "currency" } );
            else
                ROFIELDTR("fldshort", L("lcl_res_ruimtekorting") + " " + S("currency_pref"), safe.curr(rrr.ruimte_korting),
                         {suppressEmpty: true, datatype: "currency"} );
        }
        if (restype == "R" || (S("res_roompricingtotaal") & 4)) // Misschien totaalveld tonen/ ook voor catering?
        {
            if (this_res.canChangeTotaal)
                RWFIELDTR("ruimte_totaal", "fldshort", L("lcl_res_ruimtetotaal") + " " + S("currency_pref"),
                         safe.curreditable(rrr.ruimte_totaal), { datatype: "currency" } );
            else
                ROFIELDTR("fldshort", L("lcl_res_ruimtetotaal") + " " + S("currency_pref"), safe.curr(rrr.ruimte_totaal),
                         {suppressEmpty: true, datatype: "currency"} );
        }
        if (restype == "R")
        {
%>
           <tr><td colspan="2" class="resroominfo"><img style="display:none" id="resphoto"></td></tr>
           <tr><td colspan="2" class="resroominfo"><div id="resdescript"></div></td></tr>
           <tr><td colspan="2" class="details"><div id="resinfo"></div></td></tr>
<%
        }
      BLOCK_END();

%>         <div id='resFlexList'><% // Wrapper div voor dynamisch herladen
            generateFlexKenmerkBlock({urole: urole,
                                      res_key : rrr.reservering_key,
                                      act_key : rrr.activiteit_key,
                                      defaults : rrr.flex_defaults, // pacta: { bsn: "12345678", plaats: "Enschede", postcode:"1234AB" }
                                      rsv_ruimte_key : ((restype == "CV" && rsv_copy_key > -1) ? rsv_copy_key : rsv_ruimte_key), // ook bij 'ruimte erbij'
                                      reado: false,
                                      flexcolumns: S("res_flexcolumns"),
                                      hide: rrr.activiteit_key<0
                                    });
%>         </div>
      </div> <!-- edit -->
<% IFACE.FORM_END(); %>
    </form>
  </body>
</html>
