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

    File:               pda/afspraak.asp
    Description:        Add/wijzig melding (Mobile version)
    Parameters:         afs_key voor bestaande melding
                        afs_key=-1 voor nieuwe melding

    Note:

*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/suggest/suggest.inc" -->
<!-- #include file="../bez/bez.inc" -->
<!-- #include file="../bez/bez_flexkenmerk.inc" -->
<!-- #include file="../res/res.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->

<%
FCLTHeader.Requires({ plugins:["suggest"],
                      js: ["./modernizr-3.3.0.custom.min.js"] });
FCLTHeader.Requires({ js: ["jquery.timepicker-table.js"],
                      css: ["timePicker-table.css"] });

var afs_key = getQParamInt("afs_key",-1);  // -1 betekent nieuwe
var qrc = getQParamInt("qrc", 0) != 0;
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1);

// Mogelijke parameters voor toevoegen only
// Deze zijn niet waarschijnlijk meegegeven, maar de defaultwaarde is ook al handig
var locatie_key    = getQParamInt("locatie_key", user.alg_locatie_key({withcurrent:true})); // Locatie
var gebouw_key     = getQParamInt("gebouw_key", user.alg_gebouw_key({withcurrent:true})); // Gebouw, kan -1 zijn, dan niet gebruiken
var verdieping_key = getQParamInt("verdieping_key", user.alg_verdieping_key({withcurrent:true}));
var ruimte_key     = getQParamInt("ruimte_key", user.alg_ruimte_key({withcurrent:true}));
var urole = "fe";
// Nog meer default waarden voor een nieuwe afspraak.
var timeBeginInitEmpty = false;
var timeEindInitEmpty  = false;
var bez_afspraak_datum = new Date();
var bez_afspraak_eind  = new Date();
var bez_afspraak_host  = "";
var bez_afspraak_tel   = "";
var bez_afspraak_ruimte = "";
var bez_afspraak_host_key    = user_key;
var bez_afspraak_contact_key = user_key;
var bez_afspraak_opmerking   = L("lcl_bez_createdbymobile");
var bez_bezoekers = [];
var isReservering = false;

if (rsv_ruimte_key != -1)
{
    var sql = "SELECT bez_afspraak_key"
            + "  FROM bez_afspraak"
            + " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
    var oRs = Oracle.Execute(sql);
    if (!oRs.Eof)
      afs_key = oRs("bez_afspraak_key").Value;
    oRs.Close();
    //
    // Als afs_key == -1 dan zijn er nog geen bezoekers bij een reservering aangemeld.
    // Haal de benodigde informatie uit de reservering.
    var rsv = res.res_rsv_ruimte_info(rsv_ruimte_key);
    isReservering = true;
}


var this_bez = bez.func_enabled_afspraak(afs_key);
user.auth_required_or_abort(this_bez.canReadAny);
var authparams = user.checkAutorisation("WEB_BEZUSE");

var sql = "SELECT COALESCE(MIN(fac_gebruiker_alg_level_write), 9) writelevel"
        + "  FROM fac_v_webgebruiker g, fac_functie f "
        + " WHERE g.fac_functie_key = f.fac_functie_key "
        + "   AND f.fac_functie_code IN ('WEB_BEZUSE')"
        + "   AND g.prs_perslid_key = " + user_key;
var oRs = Oracle.Execute(sql);
var autlevel = oRs("writelevel").Value; // Pas op: kan ook '0' zijn (regio)
oRs.Close();

var actie_key = -1;
if (afs_key > -1)
{
  // BESTAANDE AFSPRAAK
  //user.auth_required_or_abort(this_afs.canReadAny);
  var bez_info = bez.bez_afspraak_info(afs_key);
  locatie_key = bez_info.locatie_key;
  // TODO: Onderstaande query weghalen en vervangen door info uit bovenstaande bez_info

  sql = "SELECT a.bez_afspraak_datum"
      + "     , a.bez_afspraak_eind"
      + "     , a.bez_afspraak_ruimte"
      + "     , a.bez_afspraak_opmerking"
      + "     , a.bez_afspraak_host_key"
      + "     , a.bez_afspraak_contact_key"
      + "     , COALESCE(a.alg_onrgoed_keys, a.alg_locatie_key) alg_onrgoed_keys"
      + "     , a.res_rsv_ruimte_key"
      + "     , COALESCE(o.alg_type, 'L') alg_type"
      + "     , a.bez_actie_key"
      + "  FROM bez_afspraak a"
      + "     , alg_v_allonrgoed_gegevens o"
      + " WHERE a.alg_onrgoed_keys = o.alg_onroerendgoed_keys(+)"
      + "   AND a.bez_afspraak_key = " + afs_key;
  var oRs = Oracle.Execute(sql);
  if (oRs.Eof)
    shared.record_not_found();
  bez_afspraak_datum = new Date(oRs("bez_afspraak_datum").Value);
  bez_afspraak_eind  = new Date(oRs("bez_afspraak_eind").Value);
  bez_afspraak_ruimte      = oRs("bez_afspraak_ruimte").Value;
  bez_afspraak_opmerking   = oRs("bez_afspraak_opmerking").Value;
  bez_afspraak_host_key    = oRs("bez_afspraak_host_key").Value;
  bez_afspraak_contact_key = oRs("bez_afspraak_contact_key").Value;
  alg_onrgoed_keys         = oRs("alg_onrgoed_keys").Value;
  rsv_ruimte_key           = oRs("res_rsv_ruimte_key").Value || -1;
  alg_type                 = oRs("alg_type").Value;
  actie_key                = oRs("bez_actie_key").Value
  oRs.Close();
  isReservering = (rsv_ruimte_key != -1)
  if (rsv_ruimte_key != -1)
    var rsv = res.res_rsv_ruimte_info(rsv_ruimte_key);
  switch (alg_type)
  {
    case "L" : locatie_key    = alg_onrgoed_keys; break;
    case "G" : gebouw_key     = alg_onrgoed_keys; break;
    case "V" : verdieping_key = alg_onrgoed_keys; break;
    case "R" : ruimte_key     = alg_onrgoed_keys; break;
  }

  var sql = "SELECT b.bez_bezoekers_key"
          + ", b.bez_afspraak_naam"
          + ", b.bez_afspraak_bedrijf"
          + ", b.bez_bezoekers_done"
          + ", b.bez_bezoekers_out "
          + ", b.bez_afspraak_key bez_afspraak_key"
          + ", rrd.res_rsv_deel_key rsv_deel_key"
          + ", org.alg_onroerendgoed_keys" // parkeerplaats
          + ", org.alg_type"
          + ", COALESCE(org.alg_gebouw_key, org.alg_terreinsector_key) gebouw_key"
          + ", COALESCE(org.alg_gebouw_code, org.alg_terreinsector_code) || ' ' || COALESCE(org.alg_gebouw_naam, org.alg_terreinsector_naam) code"
          + " FROM bez_bezoekers b"
          + ", res_rsv_deel rrd"
          + ", res_deel rd"
          + ", ins_deel id"
          + ", alg_v_allonrgoed_gegevens org"
          + " WHERE b.bez_bezoekers_key = rrd.bez_bezoekers_key (+)"
          + " AND rrd.res_deel_key = rd.res_deel_key(+)"
          + " AND rd.res_ins_deel_key = id.ins_deel_key(+)"
          + " AND id.ins_alg_ruimte_key = org.alg_onroerendgoed_keys(+)"
          + " AND bez_afspraak_key = " + afs_key
          + " ORDER BY UPPER(bez_afspraak_naam)";
  var oRs = Oracle.Execute(sql);
  var rij = 0;
  while (!oRs.eof)
  {
    rij += 1;
    vbedrijf = (oRs("bez_afspraak_bedrijf").Value != null ? oRs("bez_afspraak_bedrijf").Value : " ");
    vonrgoed = { prk_key: oRs("alg_onroerendgoed_keys").Value || -1
               , geb_key: oRs("gebouw_key").Value
               }
    var bezoeker = { rownr: rij
                   , bez_key: oRs("bez_bezoekers_key").Value
                   , naam:    oRs("bez_afspraak_naam").Value
                   , bedrijf: vbedrijf
                   , parkeer: oRs("code").Value
                   , onrgoed: vonrgoed
                   };
    bez_bezoekers.push(bezoeker);
    oRs.movenext();
  }
  oRs.Close();
}
else
{
  if (rsv_ruimte_key != -1)
  {
    // Er zijn nog geen bezoekers bij een reservering aangemeld.
    // De benodigde informatie komt uit de reservering.

    bez_afspraak_datum       = new Date(rsv.ruimte_van);
    bez_afspraak_eind        = new Date(rsv.ruimte_tot);
    locatie_key              = rsv.loc_key;
    ruimte_key               = rsv.room_key;
    bez_afspraak_ruimte      = rsv.ruimtenr;
    bez_afspraak_contact_key = rsv.contact_key;
    bez_afspraak_host_key    = rsv.host_key;
    bez_afspraak_tel         = rsv.telefoon;
  }
  else
  {
    // NIEUWE AFSPRAAK
    // AFSPRAAK DATUM/TIJD
    // defaults zetten
    bez_afspraak_datum = new Date();
    if (S("vis_t1_std") > 0)
    {
      if (urole != 'bo') // alleen backo default 'nu', anderen vis_t1_std
      {
        bez_afspraak_datum.setHours(Math.floor(S("vis_t1_std")));
        bez_afspraak_datum.setMinutes((S("vis_t1_std") - Math.floor(S("vis_t1_std"))) * 60, 0, 0);
      }
    }
    else
    { // S("vis_t1_std") < 0
      if (urole != 'bo')
      {
        timeBeginInitEmpty = true;
        bez_afspraak_datum.setHours(0);
        bez_afspraak_datum.setMinutes(0, 0, 0);
      }
    }
    bez_afspraak_eind = new Date(bez_afspraak_datum);
    if (S("vis_t2_std") > 0)
    {
      bez_afspraak_eind.setHours(Math.floor(S("vis_t2_std")));
      bez_afspraak_eind.setMinutes((S("vis_t2_std") - Math.floor(S("vis_t2_std"))) * 60);
    }
    else
    {
      timeEindInitEmpty = true;
    }

    // Nu moet de plaats opgegeven worden. We volgen hier het verplichte niveau van registratie vis_mandatory_alg_level
    // Dat is blijkbaar vereist om een bezoeker zinvol aan te melden, lager is leuk maar daar belasten we de mobiele gebruiker
    // niet mee. Voor onverhoopt lage verplichte niveaus moeten we wel een getrapte lijst bieden, je kunt niet zomaar alleen
    // een lijst van alle ruimtes tonen om te kiezen.
    // Het gaat altijd alleen om bezoekbare gebouwen (suggest-filtercode BEZ)
    // LET OP: De werklocatie hoeft niet voor te komen in de lijst van bezoekbare gebouwen.

    var requiredlevel = 2;  // standaard locatie
    var llabel = L("lcl_building");
    var fnkey = "loc_key";  // fieldname
    if (S("vis_afspraak_onrgoed_uses_keys") == 1)
    {
      switch (S("vis_mandatory_alg_level"))
      {
        case "L" : requiredlevel = 2; break;
        case "G" : requiredlevel = 3; break;
        case "V" : requiredlevel = 4; break;
        case "R" : requiredlevel = 5; break;
      }
    }
    if (requiredlevel > 3) requiredlevel = 3; // Voor level 4 en 5 bestaat nog geen code, dus terugvallen op 3.

    // We weten nu welk niveau we moeten kiezen, maak de UI
    switch (requiredlevel)
    {
      case 2:
          llabel = L("lcl_location");
          linitkey = locatie_key;
          fnkey = "locatiekey";
          fnonchange = "placeChanged('L')";
          lextraparamvalue = null;
          sql = "SELECT alg_locatie_key key"
              + "     , l.alg_locatie_omschrijving || '(' || l.alg_locatie_code || ')' naam"
              + "  FROM alg_locatie l"
              + " WHERE EXISTS"
                + " (SELECT ag.alg_locatie_key"
                + "    FROM alg_v_aanweziggebouw ag"
                + "   WHERE ag.alg_gebouw_bez = 1"
                + "     AND ag.alg_locatie_key = l.alg_locatie_key)";
          if (autlevel >= 0)
              sql +=  " AND l.alg_locatie_key IN"
                     + " (SELECT alg_locatie_key"
                     + "    FROM fac_v_my_locations"
                     + "   WHERE prs_perslid_key = " + user_key
                     + "     AND niveau = " + autlevel + ")";
          sql += " ORDER BY 2";
        break;
      case 3:
          llabel = L("lcl_building");
          linitkey = gebouw_key;
          fnkey = "gebouwkey";
          fnonchange = "placeChanged('G')";
          lextraparamvalue = "alg_locatie_key";
          sql = "SELECT g.alg_gebouw_key"
              + "     , COALESCE(l.alg_locatie_omschrijving, l.alg_locatie_code) || '-' || alg_gebouw_naam"
              + "     , l.alg_locatie_key"
              + "  FROM alg_gebouw g"
              + "     , alg_srtgebouw sg"
              + "     , alg_v_aanweziglocatie l"
              + " WHERE sg.alg_srtgebouw_key = g.alg_srtgebouw_key"
              + "   AND g.alg_locatie_key = l.alg_locatie_key"
              + "   AND sg.alg_srtgebouw_passief IS NULL"  // Alleen de facilitair actieve gebouwen
              + "   AND g.alg_gebouw_bez = 1"  // en bezoekbaar
              + "   AND g.alg_gebouw_verwijder IS NULL";
          if (autlevel >= 0)
              sql +=  " AND g.alg_gebouw_key IN"
                     + " (SELECT alg_gebouw_key FROM fac_v_my_buildings"
                     + "   WHERE prs_perslid_key = " + user_key
                     + "     AND niveau = " + autlevel + ")";
          sql += " ORDER BY 2";
        break;
      case 4: // Lager komt later als nodig.
      case 5: // Lager komt later als nodig.
        break;
    }
    // Maak van host_key een naam.
    if ((S("vis_afspraak_host_uses_keys") & 1) == 0)
    {
      bez_afspraak_host = user.naam();
      bez_afspraak_tel = user.prs_perslid_telefoonnr();
    }
  }

  var sqla = "SELECT bez_actie_key"
          + "     , bez_actie_omschrijving"
          + "  FROM bez_actie"
          + " WHERE bez_actie_default = 1"
          + " ORDER BY 2";
  var oRs = Oracle.Execute(sqla);
  if (!oRs.Eof)
    actie_key = oRs("bez_actie_key").Value; // Selecteer de default waarde
  oRs.Close();
}

// Zijn er locaties met parkeerplaatsen? (locatie_key = -1 meegeven)
var gebtersql = bez.getgebouwterrein_sql(bez_afspraak_datum, bez_afspraak_eind, locatie_key);
oRs = Oracle.Execute(gebtersql);
var aantal_gebter = 0;
while (!oRs.eof)
{
  aantal_gebter++;
  oRs.MoveNext();
}
oRs.Close();

var subject = (isReservering
              ? L("lcl_mobile_bezoek")
              : (afs_key > -1
                ? L("lcl_vis_appointment") + " " + afs_key
                : L("lcl_mobile_newafspraak")
                )
              );
// Waarden zijn bepaald

%>
<html>
  <head>
<%  FCLTMHeader.Generate({title:  subject }); %>
    <script type="text/javascript">
      function afs_submit_callback(json)
      {
        if (<%=afs_key%> == -1)
        { // Aan een nieuwe afspraak moeten direct bezoekers worden toegevoegd.
          window.location.href = "bezoeker.asp?urole=fe&rsv_ruimte_key=<%=rsv_ruimte_key%>&afs_key=" + json.afspr_key;
        }
        else
        {
          if (json.afspr_deleted)
            alert(L("lcl_bez_appdel"));
          else
            alert(L("lcl_mobile_saved"));
          McltCallbackHome(json); // Home omdat niet alle browsers anders een refresh doen
        }
      }

      function afs_submit(gotoVis)
      {
        // Verwijderen parkeerplaats(en).
        var maxrij = <%=bez_bezoekers.length%>;
        for (var rij=1; rij <= maxrij; rij++)
        {
          if (!$("#prk"+rij).is(":checked"))
            $("#gebouwkey"+rij).val(-1);
        }
        if (!validateForm("afspraak"))
          return false;

        var submit_url = $("form[name=afspraak]")[0].action
                       + (<%=rsv_ruimte_key%> != -1 ? "&rsv_ruimte_key=<%=rsv_ruimte_key%>" : "");
        var data = $("form[name=afspraak]").serialize();
        if (<%=afs_key%> == -1)
        {
          $.post( submit_url, data
                , McltCallbackAndThen(gotoVis?bez_add_vis:afs_submit_callback)
                , "json");
        }
        else
        {
          $.post( submit_url, data
                , McltCallbackAndThen(gotoVis?bez_submit_add:bez_submit)
                , "json");
        }
        return false;
      }

      function bez_submit()
      {
          // Gegevens van bezoekers aanpassen en afsluiten
          var submit_url = "../bez/bez_edit_bezoekers_save.asp?urole=fe&mobile=1&afspr_key=<%=afs_key%>"
                         + "&rsv_ruimte_key=<%=rsv_ruimte_key%>";
          $.post( submit_url
                , $("form[name=afspraak]").serialize()
                , McltCallbackClose
                , "json");
      }

      function bez_submit_add()
      {
          // Gegevens van bezoekers aanpassen en nieuwe bezoeker toevoegen
          var submit_url = "../bez/bez_edit_bezoekers_save.asp?urole=fe&mobile=1&afspr_key=<%=afs_key%>"
                         + "&rsv_ruimte_key=<%=rsv_ruimte_key%>";
          $.post( submit_url
                , $("form[name=afspraak]").serialize()
                , McltCallbackAndThen(bez_add_vis)
                , "json");
          return false;
      }

      function bez_add_vis()
      {
          if (!validateForm("afspraak"))
              return false;

          window.location.href = "bezoeker.asp?urole=fe&rsv_ruimte_key=<%=rsv_ruimte_key%>&afs_key=<%=afs_key%>";
      }

      function bez_del_toggle(rij)
      {
        var bez_key = -1 * $("#bez_key"+rij).val();
        $("#bez_key"+rij).val(bez_key);
        $("#btn_del_toggle"+rij).buttonMarkup({ theme: (bez_key < -1 ? "a" : "e") });
      }

      function bez_delete()
      {
        if (confirm(L("lcl_bez_confirm_delete_afspraak")))
        {
         var data = { level: "A",
                      afspr_key: <%=afs_key%>
                    };
         <% protectRequest.dataToken("data"); %>
          $.post("../bez/bez_delete.asp",
                  data,
                  McltCallbackHome, // Op deze manier in ieder geval een refresh
                  "json");
        }
      }

      function placeChanged(type)
      {
        var roomtxt = "";
        switch (type)
        {
            case "L": //
                      roomtxt = $("#locatiekey").find("option:selected").text();
                      break;
            case "G": // Zet de juiste locatie
                      var lgebkeyOptions = document.getElementById("gebouwkey").options;
                      llockey = lgebkeyOptions[lgebkeyOptions.selectedIndex].getAttribute("alg_locatie_key");
                      $("#locatiekey").val(llockey);
                      roomtxt = $("#gebouwkey").find("option:selected").text();
                      break;
            case "V": // Zet de juiste locatie en gebouw
                      // Lager komt later als nodig.
                      break;
            case "R": // Zet de juiste locatie, gebouw en verdieping
                      // Lager komt later als nodig.
                      break;
        }
        $("#room").val(roomtxt.substring(0,30));
      }
    </script>
  </head>
  <body>
    <div>
<%
  PAGE_START({id: "page-1-"+afs_key});
    HEADER({title: subject, back:!qrc, home: !qrc, datatheme: jQFrontEndTheme, delaction: (afs_key > 0 && this_bez.canDelete? "javascript:bez_delete()" : null) });
    CONTENT_START();
%>
      <form name="afspraak" id="afspraak" action="../bez/bez_edit_afspraak_save.asp?urole=fe&mobile=1&afspr_key=<%=afs_key%>" method="post">
        <input type="hidden" name="person"        value="<%=bez_afspraak_contact_key%>">
        <input type="hidden" name="personH"       value="<%=(bez_afspraak_host ? safe.htmlattr(bez_afspraak_host) : bez_afspraak_host_key)%>">
        <input type="hidden" name="phone"         value="<%=safe.htmlattr(bez_afspraak_tel)%>">
        <input type="hidden" name="regiokey"      value="-1">
        <input type="hidden" name="districtkey"   value="-1">
        <input type="hidden" name="remark"        value="<%=safe.htmlattr(bez_afspraak_opmerking)%>">
        <input type="hidden" name="next_vis"      value="<%=1 + bez_bezoekers.length%>">
        <input type="hidden" name="actie"         value="<%=actie_key%>">
<%
      // not needed  BLOCK_START({collapsed: (rsv_ruimte_key != -1 ? true : false), title: (rsv_ruimte_key != -1 ? rsv.activiteit + " " + rsv.reservering_key + "/" + rsv.ruimte_volgnr : L("lcl_res_plaats"))});

      // Wanneer en tot hoelaat is de afspraak.
      if (isReservering)
      {
%>
        <input type="hidden" name="date_from" id="date_from" value="<%=bez_afspraak_datum.getTime()%>">
        <input type="hidden" name="date_to"   id="date_to"   value="<%=bez_afspraak_eind.getTime()%>">
<%
        ROFIELD("fld", L("lcl_date"), toDateTimeString(rsv.ruimte_van) + "-" + toTimeString(rsv.ruimte_tot));
      }
      else
      {
        FCLTcalendar( "date_from"
                    , { label : L("lcl_vis_start_date")
                      , datum: bez_afspraak_datum
                      , maxPast  : ((urole == "fe")? 0 : S("vis_afspraak_limiet"))
                      , maxFuture: ((urole == "fe" && S("vis_fe_afspraak_limiet") > 0)? S("vis_fe_afspraak_limiet") : S("vis_afspraak_limiet"))
                      , calendars: 1
                      , autoopen : (afs_key == -1 && rsv_ruimte_key == -1)
                      , initTimeEmpty: timeBeginInitEmpty
                      , initEmpty: (afs_key < 0 && urole != "bo" && rsv_ruimte_key == -1)
                      , timeField: true
                      , timeStep: S("vis_h") * 60
                      , startTime: S("vis_t1")
                      , endTime: S("vis_t2")
                      , required: true
                      , volgnr: 1
                      , mobile: true
                      }
                    );
        FCLTcalendar( "date_to"
                    , { label : L("lcl_vis_end_date")
                      , datum: bez_afspraak_eind
                      , maxPast  : 0
                      , maxFuture: ((urole == "fe" && S("vis_fe_afspraak_limiet") > 0)? S("vis_fe_afspraak_limiet") : S("vis_afspraak_limiet"))
                      , initTimeEmpty: timeEindInitEmpty
                      , timeField: true
                      , timeStep: S("vis_h") * 60
                      , startTime: S("vis_t1")
                      , endTime: S("vis_t2")
                      , required: true
                      , volgnr: 2
                      , hidden: S("bez_multiday") != 1 // de *datum* is dan verborgen, tijd blijft zichtbaar
                      , mobile: true
                      }
                    );
      }
      //
      // Waar is de afspraak.
      if (afs_key == -1 && !isReservering)
      { // Nieuw, maar deze velden kunnen we zelf verzinnen
        switch (requiredlevel)
        {
          case 2:
%>          <input type="hidden" name="gebouwkey"     value="-1">
            <input type="hidden" name="verdiepingkey" value="-1">
            <input type="hidden" name="ruimtekey"     value="-1">
<%          break;
          case 3:
%>          <input type="hidden" name="locatiekey"    id="locatiekey"    value="<%=locatie_key%>">
            <input type="hidden" name="verdiepingkey" id="verdiepingkey" value="-1">
            <input type="hidden" name="ruimtekey"     id="ruimtekey"     value="-1">
<%          break;
          case 4: // Lager komt later als nodig.
          case 5: // Lager komt later als nodig.
            break;
        }

        FCLTselector(fnkey,
                     sql,
                     { initKey: linitkey,
                       label: llabel,
                       onChange: fnonchange,
                       extraParamValue: lextraparamvalue,
                       mobile: true
                     });
        // room wordt gevuld op de onChange van de FCLTselector, maar wordt hieronder gecreeerd.
%>
        <input type="hidden" name="room" id="room" value="">
        <!-- Scripts... -->
        <script type="text/javascript">
            jQuery(document).ready(function()
            { // Als de initiele plaats waarde niet aanwezig is kloppen de andere plaats keys niet meer. Daarom updaten.
              <%=fnonchange%>;
            });
        </script>
<%
      }
      else
      {
%>
        <input type="hidden" name="rsv_ruimte_key" id="rsv_ruimte_key" value="<%=rsv_ruimte_key%>">
        <input type="hidden" name="locatiekey"     id="locatiekey"     value="<%=locatie_key%>">
        <input type="hidden" name="gebouwkey"      id="gebouwkey"      value="<%=gebouw_key%>">
        <input type="hidden" name="verdiepingkey"  id="verdiepingkey"  value="<%=verdieping_key%>">
        <input type="hidden" name="ruimtekey"      id="ruimtekey"      value="<%=ruimte_key%>">
        <input type="hidden" name="room"           id="room"           value="<%=safe.htmlattr(bez_afspraak_ruimte)%>">
<%
        ROFIELD("fld", L("lcl_room"), bez_afspraak_ruimte);
      }
      //
      // Opmerkingen>
      if (afs_key > -1)
      {
        ROFIELD("fld", L("lcl_remark"), bez_afspraak_opmerking, {suppressEmpty: true});
      }
      // not needed BLOCK_END();
      //
      // Wie komen er.
      var nrCols = 2;
      var rij = 0;
      while (rij < bez_bezoekers.length)
      {
        vprkkey  = bez_bezoekers[rij].onrgoed.prk_key; // alg_onroerendgoed_keys van de parkeerplaats
        valgkey  = bez_bezoekers[rij].onrgoed.geb_key;
        vbezkey  = bez_bezoekers[rij].bez_key;
        vnaam    = bez_bezoekers[rij].naam;
        vbedrijf = bez_bezoekers[rij].bedrijf;
        vparkeer = bez_bezoekers[rij].parkeer;
        vparking = (vprkkey > -1);
        bezexist = (vbezkey > -1);
        vcolheadpark = (vparking ? "P "+vparkeer : L("lcl_vis_park"));
        rij += 1;

%>      <input type="hidden" name="bez_key<%=rij%>" id="bez_key<%=rij%>" value="<%=vbezkey%>">  <%
        if (this_bez.canDelete)
          BUTTON(L("lcl_vis_name")+" "+rij, {id: "btn_del_toggle"+rij, dataicon: "delete", click: "bez_del_toggle("+rij+")"});

        GRID_START(nrCols);
          COL_START(1);
            RWFIELD("bez" + rij, L("lcl_vis_name"), vnaam , { pclass: (rij == 1?" required" : "")});
          COL_END();
          COL_START(2);
            RWFIELD("bed" + rij, L("lcl_vis_company"), vbedrijf);
          COL_END();
          // Als er locaties zijn met parkeerplaatsen dan de parkeerplaats checkbox plaatsen.
          // Ook al kun je geen parkeerplaats boeken op de aangegeven locatie.
          // Mocht je dan toch het vinkje hebben gezet, dan krijg je tijdens het boeken wel de melding dat de parkeerplaats niet geboekt kon worden.
          // We doen namelijk geen client site veranderingen/aanpassingen in een mobile scherm.
          if (S("vis_parking_key") != -1 && this_bez.canWritePrk && aantal_gebter > 0)
          {
            COL_START(1, {width: 100});
              CHB_FIELD("prk" + rij, vcolheadpark, vparking, {disabled: true});
            COL_END();
          }

          COL_START(1, {width: 100});
            CONTENT_START({});
%>            <table id="bezFlexList<%=rij%>"><tbody>  <%
                generateFlexKenmerkCode ({ urole: urole
                                         , bez_key : vbezkey
                                         , afspraak_key: afs_key
                                         , reado: true
                                         , flexcolumns: 1
                                         , beznum: rij
                                         , requiredbyfield: "bez" + rij
                                         , mobile: true
                                         });
%>            </tbody></table>  <%
            CONTENT_END();
          COL_END();
        GRID_END();
      }
      CONTROLGROUP_START();
        if (this_bez.canChange)
        {
          if (afs_key > 0)
            BUTTON(L("lcl_mobile_addvisitors"), {click: "afs_submit(true)", dataicon: "plus"});
          BUTTON((afs_key>-1 ? L("lcl_submit") : L("lcl_mobile_bezoek")), {click: "afs_submit()", dataicon: "refresh"});
        }
      CONTROLGROUP_END();
      IFACE.FORM_END();
%>
      </form>
<%
    CONTENT_END();
    FOOTER();
  PAGE_END();
%>
    </div>
  </body>
</html>
