<% /*
     $Revision$
     $Id$

    File:               bez_edit_bezoekers.inc
    Description:        Laat een het bezoekersdeel wijzigen
    Parameters:
    Context:            vanuit bez_edit_afspraak.asp (dan zit er een afspraak boven)
                        vanuit bez_show_bezoekers.asp (dan zit er een reservering boven)
                        vanuit bez_edit_check_in.asp (dan zit er een bezoeker boven)
    Note:

*/
%>

<!-- #include file="bez_flexkenmerk.inc" -->
<!-- #include file="./bez.inc" -->

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

var this_bez = bez.func_enabled_parkeerplaats();

// Params: nrBez, contactonly
// Met contactonly worden van de invoervelden geforceerd contactpersoon-suggest velden gemaakt
function bez_edit_bezoekers(afspraak_key, afspraak_begin, afspraak_eind, loc_key, params )
{
  params = params || {};
  if (!params.nrBez) params.nrBez = S("vis_default_number");

  if (params.nrBez > 100) // Soms bij een reservering ingevuld. Vrij onzinnig maar zorg dat we er niet op crashen (te grote html)
    params.nrBez = 100;

  var res_ruimte_extern = false; // dan mag bij bezoekers alleen parkeerplaats en badge gewijzigd
  if (afspraak_key > 0)
  {
    var bez_afspraak = bez.bez_afspraak_info(afspraak_key);
    res_ruimte_extern = bez_afspraak.res_ruimte_extern;
  }

  var gebtersql = bez.getgebouwterrein_sql(afspraak_begin, afspraak_eind, loc_key);
  oRs = Oracle.Execute(gebtersql);
  var aantal_gebter = 0;
  while (!oRs.eof)
  {
    aantal_gebter++;
    oRs.MoveNext();
  }

  var flexfilter = [];
  if (params.bezoeker_key) // bestaande bezoekers
  { // Mag hier alleen kenmerken < 900 zien.
    // Zie ook bez_flexkenmerk.inc (function isReadonly() en load_kenmerk.asp
    var backo = !user.has("WEB_BEZFOF");
    if (backo)
      flexfilter = ["k.bez_kenmerk_volgnr < 900"];
  }
  // else: kenmerken voor nieuwe bezoekers worden aangemaakt door load_kenmerk.asp

%>

  <div class="bezBezoek">
    <table id="vis_tab" style="white-space: nowrap">   <!--kenmerken achter bezoeker op 1 regel -->
      <tr>
        <th><!--delete--></th>
<%      if (!params.contactonly && (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon") == 1))
        { %>
          <th><!--contact--></th>
<%      } %>
        <th><%=L("lcl_vis_name")%></th>
        <th><%=L("lcl_vis_company")%><%=S("bez_sel_internpersoon") == 1? "/" + L("lcl_department") : ""%></th>
<%      if (S("vis_remark") != 0)
        { %>
          <th><%=L("lcl_vis_remark")%></th>
<%      } %>
        <th>
<%        if (S("vis_parking_key") != -1 && this_bez.canWritePrk)
          {
            if (S("vis_park_text") == "")
            { %>
              <img src="<%=S("vis_park_image")%>">
<%          }
            else
            { %>
              <%=S("vis_park_text")%>
<%          }
          } %>
          &nbsp;<span id="bezPrkFree"></span>
          <input type="hidden" name="prktype" id="prktype" value="<%=aantal_gebter == 0? "N" : (aantal_gebter == 1? "C" : "S")%>">
        </th>
<%        if (S("bez_set_remote_flags") > 0) // Authorisatie?
          { %>
              <th><%=L("lcl_bez_remote")%></th>
<%        } %>
<%      if (S("vis_bo_uses_badgenrs") == 1)
        { %>
          <th><%=backo? L("lcl_vis_badgenr") : ""%></th>
<%      } %>
<%      if (S("bez_max_flex_on_line") > 0)
        {
          var sql = getSqlBezFlex(-1, flexfilter);
          var oRs = Oracle.Execute(sql);
          var teller = 0;
          while (!oRs.eof && teller < S("bez_max_flex_on_line"))
          {
            if (oRs("kenmerk_volgnr").Value >= 0 &&
                oRs("kenmerk_toonbaar").Value != 1 &&
                (oRs("kenmerk_kenmerktype").Value != "Q" || oRs("kenmerk_kenmerktype").Value != "L" || oRs("kenmerk_kenmerktype").Value != "l"))
            { %>
              <th title="<%=safe.htmlattr(oRs("kenmerk_hint").Value)%>"><%=safe.html(oRs("kenmerk_omschrijving").Value)%></th>
<%            teller++;
            }
            oRs.MoveNext();
          }

        } %>
      </tr>

<%    if (afspraak_key == -1)
      {
        params.autoadd = params.nrBez || 1;
        var next_vis = 1;
      }
      else
      { // Existing reservation
        sql = "SELECT b.bez_bezoekers_key"
            + ",      b.bez_afspraak_naam"
            + ",      b.bez_afspraak_bedrijf"
            + ",      rd.res_rsv_deel_key"
            + ",      b.bez_bezoekers_pasnr"
            + ",      b.bez_bezoekers_out"
            + ",      b.bez_bezoekers_done"
            + ",      b.bez_bezoekers_flags"
            + ",      b.bez_bezoekers_opmerking"
            + ",      b.prs_contactpersoon_key"
            + ",      b.prs_perslid_key"
            + ",      COALESCE(org.alg_gebouw_key, org.alg_terreinsector_key) gebouwkey"
            + "  FROM bez_bezoekers b"
            + ",      res_rsv_deel rd"
            + ",      res_deel d"
            + ",      ins_deel id"
            + ",      alg_v_allonrgoed_gegevens org"
            + " WHERE b.bez_afspraak_key = " + afspraak_key
            + "   AND b.bez_bezoekers_key = rd.bez_bezoekers_key(+)"
            + "   AND rd.res_deel_key = d.res_deel_key(+)"
            + "   AND d.res_ins_deel_key = id.ins_deel_key(+)"
            + "   AND id.ins_alg_ruimte_key = org.alg_onroerendgoed_keys(+)"
            + (params.bezoeker_key ? "  AND b.bez_bezoekers_key = " + params.bezoeker_key : "")
            + " ORDER BY UPPER(b.bez_afspraak_naam)";
        oRs = Oracle.Execute(sql);
        var next_vis = 1;
        var anydone = false;
        while (!oRs.eof)
        {   /* +1 uit eigen locatie,
               +2 uit andere locatie,
               +4 komt niet fysiek,
               +8 komt niet aan balie,
               +16 geen parkeerplaats */
            var bez_flags = oRs("bez_bezoekers_flags").Value;
%>
         <tr id="trbez<%=next_vis%>">
           <td align="center">
<%           if (!res_ruimte_extern && oRs("bez_bezoekers_done").Value == null)
             { %>
               <i class="fa fa-trash-o fa-lg fa-fw" title="<%=L("lcl_delete")%>" OnClick="deleteVisit(<%=next_vis%>)"></i>
<%
             } else {
                  anydone = true;
             }
%>
             <input type="hidden" name="contkey<%=next_vis%>" id="contkey<%=next_vis%>"
                    value="<%=oRs("prs_contactpersoon_key").Value||-1%>" >
             <input type="hidden" name="prskey<%=next_vis%>" id="prskey<%=next_vis%>"
                    value="<%=oRs("prs_perslid_key").Value||-1%>" >
           </td>
<%         if (!params.contactonly  && (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon") == 1))
           { %>
             <td>
               <i class="fa fa-user-o" title="<%=titel%>" onclick=selectPerson(<%=next_vis%>)> </i>
             </td>
<%         } %>
           <td>
<%           // ContactpersoonBedrijfSelected laadt nieuwe flexkenmerken en bijbehorende verplichte flexkenmerk bij personen zorgen er
             // ook voor dat personen eventueel verplicht wordt [checkRequiredGroup("10S" + params.suggestid.substr(3))];
             // Bij suggestbox met contactpersonen (params.contactonly) geen maximale lengte eis.
             var bezreado = res_ruimte_extern || oRs("prs_contactpersoon_key").Value != null || oRs("prs_perslid_key").Value != null
             RWFIELD("bez" + next_vis, "fld", "",  oRs("bez_afspraak_naam").Value,
                     { maxlength: (params.contactonly? null : "30"), readonly: bezreado, html: (params.contactonly? "sgonChange='ContactpersoonBedrijfSelected'" : 'onChange="checkRequiredGroup(\'10S' + next_vis + '\')"') })
%>
           </td>
           <td>
<%           //  Bij suggestbox met bedrijven (params.contactonly) geen maximale lengte eis.
             RWFIELD("bed" + next_vis, "fld", "",  oRs("bez_afspraak_bedrijf").Value,
                     { maxlength: (params.contactonly? null : "60"), readonly: bezreado, html: (params.contactonly? "sgonChange='ContactpersoonBedrijfSelected'" : '') } )
%>
           </td>
<%         if (S("vis_remark") != 0)
           {
%>           <td> <%
             RWFIELD("opm" + next_vis, "fld", "",  oRs("bez_bezoekers_opmerking").Value, { maxlength: 50 } );
%>           </td> <%
           }
%>
           <td>
              <!--Gebouw/Terrein-->
              <div id="selectprkdiv<%=next_vis%>" name="selectprkdiv<%=next_vis%>" style="display: <%=S("vis_parking_key") != -1 && this_bez.canWritePrk && aantal_gebter == 1? "block" : "none"%>">
                <input type="checkbox" id="prk<%=next_vis%>" <%=((bez_flags&16)==16?"disabled=1":"")%> name="prk<%=next_vis%>" <%=oRs("res_rsv_deel_key").Value != null? "CHECKED " : ""%>>
              </div>
              <div id="selectgebterdiv<%=next_vis%>" name="selectgebterdiv<%=next_vis%>" style="display: <%=S("vis_parking_key") != -1 && this_bez.canWritePrk && aantal_gebter > 1? "block" : "none"%>">
                <!--Gebouw/Terrein-->
<%              FCLTplaatsselector(authparams.ALGwritelevel, { locatiekey: loc_key,
                                                               gebouwkey: oRs("gebouwkey").Value,
                                                               nolabel: true,
                                                               terrein: true,
                                                               onGebChange: "setPrk(" + next_vis + ");",
                                                               filtercode: "PRK",
                                                               urlAdd: [{ urlParam: "date_from", field: "date_from", init: afspraak_begin },
                                                                        { urlParam: "date_to", field: "date_to", init: afspraak_eind },
                                                                        { urlParam: "lockey", field: "locatiekey" }],
                                                               startlevel: 3, // Gebouw
                                                               eindlevel: 3, // Gebouw
                                                               readonly: (bez_flags&16)==16,
                                                               idadd: next_vis,
                                                               whenEmpty: L("lcl_search_generic")  // want filter
                                                             }); // Gebouw
%>
              </div>
              <div style="display: none">
                <input type="text" id="prkselect<%=next_vis%>" name="prkselect<%=next_vis%>" value="<%=aantal_gebter > 1? "S" : "C"%>"> <% /* "S"=suggestboxen, "C"=checkboxen */ %>
              </div>
<%           /* if (S("vis_parking_key") != -1 && this_bez.canWritePrk) CHECKBOX("", "prk" + next_vis, oRs("res_rsv_deel_key").value != null) */ %>
           </td>
<%         if (S("bez_set_remote_flags") > 0) // Authorisatie?
           { %>
             <td align="center">
               <input type="checkbox" id="remote<%=next_vis%>" name="remote<%=next_vis%>" <%=(bez_flags&S("bez_set_remote_flags")) == S("bez_set_remote_flags")? "CHECKED " : ""%>>
             </td>
<%         } %>
<%         if (S("vis_bo_uses_badgenrs") == 1)
           { %>
             <td align="left"><input type="<%=backo?"text":"hidden"%>" class="fldbadge" name="bdg<%=next_vis%>" maxlength="30" value="<%=safe.htmlattr(oRs("bez_bezoekers_pasnr").Value)%>"></td>
<%         } %>
<%         var ptmpfolder;

           if (S("bez_max_flex_on_line") > 0)
           {
             ptmpfolder = generateFlexKenmerkCode ({ urole: urole,
                                                     bez_key : oRs("bez_bezoekers_key").Value,
                                                     afspraak_key: afspraak_key,
                                                     reado: false,
                                                     flexcolumns: S("bez_flexcolumns"),
                                                     beznum: next_vis,
                                                     requiredbyfield: "bez" + next_vis,
                                                     notr: true,
                                                     flexend: parseInt(S("bez_max_flex_on_line"), 10),
                                                     nolabel: true,
                                                     getTmpfolder: true, // Geef de tijdelijke folder terug waar bestanden zijn opgeslagen.
                                                     filter: flexfilter
                                                   });
           }

%>
         </tr>
         <tr id="trbez<%=next_vis%>flex"><td></td>
<%         if (!params.contactonly && (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon") == 1))
           { %>
             <td></td>
<%         } %>
           <td colspan="2">
             <div class="bezflex">
               <table id="bezFlexListB<%=next_vis%>"><tbody>
<%
             generateFlexKenmerkCode ({ urole: urole,
                                          bez_key : oRs("bez_bezoekers_key").Value,
                                          afspraak_key: afspraak_key,
                                          reado: false,
                                          flexcolumns: S("bez_flexcolumns"),
                                          beznum: next_vis,
                                          requiredbyfield: "bez" + next_vis,
                                          flexstart: parseInt(S("bez_max_flex_on_line"), 10) + 1,
                                          tmpfolder: ptmpfolder, // Als er een tijdelijke folder bekend is dan deze meegeven.
                                          filter: flexfilter
                                        });
%>
               </tbody></table>
               <input type=hidden id="bez_key<%=next_vis%>"  name="bez_key<%=next_vis%>" value="<%=oRs("bez_bezoekers_key").Value%>">
               <div id="bezFlexListA<%=next_vis%>" style="display:none"></div>
             </div>
           </td>
         </tr>
<%       next_vis++;
         oRs.MoveNext();
       }
     } %>

     <tr><td>
          <input type='hidden' id='next_vis' name='next_vis' value=<%=next_vis%>>
<%   if (anydone) { /* dan niet meer import-vervang */ %>
          <input type="hidden" id="anydone" value="1">
<%   } %>
     </td></tr>
    </table>
  </div>
  <style>
    geenhekjeaanbeginregel,#morebuttons #buttons { text-align:left; float:left }
  </style>
<%
  if (!params.bezoeker_key)
  {
    buttons = [{ title: L("lcl_more_vis"), icon: "plus.png", action: "more_visit(" + S("vis_increment_number") + ")", id:"btn_bez_morevis" }];
    if (!params.contactonly)
      buttons.push({ title: L("lcl_bez_import_lijst"), icon: "bezimport.png", action: "import_visit()", id:"btn_bez_import" })
%><div id="morebuttons"><%
    if (!res_ruimte_extern)
      CreateButtons(buttons, { showIcons: true });
  }
%>
</div>
  <script type="text/javascript">
    more_visit(<%=params.autoadd || 0%>);
    var vis_parking_key = <%=S("vis_parking_key")%>;
    var canWritePrk = <%=this_bez.canWritePrk? 1 : 0%> == 1;
    var contactonly = <%=params.contactonly? 1 : 0%> == 1;
    var bez_sel_contactpersoon = <%=S("bez_sel_contactpersoon")%>;
    // Aantal kolommen zonder de flexkenmerken.
    var aantal_std_td = 4 + <%=(!params.contactonly && (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon") == 1))? 1 : 0%> + <%=(S("vis_bo_uses_badgenrs") == 1)? 1 : 0%>;

<% if (params.contactonly) { /* automatisch contactpersonificeren */ %>
    makeContactSuggest();
<% } %>

<%  if (params.contactonly)
    { %>
      function sgcheckRequiredGroup(key, a, params)
      {
        ContactpersoonBedrijfSelected(key, a, params);
        //checkRequiredGroup("10S" + params.suggestid.substr(3)); wordt door bijbehorende flexkenmerk wel gedaan. Hier dus niet nodig
      }
<%  } %>

    function bezFlexListACallback(next_vis)
    {
      $("#trbez" + next_vis).append($("#bezFlexListA" + next_vis).html());
      $("#bezFlexListA" + next_vis).html("");  // <div> weer leegmaken anders zijn er dubbele velden.
      FcltMgr.resized();
    }

    function more_visit(nrplus)
    {
      for (var ii = 1; ii <= nrplus ; ii++)
      {
        next_vis = $("#next_vis").val();
        ih = $("#vis_tab")[0].insertRow(-1);
        ih.id = 'trbez' + next_vis;
        var newHTML = '<i class="fa fa-trash-o fa-lg fa-fw" title="<%=L("lcl_delete")%>" OnClick="deleteVisit(' + next_vis + ')"></i>';
        <% if (S("bez_sel_contactpersoon") > 0) { %>
            newHTML += '<input type="hidden" name="contkey' + next_vis + '" id="contkey' + next_vis + '" value="-1">'
        <% } %>
        <% if (S("bez_sel_internpersoon") == 1) { %>
            newHTML += '<input type="hidden" name="prskey' + next_vis + '" id="prskey' + next_vis + '" value="-1">'
        <% } %>
        ih.insertCell(-1).innerHTML = newHTML;
<%      if (!params.contactonly && (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon") == 1))
        { %>
          ih.insertCell(-1).innerHTML = '<i class="fa fa-user-o" title="<%=titel%>" OnClick=selectPerson(' + next_vis + ')></i>'
<%      } %>
        <% /* ContactpersoonBedrijfSelected laadt nieuwe flexkenmerken en bijbehorende verplichte flexkenmerk bij personen zorgen er ook voor dat personen eventueel verplicht wordt [checkRequiredGroup("10S" + params.suggestid.substr(3))];
              Bij suggestbox met contactpersonen/bedrijven (params.contactonly) geen maximale lengte eis. */ %>
        ih.insertCell(-1).innerHTML = '<input type="text" class="fld" name="bez' + next_vis + '" id="bez' + next_vis + '" <% if (!params.contactonly) {%> onChange="checkRequiredGroup(\'10S' + next_vis + '\')" <% } %> <%=params.contactonly? 'sgonChange="ContactpersoonBedrijfSelected"' : 'maxlength="30" onChange="checkRequiredGroup(\\\'10S' + next_vis + '\\\')"'%>>';
        ih.insertCell(-1).innerHTML = '<input type="text" class="fld" name="bed' + next_vis + '" id="bed' + next_vis + '" <%=params.contactonly? 'sgonChange="ContactpersoonBedrijfSelected"' : 'maxlength="60"'%>>';
<%      if (S("vis_remark") != 0)
        { %>
          ih.insertCell(-1).innerHTML = '<input type="text" class="fld" name="opm' + next_vis + '" id="opm' + next_vis + '" maxlength="50">';
<%      } %>
<%      if (S("vis_parking_key") != -1 && this_bez.canWritePrk)
        { %>
          ih.insertCell(-1).innerHTML = '<div id="prkdiv' + next_vis + '"></div>';
<%      }
        else
        { %>
          ih.insertCell(-1);
<%      } %>
<%      if (S("bez_set_remote_flags") > 0)
        { %>
          var cell = ih.insertCell(-1);
          cell.innerHTML = '<input type="checkbox" class="fldcheck" name="remote'+next_vis+'">';
          cell.align = 'center';
<%      } %>
<%      if (S("vis_bo_uses_badgenrs") == 1)
        { %>
          ih.insertCell(-1).innerHTML = '<input type="<%=backo?"text":"hidden"%>" class="fldbadge" name="bdg'+next_vis+'" maxlength="30">';
<%      } %>

        ih = $("#vis_tab")[0].insertRow(-1);
        ih.id = "trbez" + next_vis + "flex";
        ih.insertCell(-1).innerHTML = "";
<%      if (!params.contactonly && (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon") == 1))
        { %>
          ih.insertCell(-1).innerHTML = "";
<%      } %>
        var cell = ih.insertCell(-1);
        cell.innerHTML = '<div class="bezflex"><table id="bezFlexListB' + next_vis + '"></table></div>'
                       + '<input type=hidden id="bez_key' + next_vis + '"  name="bez_key' + next_vis + '" value="-1">'
                       + '<div id="bezFlexListA' + next_vis + '" style="display:none"></div>';
        cell.colSpan = 2;

        $("#prkdiv"+next_vis).load("./loadPrkTerrein.asp",
                                   { locatie_key: <%=loc_key%>,
                                     next_vis: next_vis,
                                     prktype: $("#prktype").val(),
                                     algwritelevel: <%=authparams.ALGwritelevel%>
                                   });

        jQuery.ajaxSetup({async: false}); // Bij importeren flexkenmerken moeten de flexkenmerken wel geheel zijn geladen.
        var ptmpfolder;
        if (<%=S("bez_max_flex_on_line")%> > 0)
        {
          // Laden van de kenmerken op de bezoekersregel
          // De volgende flexkenmerken werken niet goed op de bezoekersregel:
          // 1) Inklapbare labels
          // 2) Parent/child kenmerken
          // 3) Texboxen
          // Dit komt omdat er dan javascript code (script) tussen de td kolommen worden gezet. En dat mag (eigenlijk) niet.
          var url = "load_kenmerk.asp?urole=<%=urole%>&beznum=" + next_vis + "&requiredbyfield=bez" + next_vis + "&notr=1&nolabel=1&flexend=" + parseInt(<%=S("bez_max_flex_on_line")%>, 10);
          $("#bezFlexListA" + next_vis).load(url, function(a){ return function() {bezFlexListACallback(a);} }(next_vis)); // JavaScript Closure.
          ptmpfolder = $("#trbez" + next_vis + " #ktmpfolder" + next_vis).val();
        }

        var url = "load_kenmerk.asp?urole=<%=urole%>&beznum=" + next_vis + "&requiredbyfield=bez" + next_vis + "&flexstart=" + (parseInt(<%=S("bez_max_flex_on_line")%>, 10) + 1) + (ptmpfolder? "&tmpfolder=" + ptmpfolder : "");
        $("#bezFlexListB" + next_vis).load(url, function(){ FcltMgr.resized(); });
        jQuery.ajaxSetup({async: true});

        next_vis++;
        $("#next_vis").val(next_vis);
      }
<%    if (params.contactonly) { /* automatisch contactpersonificeren */ %>
        makeContactSuggest();
<%    } %>
      FcltMgr.resized(window);
    }
  </script>
<%
}
%>